diff --git a/package-lock.json b/package-lock.json
index 14b24167aa0a7..f8b10405897d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -87,7 +87,7 @@
"@actions/core": "1.9.1",
"@actions/github": "5.0.0",
"@apidevtools/json-schema-ref-parser": "11.6.4",
- "@ariakit/test": "^0.4.2",
+ "@ariakit/test": "^0.4.5",
"@babel/core": "7.25.7",
"@babel/plugin-syntax-jsx": "7.25.7",
"@babel/runtime-corejs3": "7.25.7",
@@ -1530,18 +1530,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@ariakit/core": {
- "version": "0.4.9",
- "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.9.tgz",
- "integrity": "sha512-nV0B/OTK/0iB+P9RC7fudznYZ8eR6rR1F912Zc54e3+wSW5RrRvNOiRxyMrgENidd4R7cCMDw77XJLSBLKgEPQ=="
- },
"node_modules/@ariakit/test": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@ariakit/test/-/test-0.4.2.tgz",
- "integrity": "sha512-WXAAiAyTaHV9klntOB81Y+YHyA5iGxy9wXCmjQOfYK5InsuIour+7TVXICUxn2NF0XD6j6OoEJbCVDJ2Y46xEA==",
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/@ariakit/test/-/test-0.4.5.tgz",
+ "integrity": "sha512-dK9OtI8MeKfdtOiW1auDITnyaelq0O0aUTnolIqJj+RJd8LFai0gi7fQUgrun9CZHJ2wWsEad4vlviGfhfIIhQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@ariakit/core": "0.4.9",
+ "@ariakit/core": "0.4.12",
"@testing-library/dom": "^8.0.0 || ^9.0.0 || ^10.0.0"
},
"peerDependencies": {
@@ -1561,6 +1557,13 @@
}
}
},
+ "node_modules/@ariakit/test/node_modules/@ariakit/core": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.12.tgz",
+ "integrity": "sha512-+NNpy88tdP/w9mOBPuDrMTbtapPbo/8yVIzpQB7TAmN0sPh/Cq3nU1f2KCTCIujPmwRvAcMSW9UHOlFmbKEPOA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@aw-web-design/x-default-browser": {
"version": "1.4.126",
"resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz",
@@ -50052,9 +50055,10 @@
}
},
"node_modules/use-sync-external-store": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
+ "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
@@ -54513,7 +54517,7 @@
"version": "28.9.0",
"license": "GPL-2.0-or-later",
"dependencies": {
- "@ariakit/react": "^0.4.10",
+ "@ariakit/react": "^0.4.13",
"@babel/runtime": "7.25.7",
"@emotion/cache": "^11.7.1",
"@emotion/css": "^11.7.1",
@@ -54568,12 +54572,19 @@
"react-dom": "^18.0.0"
}
},
+ "packages/components/node_modules/@ariakit/core": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.12.tgz",
+ "integrity": "sha512-+NNpy88tdP/w9mOBPuDrMTbtapPbo/8yVIzpQB7TAmN0sPh/Cq3nU1f2KCTCIujPmwRvAcMSW9UHOlFmbKEPOA==",
+ "license": "MIT"
+ },
"packages/components/node_modules/@ariakit/react": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.10.tgz",
- "integrity": "sha512-c1+6sNLj57aAXrBZMCVGG+OXeFrPAG0TV1jT7oPJcN/KLRs3aCuO3CCJVep/eKepFzzK01kNRGYX3wPT1TXPNw==",
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.13.tgz",
+ "integrity": "sha512-pTGYgoqCojfyt2xNJ5VQhejxXwwtcP7VDDqcnnVChv7TA2TWWyYerJ5m4oxViI1pgeNqnHZwKlQ79ZipF7W2kQ==",
+ "license": "MIT",
"dependencies": {
- "@ariakit/react-core": "0.4.10"
+ "@ariakit/react-core": "0.4.13"
},
"funding": {
"type": "opencollective",
@@ -54585,11 +54596,12 @@
}
},
"packages/components/node_modules/@ariakit/react-core": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.10.tgz",
- "integrity": "sha512-r6DZmtHBmSoOj848+RpBwdZy/55YxPhMhfH14JIO2OLn1F6iSFkQwR7AAGpIrlYycWJFSF7KrQu50O+SSfFJdQ==",
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.13.tgz",
+ "integrity": "sha512-iIjQeupP9d0pOubOzX4a0UPXbhXbp0ZCduDpkv7+u/pYP/utk/YRECD0M/QpZr6YSeltmDiNxKjdyK8r9Yhv4Q==",
+ "license": "MIT",
"dependencies": {
- "@ariakit/core": "0.4.9",
+ "@ariakit/core": "0.4.12",
"@floating-ui/dom": "^1.0.0",
"use-sync-external-store": "^1.2.0"
},
@@ -54869,7 +54881,7 @@
"version": "4.5.0",
"license": "GPL-2.0-or-later",
"dependencies": {
- "@ariakit/react": "^0.4.10",
+ "@ariakit/react": "^0.4.13",
"@babel/runtime": "7.25.7",
"@wordpress/components": "file:../components",
"@wordpress/compose": "file:../compose",
@@ -54891,12 +54903,19 @@
"react": "^18.0.0"
}
},
+ "packages/dataviews/node_modules/@ariakit/core": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.12.tgz",
+ "integrity": "sha512-+NNpy88tdP/w9mOBPuDrMTbtapPbo/8yVIzpQB7TAmN0sPh/Cq3nU1f2KCTCIujPmwRvAcMSW9UHOlFmbKEPOA==",
+ "license": "MIT"
+ },
"packages/dataviews/node_modules/@ariakit/react": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.10.tgz",
- "integrity": "sha512-c1+6sNLj57aAXrBZMCVGG+OXeFrPAG0TV1jT7oPJcN/KLRs3aCuO3CCJVep/eKepFzzK01kNRGYX3wPT1TXPNw==",
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.13.tgz",
+ "integrity": "sha512-pTGYgoqCojfyt2xNJ5VQhejxXwwtcP7VDDqcnnVChv7TA2TWWyYerJ5m4oxViI1pgeNqnHZwKlQ79ZipF7W2kQ==",
+ "license": "MIT",
"dependencies": {
- "@ariakit/react-core": "0.4.10"
+ "@ariakit/react-core": "0.4.13"
},
"funding": {
"type": "opencollective",
@@ -54908,11 +54927,12 @@
}
},
"packages/dataviews/node_modules/@ariakit/react-core": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.10.tgz",
- "integrity": "sha512-r6DZmtHBmSoOj848+RpBwdZy/55YxPhMhfH14JIO2OLn1F6iSFkQwR7AAGpIrlYycWJFSF7KrQu50O+SSfFJdQ==",
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.13.tgz",
+ "integrity": "sha512-iIjQeupP9d0pOubOzX4a0UPXbhXbp0ZCduDpkv7+u/pYP/utk/YRECD0M/QpZr6YSeltmDiNxKjdyK8r9Yhv4Q==",
+ "license": "MIT",
"dependencies": {
- "@ariakit/core": "0.4.9",
+ "@ariakit/core": "0.4.12",
"@floating-ui/dom": "^1.0.0",
"use-sync-external-store": "^1.2.0"
},
diff --git a/package.json b/package.json
index 4c071bf746c15..a9d5a5c9ae351 100644
--- a/package.json
+++ b/package.json
@@ -99,7 +99,7 @@
"@actions/core": "1.9.1",
"@actions/github": "5.0.0",
"@apidevtools/json-schema-ref-parser": "11.6.4",
- "@ariakit/test": "^0.4.2",
+ "@ariakit/test": "^0.4.5",
"@babel/core": "7.25.7",
"@babel/plugin-syntax-jsx": "7.25.7",
"@babel/runtime-corejs3": "7.25.7",
diff --git a/packages/components/package.json b/packages/components/package.json
index 0bc1c865299d2..326db4116d8ea 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -31,7 +31,7 @@
],
"types": "build-types",
"dependencies": {
- "@ariakit/react": "^0.4.10",
+ "@ariakit/react": "^0.4.13",
"@babel/runtime": "7.25.7",
"@emotion/cache": "^11.7.1",
"@emotion/css": "^11.7.1",
diff --git a/packages/components/src/composite/item.tsx b/packages/components/src/composite/item.tsx
index edbf0b92e039a..4a02f76039a5c 100644
--- a/packages/components/src/composite/item.tsx
+++ b/packages/components/src/composite/item.tsx
@@ -26,23 +26,5 @@ export const CompositeItem = forwardRef<
// obfuscated to discourage its use outside of the component's internals.
const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
- // If the active item is not connected, Composite may end up in a state
- // where none of the items are tabbable. In this case, we force all items to
- // be tabbable, so that as soon as an item received focus, it becomes active
- // and Composite goes back to working as expected.
- const tabbable = Ariakit.useStoreState( store, ( state ) => {
- return (
- state?.activeId !== null &&
- ! store?.item( state?.activeId )?.element?.isConnected
- );
- } );
-
- return (
-
- );
+ return ;
} );
diff --git a/packages/components/src/dropdown-menu-v2/checkbox-item.tsx b/packages/components/src/dropdown-menu-v2/checkbox-item.tsx
index bcbc920cbb720..2f0d15557bb5e 100644
--- a/packages/components/src/dropdown-menu-v2/checkbox-item.tsx
+++ b/packages/components/src/dropdown-menu-v2/checkbox-item.tsx
@@ -16,24 +16,20 @@ import type { WordPressComponentProps } from '../context';
import { DropdownMenuContext } from './context';
import type { DropdownMenuCheckboxItemProps } from './types';
import * as Styled from './styles';
-import { useTemporaryFocusVisibleFix } from './use-temporary-focus-visible-fix';
export const DropdownMenuCheckboxItem = forwardRef<
HTMLDivElement,
WordPressComponentProps< DropdownMenuCheckboxItemProps, 'div', false >
>( function DropdownMenuCheckboxItem(
- { suffix, children, onBlur, hideOnClick = false, ...props },
+ { suffix, children, hideOnClick = false, ...props },
ref
) {
- // TODO: Remove when https://github.com/ariakit/ariakit/issues/4083 is fixed
- const focusVisibleFixProps = useTemporaryFocusVisibleFix( { onBlur } );
const dropdownMenuContext = useContext( DropdownMenuContext );
return (
>( function DropdownMenuItem(
- { prefix, suffix, children, onBlur, hideOnClick = true, ...props },
+ { prefix, suffix, children, hideOnClick = true, ...props },
ref
) {
- // TODO: Remove when https://github.com/ariakit/ariakit/issues/4083 is fixed
- const focusVisibleFixProps = useTemporaryFocusVisibleFix( { onBlur } );
const dropdownMenuContext = useContext( DropdownMenuContext );
return (
@@ -29,18 +28,15 @@ export const DropdownMenuRadioItem = forwardRef<
HTMLDivElement,
WordPressComponentProps< DropdownMenuRadioItemProps, 'div', false >
>( function DropdownMenuRadioItem(
- { suffix, children, onBlur, hideOnClick = false, ...props },
+ { suffix, children, hideOnClick = false, ...props },
ref
) {
- // TODO: Remove when https://github.com/ariakit/ariakit/issues/4083 is fixed
- const focusVisibleFixProps = useTemporaryFocusVisibleFix( { onBlur } );
const dropdownMenuContext = useContext( DropdownMenuContext );
return (
;
-} ) {
- const [ focusVisible, setFocusVisible ] = useState( false );
- return {
- 'data-focus-visible': focusVisible || undefined,
- onFocusVisible: () => {
- flushSync( () => setFocusVisible( true ) );
- },
- onBlur: ( ( event ) => {
- onBlurProp?.( event );
- setFocusVisible( false );
- } ) as React.FocusEventHandler< HTMLDivElement >,
- };
-}
diff --git a/packages/components/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx b/packages/components/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx
index 4d68db6fd175e..6affb95a46354 100644
--- a/packages/components/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx
+++ b/packages/components/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx
@@ -43,6 +43,7 @@ function createSlotRegistry(): SlotFillBubblesVirtuallyContext {
const updateSlot: SlotFillBubblesVirtuallyContext[ 'updateSlot' ] = (
name,
+ ref,
fillProps
) => {
const slot = slots.get( name );
@@ -50,6 +51,10 @@ function createSlotRegistry(): SlotFillBubblesVirtuallyContext {
return;
}
+ if ( slot.ref !== ref ) {
+ return;
+ }
+
if ( isShallowEqual( slot.fillProps, fillProps ) ) {
return;
}
diff --git a/packages/components/src/slot-fill/bubbles-virtually/slot.tsx b/packages/components/src/slot-fill/bubbles-virtually/slot.tsx
index e836782c90615..c6f0023f813e4 100644
--- a/packages/components/src/slot-fill/bubbles-virtually/slot.tsx
+++ b/packages/components/src/slot-fill/bubbles-virtually/slot.tsx
@@ -58,7 +58,7 @@ function Slot(
// fillProps may be an update that interacts with the layout, so we
// useLayoutEffect.
useLayoutEffect( () => {
- registry.updateSlot( name, fillProps );
+ registry.updateSlot( name, ref, fillProps );
} );
return (
diff --git a/packages/components/src/slot-fill/bubbles-virtually/use-slot.ts b/packages/components/src/slot-fill/bubbles-virtually/use-slot.ts
index d1d37e1d8e541..ec78771bfa92a 100644
--- a/packages/components/src/slot-fill/bubbles-virtually/use-slot.ts
+++ b/packages/components/src/slot-fill/bubbles-virtually/use-slot.ts
@@ -21,8 +21,10 @@ export default function useSlot( name: SlotKey ) {
const api = useMemo(
() => ( {
- updateSlot: ( fillProps: FillProps ) =>
- registry.updateSlot( name, fillProps ),
+ updateSlot: (
+ ref: SlotFillBubblesVirtuallySlotRef,
+ fillProps: FillProps
+ ) => registry.updateSlot( name, ref, fillProps ),
unregisterSlot: ( ref: SlotFillBubblesVirtuallySlotRef ) =>
registry.unregisterSlot( name, ref ),
registerFill: ( ref: SlotFillBubblesVirtuallyFillRef ) =>
diff --git a/packages/components/src/slot-fill/types.ts b/packages/components/src/slot-fill/types.ts
index 1711e04cbb1f4..7e1b8b7e1f3f9 100644
--- a/packages/components/src/slot-fill/types.ts
+++ b/packages/components/src/slot-fill/types.ts
@@ -131,7 +131,11 @@ export type SlotFillBubblesVirtuallyContext = {
name: SlotKey,
ref: SlotFillBubblesVirtuallySlotRef
) => void;
- updateSlot: ( name: SlotKey, fillProps: FillProps ) => void;
+ updateSlot: (
+ name: SlotKey,
+ ref: SlotFillBubblesVirtuallySlotRef,
+ fillProps: FillProps
+ ) => void;
registerFill: (
name: SlotKey,
ref: SlotFillBubblesVirtuallyFillRef
diff --git a/packages/dataviews/package.json b/packages/dataviews/package.json
index 0dbf07ca52ff9..b32fcafd03447 100644
--- a/packages/dataviews/package.json
+++ b/packages/dataviews/package.json
@@ -28,7 +28,7 @@
"types": "build-types",
"sideEffects": false,
"dependencies": {
- "@ariakit/react": "^0.4.10",
+ "@ariakit/react": "^0.4.13",
"@babel/runtime": "7.25.7",
"@wordpress/components": "file:../components",
"@wordpress/compose": "file:../compose",