@wordpress/components 28.7.0 → 28.8.1-next.1f6eadc42.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 (165) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/box-control/utils.js +1 -1
  3. package/build/box-control/utils.js.map +1 -1
  4. package/build/composite/context.js +1 -1
  5. package/build/composite/context.js.map +1 -1
  6. package/build/composite/group-label.js +1 -1
  7. package/build/composite/group-label.js.map +1 -1
  8. package/build/composite/group.js +1 -1
  9. package/build/composite/group.js.map +1 -1
  10. package/build/composite/hover.js +1 -1
  11. package/build/composite/hover.js.map +1 -1
  12. package/build/composite/index.js +17 -26
  13. package/build/composite/index.js.map +1 -1
  14. package/build/composite/item.js +1 -1
  15. package/build/composite/item.js.map +1 -1
  16. package/build/composite/legacy/index.js +59 -8
  17. package/build/composite/legacy/index.js.map +1 -1
  18. package/build/composite/row.js +1 -1
  19. package/build/composite/row.js.map +1 -1
  20. package/build/composite/typeahead.js +1 -1
  21. package/build/composite/typeahead.js.map +1 -1
  22. package/build/composite/types.js.map +1 -1
  23. package/build/date-time/date/index.js +1 -1
  24. package/build/date-time/date/index.js.map +1 -1
  25. package/build/date-time/date/styles.js +35 -24
  26. package/build/date-time/date/styles.js.map +1 -1
  27. package/build/date-time/date/use-lilius/index.js +163 -0
  28. package/build/date-time/date/use-lilius/index.js.map +1 -0
  29. package/build/index.js +7 -0
  30. package/build/index.js.map +1 -1
  31. package/build/modal/index.js +11 -4
  32. package/build/modal/index.js.map +1 -1
  33. package/build/navigator/navigator-screen/component.js +5 -0
  34. package/build/navigator/navigator-screen/component.js.map +1 -1
  35. package/build/private-apis.js +0 -9
  36. package/build/private-apis.js.map +1 -1
  37. package/build/slot-fill/index.js +1 -0
  38. package/build/slot-fill/index.js.map +1 -1
  39. package/build/tabs/styles.js +3 -3
  40. package/build/tabs/styles.js.map +1 -1
  41. package/build/tabs/tablist.js +5 -4
  42. package/build/tabs/tablist.js.map +1 -1
  43. package/build/utils/element-rect.js +73 -105
  44. package/build/utils/element-rect.js.map +1 -1
  45. package/build-module/box-control/utils.js +1 -1
  46. package/build-module/box-control/utils.js.map +1 -1
  47. package/build-module/composite/context.js +1 -1
  48. package/build-module/composite/context.js.map +1 -1
  49. package/build-module/composite/group-label.js +1 -1
  50. package/build-module/composite/group-label.js.map +1 -1
  51. package/build-module/composite/group.js +1 -1
  52. package/build-module/composite/group.js.map +1 -1
  53. package/build-module/composite/hover.js +1 -1
  54. package/build-module/composite/hover.js.map +1 -1
  55. package/build-module/composite/index.js +17 -26
  56. package/build-module/composite/index.js.map +1 -1
  57. package/build-module/composite/item.js +1 -1
  58. package/build-module/composite/item.js.map +1 -1
  59. package/build-module/composite/legacy/index.js +56 -8
  60. package/build-module/composite/legacy/index.js.map +1 -1
  61. package/build-module/composite/row.js +1 -1
  62. package/build-module/composite/row.js.map +1 -1
  63. package/build-module/composite/typeahead.js +1 -1
  64. package/build-module/composite/typeahead.js.map +1 -1
  65. package/build-module/composite/types.js.map +1 -1
  66. package/build-module/date-time/date/index.js +1 -2
  67. package/build-module/date-time/date/index.js.map +1 -1
  68. package/build-module/date-time/date/styles.js +31 -24
  69. package/build-module/date-time/date/styles.js.map +1 -1
  70. package/build-module/date-time/date/use-lilius/index.js +158 -0
  71. package/build-module/date-time/date/use-lilius/index.js.map +1 -0
  72. package/build-module/index.js +1 -0
  73. package/build-module/index.js.map +1 -1
  74. package/build-module/modal/index.js +12 -4
  75. package/build-module/modal/index.js.map +1 -1
  76. package/build-module/navigator/navigator-screen/component.js +4 -0
  77. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  78. package/build-module/private-apis.js +0 -9
  79. package/build-module/private-apis.js.map +1 -1
  80. package/build-module/slot-fill/index.js +1 -0
  81. package/build-module/slot-fill/index.js.map +1 -1
  82. package/build-module/tabs/styles.js +3 -3
  83. package/build-module/tabs/styles.js.map +1 -1
  84. package/build-module/tabs/tablist.js +5 -4
  85. package/build-module/tabs/tablist.js.map +1 -1
  86. package/build-module/utils/element-rect.js +74 -105
  87. package/build-module/utils/element-rect.js.map +1 -1
  88. package/build-style/style-rtl.css +1 -4
  89. package/build-style/style.css +1 -4
  90. package/build-types/box-control/utils.d.ts +1 -1
  91. package/build-types/box-control/utils.d.ts.map +1 -1
  92. package/build-types/composite/context.d.ts.map +1 -1
  93. package/build-types/composite/index.d.ts +36 -24
  94. package/build-types/composite/index.d.ts.map +1 -1
  95. package/build-types/composite/legacy/index.d.ts +25 -2
  96. package/build-types/composite/legacy/index.d.ts.map +1 -1
  97. package/build-types/composite/legacy/stories/index.story.d.ts.map +1 -1
  98. package/build-types/composite/stories/index.story.d.ts +9 -9
  99. package/build-types/composite/stories/index.story.d.ts.map +1 -1
  100. package/build-types/composite/types.d.ts +11 -10
  101. package/build-types/composite/types.d.ts.map +1 -1
  102. package/build-types/date-time/date/index.d.ts +0 -3
  103. package/build-types/date-time/date/index.d.ts.map +1 -1
  104. package/build-types/date-time/date/styles.d.ts.map +1 -1
  105. package/build-types/date-time/date/test/use-lilius.d.ts +2 -0
  106. package/build-types/date-time/date/test/use-lilius.d.ts.map +1 -0
  107. package/build-types/date-time/date/use-lilius/index.d.ts +169 -0
  108. package/build-types/date-time/date/use-lilius/index.d.ts.map +1 -0
  109. package/build-types/index.d.ts +1 -0
  110. package/build-types/index.d.ts.map +1 -1
  111. package/build-types/modal/index.d.ts.map +1 -1
  112. package/build-types/modal/stories/index.story.d.ts +3 -0
  113. package/build-types/modal/stories/index.story.d.ts.map +1 -1
  114. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  115. package/build-types/private-apis.d.ts.map +1 -1
  116. package/build-types/slot-fill/index.d.ts +3 -0
  117. package/build-types/slot-fill/index.d.ts.map +1 -1
  118. package/build-types/tabs/styles.d.ts.map +1 -1
  119. package/build-types/tabs/tablist.d.ts.map +1 -1
  120. package/build-types/utils/element-rect.d.ts +32 -74
  121. package/build-types/utils/element-rect.d.ts.map +1 -1
  122. package/package.json +19 -20
  123. package/src/box-control/utils.ts +1 -1
  124. package/src/composite/README.md +5 -24
  125. package/src/composite/{context.ts → context.tsx} +1 -2
  126. package/src/composite/group-label.tsx +1 -1
  127. package/src/composite/group.tsx +1 -1
  128. package/src/composite/hover.tsx +1 -1
  129. package/src/composite/index.tsx +17 -28
  130. package/src/composite/item.tsx +1 -1
  131. package/src/composite/legacy/index.tsx +72 -11
  132. package/src/composite/legacy/stories/index.story.tsx +2 -1
  133. package/src/composite/legacy/test/index.tsx +57 -1
  134. package/src/composite/row.tsx +1 -1
  135. package/src/composite/stories/index.story.tsx +185 -169
  136. package/src/composite/typeahead.tsx +1 -1
  137. package/src/composite/types.ts +13 -15
  138. package/src/date-time/date/index.tsx +1 -1
  139. package/src/date-time/date/styles.ts +31 -11
  140. package/src/date-time/date/test/use-lilius.ts +417 -0
  141. package/src/date-time/date/use-lilius/index.ts +394 -0
  142. package/src/index.ts +1 -0
  143. package/src/modal/index.tsx +16 -7
  144. package/src/modal/stories/index.story.tsx +8 -14
  145. package/src/modal/style.scss +0 -5
  146. package/src/navigator/navigator-screen/component.tsx +7 -0
  147. package/src/navigator/test/index.tsx +8 -0
  148. package/src/popover/style.scss +2 -1
  149. package/src/private-apis.ts +0 -9
  150. package/src/select-control/README.md +2 -2
  151. package/src/slot-fill/index.tsx +1 -0
  152. package/src/tabs/styles.ts +40 -11
  153. package/src/tabs/tablist.tsx +5 -4
  154. package/src/utils/element-rect.ts +93 -130
  155. package/tsconfig.tsbuildinfo +1 -1
  156. package/build/composite/store.js +0 -54
  157. package/build/composite/store.js.map +0 -1
  158. package/build-module/composite/store.js +0 -46
  159. package/build-module/composite/store.js.map +0 -1
  160. package/build-types/composite/store.d.ts +0 -25
  161. package/build-types/composite/store.d.ts.map +0 -1
  162. package/build-types/composite/stories/utils.d.ts +0 -29
  163. package/build-types/composite/stories/utils.d.ts.map +0 -1
  164. package/src/composite/store.ts +0 -46
  165. package/src/composite/stories/utils.tsx +0 -76
