diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md
index 2cb9849819bef..4c00ea32bae2c 100644
--- a/packages/components/CHANGELOG.md
+++ b/packages/components/CHANGELOG.md
@@ -8,6 +8,7 @@
- `Navigator`: fix `isInitial` logic ([#65527](https://github.com/WordPress/gutenberg/pull/65527)).
- `ToggleGroupControl`: Fix arrow key navigation in RTL ([#65735](https://github.com/WordPress/gutenberg/pull/65735)).
- `ToggleGroupControl`: indicator doesn't jump around when the layout around it changes ([#65175](https://github.com/WordPress/gutenberg/pull/65175)).
+- `Composite`: fix legacy support for the store prop ([#65821](https://github.com/WordPress/gutenberg/pull/65821)).
### Deprecations
diff --git a/packages/components/src/composite/group-label.tsx b/packages/components/src/composite/group-label.tsx
index 17070dbb86bf8..7e3c6ffdc7759 100644
--- a/packages/components/src/composite/group-label.tsx
+++ b/packages/components/src/composite/group-label.tsx
@@ -20,11 +20,13 @@ export const CompositeGroupLabel = forwardRef<
WordPressComponentProps< CompositeGroupLabelProps, 'div', false >
>( function CompositeGroupLabel( props, ref ) {
const context = useCompositeContext();
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
return (
-
+
);
} );
diff --git a/packages/components/src/composite/group.tsx b/packages/components/src/composite/group.tsx
index ae21ca6f11dd9..bcfb47e684613 100644
--- a/packages/components/src/composite/group.tsx
+++ b/packages/components/src/composite/group.tsx
@@ -20,11 +20,11 @@ export const CompositeGroup = forwardRef<
WordPressComponentProps< CompositeGroupProps, 'div', false >
>( function CompositeGroup( props, ref ) {
const context = useCompositeContext();
- return (
-
- );
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
+ return ;
} );
diff --git a/packages/components/src/composite/hover.tsx b/packages/components/src/composite/hover.tsx
index ca0bd9d8f6aa1..1507a1879cc19 100644
--- a/packages/components/src/composite/hover.tsx
+++ b/packages/components/src/composite/hover.tsx
@@ -20,11 +20,11 @@ export const CompositeHover = forwardRef<
WordPressComponentProps< CompositeHoverProps, 'div', false >
>( function CompositeHover( props, ref ) {
const context = useCompositeContext();
- return (
-
- );
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
+ return ;
} );
diff --git a/packages/components/src/composite/index.tsx b/packages/components/src/composite/index.tsx
index e9e97072261fb..8eb562f5bdab3 100644
--- a/packages/components/src/composite/index.tsx
+++ b/packages/components/src/composite/index.tsx
@@ -73,7 +73,10 @@ export const Composite = Object.assign(
},
ref
) {
- const store = Ariakit.useCompositeStore( {
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer.
+ const storeProp = props.store as Ariakit.CompositeStore;
+ const internalStore = Ariakit.useCompositeStore( {
activeId,
defaultActiveId,
setActiveId,
@@ -85,6 +88,8 @@ export const Composite = Object.assign(
rtl,
} );
+ const store = storeProp ?? internalStore;
+
const contextValue = useMemo(
() => ( {
store,
diff --git a/packages/components/src/composite/item.tsx b/packages/components/src/composite/item.tsx
index 6d75b90f0baaa..4a02f76039a5c 100644
--- a/packages/components/src/composite/item.tsx
+++ b/packages/components/src/composite/item.tsx
@@ -20,11 +20,11 @@ export const CompositeItem = forwardRef<
WordPressComponentProps< CompositeItemProps, 'button', false >
>( function CompositeItem( props, ref ) {
const context = useCompositeContext();
- return (
-
- );
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
+ return ;
} );
diff --git a/packages/components/src/composite/row.tsx b/packages/components/src/composite/row.tsx
index a082af03ad678..1a88da557785e 100644
--- a/packages/components/src/composite/row.tsx
+++ b/packages/components/src/composite/row.tsx
@@ -20,11 +20,11 @@ export const CompositeRow = forwardRef<
WordPressComponentProps< CompositeRowProps, 'div', false >
>( function CompositeRow( props, ref ) {
const context = useCompositeContext();
- return (
-
- );
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
+ return ;
} );
diff --git a/packages/components/src/composite/typeahead.tsx b/packages/components/src/composite/typeahead.tsx
index 771d58bcb6c25..519c59ea374e5 100644
--- a/packages/components/src/composite/typeahead.tsx
+++ b/packages/components/src/composite/typeahead.tsx
@@ -20,11 +20,11 @@ export const CompositeTypeahead = forwardRef<
WordPressComponentProps< CompositeTypeaheadProps, 'div', false >
>( function CompositeTypeahead( props, ref ) {
const context = useCompositeContext();
- return (
-
- );
+
+ // @ts-expect-error The store prop is undocumented and only used by the
+ // legacy compat layer. The `store` prop is documented, but its type is
+ // obfuscated to discourage its use outside of the component's internals.
+ const store = ( props.store ?? context.store ) as Ariakit.CompositeStore;
+
+ return ;
} );