@lumx/react 3.10.1-alpha.1 → 3.10.1-alpha.2

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 (237) hide show
  1. package/_internal/17c3ea1d.js +137 -0
  2. package/_internal/17c3ea1d.js.map +1 -0
  3. package/_internal/1da25128.js +411 -0
  4. package/_internal/1da25128.js.map +1 -0
  5. package/_internal/230173a8.js +13 -0
  6. package/_internal/230173a8.js.map +1 -0
  7. package/_internal/23bdba2d.js +71 -0
  8. package/_internal/23bdba2d.js.map +1 -0
  9. package/_internal/26926e5c.d.ts +36 -0
  10. package/_internal/2a3d237c.js +12 -0
  11. package/_internal/2a3d237c.js.map +1 -0
  12. package/_internal/2c5dbb03.js +26 -0
  13. package/_internal/2c5dbb03.js.map +1 -0
  14. package/_internal/2e2abe51.js +2154 -0
  15. package/_internal/2e2abe51.js.map +1 -0
  16. package/_internal/31490c59.d.ts +167 -0
  17. package/_internal/3181f000.js +14 -0
  18. package/_internal/3181f000.js.map +1 -0
  19. package/_internal/35f100be.d.ts +104 -0
  20. package/_internal/36bd7352.js +219 -0
  21. package/_internal/36bd7352.js.map +1 -0
  22. package/_internal/3a1facc0.js +18 -0
  23. package/_internal/3a1facc0.js.map +1 -0
  24. package/_internal/4c20d932.js +89 -0
  25. package/_internal/4c20d932.js.map +1 -0
  26. package/_internal/4c28d012.js +305 -0
  27. package/_internal/4c28d012.js.map +1 -0
  28. package/_internal/4cd0bf32.js +160 -0
  29. package/_internal/4cd0bf32.js.map +1 -0
  30. package/_internal/4daccdd5.js +25 -0
  31. package/_internal/4daccdd5.js.map +1 -0
  32. package/_internal/524b1d04.js +64 -0
  33. package/_internal/524b1d04.js.map +1 -0
  34. package/_internal/53c94227.js +123 -0
  35. package/_internal/53c94227.js.map +1 -0
  36. package/_internal/54d9ded5.js +418 -0
  37. package/_internal/54d9ded5.js.map +1 -0
  38. package/_internal/56aec41b.js +652 -0
  39. package/_internal/56aec41b.js.map +1 -0
  40. package/_internal/5720caf5.js +124 -0
  41. package/_internal/5720caf5.js.map +1 -0
  42. package/_internal/646f0db6.js +113 -0
  43. package/_internal/646f0db6.js.map +1 -0
  44. package/_internal/6cc8dca8.d.ts +22 -0
  45. package/_internal/7f022f8c.d.ts +34 -0
  46. package/_internal/{index.d.ts → 8d67e1e3.d.ts} +1 -1
  47. package/_internal/b8f2948d.js +691 -0
  48. package/_internal/b8f2948d.js.map +1 -0
  49. package/_internal/bc28d510.js +784 -0
  50. package/_internal/bc28d510.js.map +1 -0
  51. package/_internal/c68d24e4.js +145 -0
  52. package/_internal/c68d24e4.js.map +1 -0
  53. package/_internal/c6c99f76.js +105 -0
  54. package/_internal/c6c99f76.js.map +1 -0
  55. package/_internal/cae46566.js +65 -0
  56. package/_internal/cae46566.js.map +1 -0
  57. package/_internal/components/alert-dialog/index.ts-623b1ed3.d.ts +37 -0
  58. package/_internal/components/alert-dialog/index.ts-f83bd6ef.js +148 -0
  59. package/_internal/components/alert-dialog/index.ts-f83bd6ef.js.map +1 -0
  60. package/_internal/components/autocomplete/index.ts-3f8f125c.js +264 -0
  61. package/_internal/components/autocomplete/index.ts-3f8f125c.js.map +1 -0
  62. package/_internal/components/autocomplete/index.ts-8d6b123f.d.ts +201 -0
  63. package/_internal/components/avatar/index.ts-93ee0ea9.js +89 -0
  64. package/_internal/components/avatar/index.ts-93ee0ea9.js.map +1 -0
  65. package/_internal/components/avatar/index.ts-f92852b4.d.ts +43 -0
  66. package/_internal/components/badge/index.ts-2d7700ef.d.ts +30 -0
  67. package/_internal/components/badge/index.ts-6753d67f.js +88 -0
  68. package/_internal/components/badge/index.ts-6753d67f.js.map +1 -0
  69. package/_internal/components/button/index.ts-031307ce.js +51 -0
  70. package/_internal/components/button/index.ts-031307ce.js.map +1 -0
  71. package/_internal/components/button/index.ts-b29e26a4.d.ts +22 -0
  72. package/_internal/components/checkbox/index.ts-a33166d7.js +127 -0
  73. package/_internal/components/checkbox/index.ts-a33166d7.js.map +1 -0
  74. package/_internal/components/checkbox/index.ts-f82358ff.d.ts +38 -0
  75. package/_internal/components/chip/index.ts-4a91f1a7.d.ts +68 -0
  76. package/_internal/components/chip/index.ts-a2b5b771.js +110 -0
  77. package/_internal/components/chip/index.ts-a2b5b771.js.map +1 -0
  78. package/_internal/components/comment-block/index.ts-58fa051a.js +121 -0
  79. package/_internal/components/comment-block/index.ts-58fa051a.js.map +1 -0
  80. package/_internal/components/comment-block/index.ts-8cfa5af0.d.ts +67 -0
  81. package/_internal/components/date-picker/index.ts-145262d5.js +2 -0
  82. package/_internal/components/date-picker/index.ts-145262d5.js.map +1 -0
  83. package/_internal/components/date-picker/index.ts-70a34fa7.d.ts +95 -0
  84. package/_internal/components/dialog/index.ts-ea044db2.js +224 -0
  85. package/_internal/components/dialog/index.ts-ea044db2.js.map +1 -0
  86. package/_internal/components/dialog/index.ts-eca28654.d.ts +55 -0
  87. package/_internal/components/divider/index.ts-4a56db75.js +55 -0
  88. package/_internal/components/divider/index.ts-4a56db75.js.map +1 -0
  89. package/_internal/components/divider/index.ts-b011d8ca.d.ts +18 -0
  90. package/_internal/components/drag-handle/index.ts-0aebf92f.js +54 -0
  91. package/_internal/components/drag-handle/index.ts-0aebf92f.js.map +1 -0
  92. package/_internal/components/drag-handle/index.ts-3ab31dd1.d.ts +18 -0
  93. package/_internal/components/dropdown/index.ts-2a17db51.js +154 -0
  94. package/_internal/components/dropdown/index.ts-2a17db51.js.map +1 -0
  95. package/_internal/components/dropdown/index.ts-b648a15c.d.ts +87 -0
  96. package/_internal/components/expansion-panel/index.ts-69f09f5b.d.ts +38 -0
  97. package/_internal/components/expansion-panel/index.ts-fae3762e.js +143 -0
  98. package/_internal/components/expansion-panel/index.ts-fae3762e.js.map +1 -0
  99. package/_internal/components/flag/index.ts-8dcd685b.js +56 -0
  100. package/_internal/components/flag/index.ts-8dcd685b.js.map +1 -0
  101. package/_internal/components/flag/index.ts-fda89adb.d.ts +23 -0
  102. package/_internal/components/flex-box/index.ts-87f2b58d.d.ts +43 -0
  103. package/_internal/components/flex-box/index.ts-c216e957.js +60 -0
  104. package/_internal/components/flex-box/index.ts-c216e957.js.map +1 -0
  105. package/_internal/components/generic-block/index.ts-999a62a4.js +115 -0
  106. package/_internal/components/generic-block/index.ts-999a62a4.js.map +1 -0
  107. package/_internal/components/generic-block/index.ts-cd3b0e21.d.ts +106 -0
  108. package/_internal/components/grid/index.ts-67e0694f.d.ts +50 -0
  109. package/_internal/components/grid/index.ts-fdf1b306.js +113 -0
  110. package/_internal/components/grid/index.ts-fdf1b306.js.map +1 -0
  111. package/_internal/components/grid-column/index.ts-97c61cbe.js +64 -0
  112. package/_internal/components/grid-column/index.ts-97c61cbe.js.map +1 -0
  113. package/_internal/components/grid-column/index.ts-c89e1c18.d.ts +31 -0
  114. package/_internal/components/heading/index.ts-0179e9a9.js +112 -0
  115. package/_internal/components/heading/index.ts-0179e9a9.js.map +1 -0
  116. package/_internal/components/heading/index.ts-587579e8.d.ts +37 -0
  117. package/_internal/components/icon/index.ts-740ca1de.js +2 -0
  118. package/_internal/components/icon/index.ts-740ca1de.js.map +1 -0
  119. package/_internal/components/icon/index.ts-b3fa5e15.d.ts +34 -0
  120. package/_internal/components/image-block/index.ts-36b3828f.d.ts +49 -0
  121. package/_internal/components/image-block/index.ts-ef5e2e7d.js +111 -0
  122. package/_internal/components/image-block/index.ts-ef5e2e7d.js.map +1 -0
  123. package/_internal/components/image-lightbox/index.ts-137f85a8.js +765 -0
  124. package/_internal/components/image-lightbox/index.ts-137f85a8.js.map +1 -0
  125. package/_internal/components/image-lightbox/index.ts-2cb92d18.d.ts +75 -0
  126. package/_internal/components/inline-list/index.ts-033dd358.js +76 -0
  127. package/_internal/components/inline-list/index.ts-033dd358.js.map +1 -0
  128. package/_internal/components/inline-list/index.ts-e1c8a3ff.d.ts +34 -0
  129. package/_internal/components/input-helper/index.ts-32a9ca90.d.ts +22 -0
  130. package/_internal/components/input-helper/index.ts-ab3a1ef5.js +75 -0
  131. package/_internal/components/input-helper/index.ts-ab3a1ef5.js.map +1 -0
  132. package/_internal/components/input-label/index.ts-86f2ea41.d.ts +24 -0
  133. package/_internal/components/input-label/index.ts-d6ca5569.js +60 -0
  134. package/_internal/components/input-label/index.ts-d6ca5569.js.map +1 -0
  135. package/_internal/components/lightbox/index.ts-5370e8e6.d.ts +36 -0
  136. package/_internal/components/lightbox/index.ts-7a16cdc7.js +149 -0
  137. package/_internal/components/lightbox/index.ts-7a16cdc7.js.map +1 -0
  138. package/_internal/components/link/index.ts-26435006.d.ts +37 -0
  139. package/_internal/components/link/index.ts-d04f4e53.js +120 -0
  140. package/_internal/components/link/index.ts-d04f4e53.js.map +1 -0
  141. package/_internal/components/link-preview/index.ts-e560a274.d.ts +36 -0
  142. package/_internal/components/link-preview/index.ts-fee89f66.js +109 -0
  143. package/_internal/components/link-preview/index.ts-fee89f66.js.map +1 -0
  144. package/_internal/components/list/index.ts-ab57902e.d.ts +118 -0
  145. package/_internal/components/list/index.ts-f3101625.js +86 -0
  146. package/_internal/components/list/index.ts-f3101625.js.map +1 -0
  147. package/_internal/components/message/index.ts-041cf0cb.js +97 -0
  148. package/_internal/components/message/index.ts-041cf0cb.js.map +1 -0
  149. package/_internal/components/message/index.ts-2d38e0ea.d.ts +37 -0
  150. package/_internal/components/mosaic/index.ts-232d5aed.d.ts +23 -0
  151. package/_internal/components/mosaic/index.ts-d2128cd3.js +94 -0
  152. package/_internal/components/mosaic/index.ts-d2128cd3.js.map +1 -0
  153. package/_internal/components/navigation/index.ts-6d8bea53.d.ts +58 -0
  154. package/_internal/components/navigation/index.ts-e8dc0a7f.js +222 -0
  155. package/_internal/components/navigation/index.ts-e8dc0a7f.js.map +1 -0
  156. package/_internal/components/notification/index.ts-235fd340.js +140 -0
  157. package/_internal/components/notification/index.ts-235fd340.js.map +1 -0
  158. package/_internal/components/notification/index.ts-bb3f03f6.d.ts +34 -0
  159. package/_internal/components/popover/index.ts-2f17a9b6.js +3 -0
  160. package/_internal/components/popover/index.ts-2f17a9b6.js.map +1 -0
  161. package/_internal/components/popover/index.ts-e3b4ff19.d.ts +66 -0
  162. package/_internal/components/post-block/index.ts-0acb9bb4.js +101 -0
  163. package/_internal/components/post-block/index.ts-0acb9bb4.js.map +1 -0
  164. package/_internal/components/post-block/index.ts-9b8ff90b.d.ts +41 -0
  165. package/_internal/components/progress/index.ts-2a713859.js +189 -0
  166. package/_internal/components/progress/index.ts-2a713859.js.map +1 -0
  167. package/_internal/components/progress/index.ts-dfdfa5fb.d.ts +60 -0
  168. package/_internal/components/progress-tracker/index.ts-2649f756.js +312 -0
  169. package/_internal/components/progress-tracker/index.ts-2649f756.js.map +1 -0
  170. package/_internal/components/progress-tracker/index.ts-95320f32.d.ts +101 -0
  171. package/_internal/components/radio-button/index.ts-5eaab4cf.d.ts +54 -0
  172. package/_internal/components/radio-button/index.ts-b4dfb2a0.js +150 -0
  173. package/_internal/components/radio-button/index.ts-b4dfb2a0.js.map +1 -0
  174. package/_internal/components/select/index.ts-a65e3507.d.ts +91 -0
  175. package/_internal/components/select/index.ts-e8fad28b.js +257 -0
  176. package/_internal/components/select/index.ts-e8fad28b.js.map +1 -0
  177. package/_internal/components/side-navigation/index.ts-3f5f3785.d.ts +60 -0
  178. package/_internal/components/side-navigation/index.ts-c9a5fc3e.js +184 -0
  179. package/_internal/components/side-navigation/index.ts-c9a5fc3e.js.map +1 -0
  180. package/_internal/components/skeleton/index.ts-a7daefac.d.ts +75 -0
  181. package/_internal/components/skeleton/index.ts-ffc995af.js +179 -0
  182. package/_internal/components/skeleton/index.ts-ffc995af.js.map +1 -0
  183. package/_internal/components/slider/index.ts-24a0d598.d.ts +52 -0
  184. package/_internal/components/slider/index.ts-72aadf4c.js +308 -0
  185. package/_internal/components/slider/index.ts-72aadf4c.js.map +1 -0
  186. package/_internal/components/slideshow/index.ts-c99f2892.js +151 -0
  187. package/_internal/components/slideshow/index.ts-c99f2892.js.map +1 -0
  188. package/_internal/components/slideshow/index.ts-e49462c6.d.ts +25 -0
  189. package/_internal/components/switch/index.ts-207ba52b.d.ts +34 -0
  190. package/_internal/components/switch/index.ts-542e6eaf.js +115 -0
  191. package/_internal/components/switch/index.ts-542e6eaf.js.map +1 -0
  192. package/_internal/components/table/index.ts-905ce390.js +310 -0
  193. package/_internal/components/table/index.ts-905ce390.js.map +1 -0
  194. package/_internal/components/table/index.ts-c4f39b2d.d.ts +108 -0
  195. package/_internal/components/tabs/index.ts-713119f4.js +289 -0
  196. package/_internal/components/tabs/index.ts-713119f4.js.map +1 -0
  197. package/_internal/components/tabs/index.ts-dbfc48d9.d.ts +106 -0
  198. package/_internal/components/text/index.ts-6afbe8cd.js +2 -0
  199. package/_internal/components/text/index.ts-6afbe8cd.js.map +1 -0
  200. package/_internal/components/text/index.ts-8a812048.d.ts +53 -0
  201. package/_internal/components/text-field/index.ts-92e6b3b3.d.ts +77 -0
  202. package/_internal/components/text-field/index.ts-c3be8563.js +341 -0
  203. package/_internal/components/text-field/index.ts-c3be8563.js.map +1 -0
  204. package/_internal/components/thumbnail/index.ts-16d7b403.js +40 -0
  205. package/_internal/components/thumbnail/index.ts-16d7b403.js.map +1 -0
  206. package/_internal/components/thumbnail/index.ts-1b6c0b48.d.ts +8 -0
  207. package/_internal/components/toolbar/index.ts-813b902e.js +63 -0
  208. package/_internal/components/toolbar/index.ts-813b902e.js.map +1 -0
  209. package/_internal/components/toolbar/index.ts-9f5129d1.d.ts +24 -0
  210. package/_internal/components/tooltip/index.ts-905c847c.js +322 -0
  211. package/_internal/components/tooltip/index.ts-905c847c.js.map +1 -0
  212. package/_internal/components/tooltip/index.ts-c6931e9e.d.ts +35 -0
  213. package/_internal/components/uploader/index.ts-31f21c2a.js +132 -0
  214. package/_internal/components/uploader/index.ts-31f21c2a.js.map +1 -0
  215. package/_internal/components/uploader/index.ts-c3ccba98.d.ts +51 -0
  216. package/_internal/components/user-block/index.ts-18c58e19.d.ts +50 -0
  217. package/_internal/components/user-block/index.ts-d43e5f3c.js +136 -0
  218. package/_internal/components/user-block/index.ts-d43e5f3c.js.map +1 -0
  219. package/_internal/dc3e28c8.d.ts +38 -0
  220. package/_internal/f39a1ba4.js +73 -0
  221. package/_internal/f39a1ba4.js.map +1 -0
  222. package/_internal/f3e77e3e.js +22 -0
  223. package/_internal/f3e77e3e.js.map +1 -0
  224. package/_internal/f502ab30.js +78 -0
  225. package/_internal/f502ab30.js.map +1 -0
  226. package/_internal/f52adbae.js +36 -0
  227. package/_internal/f52adbae.js.map +1 -0
  228. package/_internal/f57e1239.js +205 -0
  229. package/_internal/f57e1239.js.map +1 -0
  230. package/_internal/f5ff1aa4.d.ts +47 -0
  231. package/_internal/fb975afe.js +52 -0
  232. package/_internal/fb975afe.js.map +1 -0
  233. package/index.d.ts +66 -3023
  234. package/index.js +64 -14536
  235. package/index.js.map +1 -1
  236. package/package.json +3 -3
  237. package/utils/index.d.ts +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"56aec41b.js","sources":["../../src/utils/date/addMonthResetDay.ts","../../src/utils/date/isDateValid.ts","../../src/components/date-picker/constants.ts","../../src/utils/date/getFirstDayOfWeek.ts","../../src/utils/date/getWeekDays.ts","../../src/utils/date/getMonthCalendar.ts","../../src/utils/date/isSameDay.ts","../../src/utils/locale/getCurrentLocale.ts","../../src/utils/locale/parseLocale.ts","../../src/hooks/usePreviousValue.ts","../../src/utils/date/getYearDisplayName.ts","../../src/utils/date/formatDayNumber.ts","../../src/components/date-picker/DatePickerControlled.tsx","../../src/components/date-picker/DatePicker.tsx","../../src/components/date-picker/DatePickerField.tsx","../../src/components/popover-dialog/PopoverDialog.tsx"],"sourcesContent":["/**\n * Add a number of months from a date while resetting the day to prevent month length mismatches.\n */\nexport function addMonthResetDay(date: Date, monthOffset: number) {\n const newDate = new Date(date.getTime());\n newDate.setDate(1);\n newDate.setMonth(date.getMonth() + monthOffset);\n return newDate;\n}\n","/**\n * Check if given date is valid.\n */\nexport const isDateValid = (date?: Date) => date instanceof Date && !Number.isNaN(date.getTime());\n","import { getRootClassName } from '@lumx/react/utils/className';\n\n/**\n * Component display name.\n */\nexport const COMPONENT_NAME = 'DatePicker';\n\n/**\n * Component default class name and class prefix.\n */\nexport const CLASSNAME = getRootClassName(COMPONENT_NAME);\n","import { Locale } from '@lumx/react/utils/locale/types';\n\n/** Get first day of week for locale from the browser API */\nexport const getFromBrowser = (locale: Locale): number | undefined => {\n try {\n const localeMetadata = new Intl.Locale(locale.code) as any;\n const { firstDay } = localeMetadata.getWeekInfo?.() || localeMetadata.weekInfo;\n // Sunday is represented as `0` in Date.getDay()\n if (firstDay === 7) return 0;\n return firstDay;\n } catch (e) {\n return undefined;\n }\n};\n\n/** List first day for each locale (could be removed when all browser implement Locale weekInfo) */\nconst FIRST_DAY_FOR_LOCALES = [\n {\n // Locales with Sunday as the first day of the week\n 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,\n firstDay: 0,\n },\n {\n // Locales with Monday as the first day of the week\n localeRX:\n /^(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,\n firstDay: 1,\n },\n {\n // Locales with Saturday as the first day of the week\n localeRX: /^(ar|fa-ir)$/i,\n firstDay: 6,\n },\n];\n\n/** Find first day of week for locale from the constant */\nconst getFromConstant = (locale: Locale, searchBy: keyof Locale = 'code'): number | undefined => {\n // Search for locale (lang + region)\n for (const { localeRX, firstDay } of FIRST_DAY_FOR_LOCALES) {\n if (localeRX.test(locale[searchBy] as string)) return firstDay;\n }\n // Fallback search for locale lang\n if (locale.code !== locale.language) {\n return getFromConstant(locale, 'language');\n }\n return undefined;\n};\n\n/**\n * Get first day of the week for the given locale code (language + region).\n */\nexport const getFirstDayOfWeek = (locale: Locale): number | undefined => {\n // Get from browser API\n const firstDay = getFromBrowser(locale);\n if (firstDay !== undefined) return firstDay;\n\n // Get from constant\n return getFromConstant(locale);\n};\n","import { Locale } from '@lumx/react/utils/locale/types';\nimport { getFirstDayOfWeek } from './getFirstDayOfWeek';\n\nexport type WeekDayInfo = { letter: string; number: number; long: string };\n\nexport const DAYS_PER_WEEK = 7;\n\n/**\n * List week days (based on locale) with the week day letter (ex: \"M\" for \"Monday\") and week day number\n * (0-based index starting on Sunday).\n */\nexport const getWeekDays = (locale: Locale): Array<WeekDayInfo> => {\n const iterDate = new Date();\n const firstDay = getFirstDayOfWeek(locale) ?? 1;\n\n // Go to start of the week\n const offset = firstDay - iterDate.getDay();\n iterDate.setDate(iterDate.getDate() + offset);\n\n // Iterate through the days of the week\n const weekDays: Array<WeekDayInfo> = [];\n for (let i = 0; i < DAYS_PER_WEEK; i++) {\n // Single letter week day (ex: \"M\" for \"Monday\", \"L\" for \"Lundi\", etc.)\n const letter = iterDate.toLocaleDateString(locale.code, { weekday: 'narrow' });\n // Weed day long notation\n const long = iterDate.toLocaleDateString(locale.code, { weekday: 'long' });\n // Day number (1-based index starting on Monday)\n const number = iterDate.getDay();\n\n weekDays.push({ letter, number, long });\n iterDate.setDate(iterDate.getDate() + 1);\n }\n return weekDays;\n};\n","import last from 'lodash/last';\n\nimport { getWeekDays, WeekDayInfo } from '@lumx/react/utils/date/getWeekDays';\nimport { Locale } from '@lumx/react/utils/locale/types';\n\ntype AnnotatedDay = { date: Date; isOutOfRange?: boolean };\ntype AnnotatedWeek = Partial<Record<number, AnnotatedDay>>;\n\ninterface MonthCalendar {\n weekDays: Array<WeekDayInfo>;\n weeks: Array<AnnotatedWeek>;\n}\n\n/** Up to 6 rows can appear in a month calendar => 4 weeks + 1 start of month partial week + 1 send of month partial week */\nconst MONTH_ROW_COUNT = 6;\n\n/**\n * Get month calendar.\n * A list of weeks with days indexed by week day number\n */\nexport const getMonthCalendar = (\n locale: Locale,\n referenceDate = new Date(),\n rangeMinDate?: Date,\n rangeMaxDate?: Date,\n): MonthCalendar => {\n const month = referenceDate.getMonth();\n const iterDate = new Date(referenceDate.getTime());\n iterDate.setDate(1);\n\n const weekDays = getWeekDays(locale);\n const lastDayOfWeek = last(weekDays) as WeekDayInfo;\n\n const weeks: Array<AnnotatedWeek> = [];\n let week: AnnotatedWeek = {};\n let rowCount = 0;\n while (rowCount < MONTH_ROW_COUNT) {\n const weekDayNumber = iterDate.getDay();\n const day: AnnotatedDay = { date: new Date(iterDate.getTime()) };\n\n // If a range is specified, check if the day is out of range.\n if ((rangeMinDate && iterDate <= rangeMinDate) || (rangeMaxDate && iterDate >= rangeMaxDate)) {\n day.isOutOfRange = true;\n }\n\n if (iterDate.getMonth() === month) {\n week[weekDayNumber] = day;\n }\n\n if (weekDayNumber === lastDayOfWeek.number) {\n weeks.push(week);\n rowCount += 1;\n week = {};\n }\n iterDate.setDate(iterDate.getDate() + 1);\n }\n if (Object.keys(week).length) weeks.push(week);\n\n return { weeks, weekDays };\n};\n","import { isDateValid } from '@lumx/react/utils/date/isDateValid';\n\n/**\n * Check `date1` is on the same day as `date2`.\n */\nexport const isSameDay = (date1: Date, date2: Date) =>\n isDateValid(date1) &&\n isDateValid(date2) &&\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n","/**\n * Get current browser locale.\n */\nexport const getCurrentLocale = (): string => navigator.languages?.[0] || navigator.language;\n","import { Locale } from '@lumx/react/utils/locale/types';\n\n/**\n * Parse locale code\n * @example\n * parseLocale('EN') // => { code: 'en', language: 'en' }\n * parseLocale('en_us') // => { code: 'en-US', language: 'en', region: 'US' }\n * parseLocale('EN-US') // => { code: 'en-US', language: 'en', region: 'US' }\n */\nexport function parseLocale(locale: string): Locale | undefined {\n const [rawLanguage, rawRegion] = locale.split(/[-_]/);\n if (!rawLanguage) {\n return undefined;\n }\n const language = rawLanguage.toLowerCase();\n let region: string | undefined;\n let code = language;\n if (rawRegion) {\n region = rawRegion.toUpperCase();\n code += `-${region}`;\n }\n return { code, region, language };\n}\n","import React from 'react';\n\n/**\n * Returns the value from the previous render.\n */\nexport function usePreviousValue<V>(value: V): V | undefined {\n const prevValueRef = React.useRef<V>();\n const prevValue = prevValueRef.current;\n React.useEffect(() => {\n prevValueRef.current = value;\n }, [value]);\n return prevValue;\n}\n","export const getYearDisplayName = (locale: string) => {\n let label: string | undefined;\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const displayNames = new Intl.DisplayNames(locale, { type: 'dateTimeField' });\n label = displayNames.of('year');\n } catch (error) {\n label = '';\n }\n return label;\n};\n","export function formatDayNumber(locale: string, date: Date): string {\n const formattedDate = date.toLocaleDateString(locale, { day: 'numeric' });\n if (formattedDate.match(/\\d/)) return formattedDate.replace(/\\D*(\\d+)\\D*/g, '$1');\n return formattedDate;\n}\n","import React, { KeyboardEventHandler } from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n Button,\n DatePickerProps,\n Emphasis,\n FlexBox,\n IconButton,\n Text,\n TextField,\n TextFieldProps,\n Toolbar,\n} from '@lumx/react';\nimport { mdiChevronLeft, mdiChevronRight } from '@lumx/icons';\nimport { getMonthCalendar } from '@lumx/react/utils/date/getMonthCalendar';\nimport { isSameDay } from '@lumx/react/utils/date/isSameDay';\nimport { getCurrentLocale } from '@lumx/react/utils/locale/getCurrentLocale';\nimport { parseLocale } from '@lumx/react/utils/locale/parseLocale';\nimport { Locale } from '@lumx/react/utils/locale/types';\nimport { usePreviousValue } from '@lumx/react/hooks/usePreviousValue';\nimport { getYearDisplayName } from '@lumx/react/utils/date/getYearDisplayName';\nimport { onEnterPressed } from '@lumx/react/utils/event';\nimport { addMonthResetDay } from '@lumx/react/utils/date/addMonthResetDay';\nimport { formatDayNumber } from '@lumx/react/utils/date/formatDayNumber';\nimport { VISUALLY_HIDDEN } from '@lumx/react/constants';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { CLASSNAME } from './constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface DatePickerControlledProps extends DatePickerProps {\n /** Selected month to display. */\n selectedMonth: Date;\n /** On previous month change callback. */\n onPrevMonthChange(): void;\n /** On next month change callback. */\n onNextMonthChange(): void;\n /** On month/year change callback. */\n onMonthChange?: (newMonth: Date) => void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'DatePickerControlled';\n\n/**\n * DatePickerControlled component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const DatePickerControlled = forwardRef<DatePickerControlledProps, HTMLDivElement>((props, ref) => {\n const {\n locale = getCurrentLocale(),\n maxDate,\n minDate,\n nextButtonProps,\n onChange,\n onNextMonthChange,\n onPrevMonthChange,\n previousButtonProps,\n selectedMonth,\n todayOrSelectedDateRef,\n value,\n onMonthChange,\n style,\n } = props;\n const { weeks, weekDays } = React.useMemo(() => {\n const localeObj = parseLocale(locale) as Locale;\n return getMonthCalendar(localeObj, selectedMonth, minDate, maxDate);\n }, [locale, minDate, maxDate, selectedMonth]);\n\n const selectedYear = selectedMonth.getFullYear();\n const formattedYear = selectedMonth.toLocaleDateString(locale, { year: 'numeric' }).slice(0, 4);\n const [currentYear, setCurrentYear] = React.useState(String(selectedYear));\n\n // Updates month offset when validating year. Adds or removes 12 months per year when updating year value.\n const updateMonthOffset = React.useCallback(\n (newYearValue: string) => {\n const yearNumber = Number(newYearValue);\n if (yearNumber < 0 && yearNumber >= 9999) {\n return;\n }\n\n const previousYearNumber = selectedMonth.getFullYear();\n const offset = (yearNumber - previousYearNumber) * 12;\n onMonthChange?.(addMonthResetDay(selectedMonth, offset));\n },\n [selectedMonth, onMonthChange],\n );\n\n const onYearChange = React.useCallback<TextFieldProps['onChange']>(\n (newYearValue, _, event) => {\n setCurrentYear(newYearValue);\n\n // Detect if change is coming from the spin up/down arrows\n const inputType = (event?.nativeEvent as any)?.inputType;\n if (\n // Chrome/Safari\n !inputType ||\n // Firefox\n inputType === 'insertReplacementText'\n ) {\n updateMonthOffset(newYearValue);\n }\n },\n [updateMonthOffset],\n );\n\n const updateYear = React.useCallback(() => {\n updateMonthOffset(currentYear);\n }, [updateMonthOffset, currentYear]);\n\n const updateYearOnEnterPressed: KeyboardEventHandler = React.useMemo(\n () => onEnterPressed(updateYear),\n [updateYear],\n );\n\n const monthYear = selectedMonth.toLocaleDateString(locale, { year: 'numeric', month: 'long' });\n\n // Update current year when selected year changes\n React.useEffect(() => {\n setCurrentYear(String(selectedYear));\n }, [selectedYear]);\n\n const prevSelectedMonth = usePreviousValue(selectedMonth);\n const monthHasChanged = prevSelectedMonth && !isSameDay(selectedMonth, prevSelectedMonth);\n\n // Only set the aria-live after the month has changed otherwise it can get announced on mount when used in the popover dialog\n const [labelAriaLive, setLabelAriaLive] = React.useState<'polite'>();\n React.useEffect(() => {\n if (monthHasChanged) setLabelAriaLive('polite');\n }, [monthHasChanged]);\n\n const yearLabel = getYearDisplayName(locale);\n\n return (\n <div ref={ref} className={`${CLASSNAME}`} style={style}>\n <Toolbar\n className={`${CLASSNAME}__toolbar`}\n after={\n <IconButton\n {...nextButtonProps}\n emphasis={Emphasis.low}\n icon={mdiChevronRight}\n onClick={onNextMonthChange}\n />\n }\n before={\n <IconButton\n {...previousButtonProps}\n emphasis={Emphasis.low}\n icon={mdiChevronLeft}\n onClick={onPrevMonthChange}\n />\n }\n label={\n <>\n <span aria-live={labelAriaLive} className={onMonthChange ? VISUALLY_HIDDEN : ''} dir=\"auto\">\n {monthYear}\n </span>\n {onMonthChange && (\n <FlexBox\n className={`${CLASSNAME}__month`}\n orientation=\"horizontal\"\n hAlign=\"center\"\n gap=\"regular\"\n vAlign=\"center\"\n dir=\"auto\"\n >\n {RegExp(`(.*)(${formattedYear})(.*)`)\n .exec(monthYear)\n ?.slice(1)\n .filter((part) => part !== '')\n .map((part) =>\n part === formattedYear ? (\n <TextField\n value={currentYear}\n aria-label={yearLabel}\n onChange={onYearChange}\n type=\"number\"\n max={9999}\n min={0}\n onBlur={updateYear}\n onKeyPress={updateYearOnEnterPressed}\n key=\"year\"\n className={`${CLASSNAME}__year`}\n />\n ) : (\n <Text as=\"p\" key={part}>\n {part}\n </Text>\n ),\n )}\n </FlexBox>\n )}\n </>\n }\n />\n <div className={`${CLASSNAME}__calendar`}>\n <div className={`${CLASSNAME}__week-days ${CLASSNAME}__days-wrapper`}>\n {weekDays.map(({ letter, number, long }) => (\n <div key={number} className={`${CLASSNAME}__day-wrapper`}>\n <span className={`${CLASSNAME}__week-day`} aria-hidden>\n {letter.toLocaleUpperCase()}\n </span>\n <span className=\"visually-hidden\">{long}</span>\n </div>\n ))}\n </div>\n\n <div className={`${CLASSNAME}__month-days ${CLASSNAME}__days-wrapper`}>\n {weeks.flatMap((week, weekIndex) => {\n return weekDays.map((weekDay, dayIndex) => {\n const { date, isOutOfRange } = week[weekDay.number] || {};\n const key = `${weekIndex}-${dayIndex}`;\n const isToday = !isOutOfRange && date && isSameDay(date, new Date());\n const isSelected = date && value && isSameDay(value, date);\n\n return (\n <div key={key} className={`${CLASSNAME}__day-wrapper`}>\n {date && (\n <Button\n ref={isSelected || (!value && isToday) ? todayOrSelectedDateRef : null}\n className={classNames(`${CLASSNAME}__month-day`, {\n [`${CLASSNAME}__month-day--is-today`]: isToday,\n })}\n disabled={isOutOfRange}\n isSelected={isSelected}\n emphasis=\"low\"\n onClick={() => onChange(date)}\n >\n <span aria-hidden>{formatDayNumber(locale, date)}</span>\n <span className={VISUALLY_HIDDEN}>\n {date.toLocaleDateString(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })}\n </span>\n </Button>\n )}\n </div>\n );\n });\n })}\n </div>\n </div>\n </div>\n );\n});\nDatePickerControlled.displayName = COMPONENT_NAME;\nDatePickerControlled.className = CLASSNAME;\n","import React, { useState } from 'react';\n\nimport { addMonthResetDay } from '@lumx/react/utils/date/addMonthResetDay';\nimport { isDateValid } from '@lumx/react/utils/date/isDateValid';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { CLASSNAME, COMPONENT_NAME } from './constants';\nimport { DatePickerControlled } from './DatePickerControlled';\nimport { DatePickerProps } from './types';\n\n/**\n * DatePicker component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const DatePicker = forwardRef<DatePickerProps, HTMLDivElement>((props, ref) => {\n const { defaultMonth, locale, value, onChange, ...forwardedProps } = props;\n\n let referenceDate = value || defaultMonth || new Date();\n if (!isDateValid(referenceDate)) {\n // eslint-disable-next-line no-console\n console.warn(`[@lumx/react/DatePicker] Invalid date provided ${referenceDate}`);\n referenceDate = new Date();\n }\n\n const [selectedMonth, setSelectedMonth] = useState(referenceDate);\n const setPrevMonth = () => setSelectedMonth((current) => addMonthResetDay(current, -1));\n const setNextMonth = () => setSelectedMonth((current) => addMonthResetDay(current, +1));\n\n const onDatePickerChange = (newDate?: Date) => {\n onChange(newDate);\n };\n\n return (\n <DatePickerControlled\n ref={ref}\n {...forwardedProps}\n defaultMonth={defaultMonth}\n locale={locale}\n value={value}\n onPrevMonthChange={setPrevMonth}\n onNextMonthChange={setNextMonth}\n selectedMonth={selectedMonth}\n onChange={onDatePickerChange}\n onMonthChange={setSelectedMonth}\n />\n );\n});\nDatePicker.displayName = COMPONENT_NAME;\nDatePicker.className = CLASSNAME;\n","import React, { SyntheticEvent, useCallback, useRef } from 'react';\n\nimport { DatePicker, IconButtonProps, Placement, PopoverDialog, TextField, TextFieldProps } from '@lumx/react';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getCurrentLocale } from '@lumx/react/utils/locale/getCurrentLocale';\nimport { useBooleanState } from '@lumx/react/hooks/useBooleanState';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Defines the props of the component.\n */\nexport interface DatePickerFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'>, GenericProps {\n /** Default month. */\n defaultMonth?: Date;\n /** Locale (language or region) to use. */\n locale?: string;\n /** Date after which dates can't be selected. */\n maxDate?: Date;\n /** Date before which dates can't be selected. */\n minDate?: Date;\n /** Props to pass to the next month button (minus those already set by the DatePickerControlled props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> & Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /** Props to pass to the previous month button (minus those already set by the DatePickerControlled props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /** Currently selected date. */\n value: Date | undefined;\n /** On change callback. */\n onChange(value: Date | undefined, name?: string, event?: SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'DatePickerField';\n\n/**\n * DatePickerField component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const DatePickerField = forwardRef<DatePickerFieldProps, HTMLDivElement>((props, ref) => {\n const {\n defaultMonth,\n disabled,\n isDisabled = disabled,\n locale = getCurrentLocale(),\n maxDate,\n minDate,\n name,\n nextButtonProps,\n onChange,\n previousButtonProps,\n value,\n ...forwardedProps\n } = props;\n const anchorRef = useRef(null);\n\n const [isOpen, close, , toggleOpen] = useBooleanState(false);\n\n const handleKeyboardNav = useCallback(\n (evt: React.KeyboardEvent) => {\n if (evt.key === 'Enter' || evt.key === ' ') {\n toggleOpen();\n }\n },\n [toggleOpen],\n );\n const onTextFieldChange = useCallback(\n (textFieldValue: string, textFieldName?: string, event?: SyntheticEvent) => {\n if (!textFieldValue) {\n onChange(undefined, textFieldName, event);\n }\n },\n [onChange],\n );\n const onDatePickerChange = useCallback(\n (newDate?: Date) => {\n onChange(newDate, name);\n close();\n },\n [name, onChange, close],\n );\n\n // Format date for text field\n const textFieldValue = value?.toLocaleDateString(locale, { year: 'numeric', month: 'long', day: 'numeric' }) || '';\n\n const todayOrSelectedDateRef = React.useRef(null);\n\n return (\n <>\n <TextField\n ref={ref}\n {...forwardedProps}\n name={name}\n forceFocusStyle={isOpen}\n textFieldRef={anchorRef}\n value={textFieldValue}\n onClick={toggleOpen}\n onChange={onTextFieldChange}\n onKeyPress={handleKeyboardNav}\n isDisabled={isDisabled}\n readOnly\n aria-haspopup=\"dialog\"\n />\n {isOpen ? (\n <PopoverDialog\n // Can't use `aria-labelledby` targeting the text field label element (not correctly read on some screen readers)\n aria-label={forwardedProps.label}\n anchorRef={anchorRef}\n placement={Placement.BOTTOM_START}\n isOpen={isOpen}\n onClose={close}\n // On open, focus the selected day or today\n focusElement={todayOrSelectedDateRef}\n >\n <DatePicker\n locale={locale}\n maxDate={maxDate}\n minDate={minDate}\n value={value}\n todayOrSelectedDateRef={todayOrSelectedDateRef}\n onChange={onDatePickerChange}\n defaultMonth={defaultMonth}\n nextButtonProps={nextButtonProps}\n previousButtonProps={previousButtonProps}\n />\n </PopoverDialog>\n ) : null}\n </>\n );\n});\nDatePickerField.displayName = COMPONENT_NAME;\n","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport { HasAriaLabelOrLabelledBy } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { Popover, PopoverProps } from '../popover/Popover';\n\n/**\n * PopoverDialog props.\n * The PopoverDialog has the same props as the Popover but requires an accessible label.\n */\nexport type PopoverDialogProps = PopoverProps & HasAriaLabelOrLabelledBy;\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'PopoverDialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<PopoverDialogProps> = {};\n\n/**\n * PopoverDialog component.\n * Defines a popover that acts like a dialog\n * * Has a dialog aria role\n * * Sets a focus trap within the popover\n * * Closes on click away and escape.\n */\nexport const PopoverDialog = forwardRef<PopoverDialogProps, HTMLDivElement>((props, ref) => {\n const {\n children,\n isOpen,\n focusElement,\n 'aria-label': ariaLabel,\n label = ariaLabel,\n className,\n ...forwardedProps\n } = props;\n\n return (\n <Popover\n {...forwardedProps}\n ref={ref}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME }))}\n role=\"dialog\"\n aria-modal=\"true\"\n /**\n * If a label is set, set as aria-label.\n * If it is undefined, the label can be set using the `aria-label` and `aria-labelledby` props\n */\n aria-label={label}\n isOpen={isOpen}\n focusElement={focusElement}\n closeOnClickAway\n closeOnEscape\n withFocusTrap\n >\n {children}\n </Popover>\n );\n});\n\nPopoverDialog.displayName = COMPONENT_NAME;\nPopoverDialog.className = CLASSNAME;\nPopoverDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["addMonthResetDay","date","monthOffset","newDate","Date","getTime","setDate","setMonth","getMonth","isDateValid","Number","isNaN","COMPONENT_NAME","CLASSNAME","getRootClassName","getFromBrowser","locale","_localeMetadata$getWe","localeMetadata","Intl","Locale","code","firstDay","getWeekInfo","call","weekInfo","e","undefined","FIRST_DAY_FOR_LOCALES","localeRX","getFromConstant","searchBy","arguments","length","test","language","getFirstDayOfWeek","DAYS_PER_WEEK","getWeekDays","_getFirstDayOfWeek","iterDate","offset","getDay","getDate","weekDays","i","letter","toLocaleDateString","weekday","long","number","push","MONTH_ROW_COUNT","getMonthCalendar","referenceDate","rangeMinDate","rangeMaxDate","month","lastDayOfWeek","last","weeks","week","rowCount","weekDayNumber","day","isOutOfRange","Object","keys","isSameDay","date1","date2","getFullYear","getCurrentLocale","_navigator$languages","navigator","languages","parseLocale","rawLanguage","rawRegion","split","toLowerCase","region","toUpperCase","usePreviousValue","value","prevValueRef","React","useRef","prevValue","current","useEffect","getYearDisplayName","label","displayNames","DisplayNames","type","of","error","formatDayNumber","formattedDate","match","replace","DatePickerControlled","forwardRef","props","ref","_RegExp$exec","maxDate","minDate","nextButtonProps","onChange","onNextMonthChange","onPrevMonthChange","previousButtonProps","selectedMonth","todayOrSelectedDateRef","onMonthChange","style","useMemo","localeObj","selectedYear","formattedYear","year","slice","currentYear","setCurrentYear","useState","String","updateMonthOffset","useCallback","newYearValue","yearNumber","previousYearNumber","onYearChange","_","event","_event$nativeEvent","inputType","nativeEvent","updateYear","updateYearOnEnterPressed","onEnterPressed","monthYear","prevSelectedMonth","monthHasChanged","labelAriaLive","setLabelAriaLive","yearLabel","createElement","className","Toolbar","after","IconButton","_extends","emphasis","Emphasis","low","icon","mdiChevronRight","onClick","before","mdiChevronLeft","Fragment","VISUALLY_HIDDEN","dir","FlexBox","orientation","hAlign","gap","vAlign","RegExp","exec","filter","part","map","TextField","max","min","onBlur","onKeyPress","key","Text","as","_ref","toLocaleUpperCase","flatMap","weekIndex","weekDay","dayIndex","isToday","isSelected","Button","classNames","disabled","displayName","DatePicker","defaultMonth","forwardedProps","_objectWithoutProperties","_excluded","console","warn","setSelectedMonth","setPrevMonth","setNextMonth","onDatePickerChange","DatePickerField","isDisabled","name","anchorRef","isOpen","close","toggleOpen","useBooleanState","handleKeyboardNav","evt","onTextFieldChange","textFieldValue","textFieldName","forceFocusStyle","textFieldRef","readOnly","PopoverDialog","placement","Placement","BOTTOM_START","onClose","focusElement","DEFAULT_PROPS","children","ariaLabel","Popover","handleBasicClasses","prefix","role","closeOnClickAway","closeOnEscape","withFocusTrap","defaultProps"],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import { k as _objectSpread2 } from './1da25128.js';
2
+ import { createContext, useContext, useEffect, useMemo, useCallback } from 'react';
3
+ import { u as useId } from './3a1facc0.js';
4
+
5
+ const INIT_STATE = {
6
+ isLazy: true,
7
+ shouldActivateOnFocus: false,
8
+ activeTabIndex: 0,
9
+ ids: {
10
+ tab: [],
11
+ tabPanel: []
12
+ }
13
+ };
14
+ const reducer = (state, action) => {
15
+ switch (action.type) {
16
+ case 'update':
17
+ return _objectSpread2(_objectSpread2({}, state), action.payload);
18
+ case 'setActiveTabIndex':
19
+ {
20
+ if (state.activeTabIndex === action.payload) {
21
+ return state;
22
+ }
23
+ // Change active tab index.
24
+ return _objectSpread2(_objectSpread2({}, state), {}, {
25
+ activeTabIndex: action.payload
26
+ });
27
+ }
28
+ case 'register':
29
+ {
30
+ const {
31
+ type,
32
+ id
33
+ } = action.payload;
34
+ // Append tab/tabPanel id in state.
35
+ return _objectSpread2(_objectSpread2({}, state), {}, {
36
+ ids: _objectSpread2(_objectSpread2({}, state.ids), {}, {
37
+ [type]: [...state.ids[type], id]
38
+ })
39
+ });
40
+ }
41
+ case 'unregister':
42
+ {
43
+ const {
44
+ type,
45
+ id
46
+ } = action.payload;
47
+ const index = state.ids[type].indexOf(id);
48
+ if (index === -1) return state;
49
+ // Remove tab & tab panel at index.
50
+ const tabIds = [...state.ids.tab];
51
+ tabIds.splice(index, 1);
52
+ const tabPanelIds = [...state.ids.tabPanel];
53
+ tabPanelIds.splice(index, 1);
54
+ return _objectSpread2(_objectSpread2({}, state), {}, {
55
+ ids: {
56
+ tab: tabIds,
57
+ tabPanel: tabPanelIds
58
+ }
59
+ });
60
+ }
61
+ default:
62
+ return state;
63
+ }
64
+ };
65
+ const TabProviderContext = /*#__PURE__*/createContext(null);
66
+ /* eslint-disable react-hooks/rules-of-hooks */
67
+ const useTabProviderContext = (type, originalId) => {
68
+ const context = useContext(TabProviderContext);
69
+ if (!context) {
70
+ return undefined;
71
+ }
72
+ const [state, dispatch] = context;
73
+
74
+ // Current tab or tab panel id.
75
+ const generatedId = useId();
76
+ const id = originalId || generatedId;
77
+ useEffect(() => {
78
+ // On mount: register tab or tab panel id.
79
+ dispatch({
80
+ type: 'register',
81
+ payload: {
82
+ type,
83
+ id
84
+ }
85
+ });
86
+ return () => {
87
+ // On unmount: unregister tab or tab panel id.
88
+ dispatch({
89
+ type: 'unregister',
90
+ payload: {
91
+ type,
92
+ id
93
+ }
94
+ });
95
+ };
96
+ },
97
+ // eslint-disable-next-line react-hooks/exhaustive-deps
98
+ []);
99
+
100
+ // Find tab/tabPanel index using it's id.
101
+ const index = useMemo(() => state.ids[type].indexOf(id), [state.ids, type, id]);
102
+ const tabId = useMemo(() => state.ids.tab[index] || '', [state, index]);
103
+ const tabPanelId = useMemo(() => state.ids.tabPanel[index] || '', [state, index]);
104
+ const isActive = useMemo(() => state.activeTabIndex === index, [state, index]);
105
+ const changeToTab = useCallback(() => dispatch({
106
+ type: 'setActiveTabIndex',
107
+ payload: index
108
+ }), [dispatch, index]);
109
+ return {
110
+ isLazy: state.isLazy,
111
+ shouldActivateOnFocus: state.shouldActivateOnFocus,
112
+ tabId,
113
+ tabPanelId,
114
+ isActive,
115
+ changeToTab
116
+ };
117
+ };
118
+ const useTabProviderContextState = () => {
119
+ const context = useContext(TabProviderContext);
120
+ return context === null || context === void 0 ? void 0 : context[0];
121
+ };
122
+
123
+ export { INIT_STATE as I, TabProviderContext as T, useTabProviderContext as a, reducer as r, useTabProviderContextState as u };
124
+ //# sourceMappingURL=5720caf5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"5720caf5.js","sources":["../../src/components/tabs/state.ts"],"sourcesContent":["import { Dispatch, createContext, useCallback, useContext, useEffect, useMemo } from 'react';\nimport { useId } from '@lumx/react/hooks/useId';\n\ntype TabType = 'tab' | 'tabPanel';\n\nexport interface State {\n isLazy: boolean;\n shouldActivateOnFocus: boolean;\n activeTabIndex: number;\n ids: Record<TabType, string[]>;\n}\n\nexport const INIT_STATE: State = {\n isLazy: true,\n shouldActivateOnFocus: false,\n activeTabIndex: 0,\n ids: { tab: [], tabPanel: [] },\n};\n\nexport type Action =\n | { type: 'update'; payload: Partial<State> }\n | { type: 'setActiveTabIndex'; payload: number }\n | { type: 'register'; payload: { type: TabType; id: string } }\n | { type: 'unregister'; payload: { type: TabType; id: string } };\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case 'update':\n return { ...state, ...action.payload };\n case 'setActiveTabIndex': {\n if (state.activeTabIndex === action.payload) {\n return state;\n }\n // Change active tab index.\n return { ...state, activeTabIndex: action.payload };\n }\n case 'register': {\n const { type, id } = action.payload;\n // Append tab/tabPanel id in state.\n return { ...state, ids: { ...state.ids, [type]: [...state.ids[type], id] } };\n }\n case 'unregister': {\n const { type, id } = action.payload;\n const index = state.ids[type].indexOf(id);\n if (index === -1) return state;\n // Remove tab & tab panel at index.\n const tabIds = [...state.ids.tab];\n tabIds.splice(index, 1);\n const tabPanelIds = [...state.ids.tabPanel];\n tabPanelIds.splice(index, 1);\n return {\n ...state,\n ids: { tab: tabIds, tabPanel: tabPanelIds },\n };\n }\n default:\n return state;\n }\n};\n\nexport const TabProviderContext = createContext<[State, Dispatch<Action>] | null>(null);\n\nexport type TabState = Pick<Required<State>, 'isLazy' | 'shouldActivateOnFocus'> & {\n isActive: boolean;\n tabId: string;\n tabPanelId: string;\n changeToTab(): void;\n};\n\n/* eslint-disable react-hooks/rules-of-hooks */\nexport const useTabProviderContext = (type: TabType, originalId?: string): undefined | TabState => {\n const context = useContext(TabProviderContext);\n if (!context) {\n return undefined;\n }\n const [state, dispatch] = context;\n\n // Current tab or tab panel id.\n const generatedId = useId();\n const id = originalId || generatedId;\n\n useEffect(\n () => {\n // On mount: register tab or tab panel id.\n dispatch({ type: 'register', payload: { type, id } });\n return () => {\n // On unmount: unregister tab or tab panel id.\n dispatch({ type: 'unregister', payload: { type, id } });\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Find tab/tabPanel index using it's id.\n const index = useMemo(() => state.ids[type].indexOf(id), [state.ids, type, id]);\n const tabId = useMemo(() => state.ids.tab[index] || '', [state, index]);\n const tabPanelId = useMemo(() => state.ids.tabPanel[index] || '', [state, index]);\n const isActive = useMemo(() => state.activeTabIndex === index, [state, index]);\n const changeToTab = useCallback(() => dispatch({ type: 'setActiveTabIndex', payload: index }), [dispatch, index]);\n return {\n isLazy: state.isLazy,\n shouldActivateOnFocus: state.shouldActivateOnFocus,\n tabId,\n tabPanelId,\n isActive,\n changeToTab,\n };\n};\n\nexport const useTabProviderContextState = (): State | undefined => {\n const context = useContext(TabProviderContext);\n return context?.[0];\n};\n"],"names":["INIT_STATE","isLazy","shouldActivateOnFocus","activeTabIndex","ids","tab","tabPanel","reducer","state","action","type","_objectSpread","payload","id","index","indexOf","tabIds","splice","tabPanelIds","TabProviderContext","createContext","useTabProviderContext","originalId","context","useContext","undefined","dispatch","generatedId","useId","useEffect","useMemo","tabId","tabPanelId","isActive","changeToTab","useCallback","useTabProviderContextState"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { useEffect } from 'react';
2
+ import { D as DOCUMENT } from './1da25128.js';
3
+ import { g as getFocusableElements } from './230173a8.js';
4
+ import { m as makeListenerTowerContext } from './cae46566.js';
5
+
6
+ /**
7
+ * Get first and last elements focusable in an element.
8
+ *
9
+ * @param parentElement The element in which to search focusable elements.
10
+ * @return first and last focusable elements
11
+ */
12
+ function getFirstAndLastFocusable(parentElement) {
13
+ const focusableElements = getFocusableElements(parentElement);
14
+
15
+ // First non disabled element.
16
+ const first = focusableElements[0];
17
+ // Last non disabled element.
18
+ const last = focusableElements[focusableElements.length - 1];
19
+ if (last && first) {
20
+ return {
21
+ first,
22
+ last
23
+ };
24
+ }
25
+ return {};
26
+ }
27
+
28
+ const FOCUS_TRAPS = makeListenerTowerContext();
29
+
30
+ /**
31
+ * Trap 'Tab' focus switch inside the `focusZoneElement`.
32
+ *
33
+ * If multiple focus trap are activated, only the last one is maintained and when a focus trap closes, the previous one
34
+ * gets activated again.
35
+ *
36
+ * @param focusZoneElement The element in which to trap the focus.
37
+ * @param focusElement The element to focus when the focus trap is activated (otherwise the first focusable element
38
+ * will be focused).
39
+ */
40
+ function useFocusTrap(focusZoneElement, focusElement) {
41
+ useEffect(() => {
42
+ // Body element can be undefined in SSR context.
43
+ const rootElement = DOCUMENT === null || DOCUMENT === void 0 ? void 0 : DOCUMENT.body;
44
+ if (!rootElement || !focusZoneElement) {
45
+ return undefined;
46
+ }
47
+
48
+ // Use the shadow root as focusZoneElement when available
49
+ const focusZoneElementOrShadowRoot = focusZoneElement.shadowRoot || focusZoneElement;
50
+
51
+ // Trap 'Tab' key down focus switch into the focus zone.
52
+ const trapTabFocusInFocusZone = evt => {
53
+ const {
54
+ key
55
+ } = evt;
56
+ if (key !== 'Tab') {
57
+ return;
58
+ }
59
+ const focusable = getFirstAndLastFocusable(focusZoneElementOrShadowRoot);
60
+
61
+ // Prevent focus switch if no focusable available.
62
+ if (!focusable.first) {
63
+ evt.preventDefault();
64
+ return;
65
+ }
66
+ const activeElement = focusZoneElement.shadowRoot ? focusZoneElement.shadowRoot.activeElement : document.activeElement;
67
+ if (
68
+ // No previous focus
69
+ !activeElement ||
70
+ // Previous focus is at the end of the focus zone.
71
+ !evt.shiftKey && activeElement === focusable.last ||
72
+ // Previous focus is outside the focus zone
73
+ !focusZoneElementOrShadowRoot.contains(activeElement)) {
74
+ focusable.first.focus();
75
+ evt.preventDefault();
76
+ return;
77
+ }
78
+ if (
79
+ // Focus order reversed
80
+ evt.shiftKey &&
81
+ // Previous focus is at the start of the focus zone.
82
+ activeElement === focusable.first) {
83
+ focusable.last.focus();
84
+ evt.preventDefault();
85
+ }
86
+ };
87
+ const focusTrap = {
88
+ enable: () => rootElement.addEventListener('keydown', trapTabFocusInFocusZone),
89
+ disable: () => rootElement.removeEventListener('keydown', trapTabFocusInFocusZone)
90
+ };
91
+
92
+ // SETUP:
93
+ if (focusElement && focusZoneElementOrShadowRoot.contains(focusElement)) {
94
+ // Focus the given element.
95
+ focusElement.focus({
96
+ preventScroll: true
97
+ });
98
+ } else {
99
+ var _getFirstAndLastFocus;
100
+ // Focus the first focusable element in the zone.
101
+ (_getFirstAndLastFocus = getFirstAndLastFocusable(focusZoneElementOrShadowRoot).first) === null || _getFirstAndLastFocus === void 0 ? void 0 : _getFirstAndLastFocus.focus({
102
+ preventScroll: true
103
+ });
104
+ }
105
+ FOCUS_TRAPS.register(focusTrap);
106
+
107
+ // TEARDOWN:
108
+ return () => FOCUS_TRAPS.unregister(focusTrap);
109
+ }, [focusElement, focusZoneElement]);
110
+ }
111
+
112
+ export { getFirstAndLastFocusable as g, useFocusTrap as u };
113
+ //# sourceMappingURL=646f0db6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"646f0db6.js","sources":["../../src/utils/focus/getFirstAndLastFocusable.ts","../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { getFocusableElements } from './getFocusableElements';\n\n/**\n * Get first and last elements focusable in an element.\n *\n * @param parentElement The element in which to search focusable elements.\n * @return first and last focusable elements\n */\nexport function getFirstAndLastFocusable(parentElement: HTMLElement | ShadowRoot) {\n const focusableElements = getFocusableElements(parentElement);\n\n // First non disabled element.\n const first = focusableElements[0];\n // Last non disabled element.\n const last = focusableElements[focusableElements.length - 1];\n\n if (last && first) {\n return { first, last };\n }\n return {};\n}\n","import { useEffect } from 'react';\n\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { getFirstAndLastFocusable } from '@lumx/react/utils/focus/getFirstAndLastFocusable';\nimport { Falsy } from '@lumx/react/utils/type';\nimport { Listener, makeListenerTowerContext } from '@lumx/react/utils/makeListenerTowerContext';\n\nconst FOCUS_TRAPS = makeListenerTowerContext();\n\n/**\n * Trap 'Tab' focus switch inside the `focusZoneElement`.\n *\n * If multiple focus trap are activated, only the last one is maintained and when a focus trap closes, the previous one\n * gets activated again.\n *\n * @param focusZoneElement The element in which to trap the focus.\n * @param focusElement The element to focus when the focus trap is activated (otherwise the first focusable element\n * will be focused).\n */\nexport function useFocusTrap(focusZoneElement: HTMLElement | Falsy, focusElement?: HTMLElement | null): void {\n useEffect(() => {\n // Body element can be undefined in SSR context.\n const rootElement = DOCUMENT?.body;\n\n if (!rootElement || !focusZoneElement) {\n return undefined;\n }\n\n // Use the shadow root as focusZoneElement when available\n const focusZoneElementOrShadowRoot = focusZoneElement.shadowRoot || focusZoneElement;\n\n // Trap 'Tab' key down focus switch into the focus zone.\n const trapTabFocusInFocusZone = (evt: KeyboardEvent) => {\n const { key } = evt;\n if (key !== 'Tab') {\n return;\n }\n\n const focusable = getFirstAndLastFocusable(focusZoneElementOrShadowRoot);\n\n // Prevent focus switch if no focusable available.\n if (!focusable.first) {\n evt.preventDefault();\n return;\n }\n\n const activeElement = focusZoneElement.shadowRoot\n ? focusZoneElement.shadowRoot.activeElement\n : document.activeElement;\n\n if (\n // No previous focus\n !activeElement ||\n // Previous focus is at the end of the focus zone.\n (!evt.shiftKey && activeElement === focusable.last) ||\n // Previous focus is outside the focus zone\n !focusZoneElementOrShadowRoot.contains(activeElement)\n ) {\n focusable.first.focus();\n evt.preventDefault();\n return;\n }\n\n if (\n // Focus order reversed\n evt.shiftKey &&\n // Previous focus is at the start of the focus zone.\n activeElement === focusable.first\n ) {\n focusable.last.focus();\n evt.preventDefault();\n }\n };\n\n const focusTrap: Listener = {\n enable: () => rootElement.addEventListener('keydown', trapTabFocusInFocusZone),\n disable: () => rootElement.removeEventListener('keydown', trapTabFocusInFocusZone),\n };\n\n // SETUP:\n if (focusElement && focusZoneElementOrShadowRoot.contains(focusElement)) {\n // Focus the given element.\n focusElement.focus({ preventScroll: true });\n } else {\n // Focus the first focusable element in the zone.\n getFirstAndLastFocusable(focusZoneElementOrShadowRoot).first?.focus({ preventScroll: true });\n }\n FOCUS_TRAPS.register(focusTrap);\n\n // TEARDOWN:\n return () => FOCUS_TRAPS.unregister(focusTrap);\n }, [focusElement, focusZoneElement]);\n}\n"],"names":["getFirstAndLastFocusable","parentElement","focusableElements","getFocusableElements","first","last","length","FOCUS_TRAPS","makeListenerTowerContext","useFocusTrap","focusZoneElement","focusElement","useEffect","rootElement","DOCUMENT","body","undefined","focusZoneElementOrShadowRoot","shadowRoot","trapTabFocusInFocusZone","evt","key","focusable","preventDefault","activeElement","document","shiftKey","contains","focus","focusTrap","enable","addEventListener","disable","removeEventListener","preventScroll","_getFirstAndLastFocus","register","unregister"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ReactNode, CSSProperties } from 'react';
2
+ import { TextProps } from './components/text/index.ts-8a812048.js';
3
+
4
+ type ForwardedTextProps = Omit<TextProps, 'as' | 'typography' | 'color' | 'colorVariant'>;
5
+ type ImageCaptionMetadata = {
6
+ /** Image title to display in the caption. */
7
+ title?: string;
8
+ /** Props to pass to the title. */
9
+ titleProps?: ForwardedTextProps;
10
+ /** Image description. Can be either a string, or sanitized html. */
11
+ description?: string | {
12
+ __html: string;
13
+ };
14
+ /** Props to pass to the title. */
15
+ descriptionProps?: ForwardedTextProps;
16
+ /** Tag content. */
17
+ tags?: ReactNode;
18
+ /** Caption custom CSS style. */
19
+ captionStyle?: CSSProperties;
20
+ };
21
+
22
+ export type { ImageCaptionMetadata as I };
@@ -0,0 +1,34 @@
1
+ import { S as Size, G as GenericProps, H as HasTheme, a as ColorPalette, E as Emphasis } from './8d67e1e3.js';
2
+ import { AriaAttributes, DetailedHTMLProps, ButtonHTMLAttributes } from 'react';
3
+
4
+ type HTMLButtonProps = DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
5
+ /**
6
+ * Button size definition.
7
+ */
8
+ type ButtonSize = Extract<Size, 's' | 'm'>;
9
+ interface BaseButtonProps extends GenericProps, Pick<AriaAttributes, 'aria-expanded' | 'aria-haspopup' | 'aria-pressed' | 'aria-label'>, HasTheme {
10
+ /** Color variant. */
11
+ color?: ColorPalette;
12
+ /** Emphasis variant. */
13
+ emphasis?: Emphasis;
14
+ /** Whether or not the button has a background color in low emphasis. */
15
+ hasBackground?: boolean;
16
+ /** Native anchor href property. It determines whether the Button will be a <button> or an <a>. */
17
+ href?: string;
18
+ /** Whether the component is disabled or not. */
19
+ isDisabled?: boolean;
20
+ /** Whether the component is selected or not (unsupported in `high` emphasis). */
21
+ isSelected?: boolean;
22
+ /** Native button name property. */
23
+ name?: string;
24
+ /** Size variant. */
25
+ size?: ButtonSize;
26
+ /** Native anchor target property. */
27
+ target?: '_self' | '_blank' | '_parent' | '_top';
28
+ /** Native button type. */
29
+ type?: HTMLButtonProps['type'];
30
+ /** Custom react component for the link (can be used to inject react router Link). */
31
+ linkAs?: 'a' | any;
32
+ }
33
+
34
+ export type { BaseButtonProps as B, ButtonSize as a };
@@ -282,4 +282,4 @@ declare const WhiteSpace: {
282
282
  };
283
283
  type WhiteSpace = ValueOf<typeof WhiteSpace>;
284
284
 
285
- export { Alignment as A, type Comp as C, Emphasis as E, type Falsy as F, type GenericProps as G, type HasTheme as H, Kind as K, Orientation as O, Size as S, Typography as T, type ValueOf as V, WhiteSpace as W, type HorizontalAlignment as a, ColorPalette as b, type VerticalAlignment as c, ColorVariant as d, type TextElement as e, type HeadingElement as f, AspectRatio as g, type HasClassName as h, type HasAriaLabelOrLabelledBy as i, type ComponentRef as j, type HasCloseMode as k, type GlobalSize as l, TypographyInterface as m, Theme as n, type Color as o, TypographyTitleCustom as p, TypographyCustom as q, type Callback as r };
285
+ export { Alignment as A, type Comp as C, Emphasis as E, type Falsy as F, type GenericProps as G, type HasTheme as H, Kind as K, Orientation as O, Size as S, Theme as T, type ValueOf as V, WhiteSpace as W, ColorPalette as a, type HasAriaLabelOrLabelledBy as b, type VerticalAlignment as c, type HorizontalAlignment as d, type Color as e, ColorVariant as f, type GlobalSize as g, TypographyInterface as h, TypographyTitleCustom as i, TypographyCustom as j, Typography as k, AspectRatio as l, type HeadingElement as m, type TextElement as n, type Callback as o, type HasClassName as p, type ComponentRef as q, type HasCloseMode as r };