@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
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _AppMain = _interopRequireDefault(require("../patterns/AppMain"));
6
+ var _SkipLink = _interopRequireDefault(require("../components/SkipLink"));
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ describe("AppMain", () => {
10
+ it("renders a main landmark holding its children", () => {
11
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
12
+ children: "contenu"
13
+ }));
14
+ const main = _react.screen.getByRole("main");
15
+ expect(main).toHaveTextContent("contenu");
16
+ });
17
+
18
+ /* The id is half of a contract: SkipLink's default href is "#main-content". */
19
+ it("defaults its id to SkipLink's default target", () => {
20
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
21
+ children: "x"
22
+ }));
23
+ expect(_react.screen.getByRole("main")).toHaveAttribute("id", "main-content");
24
+ });
25
+ it("accepts a custom id", () => {
26
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
27
+ id: "zone-principale",
28
+ children: "x"
29
+ }));
30
+ expect(_react.screen.getByRole("main")).toHaveAttribute("id", "zone-principale");
31
+ });
32
+
33
+ /* Focusable programmatically, NOT a tab stop. */
34
+ it("is programmatically focusable without joining the tab order", () => {
35
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
36
+ children: "x"
37
+ }));
38
+ expect(_react.screen.getByRole("main")).toHaveAttribute("tabindex", "-1");
39
+ });
40
+
41
+ /* R-L.5 — and the cap is meaningless without the auto margins: the content
42
+ * would pin left and leave the whole surplus as one gutter. */
43
+ it("caps the wide measure and centres it", () => {
44
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
45
+ children: "x"
46
+ }));
47
+ const main = _react.screen.getByRole("main");
48
+ expect(main.style.maxWidth).toBe("var(--content-max)");
49
+ expect(main.style.marginInline).toBe("auto");
50
+ });
51
+ it("caps the form measure at the form token", () => {
52
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
53
+ measure: "form",
54
+ children: "x"
55
+ }));
56
+ expect(_react.screen.getByRole("main").style.maxWidth).toBe("var(--form-max)");
57
+ });
58
+ it("applies no cap for the full measure", () => {
59
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
60
+ measure: "full",
61
+ children: "x"
62
+ }));
63
+ const main = _react.screen.getByRole("main");
64
+ expect(main.style.maxWidth).toBe("");
65
+ expect(main.style.marginInline).toBe("");
66
+ });
67
+ it("reserves a minimum height, overridable", () => {
68
+ const {
69
+ unmount
70
+ } = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
71
+ children: "x"
72
+ }));
73
+ expect(_react.screen.getByRole("main").style.minHeight).toBe("100vh");
74
+ unmount();
75
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
76
+ minHeight: "480px",
77
+ children: "x"
78
+ }));
79
+ expect(_react.screen.getByRole("main").style.minHeight).toBe("480px");
80
+ });
81
+ it("lets an explicit style win over the computed one", () => {
82
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
83
+ style: {
84
+ maxWidth: "960px"
85
+ },
86
+ children: "x"
87
+ }));
88
+ expect(_react.screen.getByRole("main").style.maxWidth).toBe("960px");
89
+ });
90
+
91
+ /* PRE-CONTENT — the case that made these two props exist. A host rendering
92
+ * the landmark before its router mounts (R-Pp.1) has nothing inside to name
93
+ * it, and an empty landmark is indistinguishable from a failed one. */
94
+ it("names and marks the region busy when asked", () => {
95
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
96
+ ariaLabel: "Initialisation de l'application",
97
+ ariaBusy: true,
98
+ children: null
99
+ }));
100
+ const main = _react.screen.getByRole("main");
101
+ expect(main).toHaveAccessibleName("Initialisation de l'application");
102
+ expect(main).toHaveAttribute("aria-busy", "true");
103
+ });
104
+
105
+ /* And stays silent otherwise: a `<main>` holding content needs no name, and
106
+ * a spurious `aria-busy="false"` on every page would be noise in the tree. */
107
+ it("emits neither attribute by default", () => {
108
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
109
+ children: "contenu"
110
+ }));
111
+ const main = _react.screen.getByRole("main");
112
+ expect(main).not.toHaveAttribute("aria-label");
113
+ expect(main).not.toHaveAttribute("aria-busy");
114
+ });
115
+
116
+ /* THE CONTRACT THIS PATTERN COMPLETES (WCAG 2.4.1 / R-N.6). Until now the
117
+ * library shipped the link and prescribed the target without providing it,
118
+ * so this pairing was only ever exercised in module code. */
119
+ it("receives focus when the skip link is activated", () => {
120
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
121
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SkipLink.default, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
122
+ children: "contenu"
123
+ })]
124
+ }));
125
+
126
+ /* fireEvent rather than user-event: the assertion is about SkipLink's own
127
+ click handler moving focus, and it keeps this suite free of a testing
128
+ dependency the repo may not carry. */
129
+ _react.fireEvent.click(_react.screen.getByRole("link"));
130
+ expect(_react.screen.getByRole("main")).toHaveFocus();
131
+ });
132
+ });
133
+ //# sourceMappingURL=AppMain.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppMain.test.js","names":["require","_react","_AppMain","_interopRequireDefault","_SkipLink","_jsxRuntime","e","__esModule","default","describe","it","render","jsx","children","main","screen","getByRole","expect","toHaveTextContent","toHaveAttribute","id","style","maxWidth","toBe","marginInline","measure","unmount","minHeight","ariaLabel","ariaBusy","toHaveAccessibleName","not","jsxs","Fragment","fireEvent","click","toHaveFocus"],"sources":["../../../src/lib/v2/__tests__/AppMain.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { fireEvent, render, screen } from \"@testing-library/react\";\r\n\r\nimport AppMain from \"../patterns/AppMain\";\r\nimport SkipLink from \"../components/SkipLink\";\r\n\r\ndescribe(\"AppMain\", () => {\r\n it(\"renders a main landmark holding its children\", () => {\r\n render(<AppMain>contenu</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main).toHaveTextContent(\"contenu\");\r\n });\r\n\r\n /* The id is half of a contract: SkipLink's default href is \"#main-content\". */\r\n it(\"defaults its id to SkipLink's default target\", () => {\r\n render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"id\", \"main-content\");\r\n });\r\n\r\n it(\"accepts a custom id\", () => {\r\n render(<AppMain id=\"zone-principale\">x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"id\", \"zone-principale\");\r\n });\r\n\r\n /* Focusable programmatically, NOT a tab stop. */\r\n it(\"is programmatically focusable without joining the tab order\", () => {\r\n render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"tabindex\", \"-1\");\r\n });\r\n\r\n /* R-L.5 — and the cap is meaningless without the auto margins: the content\r\n * would pin left and leave the whole surplus as one gutter. */\r\n it(\"caps the wide measure and centres it\", () => {\r\n render(<AppMain>x</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main.style.maxWidth).toBe(\"var(--content-max)\");\r\n expect(main.style.marginInline).toBe(\"auto\");\r\n });\r\n\r\n it(\"caps the form measure at the form token\", () => {\r\n render(<AppMain measure=\"form\">x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.maxWidth).toBe(\"var(--form-max)\");\r\n });\r\n\r\n it(\"applies no cap for the full measure\", () => {\r\n render(<AppMain measure=\"full\">x</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main.style.maxWidth).toBe(\"\");\r\n expect(main.style.marginInline).toBe(\"\");\r\n });\r\n\r\n it(\"reserves a minimum height, overridable\", () => {\r\n const { unmount } = render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.minHeight).toBe(\"100vh\");\r\n unmount();\r\n\r\n render(<AppMain minHeight=\"480px\">x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.minHeight).toBe(\"480px\");\r\n });\r\n\r\n it(\"lets an explicit style win over the computed one\", () => {\r\n render(<AppMain style={{ maxWidth: \"960px\" }}>x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.maxWidth).toBe(\"960px\");\r\n });\r\n\r\n /* PRE-CONTENT — the case that made these two props exist. A host rendering\r\n * the landmark before its router mounts (R-Pp.1) has nothing inside to name\r\n * it, and an empty landmark is indistinguishable from a failed one. */\r\n it(\"names and marks the region busy when asked\", () => {\r\n render(\r\n <AppMain ariaLabel=\"Initialisation de l'application\" ariaBusy>\r\n {null}\r\n </AppMain>\r\n );\r\n\r\n const main = screen.getByRole(\"main\");\r\n expect(main).toHaveAccessibleName(\"Initialisation de l'application\");\r\n expect(main).toHaveAttribute(\"aria-busy\", \"true\");\r\n });\r\n\r\n /* And stays silent otherwise: a `<main>` holding content needs no name, and\r\n * a spurious `aria-busy=\"false\"` on every page would be noise in the tree. */\r\n it(\"emits neither attribute by default\", () => {\r\n render(<AppMain>contenu</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main).not.toHaveAttribute(\"aria-label\");\r\n expect(main).not.toHaveAttribute(\"aria-busy\");\r\n });\r\n\r\n /* THE CONTRACT THIS PATTERN COMPLETES (WCAG 2.4.1 / R-N.6). Until now the\r\n * library shipped the link and prescribed the target without providing it,\r\n * so this pairing was only ever exercised in module code. */\r\n it(\"receives focus when the skip link is activated\", () => {\r\n render(\r\n <>\r\n <SkipLink />\r\n <AppMain>contenu</AppMain>\r\n </>\r\n );\r\n\r\n /* fireEvent rather than user-event: the assertion is about SkipLink's own\r\n click handler moving focus, and it keeps this suite free of a testing\r\n dependency the repo may not carry. */\r\n fireEvent.click(screen.getByRole(\"link\"));\r\n\r\n expect(screen.getByRole(\"main\")).toHaveFocus();\r\n });\r\n});\r\n"],"mappings":";;AAAAA,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,SAAA,GAAAD,sBAAA,CAAAH,OAAA;AAA8C,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9CG,QAAQ,CAAC,SAAS,EAAE,MAAM;EACxBC,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACvD,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAO,CAAS,CAAC,CAAC;IAClC,MAAMC,IAAI,GAAGC,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC;IACrCC,MAAM,CAACH,IAAI,CAAC,CAACI,iBAAiB,CAAC,SAAS,CAAC;EAC3C,CAAC,CAAC;;EAEF;EACAR,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACvD,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC5BI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAACG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC;EACxE,CAAC,CAAC;EAEFT,EAAE,CAAC,qBAAqB,EAAE,MAAM;IAC9B,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACY,EAAE,EAAC,iBAAiB;MAAAP,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IACjDI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAACG,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC;EAC3E,CAAC,CAAC;;EAEF;EACAT,EAAE,CAAC,6DAA6D,EAAE,MAAM;IACtE,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC5BI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAACG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC;EACpE,CAAC,CAAC;;EAEF;AACF;EACET,EAAE,CAAC,sCAAsC,EAAE,MAAM;IAC/C,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC5B,MAAMC,IAAI,GAAGC,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC;IACrCC,MAAM,CAACH,IAAI,CAACO,KAAK,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,oBAAoB,CAAC;IACtDN,MAAM,CAACH,IAAI,CAACO,KAAK,CAACG,YAAY,CAAC,CAACD,IAAI,CAAC,MAAM,CAAC;EAC9C,CAAC,CAAC;EAEFb,EAAE,CAAC,yCAAyC,EAAE,MAAM;IAClD,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACiB,OAAO,EAAC,MAAM;MAAAZ,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC3CI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAACK,KAAK,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,iBAAiB,CAAC;EACzE,CAAC,CAAC;EAEFb,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC9C,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACiB,OAAO,EAAC,MAAM;MAAAZ,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC3C,MAAMC,IAAI,GAAGC,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC;IACrCC,MAAM,CAACH,IAAI,CAACO,KAAK,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;IACpCN,MAAM,CAACH,IAAI,CAACO,KAAK,CAACG,YAAY,CAAC,CAACD,IAAI,CAAC,EAAE,CAAC;EAC1C,CAAC,CAAC;EAEFb,EAAE,CAAC,wCAAwC,EAAE,MAAM;IACjD,MAAM;MAAEgB;IAAQ,CAAC,GAAG,IAAAf,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAChDI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAACK,KAAK,CAACM,SAAS,CAAC,CAACJ,IAAI,CAAC,OAAO,CAAC;IAC9DG,OAAO,CAAC,CAAC;IAET,IAAAf,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACmB,SAAS,EAAC,OAAO;MAAAd,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC9CI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAACK,KAAK,CAACM,SAAS,CAAC,CAACJ,IAAI,CAAC,OAAO,CAAC;EAChE,CAAC,CAAC;EAEFb,EAAE,CAAC,kDAAkD,EAAE,MAAM;IAC3D,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACa,KAAK,EAAE;QAAEC,QAAQ,EAAE;MAAQ,CAAE;MAAAT,QAAA,EAAC;IAAC,CAAS,CAAC,CAAC;IAC1DI,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAACK,KAAK,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,OAAO,CAAC;EAC/D,CAAC,CAAC;;EAEF;AACF;AACA;EACEb,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrD,IAAAC,aAAM,eACJ,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAACoB,SAAS,EAAC,iCAAiC;MAACC,QAAQ;MAAAhB,QAAA,EAC1D;IAAI,CACE,CACX,CAAC;IAED,MAAMC,IAAI,GAAGC,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC;IACrCC,MAAM,CAACH,IAAI,CAAC,CAACgB,oBAAoB,CAAC,iCAAiC,CAAC;IACpEb,MAAM,CAACH,IAAI,CAAC,CAACK,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC;EACnD,CAAC,CAAC;;EAEF;AACF;EACET,EAAE,CAAC,oCAAoC,EAAE,MAAM;IAC7C,IAAAC,aAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;MAAAK,QAAA,EAAC;IAAO,CAAS,CAAC,CAAC;IAClC,MAAMC,IAAI,GAAGC,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC;IACrCC,MAAM,CAACH,IAAI,CAAC,CAACiB,GAAG,CAACZ,eAAe,CAAC,YAAY,CAAC;IAC9CF,MAAM,CAACH,IAAI,CAAC,CAACiB,GAAG,CAACZ,eAAe,CAAC,WAAW,CAAC;EAC/C,CAAC,CAAC;;EAEF;AACF;AACA;EACET,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzD,IAAAC,aAAM,eACJ,IAAAN,WAAA,CAAA2B,IAAA,EAAA3B,WAAA,CAAA4B,QAAA;MAAApB,QAAA,gBACE,IAAAR,WAAA,CAAAO,GAAA,EAACR,SAAA,CAAAI,OAAQ,IAAE,CAAC,eACZ,IAAAH,WAAA,CAAAO,GAAA,EAACV,QAAA,CAAAM,OAAO;QAAAK,QAAA,EAAC;MAAO,CAAS,CAAC;IAAA,CAC1B,CACJ,CAAC;;IAED;AACJ;AACA;IACIqB,gBAAS,CAACC,KAAK,CAACpB,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEzCC,MAAM,CAACF,aAAM,CAACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAACoB,WAAW,CAAC,CAAC;EAChD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _ChartFigure = _interopRequireDefault(require("../patterns/ChartFigure"));
6
+ var _chart = require("../tokens/chart");
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ describe("ChartFigure", () => {
10
+ it("renders a figure with its heading, chart and caption", () => {
11
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
12
+ title: "Dossiers par type",
13
+ caption: "Admission : 128 (64 %). Renouvellement : 72 (36 %).",
14
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
15
+ "data-testid": "canvas",
16
+ children: "graphe"
17
+ })
18
+ }));
19
+ expect(_react.screen.getByRole("figure")).toBeInTheDocument();
20
+ expect(_react.screen.getByRole("heading", {
21
+ name: "Dossiers par type"
22
+ })).toBeInTheDocument();
23
+ expect(_react.screen.getByTestId("canvas")).toBeInTheDocument();
24
+ expect(_react.screen.getByText("Admission : 128 (64 %). Renouvellement : 72 (36 %).")).toBeInTheDocument();
25
+ });
26
+
27
+ /* The heading is REAL TEXT, not an SVG title: selectable, translatable, and
28
+ * reachable as a heading. The renderer's own `title` option stays empty. */
29
+ it("exposes the title as a heading at h3 by default", () => {
30
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
31
+ title: "R\xE9partition",
32
+ caption: "\u2026",
33
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
34
+ }));
35
+ expect(_react.screen.getByRole("heading", {
36
+ name: "Répartition"
37
+ }).tagName).toBe("H3");
38
+ });
39
+ it("accepts another heading level", () => {
40
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
41
+ title: "R\xE9partition",
42
+ caption: "\u2026",
43
+ level: "h2",
44
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
45
+ }));
46
+ expect(_react.screen.getByRole("heading", {
47
+ name: "Répartition"
48
+ }).tagName).toBe("H2");
49
+ });
50
+
51
+ /* A renderer emits dozens of unstructured SVG text nodes; a screen reader
52
+ * walks them one by one, in visual order. That is noise, and the caption
53
+ * speaks for the canvas instead. */
54
+ it("hides the canvas from assistive technology by default", () => {
55
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
56
+ title: "T",
57
+ caption: "C",
58
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
59
+ "data-testid": "canvas",
60
+ children: "graphe"
61
+ })
62
+ }));
63
+ expect(_react.screen.getByTestId("canvas").parentElement).toHaveAttribute("aria-hidden", "true");
64
+ });
65
+
66
+ /* Escape hatch for a renderer that builds its own accessible data table. */
67
+ it("can leave the canvas exposed", () => {
68
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
69
+ title: "T",
70
+ caption: "C",
71
+ hideCanvasFromScreenReaders: false,
72
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
73
+ "data-testid": "canvas",
74
+ children: "graphe"
75
+ })
76
+ }));
77
+ expect(_react.screen.getByTestId("canvas").parentElement).not.toHaveAttribute("aria-hidden");
78
+ });
79
+
80
+ /* R-R.4 — the caption must not jump down the page when the chart paints. */
81
+ it("reserves the canvas height when asked", () => {
82
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
83
+ title: "T",
84
+ caption: "C",
85
+ minHeight: 320,
86
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
87
+ "data-testid": "canvas"
88
+ })
89
+ }));
90
+ expect(_react.screen.getByTestId("canvas").parentElement?.style.minHeight).toBe("320px");
91
+ });
92
+
93
+ /* The caption is VISIBLE, not visually-hidden: the numbers help the reader
94
+ * who can see the chart too, and a caption nobody sees is a caption nobody
95
+ * notices has gone stale. */
96
+ it("renders the caption as a visible figcaption", () => {
97
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
98
+ title: "T",
99
+ caption: "Approuv\xE9s : 12",
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
101
+ }));
102
+ const caption = _react.screen.getByText("Approuvés : 12");
103
+ expect(caption.tagName).toBe("FIGCAPTION");
104
+ expect(caption).toBeVisible();
105
+ });
106
+ });
107
+
108
+ /* ── Tolérance aux pannes (ISO/IEC 25010, lot 12 Area 12) ──────────
109
+ *
110
+ * Le canevas héberge un moteur de graphes TIERS alimenté par des agrégats dont
111
+ * les modèles déclarent tous les champs optionnels. Sans frontière, une
112
+ * exception au rendu démonte tout l'arbre : la page de bilan entière, bande de
113
+ * KPI et tableau compris — le tableau qui porte précisément les chiffres que le
114
+ * graphe dessinait.
115
+ *
116
+ * `console.error` est réduit au silence sur ces deux cas : React journalise
117
+ * toute exception capturée par une frontière, et c'est du bruit attendu ici,
118
+ * pas un signal. */
119
+ describe("ChartFigure — tolérance aux pannes", () => {
120
+ const Exploding = () => {
121
+ throw new Error("series[0].data is not iterable");
122
+ };
123
+ let consoleError;
124
+ beforeEach(() => {
125
+ consoleError = jest.spyOn(console, "error").mockImplementation(() => {});
126
+ });
127
+ afterEach(() => {
128
+ consoleError.mockRestore();
129
+ });
130
+ it("contient la panne dans la carte, titre et légende intacts", () => {
131
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
132
+ title: "Dossiers par type",
133
+ caption: "Admission : 128 (64 %). Renouvellement : 72 (36 %).",
134
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Exploding, {})
135
+ }));
136
+
137
+ /* Ce qui compte : la figure EXISTE encore, et surtout la légende — elle
138
+ porte les chiffres en texte, donc le lecteur obtient la DONNÉE même quand
139
+ le dessin a disparu. */
140
+ expect(_react.screen.getByRole("figure")).toBeInTheDocument();
141
+ expect(_react.screen.getByRole("heading", {
142
+ name: "Dossiers par type"
143
+ })).toBeInTheDocument();
144
+ expect(_react.screen.getByText("Admission : 128 (64 %). Renouvellement : 72 (36 %).")).toBeInTheDocument();
145
+ });
146
+
147
+ /* LA PARTIE FRAGILE. La frontière doit envelopper le `div` `aria-hidden`, pas
148
+ * y vivre : placée dedans, sa bannière d'erreur hériterait de l'`aria-hidden`
149
+ * et aucun lecteur d'écran ne l'annoncerait. Un voyant verrait la panne, un
150
+ * non-voyant n'entendrait rien — et rien à l'écran ne le révélerait. */
151
+ it("annonce l'erreur aux technologies d'assistance", () => {
152
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
153
+ title: "Dossiers par type",
154
+ caption: "\u2014",
155
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Exploding, {})
156
+ }));
157
+ const alert = _react.screen.getByRole("alert");
158
+ expect(alert).toBeInTheDocument();
159
+ expect(alert.closest("[aria-hidden='true']")).toBeNull();
160
+ });
161
+ });
162
+ describe("chartChrome", () => {
163
+ /* A hard-coded white canvas is what breaks a chart in dark mode. */
164
+ it("keeps the canvas transparent", () => {
165
+ expect(_chart.chartChrome.background).toBe("transparent");
166
+ });
167
+
168
+ /* Chart libraries hand their style objects to SVG attributes, which never get
169
+ * a unit appended for free — a bare 16 is ignored by some renderers. */
170
+ it("gives font sizes with units", () => {
171
+ expect(_chart.chartChrome.title.fontSize).toMatch(/^\d+px$/);
172
+ expect(_chart.chartChrome.label.fontSize).toMatch(/^\d+px$/);
173
+ });
174
+ it("maps the roles onto distinct ink tokens", () => {
175
+ expect(_chart.chartChrome.title.color).not.toBe(_chart.chartChrome.label.color);
176
+ });
177
+ it("is frozen, so no consumer can mutate the shared mapping", () => {
178
+ expect(Object.isFrozen(_chart.chartChrome)).toBe(true);
179
+ expect(Object.isFrozen(_chart.chartChrome.title)).toBe(true);
180
+ expect(Object.isFrozen(_chart.chartChrome.label)).toBe(true);
181
+ });
182
+ });
183
+ //# sourceMappingURL=ChartFigure.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartFigure.test.js","names":["require","_react","_ChartFigure","_interopRequireDefault","_chart","_jsxRuntime","e","__esModule","default","describe","it","render","jsx","title","caption","children","expect","screen","getByRole","toBeInTheDocument","name","getByTestId","getByText","tagName","toBe","level","parentElement","toHaveAttribute","hideCanvasFromScreenReaders","not","minHeight","style","toBeVisible","Exploding","Error","consoleError","beforeEach","jest","spyOn","console","mockImplementation","afterEach","mockRestore","alert","closest","toBeNull","chartChrome","background","fontSize","toMatch","label","color","Object","isFrozen"],"sources":["../../../src/lib/v2/__tests__/ChartFigure.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\n\r\nimport ChartFigure from \"../patterns/ChartFigure\";\r\nimport { chartChrome } from \"../tokens/chart\";\r\n\r\ndescribe(\"ChartFigure\", () => {\r\n it(\"renders a figure with its heading, chart and caption\", () => {\r\n render(\r\n <ChartFigure\r\n title=\"Dossiers par type\"\r\n caption=\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\"\r\n >\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n\r\n expect(screen.getByRole(\"figure\")).toBeInTheDocument();\r\n expect(\r\n screen.getByRole(\"heading\", { name: \"Dossiers par type\" })\r\n ).toBeInTheDocument();\r\n expect(screen.getByTestId(\"canvas\")).toBeInTheDocument();\r\n expect(\r\n screen.getByText(\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\")\r\n ).toBeInTheDocument();\r\n });\r\n\r\n /* The heading is REAL TEXT, not an SVG title: selectable, translatable, and\r\n * reachable as a heading. The renderer's own `title` option stays empty. */\r\n it(\"exposes the title as a heading at h3 by default\", () => {\r\n render(\r\n <ChartFigure title=\"Répartition\" caption=\"…\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByRole(\"heading\", { name: \"Répartition\" }).tagName).toBe(\r\n \"H3\"\r\n );\r\n });\r\n\r\n it(\"accepts another heading level\", () => {\r\n render(\r\n <ChartFigure title=\"Répartition\" caption=\"…\" level=\"h2\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByRole(\"heading\", { name: \"Répartition\" }).tagName).toBe(\r\n \"H2\"\r\n );\r\n });\r\n\r\n /* A renderer emits dozens of unstructured SVG text nodes; a screen reader\r\n * walks them one by one, in visual order. That is noise, and the caption\r\n * speaks for the canvas instead. */\r\n it(\"hides the canvas from assistive technology by default\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\">\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement).toHaveAttribute(\r\n \"aria-hidden\",\r\n \"true\"\r\n );\r\n });\r\n\r\n /* Escape hatch for a renderer that builds its own accessible data table. */\r\n it(\"can leave the canvas exposed\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\" hideCanvasFromScreenReaders={false}>\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement).not.toHaveAttribute(\r\n \"aria-hidden\"\r\n );\r\n });\r\n\r\n /* R-R.4 — the caption must not jump down the page when the chart paints. */\r\n it(\"reserves the canvas height when asked\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\" minHeight={320}>\r\n <div data-testid=\"canvas\" />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement?.style.minHeight).toBe(\r\n \"320px\"\r\n );\r\n });\r\n\r\n /* The caption is VISIBLE, not visually-hidden: the numbers help the reader\r\n * who can see the chart too, and a caption nobody sees is a caption nobody\r\n * notices has gone stale. */\r\n it(\"renders the caption as a visible figcaption\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"Approuvés : 12\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n const caption = screen.getByText(\"Approuvés : 12\");\r\n expect(caption.tagName).toBe(\"FIGCAPTION\");\r\n expect(caption).toBeVisible();\r\n });\r\n});\r\n\r\n/* ── Tolérance aux pannes (ISO/IEC 25010, lot 12 Area 12) ──────────\r\n *\r\n * Le canevas héberge un moteur de graphes TIERS alimenté par des agrégats dont\r\n * les modèles déclarent tous les champs optionnels. Sans frontière, une\r\n * exception au rendu démonte tout l'arbre : la page de bilan entière, bande de\r\n * KPI et tableau compris — le tableau qui porte précisément les chiffres que le\r\n * graphe dessinait.\r\n *\r\n * `console.error` est réduit au silence sur ces deux cas : React journalise\r\n * toute exception capturée par une frontière, et c'est du bruit attendu ici,\r\n * pas un signal. */\r\ndescribe(\"ChartFigure — tolérance aux pannes\", () => {\r\n const Exploding = () => {\r\n throw new Error(\"series[0].data is not iterable\");\r\n };\r\n\r\n let consoleError: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n consoleError = jest.spyOn(console, \"error\").mockImplementation(() => {});\r\n });\r\n\r\n afterEach(() => {\r\n consoleError.mockRestore();\r\n });\r\n\r\n it(\"contient la panne dans la carte, titre et légende intacts\", () => {\r\n render(\r\n <ChartFigure\r\n title=\"Dossiers par type\"\r\n caption=\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\"\r\n >\r\n <Exploding />\r\n </ChartFigure>\r\n );\r\n\r\n /* Ce qui compte : la figure EXISTE encore, et surtout la légende — elle\r\n porte les chiffres en texte, donc le lecteur obtient la DONNÉE même quand\r\n le dessin a disparu. */\r\n expect(screen.getByRole(\"figure\")).toBeInTheDocument();\r\n expect(\r\n screen.getByRole(\"heading\", { name: \"Dossiers par type\" })\r\n ).toBeInTheDocument();\r\n expect(\r\n screen.getByText(\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\")\r\n ).toBeInTheDocument();\r\n });\r\n\r\n /* LA PARTIE FRAGILE. La frontière doit envelopper le `div` `aria-hidden`, pas\r\n * y vivre : placée dedans, sa bannière d'erreur hériterait de l'`aria-hidden`\r\n * et aucun lecteur d'écran ne l'annoncerait. Un voyant verrait la panne, un\r\n * non-voyant n'entendrait rien — et rien à l'écran ne le révélerait. */\r\n it(\"annonce l'erreur aux technologies d'assistance\", () => {\r\n render(\r\n <ChartFigure title=\"Dossiers par type\" caption=\"—\">\r\n <Exploding />\r\n </ChartFigure>\r\n );\r\n\r\n const alert = screen.getByRole(\"alert\");\r\n expect(alert).toBeInTheDocument();\r\n expect(alert.closest(\"[aria-hidden='true']\")).toBeNull();\r\n });\r\n});\r\n\r\ndescribe(\"chartChrome\", () => {\r\n /* A hard-coded white canvas is what breaks a chart in dark mode. */\r\n it(\"keeps the canvas transparent\", () => {\r\n expect(chartChrome.background).toBe(\"transparent\");\r\n });\r\n\r\n /* Chart libraries hand their style objects to SVG attributes, which never get\r\n * a unit appended for free — a bare 16 is ignored by some renderers. */\r\n it(\"gives font sizes with units\", () => {\r\n expect(chartChrome.title.fontSize).toMatch(/^\\d+px$/);\r\n expect(chartChrome.label.fontSize).toMatch(/^\\d+px$/);\r\n });\r\n\r\n it(\"maps the roles onto distinct ink tokens\", () => {\r\n expect(chartChrome.title.color).not.toBe(chartChrome.label.color);\r\n });\r\n\r\n it(\"is frozen, so no consumer can mutate the shared mapping\", () => {\r\n expect(Object.isFrozen(chartChrome)).toBe(true);\r\n expect(Object.isFrozen(chartChrome.title)).toBe(true);\r\n expect(Object.isFrozen(chartChrome.label)).toBe(true);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
6
+ var _DataGrid = _interopRequireDefault(require("../patterns/DataGrid"));
7
+ var _rowActions = require("../patterns/rowActions");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * DataGrid — la cellule d'actions contient ses propres événements.
12
+ *
13
+ * CE QUE CE FICHIER PROTÈGE, ET POURQUOI IL EXISTE
14
+ * ------------------------------------------------
15
+ * §Row Interaction fait du clic de ligne l'ouverture du drawer d'aperçu, et
16
+ * des actions de ligne l'affordance COMPLÉMENTAIRE. Les deux cohabitent donc
17
+ * sur toute grille de listing de la plateforme — et la cellule d'actions est
18
+ * un descendant de la ligne cliquable.
19
+ *
20
+ * Sans containment, activer une action déclenche AUSSI le clic de ligne :
21
+ * l'utilisateur obtient son action et, par-dessus, un drawer qui s'ouvre. Ce
22
+ * n'est pas rattrapable au niveau de l'action — `buildRowActions` décrit une
23
+ * action comme `onClick: (row) => void` et n'expose délibérément pas
24
+ * l'événement DOM, parce qu'un descripteur métier n'a pas à connaître la
25
+ * propagation. La cellule est le seul endroit qui tient l'invariant pour
26
+ * TOUTES les formes : le kebab, la rangée d'icônes, et n'importe quel
27
+ * renderer `rowActions` écrit par un hôte.
28
+ *
29
+ * Relevé par l'audit Area 3 d'`addm-fe`, dont les deux listings avaient écrit
30
+ * leur rangée d'icônes à la main précisément pour appeler `stopPropagation()`
31
+ * bouton par bouton — ce qui faisait passer l'adoption de `buildRowActions`
32
+ * pour une régression.
33
+ *
34
+ * Le test couvre les DEUX formes (`iconsUpTo` et le kebab) et les deux
35
+ * chemins (souris et clavier), parce que la ligne écoute `onClick` ET
36
+ * `onKeyDown`.
37
+ *
38
+ * POURQUOI `fireEvent` POUR LA SOURIS ET `userEvent` POUR LE CLAVIER
39
+ * -----------------------------------------------------------------
40
+ * `ROW_ACTIONS_OVERLAY_SX` porte `pointerEvents: "none"` et ne passe à `auto`
41
+ * que sous `tr:hover`, `tr:focus-within` ou `@media (pointer: coarse)`. jsdom
42
+ * ne résout ni les pseudo-classes d'état ni les media queries — même limite
43
+ * que celle documentée dans `FieldWidth.test.tsx` — donc l'overlay y reste
44
+ * inerte et `user-event` REFUSE de simuler un pointeur dessus. Son refus est
45
+ * correct : il modèle un utilisateur, et un utilisateur ne peut pas cliquer un
46
+ * élément à `pointer-events: none`. Ce que jsdom ne peut pas modéliser, c'est
47
+ * le survol qui précède ce clic dans un vrai navigateur.
48
+ *
49
+ * Neutraliser la garde (`pointerEventsCheck: Never`) serait prétendre simuler
50
+ * un utilisateur tout en désactivant la vérification qui rend la simulation
51
+ * crédible. `fireEvent.click` ne prétend rien : il émet un `MouseEvent` qui
52
+ * BULLE, ce qui est exactement et uniquement ce que ces deux tests examinent.
53
+ * Le chemin clavier, lui, ne passe pas par le hit-testing du pointeur, donc
54
+ * `userEvent` y reste l'outil juste — et c'est le chemin où la ligne écoute
55
+ * `onKeyDown`.
56
+ *
57
+ * Ce que ce fichier ne prouve donc PAS : que l'overlay est atteignable à la
58
+ * souris. Ça se vérifie dans la story, au survol.
59
+ */
60
+
61
+ const LIGNES = [{
62
+ id: 1,
63
+ reference: "2025-IM-0042"
64
+ }];
65
+ const COLONNES = [{
66
+ key: "reference",
67
+ header: "Référence"
68
+ }];
69
+ function renderGrille(options) {
70
+ const descripteurs = [{
71
+ id: "consulter",
72
+ label: "Consulter la ligne",
73
+ onClick: () => options.onAction()
74
+ }];
75
+ return (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid.default, {
76
+ rows: LIGNES,
77
+ columns: COLONNES,
78
+ ariaLabel: "Lignes de test",
79
+ onRowClick: options.onRowClick,
80
+ rowActions: (0, _rowActions.buildRowActions)(descripteurs, "Actions sur la ligne", options.iconsUpTo !== undefined ? {
81
+ iconsUpTo: options.iconsUpTo
82
+ } : undefined)
83
+ }));
84
+ }
85
+ describe("DataGrid — une action de ligne ne déclenche pas le clic de ligne", () => {
86
+ test("rangée d'icônes, à la souris", () => {
87
+ const onRowClick = jest.fn();
88
+ const onAction = jest.fn();
89
+ renderGrille({
90
+ onRowClick,
91
+ onAction,
92
+ iconsUpTo: 3
93
+ });
94
+ _react.fireEvent.click(_react.screen.getByRole("button", {
95
+ name: "Consulter la ligne"
96
+ }));
97
+ expect(onAction).toHaveBeenCalledTimes(1);
98
+ /* L'assertion qui compte : l'action a eu lieu, la ligne n'a pas été
99
+ * ouverte. Avant le containment, les deux se déclenchaient. */
100
+ expect(onRowClick).not.toHaveBeenCalled();
101
+ });
102
+ test("rangée d'icônes, au clavier", async () => {
103
+ const onRowClick = jest.fn();
104
+ const onAction = jest.fn();
105
+ renderGrille({
106
+ onRowClick,
107
+ onAction,
108
+ iconsUpTo: 3
109
+ });
110
+ const bouton = _react.screen.getByRole("button", {
111
+ name: "Consulter la ligne"
112
+ });
113
+ bouton.focus();
114
+ await _userEvent.default.keyboard("{Enter}");
115
+
116
+ /* La ligne porte AUSSI un `onKeyDown` (Enter / Espace → onRowClick), donc
117
+ * le clavier est un second chemin de fuite, distinct de la souris. */
118
+ expect(onAction).toHaveBeenCalledTimes(1);
119
+ expect(onRowClick).not.toHaveBeenCalled();
120
+ });
121
+ test("kebab : ouvrir le menu n'ouvre pas la ligne", () => {
122
+ const onRowClick = jest.fn();
123
+ const onAction = jest.fn();
124
+ /* Sans `iconsUpTo`, le renderer rend `OverflowMenu` — son déclencheur est
125
+ * dans la même position que les boutons d'icône. */
126
+ renderGrille({
127
+ onRowClick,
128
+ onAction
129
+ });
130
+ _react.fireEvent.click(_react.screen.getByRole("button", {
131
+ name: "Actions sur la ligne"
132
+ }));
133
+ expect(onRowClick).not.toHaveBeenCalled();
134
+ });
135
+ test("le clic de ligne fonctionne toujours ailleurs dans la ligne", async () => {
136
+ const onRowClick = jest.fn();
137
+ const onAction = jest.fn();
138
+ renderGrille({
139
+ onRowClick,
140
+ onAction,
141
+ iconsUpTo: 3
142
+ });
143
+
144
+ /* Le containment doit être local à la cellule d'actions : une cellule de
145
+ * données reste le déclencheur du clic de ligne. Sans cette assertion, un
146
+ * containment posé trop haut (sur la ligne) passerait les trois tests
147
+ * ci-dessus tout en cassant §Row Interaction. */
148
+ await _userEvent.default.click(_react.screen.getByText("2025-IM-0042"));
149
+ expect(onRowClick).toHaveBeenCalledTimes(1);
150
+ expect(onAction).not.toHaveBeenCalled();
151
+ });
152
+ });
153
+ //# sourceMappingURL=DataGridRowActionsPropagation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGridRowActionsPropagation.test.js","names":["require","_react","_userEvent","_interopRequireDefault","_DataGrid","_rowActions","_jsxRuntime","e","__esModule","default","LIGNES","id","reference","COLONNES","key","header","renderGrille","options","descripteurs","label","onClick","onAction","render","jsx","rows","columns","ariaLabel","onRowClick","rowActions","buildRowActions","iconsUpTo","undefined","describe","test","jest","fn","fireEvent","click","screen","getByRole","name","expect","toHaveBeenCalledTimes","not","toHaveBeenCalled","bouton","focus","userEvent","keyboard","getByText"],"sources":["../../../src/lib/v2/__tests__/DataGridRowActionsPropagation.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { fireEvent, render, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport DataGrid from \"../patterns/DataGrid\";\r\nimport { buildRowActions } from \"../patterns/rowActions\";\r\nimport type { RowActionDescriptor } from \"../patterns/rowActions\";\r\n\r\n/**\r\n * DataGrid — la cellule d'actions contient ses propres événements.\r\n *\r\n * CE QUE CE FICHIER PROTÈGE, ET POURQUOI IL EXISTE\r\n * ------------------------------------------------\r\n * §Row Interaction fait du clic de ligne l'ouverture du drawer d'aperçu, et\r\n * des actions de ligne l'affordance COMPLÉMENTAIRE. Les deux cohabitent donc\r\n * sur toute grille de listing de la plateforme — et la cellule d'actions est\r\n * un descendant de la ligne cliquable.\r\n *\r\n * Sans containment, activer une action déclenche AUSSI le clic de ligne :\r\n * l'utilisateur obtient son action et, par-dessus, un drawer qui s'ouvre. Ce\r\n * n'est pas rattrapable au niveau de l'action — `buildRowActions` décrit une\r\n * action comme `onClick: (row) => void` et n'expose délibérément pas\r\n * l'événement DOM, parce qu'un descripteur métier n'a pas à connaître la\r\n * propagation. La cellule est le seul endroit qui tient l'invariant pour\r\n * TOUTES les formes : le kebab, la rangée d'icônes, et n'importe quel\r\n * renderer `rowActions` écrit par un hôte.\r\n *\r\n * Relevé par l'audit Area 3 d'`addm-fe`, dont les deux listings avaient écrit\r\n * leur rangée d'icônes à la main précisément pour appeler `stopPropagation()`\r\n * bouton par bouton — ce qui faisait passer l'adoption de `buildRowActions`\r\n * pour une régression.\r\n *\r\n * Le test couvre les DEUX formes (`iconsUpTo` et le kebab) et les deux\r\n * chemins (souris et clavier), parce que la ligne écoute `onClick` ET\r\n * `onKeyDown`.\r\n *\r\n * POURQUOI `fireEvent` POUR LA SOURIS ET `userEvent` POUR LE CLAVIER\r\n * -----------------------------------------------------------------\r\n * `ROW_ACTIONS_OVERLAY_SX` porte `pointerEvents: \"none\"` et ne passe à `auto`\r\n * que sous `tr:hover`, `tr:focus-within` ou `@media (pointer: coarse)`. jsdom\r\n * ne résout ni les pseudo-classes d'état ni les media queries — même limite\r\n * que celle documentée dans `FieldWidth.test.tsx` — donc l'overlay y reste\r\n * inerte et `user-event` REFUSE de simuler un pointeur dessus. Son refus est\r\n * correct : il modèle un utilisateur, et un utilisateur ne peut pas cliquer un\r\n * élément à `pointer-events: none`. Ce que jsdom ne peut pas modéliser, c'est\r\n * le survol qui précède ce clic dans un vrai navigateur.\r\n *\r\n * Neutraliser la garde (`pointerEventsCheck: Never`) serait prétendre simuler\r\n * un utilisateur tout en désactivant la vérification qui rend la simulation\r\n * crédible. `fireEvent.click` ne prétend rien : il émet un `MouseEvent` qui\r\n * BULLE, ce qui est exactement et uniquement ce que ces deux tests examinent.\r\n * Le chemin clavier, lui, ne passe pas par le hit-testing du pointeur, donc\r\n * `userEvent` y reste l'outil juste — et c'est le chemin où la ligne écoute\r\n * `onKeyDown`.\r\n *\r\n * Ce que ce fichier ne prouve donc PAS : que l'overlay est atteignable à la\r\n * souris. Ça se vérifie dans la story, au survol.\r\n */\r\n\r\ninterface Ligne {\r\n id: number;\r\n reference: string;\r\n}\r\n\r\nconst LIGNES: Ligne[] = [{ id: 1, reference: \"2025-IM-0042\" }];\r\n\r\nconst COLONNES = [{ key: \"reference\", header: \"Référence\" }];\r\n\r\nfunction renderGrille(options: {\r\n onRowClick: () => void;\r\n onAction: () => void;\r\n iconsUpTo?: number;\r\n}) {\r\n const descripteurs: RowActionDescriptor<Ligne>[] = [\r\n {\r\n id: \"consulter\",\r\n label: \"Consulter la ligne\",\r\n onClick: () => options.onAction(),\r\n },\r\n ];\r\n\r\n return render(\r\n <DataGrid<Ligne>\r\n rows={LIGNES}\r\n columns={COLONNES}\r\n ariaLabel=\"Lignes de test\"\r\n onRowClick={options.onRowClick}\r\n rowActions={buildRowActions(\r\n descripteurs,\r\n \"Actions sur la ligne\",\r\n options.iconsUpTo !== undefined\r\n ? { iconsUpTo: options.iconsUpTo }\r\n : undefined\r\n )}\r\n />\r\n );\r\n}\r\n\r\ndescribe(\"DataGrid — une action de ligne ne déclenche pas le clic de ligne\", () => {\r\n test(\"rangée d'icônes, à la souris\", () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n fireEvent.click(\r\n screen.getByRole(\"button\", { name: \"Consulter la ligne\" })\r\n );\r\n\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n /* L'assertion qui compte : l'action a eu lieu, la ligne n'a pas été\r\n * ouverte. Avant le containment, les deux se déclenchaient. */\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"rangée d'icônes, au clavier\", async () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n const bouton = screen.getByRole(\"button\", { name: \"Consulter la ligne\" });\r\n bouton.focus();\r\n await userEvent.keyboard(\"{Enter}\");\r\n\r\n /* La ligne porte AUSSI un `onKeyDown` (Enter / Espace → onRowClick), donc\r\n * le clavier est un second chemin de fuite, distinct de la souris. */\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"kebab : ouvrir le menu n'ouvre pas la ligne\", () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n /* Sans `iconsUpTo`, le renderer rend `OverflowMenu` — son déclencheur est\r\n * dans la même position que les boutons d'icône. */\r\n renderGrille({ onRowClick, onAction });\r\n\r\n fireEvent.click(\r\n screen.getByRole(\"button\", { name: \"Actions sur la ligne\" })\r\n );\r\n\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"le clic de ligne fonctionne toujours ailleurs dans la ligne\", async () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n /* Le containment doit être local à la cellule d'actions : une cellule de\r\n * données reste le déclencheur du clic de ligne. Sans cette assertion, un\r\n * containment posé trop haut (sur la ligne) passerait les trois tests\r\n * ci-dessus tout en cassant §Row Interaction. */\r\n await userEvent.click(screen.getByText(\"2025-IM-0042\"));\r\n\r\n expect(onRowClick).toHaveBeenCalledTimes(1);\r\n expect(onAction).not.toHaveBeenCalled();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _Drawer = _interopRequireDefault(require("../components/Drawer"));
6
+ var _tokens = require("../tokens");
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * R-7.4 / WCAG 2.5.5 — the drawer header's icon-only buttons.
11
+ *
12
+ * `tokens/density` states the rule this file guards, in its own words: "Icon-
13
+ * only buttons MUST set min-width/min-height to `tactileMin`", because the
14
+ * VISUAL height of a button may drop below 44px in the tighter density tiers
15
+ * while the hit area may not. The drawer header's three buttons — prev, next,
16
+ * close — were `IconButton size="small"` with only a colour rule: about 34px,
17
+ * ten short of the floor this library imposes on its hosts.
18
+ *
19
+ * The gap stayed invisible while item navigation was rarely wired, since a
20
+ * filter panel renders the close button alone. A module that equips its
21
+ * preview drawers with onPrev/onNext exposes three per drawer — which is what
22
+ * surfaced it.
23
+ *
24
+ * ── WHY `toHaveStyle` AND NOT `element.style` ────────────────────────
25
+ *
26
+ * The first version of this file asserted on `element.style.minWidth` and
27
+ * failed on all three cases with an empty string — correctly. `sx` compiles to
28
+ * an EMOTION CLASS, never to an inline style attribute, so the inline bag is
29
+ * empty by construction. `toHaveStyle` resolves the declaration through
30
+ * `getComputedStyle`, which jsdom does cascade from the injected stylesheet.
31
+ *
32
+ * What this verifies is therefore the DECLARED floor, not a rendered box:
33
+ * jsdom performs no layout, so no assertion here could prove the button
34
+ * measures 44px on screen. The declaration is what the rule asks for, and it
35
+ * is what a refactor of this header would silently drop.
36
+ */const TACTILE_MIN = `${_tokens.layout.tactileMin}px`;
37
+ const TACTILE_FLOOR = {
38
+ minWidth: TACTILE_MIN,
39
+ minHeight: TACTILE_MIN
40
+ };
41
+ describe("Drawer — cibles tactiles de l'en-tête (R-7.4)", () => {
42
+ it("plancher de 44px sur le bouton de fermeture", () => {
43
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
44
+ open: true,
45
+ onClose: () => undefined,
46
+ title: "Filtres avanc\xE9s",
47
+ children: "contenu"
48
+ }));
49
+ expect(_react.screen.getByRole("button", {
50
+ name: /Fermer/i
51
+ })).toHaveStyle(TACTILE_FLOOR);
52
+ });
53
+
54
+ /* Les deux flèches ne sont rendues que si un gestionnaire est fourni
55
+ (navigation opt-in, D-A10.2) — c'est ce qui a longtemps masqué l'écart. */
56
+ it("plancher de 44px sur les deux flèches de navigation", () => {
57
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
58
+ open: true,
59
+ onClose: () => undefined,
60
+ title: "Dossier 2026-IM-00042",
61
+ onPrev: () => undefined,
62
+ onNext: () => undefined,
63
+ hasPrev: true,
64
+ hasNext: true,
65
+ children: "contenu"
66
+ }));
67
+ expect(_react.screen.getByRole("button", {
68
+ name: /Précédent/i
69
+ })).toHaveStyle(TACTILE_FLOOR);
70
+ expect(_react.screen.getByRole("button", {
71
+ name: /Suivant/i
72
+ })).toHaveStyle(TACTILE_FLOOR);
73
+ });
74
+
75
+ /* Le plancher vaut aussi pour un bouton DÉSACTIVÉ : il reste une cible que
76
+ l'utilisateur va viser, et le rendre plus petit que les autres ferait
77
+ sauter la rangée d'un tiroir à l'autre. */
78
+ it("plancher maintenu quand la navigation est désactivée", () => {
79
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
80
+ open: true,
81
+ onClose: () => undefined,
82
+ title: "Dossier unique",
83
+ onPrev: () => undefined,
84
+ onNext: () => undefined,
85
+ children: "contenu"
86
+ }));
87
+ const previous = _react.screen.getByRole("button", {
88
+ name: /Précédent/i
89
+ });
90
+ expect(previous).toBeDisabled();
91
+ expect(previous).toHaveStyle(TACTILE_FLOOR);
92
+ });
93
+ });
94
+ //# sourceMappingURL=DrawerTactileTargets.test.js.map