@@ -0,0 +1,417 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { act, renderHook } from '@testing-library/react';
5
+ import { addYears, getYear, set, startOfToday, subYears } from 'date-fns';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { Month, useLilius } from '../use-lilius';
11
+
12
+ const getDate = ( {
13
+ year = 1999,
14
+ month = Month.NOVEMBER,
15
+ date = 24,
16
+ hours = 0,
17
+ minutes = 0,
18
+ seconds = 0,
19
+ milliseconds = 0,
20
+ }: {
21
+ year?: number;
22
+ month?: number;
23
+ date?: number;
24
+ hours?: number;
25
+ minutes?: number;
26
+ seconds?: number;
27
+ milliseconds?: number;
28
+ } = {} ) => {
29
+ return set( new Date(), {
30
+ year,
31
+ month,
32
+ date,
33
+ hours,
34
+ minutes,
35
+ seconds,
36
+ milliseconds,
37
+ } );
38
+ };
39
+
40
+ describe( 'helpers', () => {
41
+ describe( 'clearTime', () => {
42
+ it( 'returns a copy of the given date with the time set to 00:00:00:00', () => {
43
+ const { result } = renderHook( () => useLilius() );
44
+
45
+ const date = getDate( { hours: 7, minutes: 30 } );
46
+
47
+ expect( result.current.clearTime( date ) ).toStrictEqual(
48
+ set( date, {
49
+ hours: 0,
50
+ minutes: 0,
51
+ seconds: 0,
52
+ milliseconds: 0,
53
+ } )
54
+ );
55
+ } );
56
+ } );
57
+
58
+ describe( 'inRange', () => {
59
+ it( 'returns whether or not a date is between 2 other dates (inclusive)', () => {
60
+ const { result } = renderHook( () => useLilius() );
61
+
62
+ const date = getDate();
63
+ const min = subYears( date, 1 );
64
+ const max = addYears( date, 1 );
65
+
66
+ expect( result.current.inRange( date, min, max ) ).toBe( true );
67
+ expect(
68
+ result.current.inRange( addYears( date, 10 ), min, max )
69
+ ).toBe( false );
70
+ } );
71
+ } );
72
+ } );
73
+
74
+ describe( 'viewing', () => {
75
+ describe( 'viewing', () => {
76
+ it( 'returns the date represented in the calendar matrix', () => {
77
+ const date = getDate();
78
+
79
+ const { result } = renderHook( () =>
80
+ useLilius( { viewing: date } )
81
+ );
82
+
83
+ expect( result.current.viewing ).toStrictEqual( date );
84
+ } );
85
+ } );
86
+
87
+ describe( 'setViewing', () => {
88
+ it( 'sets the date represented in the calendar matrix', () => {
89
+ const { result } = renderHook( () => useLilius() );
90
+
91
+ const date = getDate();
92
+
93
+ act( () => result.current.setViewing( date ) );
94
+ expect( result.current.viewing ).toStrictEqual( date );
95
+ } );
96
+ } );
97
+
98
+ describe( 'viewToday', () => {
99
+ it( 'sets the viewing date to today', () => {
100
+ const { result } = renderHook( () =>
101
+ useLilius( { viewing: getDate( { year: 1999 } ) } )
102
+ );
103
+
104
+ act( () => result.current.viewToday() );
105
+ expect( result.current.viewing ).toStrictEqual( startOfToday() );
106
+ } );
107
+ } );
108
+
109
+ describe( 'viewMonth', () => {
110
+ it( 'sets the viewing date to the given month', () => {
111
+ const date = getDate( { month: Month.JANUARY } );
112
+
113
+ const { result } = renderHook( () =>
114
+ useLilius( { viewing: date } )
115
+ );
116
+
117
+ act( () => result.current.viewMonth( Month.FEBRUARY ) );
118
+ expect( result.current.viewing ).toStrictEqual(
119
+ set( date, { month: Month.FEBRUARY } )
120
+ );
121
+ } );
122
+ } );
123
+
124
+ describe( 'viewPreviousMonth', () => {
125
+ it( 'sets the viewing date to the month before the current', () => {
126
+ const { result } = renderHook( () => useLilius() );
127
+
128
+ const date = getDate( { month: Month.OCTOBER } );
129
+
130
+ act( () => result.current.setViewing( date ) );
131
+ act( () => result.current.viewPreviousMonth() );
132
+ expect( result.current.viewing ).toStrictEqual(
133
+ set( date, { month: Month.SEPTEMBER } )
134
+ );
135
+ } );
136
+
137
+ it( 'wraps to december of the previous year if the current month is january', () => {
138
+ const { result } = renderHook( () => useLilius() );
139
+
140
+ const date = getDate( { month: Month.JANUARY } );
141
+
142
+ act( () => result.current.setViewing( date ) );
143
+ act( () => result.current.viewPreviousMonth() );
144
+ expect( result.current.viewing ).toStrictEqual(
145
+ set( date, {
146
+ month: Month.DECEMBER,
147
+ year: getYear( date ) - 1,
148
+ } )
149
+ );
150
+ } );
151
+ } );
152
+
153
+ describe( 'viewNextMonth', () => {
154
+ it( 'sets the viewing date to the month after the current', () => {
155
+ const { result } = renderHook( () => useLilius() );
156
+
157
+ const date = getDate( { month: Month.OCTOBER } );
158
+
159
+ act( () => result.current.setViewing( date ) );
160
+ act( () => result.current.viewNextMonth() );
161
+ expect( result.current.viewing ).toStrictEqual(
162
+ set( date, { month: Month.NOVEMBER } )
163
+ );
164
+ } );
165
+
166
+ it( 'wraps to january of the next year if the current month is december', () => {
167
+ const { result } = renderHook( () => useLilius() );
168
+
169
+ const date = getDate( { month: Month.DECEMBER } );
170
+
171
+ act( () => result.current.setViewing( date ) );
172
+ act( () => result.current.viewNextMonth() );
173
+ expect( result.current.viewing ).toStrictEqual(
174
+ set( date, { month: Month.JANUARY, year: getYear( date ) + 1 } )
175
+ );
176
+ } );
177
+ } );
178
+
179
+ describe( 'viewYear', () => {
180
+ it( 'sets the viewing date to the given year', () => {
181
+ const date = getDate( { year: 1999 } );
182
+
183
+ const { result } = renderHook( () =>
184
+ useLilius( { viewing: date } )
185
+ );
186
+
187
+ act( () => result.current.viewYear( 1997 ) );
188
+ expect( result.current.viewing ).toStrictEqual(
189
+ set( date, { year: 1997 } )
190
+ );
191
+ } );
192
+ } );
193
+
194
+ describe( 'viewPreviousYear', () => {
195
+ it( 'sets the viewing date to the year before the current', () => {
196
+ const date = getDate( { year: 1999 } );
197
+
198
+ const { result } = renderHook( () =>
199
+ useLilius( { viewing: date } )
200
+ );
201
+
202
+ act( () => result.current.viewPreviousYear() );
203
+ expect( result.current.viewing ).toStrictEqual(
204
+ set( date, { year: 1998 } )
205
+ );
206
+ } );
207
+ } );
208
+
209
+ describe( 'viewNextYear', () => {
210
+ it( 'sets the viewing date to the year after the current', () => {
211
+ const date = getDate( { year: 1999 } );
212
+
213
+ const { result } = renderHook( () =>
214
+ useLilius( { viewing: date } )
215
+ );
216
+
217
+ act( () => result.current.viewNextYear() );
218
+ expect( result.current.viewing ).toStrictEqual(
219
+ set( date, { year: 2000 } )
220
+ );
221
+ } );
222
+ } );
223
+ } );
224
+
225
+ describe( 'selected', () => {
226
+ describe( 'selected', () => {
227
+ it( 'returns the dates currently selected', () => {
228
+ const date = getDate();
229
+
230
+ const { result } = renderHook( () =>
231
+ useLilius( {
232
+ selected: [ date ],
233
+ } )
234
+ );
235
+
236
+ expect( result.current.selected ).toStrictEqual( [ date ] );
237
+ } );
238
+ } );
239
+
240
+ describe( 'clearSelected', () => {
241
+ it( 'resets the selected dates to []', () => {
242
+ const { result } = renderHook( () => useLilius() );
243
+
244
+ const date = getDate();
245
+
246
+ act( () =>
247
+ result.current.selectRange(
248
+ set( date, { date: 1 } ),
249
+ set( date, { date: 5 } )
250
+ )
251
+ );
252
+ expect( result.current.selected.length ).toBe( 5 );
253
+
254
+ act( () => result.current.clearSelected() );
255
+ expect( result.current.selected.length ).toBe( 0 );
256
+ } );
257
+ } );
258
+
259
+ describe( 'isSelected', () => {
260
+ it( 'returns whether or not a date has been selected', () => {
261
+ const date = getDate();
262
+
263
+ const { result } = renderHook( () =>
264
+ useLilius( {
265
+ selected: [ date ],
266
+ } )
267
+ );
268
+
269
+ expect( result.current.isSelected( date ) ).toBe( true );
270
+ } );
271
+ } );
272
+
273
+ describe( 'select', () => {
274
+ it( 'selects a date', () => {
275
+ const { result } = renderHook( () => useLilius() );
276
+
277
+ const date = getDate();
278
+
279
+ act( () => result.current.select( date ) );
280
+ expect( result.current.isSelected( date ) ).toBe( true );
281
+ } );
282
+
283
+ it( 'selects multiple dates', () => {
284
+ const { result } = renderHook( () => useLilius() );
285
+
286
+ const dateOne = getDate( { date: 1 } );
287
+ const dateTwo = getDate( { date: 2 } );
288
+
289
+ act( () => result.current.select( [ dateOne, dateTwo ] ) );
290
+ expect( result.current.isSelected( dateOne ) ).toBe( true );
291
+ expect( result.current.isSelected( dateTwo ) ).toBe( true );
292
+ } );
293
+ } );
294
+
295
+ describe( 'deselect', () => {
296
+ it( 'deselects a date', () => {
297
+ const { result } = renderHook( () => useLilius() );
298
+
299
+ const date = getDate();
300
+
301
+ act( () => result.current.select( date ) );
302
+ act( () => result.current.deselect( date ) );
303
+ expect( result.current.isSelected( date ) ).toBe( false );
304
+ } );
305
+
306
+ it( 'deselects multiple dates', () => {
307
+ const { result } = renderHook( () => useLilius() );
308
+
309
+ const dateOne = getDate( { date: 1 } );
310
+ const dateTwo = getDate( { date: 2 } );
311
+
312
+ act( () => result.current.select( [ dateOne, dateTwo ] ) );
313
+ act( () => result.current.deselect( [ dateOne, dateTwo ] ) );
314
+ expect( result.current.isSelected( dateOne ) ).toBe( false );
315
+ expect( result.current.isSelected( dateTwo ) ).toBe( false );
316
+ } );
317
+ } );
318
+
319
+ describe( 'toggle', () => {
320
+ it( 'toggles the selection of a date', () => {
321
+ const { result } = renderHook( () => useLilius() );
322
+
323
+ const date = getDate();
324
+
325
+ act( () => result.current.toggle( date ) );
326
+ expect( result.current.isSelected( date ) ).toBe( true );
327
+
328
+ act( () => result.current.toggle( date ) );
329
+ expect( result.current.isSelected( date ) ).toBe( false );
330
+ } );
331
+ } );
332
+
333
+ describe( 'selectRange', () => {
334
+ it( 'selects a range of dates (inclusive)', () => {
335
+ const { result } = renderHook( () => useLilius() );
336
+
337
+ const date = getDate();
338
+
339
+ const first = set( date, { date: 1 } );
340
+ const second = set( date, { date: 2 } );
341
+ const third = set( date, { date: 3 } );
342
+
343
+ act( () => result.current.selectRange( first, third ) );
344
+
345
+ expect( result.current.selected.length ).toBe( 3 );
346
+ expect( result.current.isSelected( first ) ).toBe( true );
347
+ expect( result.current.isSelected( second ) ).toBe( true );
348
+ expect( result.current.isSelected( third ) ).toBe( true );
349
+ } );
350
+ } );
351
+
352
+ describe( 'deselectRange', () => {
353
+ it( 'deselects a range of dates (inclusive)', () => {
354
+ const { result } = renderHook( () => useLilius() );
355
+
356
+ const date = getDate();
357
+
358
+ act( () =>
359
+ result.current.selectRange(
360
+ set( date, { date: 1 } ),
361
+ set( date, { date: 3 } )
362
+ )
363
+ );
364
+ act( () =>
365
+ result.current.deselectRange(
366
+ set( date, { date: 1 } ),
367
+ set( date, { date: 3 } )
368
+ )
369
+ );
370
+
371
+ expect( result.current.selected.length ).toBe( 0 );
372
+ expect(
373
+ result.current.isSelected( set( date, { date: 1 } ) )
374
+ ).toBe( false );
375
+ expect(
376
+ result.current.isSelected( set( date, { date: 2 } ) )
377
+ ).toBe( false );
378
+ expect(
379
+ result.current.isSelected( set( date, { date: 3 } ) )
380
+ ).toBe( false );
381
+ } );
382
+ } );
383
+ } );
384
+
385
+ describe( 'calendar', () => {
386
+ it( 'returns a matrix of days based on the current viewing date', () => {
387
+ const { result } = renderHook( () =>
388
+ useLilius( { viewing: new Date( 1582, Month.OCTOBER, 1 ) } )
389
+ );
390
+
391
+ expect( result.current.calendar![ 0 ][ 0 ][ 0 ] ).toStrictEqual(
392
+ new Date( 1582, Month.SEPTEMBER, 26 )
393
+ );
394
+ expect( result.current.calendar![ 0 ][ 0 ][ 5 ] ).toStrictEqual(
395
+ new Date( 1582, Month.OCTOBER, 1 )
396
+ );
397
+ expect( result.current.calendar![ 0 ][ 5 ][ 6 ] ).toStrictEqual(
398
+ new Date( 1582, Month.NOVEMBER, 6 )
399
+ );
400
+ } );
401
+
402
+ it( 'supports returning multiple months', () => {
403
+ const { result } = renderHook( () =>
404
+ useLilius( {
405
+ viewing: new Date( 1582, Month.OCTOBER, 1 ),
406
+ numberOfMonths: 2,
407
+ } )
408
+ );
409
+
410
+ expect( result.current.calendar![ 0 ][ 0 ][ 0 ] ).toStrictEqual(
411
+ new Date( 1582, Month.SEPTEMBER, 26 )
412
+ );
413
+ expect( result.current.calendar![ 1 ][ 0 ][ 0 ] ).toStrictEqual(
414
+ new Date( 1582, Month.OCTOBER, 31 )
415
+ );
416
+ } );
417
+ } );