@wordpress/components 28.7.0 → 28.8.1-next.5368f64a9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/build/composite/context.js +1 -1
  3. package/build/composite/context.js.map +1 -1
  4. package/build/composite/group-label.js +1 -1
  5. package/build/composite/group-label.js.map +1 -1
  6. package/build/composite/group.js +1 -1
  7. package/build/composite/group.js.map +1 -1
  8. package/build/composite/hover.js +1 -1
  9. package/build/composite/hover.js.map +1 -1
  10. package/build/composite/index.js +17 -26
  11. package/build/composite/index.js.map +1 -1
  12. package/build/composite/item.js +1 -1
  13. package/build/composite/item.js.map +1 -1
  14. package/build/composite/legacy/index.js +59 -8
  15. package/build/composite/legacy/index.js.map +1 -1
  16. package/build/composite/row.js +1 -1
  17. package/build/composite/row.js.map +1 -1
  18. package/build/composite/typeahead.js +1 -1
  19. package/build/composite/typeahead.js.map +1 -1
  20. package/build/composite/types.js.map +1 -1
  21. package/build/date-time/date/index.js +1 -1
  22. package/build/date-time/date/index.js.map +1 -1
  23. package/build/date-time/date/styles.js +35 -24
  24. package/build/date-time/date/styles.js.map +1 -1
  25. package/build/date-time/date/use-lilius/index.js +163 -0
  26. package/build/date-time/date/use-lilius/index.js.map +1 -0
  27. package/build/index.js +7 -0
  28. package/build/index.js.map +1 -1
  29. package/build/modal/index.js +11 -4
  30. package/build/modal/index.js.map +1 -1
  31. package/build/navigator/navigator-screen/component.js +5 -0
  32. package/build/navigator/navigator-screen/component.js.map +1 -1
  33. package/build/private-apis.js +0 -9
  34. package/build/private-apis.js.map +1 -1
  35. package/build/slot-fill/index.js +1 -0
  36. package/build/slot-fill/index.js.map +1 -1
  37. package/build/tabs/styles.js +3 -3
  38. package/build/tabs/styles.js.map +1 -1
  39. package/build/tabs/tablist.js +5 -4
  40. package/build/tabs/tablist.js.map +1 -1
  41. package/build/utils/element-rect.js +73 -105
  42. package/build/utils/element-rect.js.map +1 -1
  43. package/build-module/composite/context.js +1 -1
  44. package/build-module/composite/context.js.map +1 -1
  45. package/build-module/composite/group-label.js +1 -1
  46. package/build-module/composite/group-label.js.map +1 -1
  47. package/build-module/composite/group.js +1 -1
  48. package/build-module/composite/group.js.map +1 -1
  49. package/build-module/composite/hover.js +1 -1
  50. package/build-module/composite/hover.js.map +1 -1
  51. package/build-module/composite/index.js +17 -26
  52. package/build-module/composite/index.js.map +1 -1
  53. package/build-module/composite/item.js +1 -1
  54. package/build-module/composite/item.js.map +1 -1
  55. package/build-module/composite/legacy/index.js +56 -8
  56. package/build-module/composite/legacy/index.js.map +1 -1
  57. package/build-module/composite/row.js +1 -1
  58. package/build-module/composite/row.js.map +1 -1
  59. package/build-module/composite/typeahead.js +1 -1
  60. package/build-module/composite/typeahead.js.map +1 -1
  61. package/build-module/composite/types.js.map +1 -1
  62. package/build-module/date-time/date/index.js +1 -2
  63. package/build-module/date-time/date/index.js.map +1 -1
  64. package/build-module/date-time/date/styles.js +31 -24
  65. package/build-module/date-time/date/styles.js.map +1 -1
  66. package/build-module/date-time/date/use-lilius/index.js +158 -0
  67. package/build-module/date-time/date/use-lilius/index.js.map +1 -0
  68. package/build-module/index.js +1 -0
  69. package/build-module/index.js.map +1 -1
  70. package/build-module/modal/index.js +12 -4
  71. package/build-module/modal/index.js.map +1 -1
  72. package/build-module/navigator/navigator-screen/component.js +4 -0
  73. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  74. package/build-module/private-apis.js +0 -9
  75. package/build-module/private-apis.js.map +1 -1
  76. package/build-module/slot-fill/index.js +1 -0
  77. package/build-module/slot-fill/index.js.map +1 -1
  78. package/build-module/tabs/styles.js +3 -3
  79. package/build-module/tabs/styles.js.map +1 -1
  80. package/build-module/tabs/tablist.js +5 -4
  81. package/build-module/tabs/tablist.js.map +1 -1
  82. package/build-module/utils/element-rect.js +74 -105
  83. package/build-module/utils/element-rect.js.map +1 -1
  84. package/build-style/style-rtl.css +0 -4
  85. package/build-style/style.css +0 -4
  86. package/build-types/composite/context.d.ts.map +1 -1
  87. package/build-types/composite/index.d.ts +36 -24
  88. package/build-types/composite/index.d.ts.map +1 -1
  89. package/build-types/composite/legacy/index.d.ts +25 -2
  90. package/build-types/composite/legacy/index.d.ts.map +1 -1
  91. package/build-types/composite/legacy/stories/index.story.d.ts.map +1 -1
  92. package/build-types/composite/stories/index.story.d.ts +9 -9
  93. package/build-types/composite/stories/index.story.d.ts.map +1 -1
  94. package/build-types/composite/types.d.ts +11 -10
  95. package/build-types/composite/types.d.ts.map +1 -1
  96. package/build-types/date-time/date/index.d.ts +0 -3
  97. package/build-types/date-time/date/index.d.ts.map +1 -1
  98. package/build-types/date-time/date/styles.d.ts.map +1 -1
  99. package/build-types/date-time/date/test/use-lilius.d.ts +2 -0
  100. package/build-types/date-time/date/test/use-lilius.d.ts.map +1 -0
  101. package/build-types/date-time/date/use-lilius/index.d.ts +169 -0
  102. package/build-types/date-time/date/use-lilius/index.d.ts.map +1 -0
  103. package/build-types/index.d.ts +1 -0
  104. package/build-types/index.d.ts.map +1 -1
  105. package/build-types/modal/index.d.ts.map +1 -1
  106. package/build-types/modal/stories/index.story.d.ts +3 -0
  107. package/build-types/modal/stories/index.story.d.ts.map +1 -1
  108. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  109. package/build-types/private-apis.d.ts.map +1 -1
  110. package/build-types/slot-fill/index.d.ts +3 -0
  111. package/build-types/slot-fill/index.d.ts.map +1 -1
  112. package/build-types/tabs/styles.d.ts.map +1 -1
  113. package/build-types/tabs/tablist.d.ts.map +1 -1
  114. package/build-types/utils/element-rect.d.ts +32 -74
  115. package/build-types/utils/element-rect.d.ts.map +1 -1
  116. package/package.json +19 -20
  117. package/src/composite/README.md +5 -24
  118. package/src/composite/{context.ts → context.tsx} +1 -2
  119. package/src/composite/group-label.tsx +1 -1
  120. package/src/composite/group.tsx +1 -1
  121. package/src/composite/hover.tsx +1 -1
  122. package/src/composite/index.tsx +17 -28
  123. package/src/composite/item.tsx +1 -1
  124. package/src/composite/legacy/index.tsx +72 -11
  125. package/src/composite/legacy/stories/index.story.tsx +2 -1
  126. package/src/composite/legacy/test/index.tsx +57 -1
  127. package/src/composite/row.tsx +1 -1
  128. package/src/composite/stories/index.story.tsx +185 -169
  129. package/src/composite/typeahead.tsx +1 -1
  130. package/src/composite/types.ts +13 -15
  131. package/src/date-time/date/index.tsx +1 -1
  132. package/src/date-time/date/styles.ts +31 -11
  133. package/src/date-time/date/test/use-lilius.ts +417 -0
  134. package/src/date-time/date/use-lilius/index.ts +394 -0
  135. package/src/index.ts +1 -0
  136. package/src/modal/index.tsx +16 -7
  137. package/src/modal/stories/index.story.tsx +8 -14
  138. package/src/modal/style.scss +0 -5
  139. package/src/navigator/navigator-screen/component.tsx +7 -0
  140. package/src/navigator/test/index.tsx +8 -0
  141. package/src/private-apis.ts +0 -9
  142. package/src/select-control/README.md +2 -2
  143. package/src/slot-fill/index.tsx +1 -0
  144. package/src/tabs/styles.ts +40 -11
  145. package/src/tabs/tablist.tsx +5 -4
  146. package/src/utils/element-rect.ts +93 -130
  147. package/tsconfig.tsbuildinfo +1 -1
  148. package/build/composite/store.js +0 -54
  149. package/build/composite/store.js.map +0 -1
  150. package/build-module/composite/store.js +0 -46
  151. package/build-module/composite/store.js.map +0 -1
  152. package/build-types/composite/store.d.ts +0 -25
  153. package/build-types/composite/store.d.ts.map +0 -1
  154. package/build-types/composite/stories/utils.d.ts +0 -29
  155. package/build-types/composite/stories/utils.d.ts.map +0 -1
  156. package/src/composite/store.ts +0 -46
  157. package/src/composite/stories/utils.tsx +0 -76
