@lumx/react 3.20.1-alpha.28 → 3.20.1-alpha.29

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 (197) hide show
  1. package/index.js +14033 -63
  2. package/index.js.map +1 -1
  3. package/package.json +3 -3
  4. package/utils/index.js +158 -3
  5. package/utils/index.js.map +1 -1
  6. package/_internal/Button-5a87fee9.js +0 -97
  7. package/_internal/Button-5a87fee9.js.map +0 -1
  8. package/_internal/ButtonRoot-bf682215.js +0 -117
  9. package/_internal/ButtonRoot-bf682215.js.map +0 -1
  10. package/_internal/Chip-8d0aae06.js +0 -143
  11. package/_internal/Chip-8d0aae06.js.map +0 -1
  12. package/_internal/ClickAwayProvider-1204f237.js +0 -95
  13. package/_internal/ClickAwayProvider-1204f237.js.map +0 -1
  14. package/_internal/DisabledStateContext-ea04260d.js +0 -29
  15. package/_internal/DisabledStateContext-ea04260d.js.map +0 -1
  16. package/_internal/HeadingLevelProvider-ebdcb0c7.js +0 -61
  17. package/_internal/HeadingLevelProvider-ebdcb0c7.js.map +0 -1
  18. package/_internal/IconButton-351389b0.js +0 -77
  19. package/_internal/IconButton-351389b0.js.map +0 -1
  20. package/_internal/ImageCaption-4109b433.js +0 -75
  21. package/_internal/ImageCaption-4109b433.js.map +0 -1
  22. package/_internal/List-b7882a99.js +0 -817
  23. package/_internal/List-b7882a99.js.map +0 -1
  24. package/_internal/PopoverDialog-2e7b9ed5.js +0 -655
  25. package/_internal/PopoverDialog-2e7b9ed5.js.map +0 -1
  26. package/_internal/Portal-3f86608e.js +0 -45
  27. package/_internal/Portal-3f86608e.js.map +0 -1
  28. package/_internal/RawClickable-2c2b6a89.js +0 -52
  29. package/_internal/RawClickable-2c2b6a89.js.map +0 -1
  30. package/_internal/Slides-83646e84.js +0 -679
  31. package/_internal/Slides-83646e84.js.map +0 -1
  32. package/_internal/ThemeContext-3181f000.js +0 -14
  33. package/_internal/ThemeContext-3181f000.js.map +0 -1
  34. package/_internal/Thumbnail-741501a5.js +0 -314
  35. package/_internal/Thumbnail-741501a5.js.map +0 -1
  36. package/_internal/check-circle-de24f857.js +0 -4
  37. package/_internal/check-circle-de24f857.js.map +0 -1
  38. package/_internal/chevron-right-827b804a.js +0 -6
  39. package/_internal/chevron-right-827b804a.js.map +0 -1
  40. package/_internal/chevron-up-0b9c76cb.js +0 -6
  41. package/_internal/chevron-up-0b9c76cb.js.map +0 -1
  42. package/_internal/close-circle-ef5d1aac.js +0 -4
  43. package/_internal/close-circle-ef5d1aac.js.map +0 -1
  44. package/_internal/close-eaf6c45a.js +0 -4
  45. package/_internal/close-eaf6c45a.js.map +0 -1
  46. package/_internal/components/alert-dialog-5df4f133.js +0 -163
  47. package/_internal/components/alert-dialog-5df4f133.js.map +0 -1
  48. package/_internal/components/autocomplete-824c779e.js +0 -261
  49. package/_internal/components/autocomplete-824c779e.js.map +0 -1
  50. package/_internal/components/avatar-69b66f01.js +0 -83
  51. package/_internal/components/avatar-69b66f01.js.map +0 -1
  52. package/_internal/components/badge-63cd3b1c.js +0 -81
  53. package/_internal/components/badge-63cd3b1c.js.map +0 -1
  54. package/_internal/components/button-eebd4e00.js +0 -47
  55. package/_internal/components/button-eebd4e00.js.map +0 -1
  56. package/_internal/components/checkbox-54943a02.js +0 -143
  57. package/_internal/components/checkbox-54943a02.js.map +0 -1
  58. package/_internal/components/chip-9ad6b318.js +0 -102
  59. package/_internal/components/chip-9ad6b318.js.map +0 -1
  60. package/_internal/components/comment-block-55a4ab3c.js +0 -138
  61. package/_internal/components/comment-block-55a4ab3c.js.map +0 -1
  62. package/_internal/components/date-picker-a824a3ae.js +0 -2
  63. package/_internal/components/date-picker-a824a3ae.js.map +0 -1
  64. package/_internal/components/dialog-5e6320b8.js +0 -238
  65. package/_internal/components/dialog-5e6320b8.js.map +0 -1
  66. package/_internal/components/divider-bdf11ba3.js +0 -50
  67. package/_internal/components/divider-bdf11ba3.js.map +0 -1
  68. package/_internal/components/drag-handle-45912fd3.js +0 -52
  69. package/_internal/components/drag-handle-45912fd3.js.map +0 -1
  70. package/_internal/components/dropdown-0216211d.js +0 -147
  71. package/_internal/components/dropdown-0216211d.js.map +0 -1
  72. package/_internal/components/expansion-panel-3ce73c6b.js +0 -167
  73. package/_internal/components/expansion-panel-3ce73c6b.js.map +0 -1
  74. package/_internal/components/flag-1b177f78.js +0 -59
  75. package/_internal/components/flag-1b177f78.js.map +0 -1
  76. package/_internal/components/flex-box-93b97715.js +0 -56
  77. package/_internal/components/flex-box-93b97715.js.map +0 -1
  78. package/_internal/components/generic-block-925f7c5b.js +0 -128
  79. package/_internal/components/generic-block-925f7c5b.js.map +0 -1
  80. package/_internal/components/grid-95fd1493.js +0 -104
  81. package/_internal/components/grid-95fd1493.js.map +0 -1
  82. package/_internal/components/grid-column-43f28cfb.js +0 -58
  83. package/_internal/components/grid-column-43f28cfb.js.map +0 -1
  84. package/_internal/components/heading-45d6e78e.js +0 -53
  85. package/_internal/components/heading-45d6e78e.js.map +0 -1
  86. package/_internal/components/icon-79195151.js +0 -2
  87. package/_internal/components/icon-79195151.js.map +0 -1
  88. package/_internal/components/image-block-aba6d2db.js +0 -110
  89. package/_internal/components/image-block-aba6d2db.js.map +0 -1
  90. package/_internal/components/image-lightbox-8b8e77c2.js +0 -759
  91. package/_internal/components/image-lightbox-8b8e77c2.js.map +0 -1
  92. package/_internal/components/inline-list-dfb9fd34.js +0 -74
  93. package/_internal/components/inline-list-dfb9fd34.js.map +0 -1
  94. package/_internal/components/input-helper-c8a0078b.js +0 -71
  95. package/_internal/components/input-helper-c8a0078b.js.map +0 -1
  96. package/_internal/components/input-label-9711398b.js +0 -59
  97. package/_internal/components/input-label-9711398b.js.map +0 -1
  98. package/_internal/components/lightbox-894abe64.js +0 -155
  99. package/_internal/components/lightbox-894abe64.js.map +0 -1
  100. package/_internal/components/link-e70e64ed.js +0 -72
  101. package/_internal/components/link-e70e64ed.js.map +0 -1
  102. package/_internal/components/link-preview-e56f3570.js +0 -117
  103. package/_internal/components/link-preview-e56f3570.js.map +0 -1
  104. package/_internal/components/list-59b7ce56.js +0 -71
  105. package/_internal/components/list-59b7ce56.js.map +0 -1
  106. package/_internal/components/message-a255dfd3.js +0 -98
  107. package/_internal/components/message-a255dfd3.js.map +0 -1
  108. package/_internal/components/mosaic-192f2270.js +0 -94
  109. package/_internal/components/mosaic-192f2270.js.map +0 -1
  110. package/_internal/components/navigation-dfe8aac0.js +0 -225
  111. package/_internal/components/navigation-dfe8aac0.js.map +0 -1
  112. package/_internal/components/notification-10f289b5.js +0 -143
  113. package/_internal/components/notification-10f289b5.js.map +0 -1
  114. package/_internal/components/popover-6c7f745b.js +0 -3
  115. package/_internal/components/popover-6c7f745b.js.map +0 -1
  116. package/_internal/components/post-block-f7dcc6e9.js +0 -109
  117. package/_internal/components/post-block-f7dcc6e9.js.map +0 -1
  118. package/_internal/components/progress-7a05fb0c.js +0 -182
  119. package/_internal/components/progress-7a05fb0c.js.map +0 -1
  120. package/_internal/components/progress-tracker-48876add.js +0 -309
  121. package/_internal/components/progress-tracker-48876add.js.map +0 -1
  122. package/_internal/components/radio-button-07cf45e9.js +0 -149
  123. package/_internal/components/radio-button-07cf45e9.js.map +0 -1
  124. package/_internal/components/select-8b54a444.js +0 -457
  125. package/_internal/components/select-8b54a444.js.map +0 -1
  126. package/_internal/components/side-navigation-7eeed3b4.js +0 -164
  127. package/_internal/components/side-navigation-7eeed3b4.js.map +0 -1
  128. package/_internal/components/skeleton-a4e84085.js +0 -166
  129. package/_internal/components/skeleton-a4e84085.js.map +0 -1
  130. package/_internal/components/slider-5d64b470.js +0 -311
  131. package/_internal/components/slider-5d64b470.js.map +0 -1
  132. package/_internal/components/slideshow-bce65cf6.js +0 -151
  133. package/_internal/components/slideshow-bce65cf6.js.map +0 -1
  134. package/_internal/components/switch-7ae55d89.js +0 -121
  135. package/_internal/components/switch-7ae55d89.js.map +0 -1
  136. package/_internal/components/table-5bdf4aec.js +0 -297
  137. package/_internal/components/table-5bdf4aec.js.map +0 -1
  138. package/_internal/components/tabs-2ad54592.js +0 -298
  139. package/_internal/components/tabs-2ad54592.js.map +0 -1
  140. package/_internal/components/text-09c81111.js +0 -2
  141. package/_internal/components/text-09c81111.js.map +0 -1
  142. package/_internal/components/text-field-3e1030f0.js +0 -359
  143. package/_internal/components/text-field-3e1030f0.js.map +0 -1
  144. package/_internal/components/thumbnail-1c5828b9.js +0 -42
  145. package/_internal/components/thumbnail-1c5828b9.js.map +0 -1
  146. package/_internal/components/toolbar-0d14efb7.js +0 -61
  147. package/_internal/components/toolbar-0d14efb7.js.map +0 -1
  148. package/_internal/components/tooltip-31181a24.js +0 -327
  149. package/_internal/components/tooltip-31181a24.js.map +0 -1
  150. package/_internal/components/uploader-845b2412.js +0 -153
  151. package/_internal/components/uploader-845b2412.js.map +0 -1
  152. package/_internal/components/user-block-91c30797.js +0 -144
  153. package/_internal/components/user-block-91c30797.js.map +0 -1
  154. package/_internal/constants-9b714e31.js +0 -2167
  155. package/_internal/constants-9b714e31.js.map +0 -1
  156. package/_internal/constants-d0e3f49e.js +0 -24
  157. package/_internal/constants-d0e3f49e.js.map +0 -1
  158. package/_internal/context-9d1336a1.js +0 -19
  159. package/_internal/context-9d1336a1.js.map +0 -1
  160. package/_internal/forwardRef-d0e90329.js +0 -82
  161. package/_internal/forwardRef-d0e90329.js.map +0 -1
  162. package/_internal/getFocusableElements-230173a8.js +0 -13
  163. package/_internal/getFocusableElements-230173a8.js.map +0 -1
  164. package/_internal/index-68e1b0af.js +0 -436
  165. package/_internal/index-68e1b0af.js.map +0 -1
  166. package/_internal/index-745f94ee.js +0 -103
  167. package/_internal/index-745f94ee.js.map +0 -1
  168. package/_internal/index-ab520e78.js +0 -117
  169. package/_internal/index-ab520e78.js.map +0 -1
  170. package/_internal/information-49bbeed3.js +0 -6
  171. package/_internal/information-49bbeed3.js.map +0 -1
  172. package/_internal/isComponent-b9762ff1.js +0 -18
  173. package/_internal/isComponent-b9762ff1.js.map +0 -1
  174. package/_internal/isComponentType-e806b848.js +0 -9
  175. package/_internal/isComponentType-e806b848.js.map +0 -1
  176. package/_internal/mergeRefs-f0d7d6ea.js +0 -30
  177. package/_internal/mergeRefs-f0d7d6ea.js.map +0 -1
  178. package/_internal/state-db358714.js +0 -130
  179. package/_internal/state-db358714.js.map +0 -1
  180. package/_internal/useBooleanState-2a3d237c.js +0 -12
  181. package/_internal/useBooleanState-2a3d237c.js.map +0 -1
  182. package/_internal/useCallbackOnEscape-0b220f9c.js +0 -62
  183. package/_internal/useCallbackOnEscape-0b220f9c.js.map +0 -1
  184. package/_internal/useDisableBodyScroll-36bd7352.js +0 -219
  185. package/_internal/useDisableBodyScroll-36bd7352.js.map +0 -1
  186. package/_internal/useDisableStateProps-69e16b7c.js +0 -36
  187. package/_internal/useDisableStateProps-69e16b7c.js.map +0 -1
  188. package/_internal/useFocusTrap-3114e5e8.js +0 -112
  189. package/_internal/useFocusTrap-3114e5e8.js.map +0 -1
  190. package/_internal/useId-3a1facc0.js +0 -18
  191. package/_internal/useId-3a1facc0.js.map +0 -1
  192. package/_internal/useRovingTabIndex-7daf0f24.js +0 -77
  193. package/_internal/useRovingTabIndex-7daf0f24.js.map +0 -1
  194. package/_internal/useTransitionVisibility-321fdbfa.js +0 -50
  195. package/_internal/useTransitionVisibility-321fdbfa.js.map +0 -1
  196. package/_internal/wrapChildrenIconWithSpaces-e6038f72.js +0 -20
  197. package/_internal/wrapChildrenIconWithSpaces-e6038f72.js.map +0 -1
