@portnet/ui 6.0.1 → 6.0.3

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 (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.test.js","names":["_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","target","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","React","render","waitFor","cleanup","screen","userEvent","useFocusTrap","jsx","_jsx","jsxs","_jsxs","realGetClientRects","Element","getClientRects","beforeAll","rect","x","y","top","left","right","bottom","width","height","toJSON","list","assign","item","_list$i","afterAll","Trapped","_ref","children","_ref$active","active","containerProps","ref","useRef","isFocused","el","expect","toHaveFocus","_unused","afterEach","describe","test","_callee","_callee$","_context","getByRole","_callee2","_callee2$","_context2","autoFocus","_callee3","_callee3$","_context3","not","toThrow","_callee4","_callee4$","_context4","tab","_callee5","_callee5$","_context5","shift","_callee6","_callee6$","_context6","disabled","_callee7","_callee7$","_context7","NestedHarness","_ref9","innerActive","_callee8","_render","rerender","_callee8$","_context8","_callee9","_render2","outer1","outer2","_callee9$","_context9","toBe"],"sources":["../../../../src/lib/v2/__tests__/useFocusTrap.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, waitFor, cleanup, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\n\r\n/* ── jsdom LAYOUT SHIM — REQUIRED, NOT A CONVENIENCE ────────────────────────\r\n *\r\n * Without this, EVERY test in this file fails at its first `waitFor`, with focus\r\n * sitting on <body>. The cause is not the hook:\r\n *\r\n * `useFocusTrap.isVisuallyFocusable` rejects an element whose\r\n * `getClientRects()` is empty — a cheap, correct test for `display:none` and\r\n * `visibility:hidden` in a real browser.\r\n *\r\n * jsdom PERFORMS NO LAYOUT. `getClientRects()` returns an empty list for every\r\n * element, always. So the filter discards all candidates, `getFocusable()`\r\n * returns `[]`, nothing is focused, and all eight assertions fail for one\r\n * reason that has nothing to do with focus management.\r\n *\r\n * This shim gives every element a non-zero rect so the visibility filter behaves\r\n * as it does in a browser. It does NOT weaken the tests: the hook's other\r\n * exclusions — `disabled`, `aria-disabled`, and the ancestor walk for `hidden` /\r\n * `aria-hidden` / `inert` — are all ATTRIBUTE-based, work correctly in jsdom, and\r\n * remain fully exercised (see the \"disabled / aria-hidden filtering\" block).\r\n *\r\n * ⚠ Diagnosed during the procuration-portnet-fe certification audit, where these\r\n * eight failures were initially suspected of being a real WCAG R-M.2 breach\r\n * across all consuming modules. They were not. Do NOT \"fix\" this by relaxing the\r\n * rect check in the hook — that check is what stops a trap focusing an invisible\r\n * control in production.\r\n *\r\n * Restored in `afterAll` so the patch cannot leak into other suites. */\r\nconst realGetClientRects = Element.prototype.getClientRects;\r\n\r\nbeforeAll(() => {\r\n Element.prototype.getClientRects = function getClientRects(this: Element) {\r\n const rect: DOMRect = {\r\n x: 0,\r\n y: 0,\r\n top: 0,\r\n left: 0,\r\n right: 10,\r\n bottom: 10,\r\n width: 10,\r\n height: 10,\r\n toJSON: () => ({}),\r\n };\r\n const list = [rect];\r\n return Object.assign(list, {\r\n item: (i: number): DOMRect | null => list[i] ?? null,\r\n }) as unknown as DOMRectList;\r\n };\r\n});\r\n\r\nafterAll(() => {\r\n Element.prototype.getClientRects = realGetClientRects;\r\n});\r\n\r\n/**\r\n * Smoke + contract tests for the Batch 3 useFocusTrap refactor.\r\n *\r\n * Test harness — a minimal trap container component. Defaults to\r\n * active=true so tests don't have to flip props.\r\n */\r\ntype ContainerProps = React.HTMLAttributes<HTMLDivElement> & {\r\n [key: `data-${string}`]: string;\r\n};\r\n\r\ninterface TrappedProps {\r\n children?: React.ReactNode;\r\n active?: boolean;\r\n containerProps?: ContainerProps;\r\n}\r\n\r\nfunction Trapped({\r\n children,\r\n active = true,\r\n containerProps,\r\n}: TrappedProps): React.JSX.Element {\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(ref, active);\r\n return (\r\n <div ref={ref} {...containerProps}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Returns whether `el` currently has focus, without touching\r\n * document.activeElement directly (testing-library/no-node-access) —\r\n * delegates to jest-dom's toHaveFocus() matcher and converts its pass/fail\r\n * into a boolean so several candidates can be checked in a single\r\n * \"focus is on ONE of these\" assertion (see the \"outer trap resumes\" test).\r\n */\r\nfunction isFocused(el: HTMLElement): boolean {\r\n try {\r\n expect(el).toHaveFocus();\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nafterEach(() => {\r\n cleanup();\r\n});\r\n\r\ndescribe(\"useFocusTrap — initial focus\", () => {\r\n test(\"focuses the first focusable element when activated\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"[autofocus] priority wins over the first focusable\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button autoFocus>Auto</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Auto\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"[data-autofocus] priority is honoured (alternative attribute)\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button data-autofocus>Marker</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Marker\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"does not crash when the trap container is empty\", () => {\r\n expect(() =>\r\n render(<Trapped containerProps={{ \"data-testid\": \"empty\" }} />)\r\n ).not.toThrow();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — Tab cycling\", () => {\r\n test(\"Tab cycles forward and wraps to the first element\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n <button>Third</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Second\" })).toHaveFocus();\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n\r\n // Wrap from last to first\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n test(\"Shift+Tab from the first wraps to the last\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab({ shift: true });\r\n expect(screen.getByRole(\"button\", { name: \"Last\" })).toHaveFocus();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — disabled / aria-hidden filtering\", () => {\r\n test(\"disabled buttons are skipped during cycling\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button disabled>Disabled</button>\r\n <button>Third</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n // Tab should jump from First → Third, skipping Disabled.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n });\r\n\r\n test(\"[aria-hidden=true] subtree is excluded from the cycle boundary\", async () => {\r\n /* WHY THE aria-hidden SUBTREE IS LAST, AND WHY THIS ASSERTS THE WRAP\r\n *\r\n * This test previously placed the aria-hidden subtree in the MIDDLE and\r\n * expected a single Tab to jump First → Third. It failed, and the hook was\r\n * not at fault: of the three attributes isVisuallyFocusable walks,\r\n * `hidden` and `inert` remove an element from the NATIVE tab order, but\r\n * `aria-hidden` does NOT — per spec it annotates the accessibility tree\r\n * only. useFocusTrap intercepts Tab at the cycle BOUNDARIES (first/last)\r\n * and defers mid-cycle moves to the browser, so a native Tab lands on the\r\n * aria-hidden button no matter what getFocusable() returned.\r\n *\r\n * A focusable control inside aria-hidden=\"true\" is a CONTENT defect (axe\r\n * `aria-hidden-focus`); use `inert` (or `hidden`) to take a subtree out of\r\n * interaction. What the filter genuinely guarantees is that such an element\r\n * is never treated as the cycle's first/last — so the trap never DELIVERS\r\n * focus into it. That is what is asserted here: with the subtree last,\r\n * `last` is still \"Third\", so Tab from Third wraps to First instead of\r\n * proceeding natively into \"Hidden\".\r\n *\r\n * Do NOT restore the mid-cycle form without also converting the hook to\r\n * intercept every Tab — see the boundary-scope note in useFocusTrap.ts. */\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Third</button>\r\n <div aria-hidden=\"true\">\r\n <button>Hidden</button>\r\n </div>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n\r\n // \"Third\" is the LAST focusable the trap recognises: the aria-hidden\r\n // button is filtered out, so Tab wraps rather than entering it.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — nested traps (Batch 3 stack contract)\", () => {\r\n /**\r\n * Nested-trap harness. Outer trap is always-active; inner trap is\r\n * controlled by `innerActive`. When the inner mounts, Tab cycles\r\n * inside it; when the inner unmounts, the outer trap resumes.\r\n */\r\n interface NestedHarnessProps {\r\n innerActive: boolean;\r\n }\r\n\r\n function NestedHarness({ innerActive }: NestedHarnessProps): React.JSX.Element {\r\n return (\r\n <Trapped>\r\n <button>Outer-1</button>\r\n <button>Outer-2</button>\r\n {innerActive && (\r\n <Trapped containerProps={{ \"data-testid\": \"inner\" }}>\r\n <button>Inner-A</button>\r\n <button>Inner-B</button>\r\n </Trapped>\r\n )}\r\n </Trapped>\r\n );\r\n }\r\n\r\n test(\"inner trap takes over Tab cycling when active\", async () => {\r\n const { rerender } = render(<NestedHarness innerActive={false} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Outer-1\" })).toHaveFocus();\r\n });\r\n\r\n // Mount the inner trap — it should grab focus and confine Tab.\r\n rerender(<NestedHarness innerActive={true} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Inner-B\" })).toHaveFocus();\r\n\r\n // Wrap inside the inner trap, NOT escape to Outer-2.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n test(\"outer trap resumes after inner unmounts\", async () => {\r\n const { rerender } = render(<NestedHarness innerActive={true} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n // Unmount inner. Outer trap should resume duty.\r\n rerender(<NestedHarness innerActive={false} />);\r\n\r\n // Tab inside the outer container — must stay inside, not leak to body.\r\n // (We don't assert the exact focused element after rerender because\r\n // restoration depends on whether the previously-focused element is\r\n // still mounted; we DO assert that focus lands on one of the outer\r\n // buttons — isFocused() catches both \"lost to body\" and \"landed\r\n // somewhere unexpected\" in one check, without reading\r\n // document.activeElement directly.)\r\n await userEvent.tab();\r\n const outer1 = screen.getByRole(\"button\", { name: \"Outer-1\" });\r\n const outer2 = screen.getByRole(\"button\", { name: \"Outer-2\" });\r\n expect(isFocused(outer1) || isFocused(outer2)).toBe(true);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useFocusTrap.test.js","names":["React","render","waitFor","cleanup","screen","userEvent","useFocusTrap","jsx","_jsx","jsxs","_jsxs","realGetClientRects","Element","prototype","getClientRects","beforeAll","rect","x","y","top","left","right","bottom","width","height","toJSON","list","Object","assign","item","i","afterAll","Trapped","children","active","containerProps","ref","useRef","isFocused","el","expect","toHaveFocus","afterEach","describe","test","getByRole","name","autoFocus","not","toThrow","tab","shift","disabled","NestedHarness","innerActive","rerender","outer1","outer2","toBe"],"sources":["../../../../src/lib/v2/__tests__/useFocusTrap.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, waitFor, cleanup, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\n\r\n/* ── jsdom LAYOUT SHIM — REQUIRED, NOT A CONVENIENCE ────────────────────────\r\n *\r\n * Without this, EVERY test in this file fails at its first `waitFor`, with focus\r\n * sitting on <body>. The cause is not the hook:\r\n *\r\n * `useFocusTrap.isVisuallyFocusable` rejects an element whose\r\n * `getClientRects()` is empty — a cheap, correct test for `display:none` and\r\n * `visibility:hidden` in a real browser.\r\n *\r\n * jsdom PERFORMS NO LAYOUT. `getClientRects()` returns an empty list for every\r\n * element, always. So the filter discards all candidates, `getFocusable()`\r\n * returns `[]`, nothing is focused, and all eight assertions fail for one\r\n * reason that has nothing to do with focus management.\r\n *\r\n * This shim gives every element a non-zero rect so the visibility filter behaves\r\n * as it does in a browser. It does NOT weaken the tests: the hook's other\r\n * exclusions — `disabled`, `aria-disabled`, and the ancestor walk for `hidden` /\r\n * `aria-hidden` / `inert` — are all ATTRIBUTE-based, work correctly in jsdom, and\r\n * remain fully exercised (see the \"disabled / aria-hidden filtering\" block).\r\n *\r\n * ⚠ Diagnosed during the procuration-portnet-fe certification audit, where these\r\n * eight failures were initially suspected of being a real WCAG R-M.2 breach\r\n * across all consuming modules. They were not. Do NOT \"fix\" this by relaxing the\r\n * rect check in the hook — that check is what stops a trap focusing an invisible\r\n * control in production.\r\n *\r\n * Restored in `afterAll` so the patch cannot leak into other suites. */\r\nconst realGetClientRects = Element.prototype.getClientRects;\r\n\r\nbeforeAll(() => {\r\n Element.prototype.getClientRects = function getClientRects(this: Element) {\r\n const rect: DOMRect = {\r\n x: 0,\r\n y: 0,\r\n top: 0,\r\n left: 0,\r\n right: 10,\r\n bottom: 10,\r\n width: 10,\r\n height: 10,\r\n toJSON: () => ({}),\r\n };\r\n const list = [rect];\r\n return Object.assign(list, {\r\n item: (i: number): DOMRect | null => list[i] ?? null,\r\n }) as unknown as DOMRectList;\r\n };\r\n});\r\n\r\nafterAll(() => {\r\n Element.prototype.getClientRects = realGetClientRects;\r\n});\r\n\r\n/**\r\n * Smoke + contract tests for the Batch 3 useFocusTrap refactor.\r\n *\r\n * Test harness — a minimal trap container component. Defaults to\r\n * active=true so tests don't have to flip props.\r\n */\r\ntype ContainerProps = React.HTMLAttributes<HTMLDivElement> & {\r\n [key: `data-${string}`]: string;\r\n};\r\n\r\ninterface TrappedProps {\r\n children?: React.ReactNode;\r\n active?: boolean;\r\n containerProps?: ContainerProps;\r\n}\r\n\r\nfunction Trapped({\r\n children,\r\n active = true,\r\n containerProps,\r\n}: TrappedProps): React.JSX.Element {\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(ref, active);\r\n return (\r\n <div ref={ref} {...containerProps}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Returns whether `el` currently has focus, without touching\r\n * document.activeElement directly (testing-library/no-node-access) —\r\n * delegates to jest-dom's toHaveFocus() matcher and converts its pass/fail\r\n * into a boolean so several candidates can be checked in a single\r\n * \"focus is on ONE of these\" assertion (see the \"outer trap resumes\" test).\r\n */\r\nfunction isFocused(el: HTMLElement): boolean {\r\n try {\r\n expect(el).toHaveFocus();\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nafterEach(() => {\r\n cleanup();\r\n});\r\n\r\ndescribe(\"useFocusTrap — initial focus\", () => {\r\n test(\"focuses the first focusable element when activated\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"[autofocus] priority wins over the first focusable\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button autoFocus>Auto</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Auto\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"[data-autofocus] priority is honoured (alternative attribute)\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button data-autofocus>Marker</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Marker\" })).toHaveFocus();\r\n });\r\n });\r\n\r\n test(\"does not crash when the trap container is empty\", () => {\r\n expect(() =>\r\n render(<Trapped containerProps={{ \"data-testid\": \"empty\" }} />)\r\n ).not.toThrow();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — Tab cycling\", () => {\r\n test(\"Tab cycles forward and wraps to the first element\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n <button>Third</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Second\" })).toHaveFocus();\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n\r\n // Wrap from last to first\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n test(\"Shift+Tab from the first wraps to the last\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Second</button>\r\n <button>Last</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab({ shift: true });\r\n expect(screen.getByRole(\"button\", { name: \"Last\" })).toHaveFocus();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — disabled / aria-hidden filtering\", () => {\r\n test(\"disabled buttons are skipped during cycling\", async () => {\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button disabled>Disabled</button>\r\n <button>Third</button>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n // Tab should jump from First → Third, skipping Disabled.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n });\r\n\r\n test(\"[aria-hidden=true] subtree is excluded from the cycle boundary\", async () => {\r\n /* WHY THE aria-hidden SUBTREE IS LAST, AND WHY THIS ASSERTS THE WRAP\r\n *\r\n * This test previously placed the aria-hidden subtree in the MIDDLE and\r\n * expected a single Tab to jump First → Third. It failed, and the hook was\r\n * not at fault: of the three attributes isVisuallyFocusable walks,\r\n * `hidden` and `inert` remove an element from the NATIVE tab order, but\r\n * `aria-hidden` does NOT — per spec it annotates the accessibility tree\r\n * only. useFocusTrap intercepts Tab at the cycle BOUNDARIES (first/last)\r\n * and defers mid-cycle moves to the browser, so a native Tab lands on the\r\n * aria-hidden button no matter what getFocusable() returned.\r\n *\r\n * A focusable control inside aria-hidden=\"true\" is a CONTENT defect (axe\r\n * `aria-hidden-focus`); use `inert` (or `hidden`) to take a subtree out of\r\n * interaction. What the filter genuinely guarantees is that such an element\r\n * is never treated as the cycle's first/last — so the trap never DELIVERS\r\n * focus into it. That is what is asserted here: with the subtree last,\r\n * `last` is still \"Third\", so Tab from Third wraps to First instead of\r\n * proceeding natively into \"Hidden\".\r\n *\r\n * Do NOT restore the mid-cycle form without also converting the hook to\r\n * intercept every Tab — see the boundary-scope note in useFocusTrap.ts. */\r\n render(\r\n <Trapped>\r\n <button>First</button>\r\n <button>Third</button>\r\n <div aria-hidden=\"true\">\r\n <button>Hidden</button>\r\n </div>\r\n </Trapped>\r\n );\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Third\" })).toHaveFocus();\r\n\r\n // \"Third\" is the LAST focusable the trap recognises: the aria-hidden\r\n // button is filtered out, so Tab wraps rather than entering it.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"First\" })).toHaveFocus();\r\n });\r\n});\r\n\r\ndescribe(\"useFocusTrap — nested traps (Batch 3 stack contract)\", () => {\r\n /**\r\n * Nested-trap harness. Outer trap is always-active; inner trap is\r\n * controlled by `innerActive`. When the inner mounts, Tab cycles\r\n * inside it; when the inner unmounts, the outer trap resumes.\r\n */\r\n interface NestedHarnessProps {\r\n innerActive: boolean;\r\n }\r\n\r\n function NestedHarness({ innerActive }: NestedHarnessProps): React.JSX.Element {\r\n return (\r\n <Trapped>\r\n <button>Outer-1</button>\r\n <button>Outer-2</button>\r\n {innerActive && (\r\n <Trapped containerProps={{ \"data-testid\": \"inner\" }}>\r\n <button>Inner-A</button>\r\n <button>Inner-B</button>\r\n </Trapped>\r\n )}\r\n </Trapped>\r\n );\r\n }\r\n\r\n test(\"inner trap takes over Tab cycling when active\", async () => {\r\n const { rerender } = render(<NestedHarness innerActive={false} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Outer-1\" })).toHaveFocus();\r\n });\r\n\r\n // Mount the inner trap — it should grab focus and confine Tab.\r\n rerender(<NestedHarness innerActive={true} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Inner-B\" })).toHaveFocus();\r\n\r\n // Wrap inside the inner trap, NOT escape to Outer-2.\r\n await userEvent.tab();\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n test(\"outer trap resumes after inner unmounts\", async () => {\r\n const { rerender } = render(<NestedHarness innerActive={true} />);\r\n await waitFor(() => {\r\n expect(screen.getByRole(\"button\", { name: \"Inner-A\" })).toHaveFocus();\r\n });\r\n\r\n // Unmount inner. Outer trap should resume duty.\r\n rerender(<NestedHarness innerActive={false} />);\r\n\r\n // Tab inside the outer container — must stay inside, not leak to body.\r\n // (We don't assert the exact focused element after rerender because\r\n // restoration depends on whether the previously-focused element is\r\n // still mounted; we DO assert that focus lands on one of the outer\r\n // buttons — isFocused() catches both \"lost to body\" and \"landed\r\n // somewhere unexpected\" in one check, without reading\r\n // document.activeElement directly.)\r\n await userEvent.tab();\r\n const outer1 = screen.getByRole(\"button\", { name: \"Outer-1\" });\r\n const outer2 = screen.getByRole(\"button\", { name: \"Outer-2\" });\r\n expect(isFocused(outer1) || isFocused(outer2)).toBe(true);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,120 @@
1
+ import "@testing-library/jest-dom";
2
+ import { render, screen, act, cleanup } from "@testing-library/react";
3
+ import usePrefersReducedMotion, { PREFERS_REDUCED_MOTION_QUERY } from "../hooks/usePrefersReducedMotion";
4
+
5
+ /* ── Why a hand-rolled MediaQueryList ───────────────────────────────────────
6
+ *
7
+ * jsdom implements `window.matchMedia`, but it does not EVALUATE the query: it
8
+ * answers `matches: false` for everything and never emits a `change` event. So
9
+ * jsdom can tell us the hook does not crash, and nothing else — not the value
10
+ * it reads, and above all not the subscription, which is the entire reason the
11
+ * hook exists (see its header: every host copy was a non-subscribing snapshot).
12
+ *
13
+ * The fake below is therefore the subject under test as much as the hook is: it
14
+ * records the query string, lets a test flip `matches`, and emits `change` the
15
+ * way a browser does. */
16
+ import { jsx as _jsx } from "react/jsx-runtime";
17
+ const createFakeMql = initial => {
18
+ const listeners = new Set();
19
+ const mql = {
20
+ media: "",
21
+ matches: initial,
22
+ listeners,
23
+ addEventListener: jest.fn((type, listener) => {
24
+ if (type === "change") listeners.add(listener);
25
+ }),
26
+ removeEventListener: jest.fn((type, listener) => {
27
+ if (type === "change") listeners.delete(listener);
28
+ }),
29
+ emit: next => {
30
+ mql.matches = next;
31
+ listeners.forEach(listener => listener({
32
+ matches: next
33
+ }));
34
+ }
35
+ };
36
+ return mql;
37
+ };
38
+ function Probe() {
39
+ const reduced = usePrefersReducedMotion();
40
+ return /*#__PURE__*/_jsx("span", {
41
+ "data-testid": "value",
42
+ children: reduced ? "reduced" : "full"
43
+ });
44
+ }
45
+ const realMatchMedia = window.matchMedia;
46
+ afterEach(() => {
47
+ cleanup();
48
+ Object.defineProperty(window, "matchMedia", {
49
+ configurable: true,
50
+ writable: true,
51
+ value: realMatchMedia
52
+ });
53
+ });
54
+ const installMatchMedia = mql => {
55
+ const impl = jest.fn(query => {
56
+ if (mql === null) throw new Error("matchMedia should not have been called");
57
+ mql.media = query;
58
+ return mql;
59
+ });
60
+ Object.defineProperty(window, "matchMedia", {
61
+ configurable: true,
62
+ writable: true,
63
+ value: impl
64
+ });
65
+ return impl;
66
+ };
67
+ describe("usePrefersReducedMotion", () => {
68
+ it("reads the preference on first render", () => {
69
+ const mql = createFakeMql(true);
70
+ installMatchMedia(mql);
71
+ render(/*#__PURE__*/_jsx(Probe, {}));
72
+ expect(screen.getByTestId("value")).toHaveTextContent("reduced");
73
+ expect(mql.media).toBe(PREFERS_REDUCED_MOTION_QUERY);
74
+ });
75
+ it("returns false when no preference is stated", () => {
76
+ installMatchMedia(createFakeMql(false));
77
+ render(/*#__PURE__*/_jsx(Probe, {}));
78
+ expect(screen.getByTestId("value")).toHaveTextContent("full");
79
+ });
80
+
81
+ /* THE REGRESSION THIS FILE EXISTS FOR — R-7.5 is present tense. The helper
82
+ * this hook replaces read `matches` once during render, so a user enabling
83
+ * the preference mid-session kept every animation until an unrelated
84
+ * re-render. */
85
+ it("re-renders when the preference changes while mounted", () => {
86
+ const mql = createFakeMql(false);
87
+ installMatchMedia(mql);
88
+ render(/*#__PURE__*/_jsx(Probe, {}));
89
+ expect(screen.getByTestId("value")).toHaveTextContent("full");
90
+ act(() => mql.emit(true));
91
+ expect(screen.getByTestId("value")).toHaveTextContent("reduced");
92
+ act(() => mql.emit(false));
93
+ expect(screen.getByTestId("value")).toHaveTextContent("full");
94
+ });
95
+ it("unsubscribes on unmount", () => {
96
+ const mql = createFakeMql(false);
97
+ installMatchMedia(mql);
98
+ const {
99
+ unmount
100
+ } = render(/*#__PURE__*/_jsx(Probe, {}));
101
+ expect(mql.listeners.size).toBe(1);
102
+ unmount();
103
+ expect(mql.listeners.size).toBe(0);
104
+ expect(mql.removeEventListener).toHaveBeenCalled();
105
+ });
106
+
107
+ /* An environment without `matchMedia` must render, not throw: the hook is
108
+ * consumed by module code that also runs in tests and tooling where the
109
+ * method is absent. */
110
+ it("falls back to false when matchMedia is unavailable", () => {
111
+ Object.defineProperty(window, "matchMedia", {
112
+ configurable: true,
113
+ writable: true,
114
+ value: undefined
115
+ });
116
+ render(/*#__PURE__*/_jsx(Probe, {}));
117
+ expect(screen.getByTestId("value")).toHaveTextContent("full");
118
+ });
119
+ });
120
+ //# sourceMappingURL=usePrefersReducedMotion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersReducedMotion.test.js","names":["render","screen","act","cleanup","usePrefersReducedMotion","PREFERS_REDUCED_MOTION_QUERY","jsx","_jsx","createFakeMql","initial","listeners","Set","mql","media","matches","addEventListener","jest","fn","type","listener","add","removeEventListener","delete","emit","next","forEach","Probe","reduced","children","realMatchMedia","window","matchMedia","afterEach","Object","defineProperty","configurable","writable","value","installMatchMedia","impl","query","Error","describe","it","expect","getByTestId","toHaveTextContent","toBe","unmount","size","toHaveBeenCalled","undefined"],"sources":["../../../../src/lib/v2/__tests__/usePrefersReducedMotion.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen, act, cleanup } from \"@testing-library/react\";\r\nimport usePrefersReducedMotion, {\r\n PREFERS_REDUCED_MOTION_QUERY,\r\n} from \"../hooks/usePrefersReducedMotion\";\r\n\r\n/* ── Why a hand-rolled MediaQueryList ───────────────────────────────────────\r\n *\r\n * jsdom implements `window.matchMedia`, but it does not EVALUATE the query: it\r\n * answers `matches: false` for everything and never emits a `change` event. So\r\n * jsdom can tell us the hook does not crash, and nothing else — not the value\r\n * it reads, and above all not the subscription, which is the entire reason the\r\n * hook exists (see its header: every host copy was a non-subscribing snapshot).\r\n *\r\n * The fake below is therefore the subject under test as much as the hook is: it\r\n * records the query string, lets a test flip `matches`, and emits `change` the\r\n * way a browser does. */\r\ntype Listener = (event: MediaQueryListEvent) => void;\r\n\r\ninterface FakeMql {\r\n media: string;\r\n matches: boolean;\r\n listeners: Set<Listener>;\r\n addEventListener: jest.Mock;\r\n removeEventListener: jest.Mock;\r\n /** Flips the preference and notifies, as the platform would. */\r\n emit: (next: boolean) => void;\r\n}\r\n\r\nconst createFakeMql = (initial: boolean): FakeMql => {\r\n const listeners = new Set<Listener>();\r\n const mql: FakeMql = {\r\n media: \"\",\r\n matches: initial,\r\n listeners,\r\n addEventListener: jest.fn((type: string, listener: Listener) => {\r\n if (type === \"change\") listeners.add(listener);\r\n }),\r\n removeEventListener: jest.fn((type: string, listener: Listener) => {\r\n if (type === \"change\") listeners.delete(listener);\r\n }),\r\n emit: (next: boolean) => {\r\n mql.matches = next;\r\n listeners.forEach((listener) =>\r\n listener({ matches: next } as MediaQueryListEvent)\r\n );\r\n },\r\n };\r\n return mql;\r\n};\r\n\r\nfunction Probe() {\r\n const reduced = usePrefersReducedMotion();\r\n return <span data-testid=\"value\">{reduced ? \"reduced\" : \"full\"}</span>;\r\n}\r\n\r\nconst realMatchMedia = window.matchMedia;\r\n\r\nafterEach(() => {\r\n cleanup();\r\n Object.defineProperty(window, \"matchMedia\", {\r\n configurable: true,\r\n writable: true,\r\n value: realMatchMedia,\r\n });\r\n});\r\n\r\nconst installMatchMedia = (mql: FakeMql | null): jest.Mock => {\r\n const impl = jest.fn((query: string) => {\r\n if (mql === null) throw new Error(\"matchMedia should not have been called\");\r\n mql.media = query;\r\n return mql as unknown as MediaQueryList;\r\n });\r\n Object.defineProperty(window, \"matchMedia\", {\r\n configurable: true,\r\n writable: true,\r\n value: impl,\r\n });\r\n return impl;\r\n};\r\n\r\ndescribe(\"usePrefersReducedMotion\", () => {\r\n it(\"reads the preference on first render\", () => {\r\n const mql = createFakeMql(true);\r\n installMatchMedia(mql);\r\n\r\n render(<Probe />);\r\n\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"reduced\");\r\n expect(mql.media).toBe(PREFERS_REDUCED_MOTION_QUERY);\r\n });\r\n\r\n it(\"returns false when no preference is stated\", () => {\r\n installMatchMedia(createFakeMql(false));\r\n\r\n render(<Probe />);\r\n\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"full\");\r\n });\r\n\r\n /* THE REGRESSION THIS FILE EXISTS FOR — R-7.5 is present tense. The helper\r\n * this hook replaces read `matches` once during render, so a user enabling\r\n * the preference mid-session kept every animation until an unrelated\r\n * re-render. */\r\n it(\"re-renders when the preference changes while mounted\", () => {\r\n const mql = createFakeMql(false);\r\n installMatchMedia(mql);\r\n\r\n render(<Probe />);\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"full\");\r\n\r\n act(() => mql.emit(true));\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"reduced\");\r\n\r\n act(() => mql.emit(false));\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"full\");\r\n });\r\n\r\n it(\"unsubscribes on unmount\", () => {\r\n const mql = createFakeMql(false);\r\n installMatchMedia(mql);\r\n\r\n const { unmount } = render(<Probe />);\r\n expect(mql.listeners.size).toBe(1);\r\n\r\n unmount();\r\n expect(mql.listeners.size).toBe(0);\r\n expect(mql.removeEventListener).toHaveBeenCalled();\r\n });\r\n\r\n /* An environment without `matchMedia` must render, not throw: the hook is\r\n * consumed by module code that also runs in tests and tooling where the\r\n * method is absent. */\r\n it(\"falls back to false when matchMedia is unavailable\", () => {\r\n Object.defineProperty(window, \"matchMedia\", {\r\n configurable: true,\r\n writable: true,\r\n value: undefined,\r\n });\r\n\r\n render(<Probe />);\r\n\r\n expect(screen.getByTestId(\"value\")).toHaveTextContent(\"full\");\r\n });\r\n});\r\n"],"mappings":"AAAA,OAAO,2BAA2B;AAClC,SAASA,MAAM,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,QAAQ,wBAAwB;AACrE,OAAOC,uBAAuB,IAC5BC,4BAA4B,QACvB,kCAAkC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA,SAAAC,GAAA,IAAAC,IAAA;AAuBA,MAAMC,aAAa,GAAIC,OAAgB,IAAc;EACnD,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EACrC,MAAMC,GAAY,GAAG;IACnBC,KAAK,EAAE,EAAE;IACTC,OAAO,EAAEL,OAAO;IAChBC,SAAS;IACTK,gBAAgB,EAAEC,IAAI,CAACC,EAAE,CAAC,CAACC,IAAY,EAAEC,QAAkB,KAAK;MAC9D,IAAID,IAAI,KAAK,QAAQ,EAAER,SAAS,CAACU,GAAG,CAACD,QAAQ,CAAC;IAChD,CAAC,CAAC;IACFE,mBAAmB,EAAEL,IAAI,CAACC,EAAE,CAAC,CAACC,IAAY,EAAEC,QAAkB,KAAK;MACjE,IAAID,IAAI,KAAK,QAAQ,EAAER,SAAS,CAACY,MAAM,CAACH,QAAQ,CAAC;IACnD,CAAC,CAAC;IACFI,IAAI,EAAGC,IAAa,IAAK;MACvBZ,GAAG,CAACE,OAAO,GAAGU,IAAI;MAClBd,SAAS,CAACe,OAAO,CAAEN,QAAQ,IACzBA,QAAQ,CAAC;QAAEL,OAAO,EAAEU;MAAK,CAAwB,CACnD,CAAC;IACH;EACF,CAAC;EACD,OAAOZ,GAAG;AACZ,CAAC;AAED,SAASc,KAAKA,CAAA,EAAG;EACf,MAAMC,OAAO,GAAGvB,uBAAuB,CAAC,CAAC;EACzC,oBAAOG,IAAA;IAAM,eAAY,OAAO;IAAAqB,QAAA,EAAED,OAAO,GAAG,SAAS,GAAG;EAAM,CAAO,CAAC;AACxE;AAEA,MAAME,cAAc,GAAGC,MAAM,CAACC,UAAU;AAExCC,SAAS,CAAC,MAAM;EACd7B,OAAO,CAAC,CAAC;EACT8B,MAAM,CAACC,cAAc,CAACJ,MAAM,EAAE,YAAY,EAAE;IAC1CK,YAAY,EAAE,IAAI;IAClBC,QAAQ,EAAE,IAAI;IACdC,KAAK,EAAER;EACT,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAMS,iBAAiB,GAAI1B,GAAmB,IAAgB;EAC5D,MAAM2B,IAAI,GAAGvB,IAAI,CAACC,EAAE,CAAEuB,KAAa,IAAK;IACtC,IAAI5B,GAAG,KAAK,IAAI,EAAE,MAAM,IAAI6B,KAAK,CAAC,wCAAwC,CAAC;IAC3E7B,GAAG,CAACC,KAAK,GAAG2B,KAAK;IACjB,OAAO5B,GAAG;EACZ,CAAC,CAAC;EACFqB,MAAM,CAACC,cAAc,CAACJ,MAAM,EAAE,YAAY,EAAE;IAC1CK,YAAY,EAAE,IAAI;IAClBC,QAAQ,EAAE,IAAI;IACdC,KAAK,EAAEE;EACT,CAAC,CAAC;EACF,OAAOA,IAAI;AACb,CAAC;AAEDG,QAAQ,CAAC,yBAAyB,EAAE,MAAM;EACxCC,EAAE,CAAC,sCAAsC,EAAE,MAAM;IAC/C,MAAM/B,GAAG,GAAGJ,aAAa,CAAC,IAAI,CAAC;IAC/B8B,iBAAiB,CAAC1B,GAAG,CAAC;IAEtBZ,MAAM,cAACO,IAAA,CAACmB,KAAK,IAAE,CAAC,CAAC;IAEjBkB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,SAAS,CAAC;IAChEF,MAAM,CAAChC,GAAG,CAACC,KAAK,CAAC,CAACkC,IAAI,CAAC1C,4BAA4B,CAAC;EACtD,CAAC,CAAC;EAEFsC,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrDL,iBAAiB,CAAC9B,aAAa,CAAC,KAAK,CAAC,CAAC;IAEvCR,MAAM,cAACO,IAAA,CAACmB,KAAK,IAAE,CAAC,CAAC;IAEjBkB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,MAAM,CAAC;EAC/D,CAAC,CAAC;;EAEF;AACF;AACA;AACA;EACEH,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/D,MAAM/B,GAAG,GAAGJ,aAAa,CAAC,KAAK,CAAC;IAChC8B,iBAAiB,CAAC1B,GAAG,CAAC;IAEtBZ,MAAM,cAACO,IAAA,CAACmB,KAAK,IAAE,CAAC,CAAC;IACjBkB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,MAAM,CAAC;IAE7D5C,GAAG,CAAC,MAAMU,GAAG,CAACW,IAAI,CAAC,IAAI,CAAC,CAAC;IACzBqB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,SAAS,CAAC;IAEhE5C,GAAG,CAAC,MAAMU,GAAG,CAACW,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1BqB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,MAAM,CAAC;EAC/D,CAAC,CAAC;EAEFH,EAAE,CAAC,yBAAyB,EAAE,MAAM;IAClC,MAAM/B,GAAG,GAAGJ,aAAa,CAAC,KAAK,CAAC;IAChC8B,iBAAiB,CAAC1B,GAAG,CAAC;IAEtB,MAAM;MAAEoC;IAAQ,CAAC,GAAGhD,MAAM,cAACO,IAAA,CAACmB,KAAK,IAAE,CAAC,CAAC;IACrCkB,MAAM,CAAChC,GAAG,CAACF,SAAS,CAACuC,IAAI,CAAC,CAACF,IAAI,CAAC,CAAC,CAAC;IAElCC,OAAO,CAAC,CAAC;IACTJ,MAAM,CAAChC,GAAG,CAACF,SAAS,CAACuC,IAAI,CAAC,CAACF,IAAI,CAAC,CAAC,CAAC;IAClCH,MAAM,CAAChC,GAAG,CAACS,mBAAmB,CAAC,CAAC6B,gBAAgB,CAAC,CAAC;EACpD,CAAC,CAAC;;EAEF;AACF;AACA;EACEP,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7DV,MAAM,CAACC,cAAc,CAACJ,MAAM,EAAE,YAAY,EAAE;MAC1CK,YAAY,EAAE,IAAI;MAClBC,QAAQ,EAAE,IAAI;MACdC,KAAK,EAAEc;IACT,CAAC,CAAC;IAEFnD,MAAM,cAACO,IAAA,CAACmB,KAAK,IAAE,CAAC,CAAC;IAEjBkB,MAAM,CAAC3C,MAAM,CAAC4C,WAAW,CAAC,OAAO,CAAC,CAAC,CAACC,iBAAiB,CAAC,MAAM,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,19 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- var _excluded = ["children", "defaultOpen", "open", "onChange", "mode", "sx"],
3
- _excluded2 = ["id", "title", "badge", "icon", "children", "sx"];
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
8
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
14
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
16
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
17
1
  import * as React from "react";
18
2
  import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
19
3
  import Box from "@mui/material/Box";
@@ -53,55 +37,47 @@ import Box from "@mui/material/Box";
53
37
  * (mutually-exclusive accordion)
54
38
  */
55
39
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
56
- var AccordionContext = /*#__PURE__*/React.createContext(null);
57
- function Accordion(_ref) {
58
- var children = _ref.children,
59
- defaultOpen = _ref.defaultOpen,
60
- open = _ref.open,
61
- onChange = _ref.onChange,
62
- _ref$mode = _ref.mode,
63
- mode = _ref$mode === void 0 ? "multiple" : _ref$mode,
64
- sx = _ref.sx,
65
- rest = _objectWithoutProperties(_ref, _excluded);
66
- var controlled = open !== undefined;
67
- var _React$useState = React.useState(function () {
68
- return new Set(defaultOpen || []);
69
- }),
70
- _React$useState2 = _slicedToArray(_React$useState, 2),
71
- internalOpen = _React$useState2[0],
72
- setInternalOpen = _React$useState2[1];
73
- var openSet = React.useMemo(function () {
74
- return controlled ? new Set(open) : internalOpen;
75
- }, [controlled, open, internalOpen]);
76
- var toggle = React.useCallback(function (id) {
77
- var next = new Set(openSet);
40
+ const AccordionContext = /*#__PURE__*/React.createContext(null);
41
+ function Accordion({
42
+ children,
43
+ defaultOpen,
44
+ open,
45
+ onChange,
46
+ mode = "multiple",
47
+ sx,
48
+ ...rest
49
+ }) {
50
+ const controlled = open !== undefined;
51
+ const [internalOpen, setInternalOpen] = React.useState(() => new Set(defaultOpen || []));
52
+ const openSet = React.useMemo(() => controlled ? new Set(open) : internalOpen, [controlled, open, internalOpen]);
53
+ const toggle = React.useCallback(id => {
54
+ const next = new Set(openSet);
78
55
  if (next.has(id)) {
79
- next["delete"](id);
56
+ next.delete(id);
80
57
  } else {
81
58
  if (mode === "single") next.clear();
82
59
  next.add(id);
83
60
  }
84
- var nextArr = Array.from(next);
61
+ const nextArr = Array.from(next);
85
62
  if (!controlled) setInternalOpen(next);
86
- onChange === null || onChange === void 0 ? void 0 : onChange(nextArr);
63
+ onChange?.(nextArr);
87
64
  }, [openSet, mode, controlled, onChange]);
88
- var ctx = React.useMemo(function () {
89
- return {
90
- openSet: openSet,
91
- toggle: toggle
92
- };
93
- }, [openSet, toggle]);
65
+ const ctx = React.useMemo(() => ({
66
+ openSet,
67
+ toggle
68
+ }), [openSet, toggle]);
94
69
  return /*#__PURE__*/_jsx(AccordionContext.Provider, {
95
70
  value: ctx,
96
- children: /*#__PURE__*/_jsx(Box, _objectSpread(_objectSpread({
97
- sx: _objectSpread({
71
+ children: /*#__PURE__*/_jsx(Box, {
72
+ sx: {
98
73
  display: "flex",
99
74
  flexDirection: "column",
100
- gap: "var(--s-2)"
101
- }, sx)
102
- }, rest), {}, {
75
+ gap: "var(--s-2)",
76
+ ...sx
77
+ },
78
+ ...rest,
103
79
  children: children
104
- }))
80
+ })
105
81
  });
106
82
  }
107
83
 
@@ -114,33 +90,34 @@ function Accordion(_ref) {
114
90
  // context state and is never meant to be re-parented or native-name-grouped,
115
91
  // so neither should be an externally settable prop.
116
92
 
117
- function AccordionItem(_ref2) {
118
- var id = _ref2.id,
119
- title = _ref2.title,
120
- badge = _ref2.badge,
121
- icon = _ref2.icon,
122
- children = _ref2.children,
123
- sx = _ref2.sx,
124
- rest = _objectWithoutProperties(_ref2, _excluded2);
125
- var ctx = React.useContext(AccordionContext);
93
+ function AccordionItem({
94
+ id,
95
+ title,
96
+ badge,
97
+ icon,
98
+ children,
99
+ sx,
100
+ ...rest
101
+ }) {
102
+ const ctx = React.useContext(AccordionContext);
126
103
  if (!ctx) {
127
104
  throw new Error("Accordion.Item must be rendered inside <Accordion>.");
128
105
  }
129
- var isOpen = ctx.openSet.has(id);
106
+ const isOpen = ctx.openSet.has(id);
130
107
 
131
108
  /* React's controlled <details>/open is fiddly — we use the native
132
109
  * element but intercept the click on the summary, preventing the
133
110
  * default toggle so our state stays the single source of truth. */
134
- var handleClick = function handleClick(e) {
111
+ const handleClick = e => {
135
112
  e.preventDefault();
136
113
  ctx.toggle(id);
137
114
  };
138
- return /*#__PURE__*/_jsxs(Box, _objectSpread(_objectSpread({
115
+ return /*#__PURE__*/_jsxs(Box, {
139
116
  component: "details"
140
117
  // We re-render with the boolean so React/DOM stay in sync.
141
118
  ,
142
119
  open: isOpen || undefined,
143
- sx: _objectSpread({
120
+ sx: {
144
121
  border: "1px solid var(--border)",
145
122
  borderRadius: "var(--r-md)",
146
123
  background: "var(--surface)",
@@ -151,9 +128,10 @@ function AccordionItem(_ref2) {
151
128
  },
152
129
  "& > summary": {
153
130
  listStyle: "none"
154
- }
155
- }, sx)
156
- }, rest), {}, {
131
+ },
132
+ ...sx
133
+ },
134
+ ...rest,
157
135
  children: [/*#__PURE__*/_jsxs(Box, {
158
136
  component: "summary",
159
137
  onClick: handleClick,
@@ -222,7 +200,7 @@ function AccordionItem(_ref2) {
222
200
  },
223
201
  children: children
224
202
  })]
225
- }));
203
+ });
226
204
  }
227
205
  export default Object.assign(Accordion, {
228
206
  Item: AccordionItem
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","names":["React","ExpandMoreIcon","Box","jsx","_jsx","jsxs","_jsxs","AccordionContext","createContext","Accordion","_ref","children","defaultOpen","open","onChange","_ref$mode","mode","sx","rest","_objectWithoutProperties","_excluded","controlled","undefined","_React$useState","useState","Set","_React$useState2","_slicedToArray","internalOpen","setInternalOpen","openSet","useMemo","toggle","useCallback","id","next","has","clear","add","nextArr","Array","from","ctx","Provider","value","_objectSpread","display","flexDirection","gap","AccordionItem","_ref2","title","badge","icon","_excluded2","useContext","Error","isOpen","handleClick","e","preventDefault","component","border","borderRadius","background","listStyle","onClick","alignItems","padding","cursor","userSelect","fontSize","fontWeight","color","outline","outlineOffset","flex","minWidth","transition","transform","borderTop","Object","assign","Item"],"sources":["../../../../src/lib/v2/components/Accordion.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { BoxProps } from \"@mui/material/Box\";\r\n\r\n/**\r\n * Accordion — Portnet UI v2\r\n *\r\n * Charter §03 · atomic disclosure primitive. Replaces the local\r\n * AppAccordion wrapper that host modules previously maintained\r\n * (audit Batch 2 violation C1 in ms-ti-fe — direct MUI Accordion\r\n * with no tokens / a11y harmonisation).\r\n *\r\n * Implementation uses native <details>/<summary> elements so the\r\n * keyboard interaction (Enter/Space to toggle, Tab to enter\r\n * content) and ARIA role/state mapping come from the browser\r\n * (WCAG 2.1 SC 4.1.2, R-Ar.1).\r\n *\r\n * Compound-component API:\r\n *\r\n * <Accordion defaultOpen={[\"general\"]}>\r\n * <Accordion.Item id=\"general\" title=\"Informations générales\">\r\n * … content …\r\n * </Accordion.Item>\r\n * <Accordion.Item id=\"documents\" title=\"Documents joints\" badge=\"5\">\r\n * … content …\r\n * </Accordion.Item>\r\n * </Accordion>\r\n *\r\n * Controlled mode:\r\n *\r\n * const [open, setOpen] = useState([\"general\"]);\r\n * <Accordion open={open} onChange={setOpen}>…</Accordion>\r\n *\r\n * Modes:\r\n * \"multiple\" (default) — any number of items may be open\r\n * \"single\" — only one item open at a time\r\n * (mutually-exclusive accordion)\r\n */\r\n\r\nexport type AccordionMode = \"multiple\" | \"single\";\r\n\r\ninterface AccordionContextValue {\r\n openSet: Set<string>;\r\n toggle: (id: string) => void;\r\n}\r\n\r\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\r\n\r\nexport interface AccordionProps extends Omit<BoxProps, \"onChange\"> {\r\n defaultOpen?: string[] | undefined;\r\n open?: string[] | undefined;\r\n onChange?: ((open: string[]) => void) | undefined;\r\n mode?: AccordionMode | undefined;\r\n}\r\n\r\nfunction Accordion({\r\n children,\r\n defaultOpen,\r\n open,\r\n onChange,\r\n mode = \"multiple\",\r\n sx,\r\n ...rest\r\n}: AccordionProps) {\r\n const controlled = open !== undefined;\r\n const [internalOpen, setInternalOpen] = React.useState<Set<string>>(() =>\r\n new Set<string>(defaultOpen || [])\r\n );\r\n\r\n const openSet = React.useMemo(\r\n () => (controlled ? new Set<string>(open) : internalOpen),\r\n [controlled, open, internalOpen]\r\n );\r\n\r\n const toggle = React.useCallback(\r\n (id: string) => {\r\n const next = new Set<string>(openSet);\r\n if (next.has(id)) {\r\n next.delete(id);\r\n } else {\r\n if (mode === \"single\") next.clear();\r\n next.add(id);\r\n }\r\n const nextArr = Array.from(next);\r\n if (!controlled) setInternalOpen(next);\r\n onChange?.(nextArr);\r\n },\r\n [openSet, mode, controlled, onChange]\r\n );\r\n\r\n const ctx = React.useMemo<AccordionContextValue>(\r\n () => ({ openSet, toggle }),\r\n [openSet, toggle]\r\n );\r\n\r\n return (\r\n <AccordionContext.Provider value={ctx}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-2)\",\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n {children}\r\n </Box>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n// BoxProps<\"details\">: AccordionItem always renders through native <details>,\r\n// so its inherited DOM-attribute surface (onClick, onCopy, aria-*, ...) must\r\n// be typed against HTMLDetailsElement, not the plain-BoxProps default of\r\n// HTMLDivElement — otherwise every handler mismatches the details overload\r\n// once `component=\"details\"` resolves cleanly (TS2769). `component` / `open` /\r\n// `name` are additionally omitted: this item owns `open` via Accordion's\r\n// context state and is never meant to be re-parented or native-name-grouped,\r\n// so neither should be an externally settable prop.\r\nexport interface AccordionItemProps\r\n extends Omit<BoxProps<\"details\">, \"id\" | \"title\" | \"open\" | \"name\" | \"component\"> {\r\n id: string;\r\n title: React.ReactNode;\r\n badge?: React.ReactNode | undefined;\r\n icon?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction AccordionItem({ id, title, badge, icon, children, sx, ...rest }: AccordionItemProps) {\r\n const ctx = React.useContext(AccordionContext);\r\n if (!ctx) {\r\n throw new Error(\"Accordion.Item must be rendered inside <Accordion>.\");\r\n }\r\n const isOpen = ctx.openSet.has(id);\r\n\r\n /* React's controlled <details>/open is fiddly — we use the native\r\n * element but intercept the click on the summary, preventing the\r\n * default toggle so our state stays the single source of truth. */\r\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\r\n e.preventDefault();\r\n ctx.toggle(id);\r\n };\r\n\r\n return (\r\n <Box\r\n component=\"details\"\r\n // We re-render with the boolean so React/DOM stay in sync.\r\n open={isOpen || undefined}\r\n sx={{\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n background: \"var(--surface)\",\r\n // Remove the default browser triangle marker — we render\r\n // our own chevron in the summary content.\r\n \"& > summary::-webkit-details-marker\": { display: \"none\" },\r\n \"& > summary\": { listStyle: \"none\" },\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n <Box\r\n component=\"summary\"\r\n onClick={handleClick}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n cursor: \"pointer\",\r\n userSelect: \"none\",\r\n borderRadius: \"var(--r-md)\",\r\n fontSize: \"var(--text-body)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n color: \"var(--fg-muted)\",\r\n display: \"inline-flex\",\r\n \"& svg\": { fontSize: 18 },\r\n }}\r\n >\r\n {icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{title}</Box>\r\n {badge != null && (\r\n <Box\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"2px 8px\",\r\n }}\r\n >\r\n {badge}\r\n </Box>\r\n )}\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: \"var(--fg-muted)\",\r\n transition: \"transform var(--duration-base, 180ms)\",\r\n transform: isOpen ? \"rotate(180deg)\" : \"rotate(0deg)\",\r\n \"& svg\": { fontSize: 20 },\r\n \"@media (prefers-reduced-motion: reduce)\": {\r\n transition: \"none\",\r\n },\r\n }}\r\n >\r\n <ExpandMoreIcon />\r\n </Box>\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n padding: \"var(--s-2) var(--s-4) var(--s-4)\",\r\n borderTop: \"1px solid var(--border-subtle, var(--border))\",\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Object.assign(Accordion, { Item: AccordionItem });\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Accordion.js","names":["React","ExpandMoreIcon","Box","jsx","_jsx","jsxs","_jsxs","AccordionContext","createContext","Accordion","children","defaultOpen","open","onChange","mode","sx","rest","controlled","undefined","internalOpen","setInternalOpen","useState","Set","openSet","useMemo","toggle","useCallback","id","next","has","delete","clear","add","nextArr","Array","from","ctx","Provider","value","display","flexDirection","gap","AccordionItem","title","badge","icon","useContext","Error","isOpen","handleClick","e","preventDefault","component","border","borderRadius","background","listStyle","onClick","alignItems","padding","cursor","userSelect","fontSize","fontWeight","color","outline","outlineOffset","flex","minWidth","transition","transform","borderTop","Object","assign","Item"],"sources":["../../../../src/lib/v2/components/Accordion.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { BoxProps } from \"@mui/material/Box\";\r\n\r\n/**\r\n * Accordion — Portnet UI v2\r\n *\r\n * Charter §03 · atomic disclosure primitive. Replaces the local\r\n * AppAccordion wrapper that host modules previously maintained\r\n * (audit Batch 2 violation C1 in ms-ti-fe — direct MUI Accordion\r\n * with no tokens / a11y harmonisation).\r\n *\r\n * Implementation uses native <details>/<summary> elements so the\r\n * keyboard interaction (Enter/Space to toggle, Tab to enter\r\n * content) and ARIA role/state mapping come from the browser\r\n * (WCAG 2.1 SC 4.1.2, R-Ar.1).\r\n *\r\n * Compound-component API:\r\n *\r\n * <Accordion defaultOpen={[\"general\"]}>\r\n * <Accordion.Item id=\"general\" title=\"Informations générales\">\r\n * … content …\r\n * </Accordion.Item>\r\n * <Accordion.Item id=\"documents\" title=\"Documents joints\" badge=\"5\">\r\n * … content …\r\n * </Accordion.Item>\r\n * </Accordion>\r\n *\r\n * Controlled mode:\r\n *\r\n * const [open, setOpen] = useState([\"general\"]);\r\n * <Accordion open={open} onChange={setOpen}>…</Accordion>\r\n *\r\n * Modes:\r\n * \"multiple\" (default) — any number of items may be open\r\n * \"single\" — only one item open at a time\r\n * (mutually-exclusive accordion)\r\n */\r\n\r\nexport type AccordionMode = \"multiple\" | \"single\";\r\n\r\ninterface AccordionContextValue {\r\n openSet: Set<string>;\r\n toggle: (id: string) => void;\r\n}\r\n\r\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\r\n\r\nexport interface AccordionProps extends Omit<BoxProps, \"onChange\"> {\r\n defaultOpen?: string[] | undefined;\r\n open?: string[] | undefined;\r\n onChange?: ((open: string[]) => void) | undefined;\r\n mode?: AccordionMode | undefined;\r\n}\r\n\r\nfunction Accordion({\r\n children,\r\n defaultOpen,\r\n open,\r\n onChange,\r\n mode = \"multiple\",\r\n sx,\r\n ...rest\r\n}: AccordionProps) {\r\n const controlled = open !== undefined;\r\n const [internalOpen, setInternalOpen] = React.useState<Set<string>>(() =>\r\n new Set<string>(defaultOpen || [])\r\n );\r\n\r\n const openSet = React.useMemo(\r\n () => (controlled ? new Set<string>(open) : internalOpen),\r\n [controlled, open, internalOpen]\r\n );\r\n\r\n const toggle = React.useCallback(\r\n (id: string) => {\r\n const next = new Set<string>(openSet);\r\n if (next.has(id)) {\r\n next.delete(id);\r\n } else {\r\n if (mode === \"single\") next.clear();\r\n next.add(id);\r\n }\r\n const nextArr = Array.from(next);\r\n if (!controlled) setInternalOpen(next);\r\n onChange?.(nextArr);\r\n },\r\n [openSet, mode, controlled, onChange]\r\n );\r\n\r\n const ctx = React.useMemo<AccordionContextValue>(\r\n () => ({ openSet, toggle }),\r\n [openSet, toggle]\r\n );\r\n\r\n return (\r\n <AccordionContext.Provider value={ctx}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-2)\",\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n {children}\r\n </Box>\r\n </AccordionContext.Provider>\r\n );\r\n}\r\n\r\n// BoxProps<\"details\">: AccordionItem always renders through native <details>,\r\n// so its inherited DOM-attribute surface (onClick, onCopy, aria-*, ...) must\r\n// be typed against HTMLDetailsElement, not the plain-BoxProps default of\r\n// HTMLDivElement — otherwise every handler mismatches the details overload\r\n// once `component=\"details\"` resolves cleanly (TS2769). `component` / `open` /\r\n// `name` are additionally omitted: this item owns `open` via Accordion's\r\n// context state and is never meant to be re-parented or native-name-grouped,\r\n// so neither should be an externally settable prop.\r\nexport interface AccordionItemProps\r\n extends Omit<BoxProps<\"details\">, \"id\" | \"title\" | \"open\" | \"name\" | \"component\"> {\r\n id: string;\r\n title: React.ReactNode;\r\n badge?: React.ReactNode | undefined;\r\n icon?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction AccordionItem({ id, title, badge, icon, children, sx, ...rest }: AccordionItemProps) {\r\n const ctx = React.useContext(AccordionContext);\r\n if (!ctx) {\r\n throw new Error(\"Accordion.Item must be rendered inside <Accordion>.\");\r\n }\r\n const isOpen = ctx.openSet.has(id);\r\n\r\n /* React's controlled <details>/open is fiddly — we use the native\r\n * element but intercept the click on the summary, preventing the\r\n * default toggle so our state stays the single source of truth. */\r\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\r\n e.preventDefault();\r\n ctx.toggle(id);\r\n };\r\n\r\n return (\r\n <Box\r\n component=\"details\"\r\n // We re-render with the boolean so React/DOM stay in sync.\r\n open={isOpen || undefined}\r\n sx={{\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n background: \"var(--surface)\",\r\n // Remove the default browser triangle marker — we render\r\n // our own chevron in the summary content.\r\n \"& > summary::-webkit-details-marker\": { display: \"none\" },\r\n \"& > summary\": { listStyle: \"none\" },\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n <Box\r\n component=\"summary\"\r\n onClick={handleClick}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n cursor: \"pointer\",\r\n userSelect: \"none\",\r\n borderRadius: \"var(--r-md)\",\r\n fontSize: \"var(--text-body)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n color: \"var(--fg-muted)\",\r\n display: \"inline-flex\",\r\n \"& svg\": { fontSize: 18 },\r\n }}\r\n >\r\n {icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{title}</Box>\r\n {badge != null && (\r\n <Box\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"2px 8px\",\r\n }}\r\n >\r\n {badge}\r\n </Box>\r\n )}\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: \"var(--fg-muted)\",\r\n transition: \"transform var(--duration-base, 180ms)\",\r\n transform: isOpen ? \"rotate(180deg)\" : \"rotate(0deg)\",\r\n \"& svg\": { fontSize: 20 },\r\n \"@media (prefers-reduced-motion: reduce)\": {\r\n transition: \"none\",\r\n },\r\n }}\r\n >\r\n <ExpandMoreIcon />\r\n </Box>\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n padding: \"var(--s-2) var(--s-4) var(--s-4)\",\r\n borderTop: \"1px solid var(--border-subtle, var(--border))\",\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Object.assign(Accordion, { Item: AccordionItem });\r\n"],"mappings":"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","ignoreList":[]}