@@ -16,6 +16,7 @@ import * as Ariakit from '@ariakit/react';
16
16
  /**
17
17
  * WordPress dependencies
18
18
  */
19
+ import { isRTL } from '@wordpress/i18n';
19
20
  import { useMemo, forwardRef } from '@wordpress/element';
20
21
 
21
22
  /**
@@ -38,10 +39,9 @@ import type { CompositeProps } from './types';
38
39
  *
39
40
  * @example
40
41
  * ```jsx
41
- * import { Composite, useCompositeStore } from '@wordpress/components';
42
+ * import { Composite } from '@wordpress/components';
42
43
  *
43
- * const store = useCompositeStore();
44
- * <Composite store={store}>
44
+ * <Composite>
45
45
  * <Composite.Item>Item 1</Composite.Item>
46
46
  * <Composite.Item>Item 2</Composite.Item>
47
47
  * </Composite>
@@ -62,21 +62,18 @@ export const Composite = Object.assign(
62
62
  focusShift = false,
63
63
  virtualFocus = false,
64
64
  orientation = 'both',
65
- rtl = false,
65
+ rtl = isRTL(),
66
66
 
67
67
  // Composite component props
68
68
  children,
69
69
  disabled = false,
70
70
 
71
- // To be removed
72
- store: storeProp,
73
-
74
71
  // Rest props
75
72
  ...props
76
73
  },
77
74
  ref
78
75
  ) {
79
- const newStore = Ariakit.useCompositeStore( {
76
+ const store = Ariakit.useCompositeStore( {
80
77
  activeId,
81
78
  defaultActiveId,
82
79
  setActiveId,
@@ -88,8 +85,6 @@ export const Composite = Object.assign(
88
85
  rtl,
89
86
  } );
90
87
 
91
- const store = storeProp || newStore;
92
-
93
88
  const contextValue = useMemo(
94
89
  () => ( {
95
90
  store,
@@ -116,10 +111,9 @@ export const Composite = Object.assign(
116
111
  *
117
112
  * @example
118
113
  * ```jsx
119
- * import { Composite, useCompositeStore } from '@wordpress/components';
114
+ * import { Composite } from '@wordpress/components';
120
115
  *
121
- * const store = useCompositeStore();
122
- * <Composite store={store}>
116
+ * <Composite>
123
117
  * <Composite.Group>
124
118
  * <Composite.GroupLabel>Label</Composite.GroupLabel>
125
119
  * <Composite.Item>Item 1</Composite.Item>
@@ -138,10 +132,9 @@ export const Composite = Object.assign(
138
132
  *
139
133
  * @example
140
134
  * ```jsx
141
- * import { Composite, useCompositeStore } from '@wordpress/components';
135
+ * import { Composite } from '@wordpress/components';
142
136
  *
143
- * const store = useCompositeStore();
144
- * <Composite store={store}>
137
+ * <Composite>
145
138
  * <Composite.Group>
146
139
  * <Composite.GroupLabel>Label</Composite.GroupLabel>
147
140
  * <Composite.Item>Item 1</Composite.Item>
@@ -158,10 +151,9 @@ export const Composite = Object.assign(
158
151
  *
159
152
  * @example
160
153
  * ```jsx
161
- * import { Composite, useCompositeStore } from '@wordpress/components';
154
+ * import { Composite } from '@wordpress/components';
162
155
  *
163
- * const store = useCompositeStore();
164
- * <Composite store={store}>
156
+ * <Composite>
165
157
  * <Composite.Item>Item 1</Composite.Item>
166
158
  * <Composite.Item>Item 2</Composite.Item>
167
159
  * <Composite.Item>Item 3</Composite.Item>
@@ -176,10 +168,9 @@ export const Composite = Object.assign(
176
168
  *
177
169
  * @example
178
170
  * ```jsx
179
- * import { Composite, useCompositeStore } from '@wordpress/components';
171
+ * import { Composite } from '@wordpress/components';
180
172
  *
181
- * const store = useCompositeStore();
182
- * <Composite store={store}>
173
+ * <Composite>
183
174
  * <Composite.Row>
184
175
  * <Composite.Item>Item 1.1</Composite.Item>
185
176
  * <Composite.Item>Item 1.2</Composite.Item>
@@ -201,10 +192,9 @@ export const Composite = Object.assign(
201
192
  *
202
193
  * @example
203
194
  * ```jsx
204
- * import { Composite, useCompositeStore } from '@wordpress/components';
195
+ * import { Composite } from '@wordpress/components';
205
196
  *
206
- * const store = useCompositeStore();
207
- * <Composite store={store}>
197
+ * <Composite>
208
198
  * <Composite.Hover render={ <Composite.Item /> }>
209
199
  * Item 1
210
200
  * </Composite.Hover>
@@ -224,10 +214,9 @@ export const Composite = Object.assign(
224
214
  *
225
215
  * @example
226
216
  * ```jsx
227
- * import { Composite, useCompositeStore } from '@wordpress/components';
217
+ * import { Composite } from '@wordpress/components';
228
218
  *
229
- * const store = useCompositeStore();
230
- * <Composite store={store} render={ <CompositeTypeahead /> }>
219
+ * <Composite render={ <CompositeTypeahead /> }>
231
220
  * <Composite.Item>Item 1</Composite.Item>
232
221
  * <Composite.Item>Item 2</Composite.Item>
233
222
  * </Composite>
@@ -22,7 +22,7 @@ export const CompositeItem = forwardRef<
22
22
  const context = useCompositeContext();
23
23
  return (
24
24
  <Ariakit.CompositeItem
25
- store={ context?.store }
25
+ store={ context.store as Ariakit.CompositeStore }
26
26
  { ...props }
27
27
  ref={ ref }
28
28
  />
@@ -13,17 +13,22 @@
13
13
  * @see https://ariakit.org/components/composite
14
14
  */