@@ -1,655 +0,0 @@
1
- import React__default, { useState, useRef, useCallback } from 'react';
2
- import { f as forwardRef, c as classNames } from './forwardRef-d0e90329.js';
3
- import { getRootClassName } from '@lumx/core/js/utils/className';
4
- import { last } from '@lumx/core/js/utils/collection/last';
5
- import { onEnterPressed } from '@lumx/core/js/utils';
6
- import { V as VISUALLY_HIDDEN } from './constants-d0e3f49e.js';
7
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
- import { I as IconButton } from './IconButton-351389b0.js';
9
- import { a as mdiChevronRight, m as mdiChevronLeft } from './chevron-right-827b804a.js';
10
- import { FlexBox } from './components/flex-box-93b97715.js';
11
- import { Toolbar } from './components/toolbar-0d14efb7.js';
12
- import { Emphasis } from '@lumx/core/js/constants';
13
- import { TextField } from './components/text-field-3e1030f0.js';
14
- import { T as Text } from './index-ab520e78.js';
15
- import { a as Button } from './Button-5a87fee9.js';
16
- import { u as useBooleanState } from './useBooleanState-2a3d237c.js';
17
- import { u as useDisableStateProps } from './useDisableStateProps-69e16b7c.js';
18
- import { P as Popover } from './index-68e1b0af.js';
19
- import { H as HeadingLevelProvider } from './HeadingLevelProvider-ebdcb0c7.js';
20
- import { P as Placement } from './constants-9b714e31.js';
21
-
22
- /**
23
- * Add a number of months from a date while resetting the day to prevent month length mismatches.
24
- */
25
- function addMonthResetDay(date, monthOffset) {
26
- const newDate = new Date(date.getTime());
27
- newDate.setDate(1);
28
- newDate.setMonth(date.getMonth() + monthOffset);
29
- return newDate;
30
- }
31
-
32
- /**
33
- * Check if given date is valid.
34
- */
35
- const isDateValid = date => date instanceof Date && !Number.isNaN(date.getTime());
36
-
37
- /**
38
- * Component display name.
39
- */
40
- const COMPONENT_NAME$3 = 'DatePicker';
41
-
42
- /**
43
- * Component default class name and class prefix.
44
- */
45
- const CLASSNAME$1 = getRootClassName(COMPONENT_NAME$3);
46
-
47
- /** Get first day of week for locale from the browser API */
48
- const getFromBrowser = locale => {
49
- try {
50
- const localeMetadata = new Intl.Locale(locale.code);
51
- const {
52
- firstDay
53
- } = localeMetadata.getWeekInfo?.() || localeMetadata.weekInfo;
54
- // Sunday is represented as `0` in Date.getDay()
55
- if (firstDay === 7) return 0;
56
- return firstDay;
57
- } catch (e) {
58
- return undefined;
59
- }
60
- };
61
-
62
- /** List first day for each locale (could be removed when all browser implement Locale weekInfo) */
63
- const FIRST_DAY_FOR_LOCALES = [{
64
- // Locales with Sunday as the first day of the week
65
- localeRX: /^(af|ar-(dz|eg|sa)|bn|cy|en-(ca|us|za)|fr-ca|gd|he|hi|ja|km|ko|pt-br|te|th|ug|zh-hk)$/i,
66
- firstDay: 0
67
- }, {
68
- // Locales with Monday as the first day of the week
69
- localeRX: /^(ar-(ma|tn)|az|be|bg|bs|ca|cs|da|de|el|en-(au|gb|ie|in|nz)|eo|es|et|eu|fi|fr|fy|gl|gu|hr|ht|hu|hy|id|is|it|ka|kk|kn|lb|lt|lv|mk|mn|ms|mt|nb|nl|nn|oc|pl|pt|ro|ru|sk|sl|sq|sr|sv|ta|tr|uk|uz|vi|zh-(cn|tw))$/i,
70
- firstDay: 1
71
- }, {
72
- // Locales with Saturday as the first day of the week
73
- localeRX: /^(ar|fa-ir)$/i,
74
- firstDay: 6
75
- }];
76
-
77
- /** Find first day of week for locale from the constant */
78
- const getFromConstant = (locale, searchBy = 'code') => {
79
- // Search for locale (lang + region)
80
- for (const {
81
- localeRX,
82
- firstDay
83
- } of FIRST_DAY_FOR_LOCALES) {
84
- if (localeRX.test(locale[searchBy])) return firstDay;
85
- }
86
- // Fallback search for locale lang
87
- if (locale.code !== locale.language) {
88
- return getFromConstant(locale, 'language');
89
- }
90
- return undefined;
91
- };
92
-
93
- /**
94
- * Get first day of the week for the given locale code (language + region).
95
- */
96
- const getFirstDayOfWeek = locale => {
97
- // Get from browser API
98
- const firstDay = getFromBrowser(locale);
99
- if (firstDay !== undefined) return firstDay;
100
-
101
- // Get from constant
102
- return getFromConstant(locale);
103
- };
104
-
105
- const DAYS_PER_WEEK = 7;
106
-
107
- /**
108
- * List week days (based on locale) with the week day letter (ex: "M" for "Monday") and week day number
109
- * (0-based index starting on Sunday).
110
- */
111
- const getWeekDays = locale => {
112
- const iterDate = new Date();
113
- const firstDay = getFirstDayOfWeek(locale) ?? 1;
114
-
115
- // Go to start of the week
116
- const offset = firstDay - iterDate.getDay();
117
- iterDate.setDate(iterDate.getDate() + offset);
118
-
119
- // Iterate through the days of the week
120
- const weekDays = [];
121
- for (let i = 0; i < DAYS_PER_WEEK; i++) {
122
- // Single letter week day (ex: "M" for "Monday", "L" for "Lundi", etc.)
123
- const letter = iterDate.toLocaleDateString(locale.code, {
124
- weekday: 'narrow'
125
- });
126
- // Weed day long notation
127
- const long = iterDate.toLocaleDateString(locale.code, {
128
- weekday: 'long'
129
- });
130
- // Day number (1-based index starting on Monday)
131
- const number = iterDate.getDay();
132
- weekDays.push({
133
- letter,
134
- number,
135
- long
136
- });
137
- iterDate.setDate(iterDate.getDate() + 1);
138
- }
139
- return weekDays;
140
- };
141
-
142
- /** Up to 6 rows can appear in a month calendar => 4 weeks + 1 start of month partial week + 1 send of month partial week */
143
- const MONTH_ROW_COUNT = 6;
144
-
145
- /**
146
- * Get month calendar.
147
- * A list of weeks with days indexed by week day number
148
- */
149
- const getMonthCalendar = (locale, referenceDate = new Date(), rangeMinDate, rangeMaxDate) => {
150
- const month = referenceDate.getMonth();
151
- const iterDate = new Date(referenceDate);
152
- iterDate.setDate(1);
153
- const minDate = rangeMinDate && new Date(rangeMinDate);
154
- const maxDate = rangeMaxDate && new Date(rangeMaxDate);
155
- // Reset time to compare dates only.
156
- iterDate.setUTCHours(0, 0, 0, 0);
157
- minDate?.setUTCHours(0, 0, 0, 0);
158
- maxDate?.setUTCHours(0, 0, 0, 0);
159
- const weekDays = getWeekDays(locale);
160
- const lastDayOfWeek = last(weekDays);
161
- const weeks = [];
162
- let week = {};
163
- let rowCount = 0;
164
- while (rowCount < MONTH_ROW_COUNT) {
165
- const weekDayNumber = iterDate.getDay();
166
- const day = {
167
- date: new Date(iterDate.getTime())
168
- };
169
-
170
- // If a range is specified, check if the day is out of range.
171
- // min and max date are included within the valid range.
172
- if (minDate && iterDate < minDate || maxDate && iterDate > maxDate) {
173
- day.isOutOfRange = true;
174
- }
175
- if (iterDate.getMonth() === month) {
176
- week[weekDayNumber] = day;
177
- }
178
- if (weekDayNumber === lastDayOfWeek?.number) {
179
- weeks.push(week);
180
- rowCount += 1;
181
- week = {};
182
- }
183
- iterDate.setDate(iterDate.getDate() + 1);
184
- }
185
- if (Object.keys(week).length) weeks.push(week);
186
- return {
187
- weeks,
188
- weekDays
189
- };
190
- };
191
-
192
- /**
193
- * Check `date1` is on the same day as `date2`.
194
- */
195
- const isSameDay = (date1, date2) => isDateValid(date1) && isDateValid(date2) && date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate();
196
-
197
- /**
198
- * Get current browser locale.
199
- */
200
- const getCurrentLocale = () => navigator.languages?.[0] || navigator.language;
201
-
202
- /**
203
- * Parse locale code
204
- * @example
205
- * parseLocale('EN') // => { code: 'en', language: 'en' }
206
- * parseLocale('en_us') // => { code: 'en-US', language: 'en', region: 'US' }
207
- * parseLocale('EN-US') // => { code: 'en-US', language: 'en', region: 'US' }
208
- */
209
- function parseLocale(locale) {
210
- const [rawLanguage, rawRegion] = locale.split(/[-_]/);
211
- if (!rawLanguage) {
212
- return undefined;
213
- }
214
- const language = rawLanguage.toLowerCase();
215
- let region;
216
- let code = language;
217
- if (rawRegion) {
218
- region = rawRegion.toUpperCase();
219
- code += `-${region}`;
220
- }
221
- return {
222
- code,
223
- region,
224
- language
225
- };
226
- }
227
-
228
- /**
229
- * Returns the value from the previous render.
230
- */
231
- function usePreviousValue(value) {
232
- const prevValueRef = React__default.useRef();
233
- const prevValue = prevValueRef.current;
234
- React__default.useEffect(() => {
235
- prevValueRef.current = value;
236
- }, [value]);
237
- return prevValue;
238
- }
239
-
240
- const getYearDisplayName = locale => {
241
- let label;
242
- try {
243
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
244
- // @ts-ignore
245
- const displayNames = new Intl.DisplayNames(locale, {
246
- type: 'dateTimeField'
247
- });
248
- label = displayNames.of('year');
249
- } catch (error) {
250
- label = '';
251
- }
252
- return label;
253
- };
254
-
255
- function formatDayNumber(locale, date) {
256
- const formattedDate = date.toLocaleDateString(locale, {
257
- day: 'numeric'
258
- });
259
- if (formattedDate.match(/\d/)) return formattedDate.replace(/\D*(\d+)\D*/g, '$1');
260
- return formattedDate;
261
- }
262
-
263
- /**
264
- * Component display name.
265
- */
266
- const COMPONENT_NAME$2 = 'DatePickerControlled';
267
-
268
- /**
269
- * DatePickerControlled component.
270
- *
271
- * @param props Component props.
272
- * @param ref Component ref.
273
- * @return React element.
274
- */
275
- const DatePickerControlled = forwardRef((props, ref) => {
276
- const {
277
- locale = getCurrentLocale(),
278
- maxDate,
279
- minDate,
280
- nextButtonProps,
281
- onChange,
282
- onNextMonthChange,
283
- onPrevMonthChange,
284
- previousButtonProps,
285
- selectedMonth,
286
- todayOrSelectedDateRef,
287
- value,
288
- onMonthChange,
289
- style
290
- } = props;
291
- const {
292
- weeks,
293
- weekDays
294
- } = React__default.useMemo(() => {
295
- const localeObj = parseLocale(locale);
296
- return getMonthCalendar(localeObj, selectedMonth, minDate, maxDate);
297
- }, [locale, minDate, maxDate, selectedMonth]);
298
- const selectedYear = selectedMonth.getFullYear();
299
- const formattedYear = selectedMonth.toLocaleDateString(locale, {
300
- year: 'numeric'
301
- }).slice(0, 4);
302
- const [currentYear, setCurrentYear] = React__default.useState(String(selectedYear));
303
-
304
- // Updates month offset when validating year. Adds or removes 12 months per year when updating year value.
305
- const updateMonthOffset = React__default.useCallback(newYearValue => {
306
- const yearNumber = Number(newYearValue);
307
- if (yearNumber < 0 && yearNumber >= 9999) {
308
- return;
309
- }
310
- const previousYearNumber = selectedMonth.getFullYear();
311
- const offset = (yearNumber - previousYearNumber) * 12;
312
- onMonthChange?.(addMonthResetDay(selectedMonth, offset));
313
- }, [selectedMonth, onMonthChange]);
314
- const onYearChange = React__default.useCallback((newYearValue, _, event) => {
315
- setCurrentYear(newYearValue);
316
-
317
- // Detect if change is coming from the spin up/down arrows
318
- const inputType = event?.nativeEvent?.inputType;
319
- if (
320
- // Chrome/Safari
321
- !inputType ||
322
- // Firefox
323
- inputType === 'insertReplacementText') {
324
- updateMonthOffset(newYearValue);
325
- }
326
- }, [updateMonthOffset]);
327
- const updateYear = React__default.useCallback(() => {
328
- updateMonthOffset(currentYear);
329
- }, [updateMonthOffset, currentYear]);
330
- const updateYearOnEnterPressed = React__default.useMemo(() => onEnterPressed(updateYear), [updateYear]);
331
- const monthYear = selectedMonth.toLocaleDateString(locale, {
332
- year: 'numeric',
333
- month: 'long'
334
- });
335
-
336
- // Update current year when selected year changes
337
- React__default.useEffect(() => {
338
- setCurrentYear(String(selectedYear));
339
- }, [selectedYear]);
340
- const prevSelectedMonth = usePreviousValue(selectedMonth);
341
- const monthHasChanged = prevSelectedMonth && !isSameDay(selectedMonth, prevSelectedMonth);
342
-
343
- // Only set the aria-live after the month has changed otherwise it can get announced on mount when used in the popover dialog
344
- const [labelAriaLive, setLabelAriaLive] = React__default.useState();
345
- React__default.useEffect(() => {
346
- if (monthHasChanged) setLabelAriaLive('polite');
347
- }, [monthHasChanged]);
348
- const yearLabel = getYearDisplayName(locale);
349
- return /*#__PURE__*/jsxs("div", {
350
- ref: ref,
351
- className: `${CLASSNAME$1}`,
352
- style: style,
353
- children: [/*#__PURE__*/jsx(Toolbar, {
354
- className: `${CLASSNAME$1}__toolbar`,
355
- after: /*#__PURE__*/jsx(IconButton, {
356
- ...nextButtonProps,
357
- emphasis: Emphasis.low,
358
- icon: mdiChevronRight,
359
- onClick: onNextMonthChange
360
- }),
361
- before: /*#__PURE__*/jsx(IconButton, {
362
- ...previousButtonProps,
363
- emphasis: Emphasis.low,
364
- icon: mdiChevronLeft,
365
- onClick: onPrevMonthChange
366
- }),
367
- label: /*#__PURE__*/jsxs(Fragment, {
368
- children: [/*#__PURE__*/jsx("span", {
369
- "aria-live": labelAriaLive,
370
- className: onMonthChange ? VISUALLY_HIDDEN : '',
371
- dir: "auto",
372
- children: monthYear
373
- }), onMonthChange && /*#__PURE__*/jsx(FlexBox, {
374
- className: `${CLASSNAME$1}__month`,
375
- orientation: "horizontal",
376
- hAlign: "center",
377
- gap: "regular",
378
- vAlign: "center",
379
- dir: "auto",
380
- children: RegExp(`(.*)(${formattedYear})(.*)`).exec(monthYear)?.slice(1).filter(part => part !== '').map(part => part === formattedYear ? /*#__PURE__*/jsx(TextField, {
381
- value: currentYear,
382
- "aria-label": yearLabel,
383
- onChange: onYearChange,
384
- type: "number",
385
- max: 9999,
386
- min: 0,
387
- onBlur: updateYear,
388
- onKeyPress: updateYearOnEnterPressed,
389
- className: `${CLASSNAME$1}__year`
390
- }, "year") : /*#__PURE__*/jsx(Text, {
391
- as: "p",
392
- children: part
393
- }, part))
394
- })]
395
- })
396
- }), /*#__PURE__*/jsxs("div", {
397
- className: `${CLASSNAME$1}__calendar`,
398
- children: [/*#__PURE__*/jsx("div", {
399
- className: `${CLASSNAME$1}__week-days ${CLASSNAME$1}__days-wrapper`,
400
- children: weekDays.map(({
401
- letter,
402
- number,
403
- long
404
- }) => /*#__PURE__*/jsxs("div", {
405
- className: `${CLASSNAME$1}__day-wrapper`,
406
- children: [/*#__PURE__*/jsx("span", {
407
- className: `${CLASSNAME$1}__week-day`,
408
- "aria-hidden": true,
409
- children: letter.toLocaleUpperCase()
410
- }), /*#__PURE__*/jsx("span", {
411
- className: "visually-hidden",
412
- children: long
413
- })]
414
- }, number))
415
- }), /*#__PURE__*/jsx("div", {
416
- className: `${CLASSNAME$1}__month-days ${CLASSNAME$1}__days-wrapper`,
417
- children: weeks.flatMap((week, weekIndex) => {
418
- return weekDays.map((weekDay, dayIndex) => {
419
- const {
420
- date,
421
- isOutOfRange
422
- } = week[weekDay.number] || {};
423
- const key = `${weekIndex}-${dayIndex}`;
424
- const isToday = !isOutOfRange && date && isSameDay(date, new Date());
425
- const isSelected = date && value && isSameDay(value, date);
426
- return /*#__PURE__*/jsx("div", {
427
- className: `${CLASSNAME$1}__day-wrapper`,
428
- children: date && /*#__PURE__*/jsxs(Button, {
429
- ref: isSelected || !value && isToday ? todayOrSelectedDateRef : null,
430
- className: classNames(`${CLASSNAME$1}__month-day`, {
431
- [`${CLASSNAME$1}__month-day--is-today`]: isToday
432
- }),
433
- disabled: isOutOfRange,
434
- isSelected: isSelected,
435
- emphasis: "low",
436
- onClick: () => onChange(date),
437
- children: [/*#__PURE__*/jsx("span", {
438
- "aria-hidden": true,
439
- children: formatDayNumber(locale, date)
440
- }), /*#__PURE__*/jsx("span", {
441
- className: VISUALLY_HIDDEN,
442
- children: date.toLocaleDateString(locale, {
443
- day: 'numeric',
444
- month: 'long',
445
- year: 'numeric'
446
- })
447
- })]
448
- })
449
- }, key);
450
- });
451
- })
452
- })]
453
- })]
454
- });
455
- });
456
- DatePickerControlled.displayName = COMPONENT_NAME$2;
457
- DatePickerControlled.className = CLASSNAME$1;
458
-
459
- /**
460
- * DatePicker component.
461
- *
462
- * @param props Component props.
463
- * @param ref Component ref.
464
- * @return React element.
465
- */
466
- const DatePicker = forwardRef((props, ref) => {
467
- const {
468
- defaultMonth,
469
- locale,
470
- value,
471
- onChange,
472
- ...forwardedProps
473
- } = props;
474
- let referenceDate = value || defaultMonth || new Date();
475
- if (!isDateValid(referenceDate)) {
476
- // eslint-disable-next-line no-console
477
- console.warn(`[@lumx/react/DatePicker] Invalid date provided ${referenceDate}`);
478
- referenceDate = new Date();
479
- }
480
- const [selectedMonth, setSelectedMonth] = useState(referenceDate);
481
- const setPrevMonth = () => setSelectedMonth(current => addMonthResetDay(current, -1));
482
- const setNextMonth = () => setSelectedMonth(current => addMonthResetDay(current, +1));
483
- const onDatePickerChange = newDate => {
484
- onChange(newDate);
485
- };
486
- return /*#__PURE__*/jsx(DatePickerControlled, {
487
- ref: ref,
488
- ...forwardedProps,
489
- defaultMonth: defaultMonth,
490
- locale: locale,
491
- value: value,
492
- onPrevMonthChange: setPrevMonth,
493
- onNextMonthChange: setNextMonth,
494
- selectedMonth: selectedMonth,
495
- onChange: onDatePickerChange,
496
- onMonthChange: setSelectedMonth
497
- });
498
- });
499
- DatePicker.displayName = COMPONENT_NAME$3;
500
- DatePicker.className = CLASSNAME$1;
501
-
502
- /**
503
- * Component display name.
504
- */
505
- const COMPONENT_NAME$1 = 'DatePickerField';
506
-
507
- /**
508
- * DatePickerField component.
509
- *
510
- * @param props Component props.
511
- * @param ref Component ref.
512
- * @return React element.
513
- */
514
- const DatePickerField = forwardRef((props, ref) => {
515
- const {
516
- disabledStateProps,
517
- otherProps
518
- } = useDisableStateProps(props);
519
- const {
520
- defaultMonth,
521
- locale = getCurrentLocale(),
522
- maxDate,
523
- minDate,
524
- name,
525
- nextButtonProps,
526
- onChange,
527
- previousButtonProps,
528
- value,
529
- ...forwardedProps
530
- } = otherProps;
531
- const anchorRef = useRef(null);
532
- const [isOpen, close,, toggleOpen] = useBooleanState(false);
533
- const handleKeyboardNav = useCallback(evt => {
534
- if (evt.key === 'Enter' || evt.key === ' ') {
535
- toggleOpen();
536
- }
537
- }, [toggleOpen]);
538
- const onTextFieldChange = useCallback((textFieldValue, textFieldName, event) => {
539
- if (!textFieldValue) {
540
- onChange(undefined, textFieldName, event);
541
- }
542
- }, [onChange]);
543
- const onDatePickerChange = useCallback(newDate => {
544
- onChange(newDate, name);
545
- close();
546
- }, [name, onChange, close]);
547
-
548
- // Format date for text field
549
- const textFieldValue = value?.toLocaleDateString(locale, {
550
- year: 'numeric',
551
- month: 'long',
552
- day: 'numeric'
553
- }) || '';
554
- const todayOrSelectedDateRef = React__default.useRef(null);
555
- return /*#__PURE__*/jsxs(Fragment, {
556
- children: [/*#__PURE__*/jsx(TextField, {
557
- ref: ref,
558
- ...forwardedProps,
559
- name: name,
560
- forceFocusStyle: isOpen,
561
- textFieldRef: anchorRef,
562
- value: textFieldValue,
563
- onClick: toggleOpen,
564
- onChange: onTextFieldChange,
565
- onKeyPress: handleKeyboardNav,
566
- ...disabledStateProps,
567
- readOnly: true,
568
- "aria-haspopup": "dialog"
569
- }), isOpen ? /*#__PURE__*/jsx(PopoverDialog
570
- // Can't use `aria-labelledby` targeting the text field label element (not correctly read on some screen readers)
571
- , {
572
- "aria-label": forwardedProps.label,
573
- anchorRef: anchorRef,
574
- placement: Placement.BOTTOM_START,
575
- isOpen: isOpen,
576
- onClose: close
577
- // On open, focus the selected day or today
578
- ,
579
- focusElement: todayOrSelectedDateRef,
580
- children: /*#__PURE__*/jsx(DatePicker, {
581
- locale: locale,
582
- maxDate: maxDate,
583
- minDate: minDate,
584
- value: value,
585
- todayOrSelectedDateRef: todayOrSelectedDateRef,
586
- onChange: onDatePickerChange,
587
- defaultMonth: defaultMonth,
588
- nextButtonProps: nextButtonProps,
589
- previousButtonProps: previousButtonProps
590
- })
591
- }) : null]
592
- });
593
- });
594
- DatePickerField.displayName = COMPONENT_NAME$1;
595
-
596
- /**
597
- * Component display name.
598
- */
599
- const COMPONENT_NAME = 'PopoverDialog';
600
-
601
- /**
602
- * Component default class name and class prefix.
603
- */
604
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
605
-
606
- /**
607
- * Component default props.
608
- */
609
- const DEFAULT_PROPS = {};
610
-
611
- /**
612
- * PopoverDialog component.
613
- * Defines a popover that acts like a dialog
614
- * * Has a dialog aria role
615
- * * Sets a focus trap within the popover
616
- * * Closes on click away and escape.
617
- */
618
- const PopoverDialog = forwardRef((props, ref) => {
619
- const {
620
- children,
621
- isOpen,
622
- focusElement,
623
- 'aria-label': ariaLabel,
624
- label = ariaLabel,
625
- className,
626
- ...forwardedProps
627
- } = props;
628
- return /*#__PURE__*/jsx(Popover, {
629
- ...forwardedProps,
630
- ref: ref,
631
- className: classNames(className, CLASSNAME),
632
- role: "dialog",
633
- "aria-modal": "true"
634
- /**
635
- * If a label is set, set as aria-label.
636
- * If it is undefined, the label can be set using the `aria-label` and `aria-labelledby` props
637
- */,
638
- "aria-label": label,
639
- isOpen: isOpen,
640
- focusElement: focusElement,
641
- closeOnClickAway: true,
642
- closeOnEscape: true,
643
- withFocusTrap: true,
644
- children: /*#__PURE__*/jsx(HeadingLevelProvider, {
645
- level: 2,
646
- children: children
647
- })
648
- });
649
- });
650
- PopoverDialog.displayName = COMPONENT_NAME;
651
- PopoverDialog.className = CLASSNAME;
652
- PopoverDialog.defaultProps = DEFAULT_PROPS;
653
-
654
- export { DatePicker as D, PopoverDialog as P, DatePickerControlled as a, DatePickerField as b };
655
- //# sourceMappingURL=PopoverDialog-2e7b9ed5.js.map