15
15
 
16
+ /**
17
+ * External dependencies
18
+ */
19
+ import * as Ariakit from '@ariakit/react';
20
+
16
21
  /**
17
22
  * WordPress dependencies
18
23
  */
19
24
  import { forwardRef } from '@wordpress/element';
25
+ import { useInstanceId } from '@wordpress/compose';
26
+ import deprecated from '@wordpress/deprecated';
20
27
 
21
28
  /**
22
29
  * Internal dependencies
23
30
  */
24
31
  import { Composite as Current } from '..';
25
- import { useCompositeStore } from '../store';
26
- import { useInstanceId } from '@wordpress/compose';
27
32
 
28
33
  type Orientation = 'horizontal' | 'vertical';
29
34
 
@@ -79,7 +84,7 @@ export interface LegacyStateOptions {
79
84
 
80
85
  type Component = React.FunctionComponent< any >;
81
86
 
82
- type CompositeStore = ReturnType< typeof useCompositeStore >;
87
+ type CompositeStore = ReturnType< typeof Ariakit.useCompositeStore >;
83
88
  type CompositeStoreState = { store: CompositeStore };
84
89
  export type CompositeState = CompositeStoreState &
85
90
  Required< Pick< LegacyStateOptions, 'baseId' > >;
@@ -119,12 +124,31 @@ function mapLegacyStatePropsToComponentProps(
119
124
  return legacyProps;
120
125
  }
121
126
 
127
+ const LEGACY_TO_NEW_DISPLAY_NAME = {
128
+ __unstableComposite: 'Composite',
129
+ __unstableCompositeGroup: 'Composite.Group or Composite.Row',
130
+ __unstableCompositeItem: 'Composite.Item',
131
+ __unstableUseCompositeState: 'Composite',
132
+ };
133
+
122
134
  function proxyComposite< C extends Component >(
123
135
  ProxiedComponent: C | React.ForwardRefExoticComponent< C >,
124
136
  propMap: Record< string, string > = {}
125
137
  ): CompositeComponent< C > {
126
- const displayName = ProxiedComponent.displayName;
138
+ const displayName = ProxiedComponent.displayName ?? '';
139
+
127
140
  const Component = ( legacyProps: CompositeStateProps ) => {
141
+ deprecated( `wp.components.${ displayName }`, {
142
+ since: '6.7',
143
+ alternative: LEGACY_TO_NEW_DISPLAY_NAME.hasOwnProperty(
144
+ displayName
145
+ )
146
+ ? LEGACY_TO_NEW_DISPLAY_NAME[
147
+ displayName as keyof typeof LEGACY_TO_NEW_DISPLAY_NAME
148
+ ]
149
+ : undefined,
150
+ } );
151
+
128
152
  const { store, ...rest } =
129
153
  mapLegacyStatePropsToComponentProps( legacyProps );
130
154
  const props = rest as ComponentProps< C >;
@@ -149,7 +173,7 @@ function proxyComposite< C extends Component >(
149
173
  // `CompositeRow`, but this has been split into two different
150
174
  // components. We handle that difference by checking on the
151
175
  // provided role, and returning the appropriate component.
152
- const unproxiedCompositeGroup = forwardRef<
176
+ const UnproxiedCompositeGroup = forwardRef<
153
177
  any,
154
178
  React.ComponentPropsWithoutRef< typeof Current.Group | typeof Current.Row >
155
179
  >( ( { role, ...props }, ref ) => {
@@ -157,15 +181,52 @@ const unproxiedCompositeGroup = forwardRef<
157
181
  return <Component ref={ ref } role={ role } { ...props } />;
158
182
  } );
159
183
 
160
- export const Composite = proxyComposite( Current, { baseId: 'id' } );
161
- export const CompositeGroup = proxyComposite( unproxiedCompositeGroup );
162
- export const CompositeItem = proxyComposite( Current.Item, {
163
- focusable: 'accessibleWhenDisabled',
164
- } );
184
+ /**
185
+ * _Note: please use the `Composite` component instead._
186
+ *
187
+ * @deprecated
188
+ */
189
+ export const Composite = proxyComposite(
190
+ Object.assign( Current, { displayName: '__unstableComposite' } ),
191
+ { baseId: 'id' }
192
+ );
193
+ /**
194
+ * _Note: please use the `Composite.Row` or `Composite.Group` components instead._
195
+ *
196
+ * @deprecated
197
+ */
198
+ export const CompositeGroup = proxyComposite(
199
+ Object.assign( UnproxiedCompositeGroup, {
200
+ displayName: '__unstableCompositeGroup',
201
+ } )
202
+ );
203
+ /**
204
+ * _Note: please use the `Composite.Item` component instead._
205
+ *
206
+ * @deprecated
207
+ */
208
+ export const CompositeItem = proxyComposite(
209
+ Object.assign( Current.Item, {
210
+ displayName: '__unstableCompositeItem',
211
+ } ),
212
+ {
213
+ focusable: 'accessibleWhenDisabled',
214
+ }
215
+ );
165
216
 
217
+ /**
218
+ * _Note: please use the `Composite` component instead._
219
+ *
220
+ * @deprecated
221
+ */
166
222
  export function useCompositeState(
167
223
  legacyStateOptions: LegacyStateOptions = {}
168
224
  ): CompositeState {
225
+ deprecated( `wp.components.__unstableUseCompositeState`, {
226
+ since: '6.7',
227
+ alternative: LEGACY_TO_NEW_DISPLAY_NAME.__unstableUseCompositeState,
228
+ } );
229
+
169
230
  const {
170
231
  baseId,
171
232
  currentId: defaultActiveId,
@@ -180,7 +241,7 @@ export function useCompositeState(
180
241
 
181
242
  return {
182
243
  baseId: useInstanceId( Composite, 'composite', baseId ),
183
- store: useCompositeStore( {
244
+ store: Ariakit.useCompositeStore( {
184
245
  defaultActiveId,
185
246
  rtl,
186
247
  orientation,
@@ -15,7 +15,8 @@ import {
15
15
  import { UseCompositeStatePlaceholder, transform } from './utils';
16
16
 
17
17
  const meta: Meta< typeof UseCompositeStatePlaceholder > = {
18
- title: 'Components/Composite',
18
+ title: 'Components (Deprecated)/Composite (Unstable)',
19
+ id: 'components-composite-unstable',
19
20
  component: UseCompositeStatePlaceholder,
20
21
  subcomponents: {
21
22
  Composite,
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { queryByAttribute, render, screen } from '@testing-library/react';
4
+ import {
5
+ queryByAttribute,
6
+ render,
7
+ screen,
8
+ renderHook,
9
+ } from '@testing-library/react';
5
10
  import { press, waitFor } from '@ariakit/test';
6
11
 
7
12
  /**
@@ -156,6 +161,57 @@ function getShiftTestItems() {
156
161
  };
157
162
  }
158
163
 
164
+ // Checking for deprecation warnings before other tests because the `deprecated`
165
+ // utility only fires a console.warn the first time a component is rendered.
166
+ describe( 'Shows a deprecation warning', () => {
167
+ it( 'useCompositeState', () => {
168
+ renderHook( () => useCompositeState() );
169
+ expect( console ).toHaveWarnedWith(
170
+ 'wp.components.__unstableUseCompositeState is deprecated since version 6.7. Please use Composite instead.'
171
+ );
172
+ } );
173
+ it( 'Composite', () => {
174
+ const Test = () => {
175
+ const props = useCompositeState();
176
+ return <Composite { ...props } />;
177
+ };
178
+ render( <Test /> );
179
+ expect( console ).toHaveWarnedWith(
180
+ 'wp.components.__unstableComposite is deprecated since version 6.7. Please use Composite instead.'
181
+ );
182
+ } );
183
+ it( 'CompositeItem', () => {
184
+ const Test = () => {
185
+ const props = useCompositeState();
186
+ return (
187
+ <Composite { ...props }>
188
+ <CompositeItem { ...props } />
189
+ </Composite>
190
+ );
191
+ };
192
+ render( <Test /> );
193
+ expect( console ).toHaveWarnedWith(
194
+ 'wp.components.__unstableCompositeItem is deprecated since version 6.7. Please use Composite.Item instead.'
195
+ );
196
+ } );
197
+ it( 'CompositeGroup', () => {
198
+ const Test = () => {
199
+ const props = useCompositeState();
200
+ return (
201
+ <Composite { ...props }>
202
+ <CompositeGroup { ...props }>
203
+ <CompositeItem { ...props } />
204
+ </CompositeGroup>
205
+ </Composite>
206
+ );
207
+ };
208
+ render( <Test /> );
209
+ expect( console ).toHaveWarnedWith(
210
+ 'wp.components.__unstableCompositeGroup is deprecated since version 6.7. Please use Composite.Group or Composite.Row instead.'
211
+ );
212
+ } );
213
+ } );
214
+
159
215
  describe.each( [
160
216
  [
161
217
  'With "spread" state',
@@ -22,7 +22,7 @@ export const CompositeRow = forwardRef<
22
22
  const context = useCompositeContext();
23
23
  return (
24
24
  <Ariakit.CompositeRow
25
- store={ context?.store }
25
+ store={ context.store as Ariakit.CompositeStore }
26
26
  { ...props }
27
27
  ref={ ref }
28
28
  />