@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 @@
1
+ {"version":3,"file":"DrawerTactileTargets.test.js","names":["require","_react","_Drawer","_interopRequireDefault","_tokens","_jsxRuntime","e","__esModule","default","TACTILE_MIN","layout","tactileMin","TACTILE_FLOOR","minWidth","minHeight","describe","it","render","jsx","open","onClose","undefined","title","children","expect","screen","getByRole","name","toHaveStyle","onPrev","onNext","hasPrev","hasNext","previous","toBeDisabled"],"sources":["../../../src/lib/v2/__tests__/DrawerTactileTargets.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\n\r\nimport Drawer from \"../components/Drawer\";\r\nimport { layout } from \"../tokens\";\r\n\r\n/**\r\n * R-7.4 / WCAG 2.5.5 — the drawer header's icon-only buttons.\r\n *\r\n * `tokens/density` states the rule this file guards, in its own words: \"Icon-\r\n * only buttons MUST set min-width/min-height to `tactileMin`\", because the\r\n * VISUAL height of a button may drop below 44px in the tighter density tiers\r\n * while the hit area may not. The drawer header's three buttons — prev, next,\r\n * close — were `IconButton size=\"small\"` with only a colour rule: about 34px,\r\n * ten short of the floor this library imposes on its hosts.\r\n *\r\n * The gap stayed invisible while item navigation was rarely wired, since a\r\n * filter panel renders the close button alone. A module that equips its\r\n * preview drawers with onPrev/onNext exposes three per drawer — which is what\r\n * surfaced it.\r\n *\r\n * ── WHY `toHaveStyle` AND NOT `element.style` ────────────────────────\r\n *\r\n * The first version of this file asserted on `element.style.minWidth` and\r\n * failed on all three cases with an empty string — correctly. `sx` compiles to\r\n * an EMOTION CLASS, never to an inline style attribute, so the inline bag is\r\n * empty by construction. `toHaveStyle` resolves the declaration through\r\n * `getComputedStyle`, which jsdom does cascade from the injected stylesheet.\r\n *\r\n * What this verifies is therefore the DECLARED floor, not a rendered box:\r\n * jsdom performs no layout, so no assertion here could prove the button\r\n * measures 44px on screen. The declaration is what the rule asks for, and it\r\n * is what a refactor of this header would silently drop.\r\n */\r\n\r\nconst TACTILE_MIN = `${layout.tactileMin}px`;\r\nconst TACTILE_FLOOR = { minWidth: TACTILE_MIN, minHeight: TACTILE_MIN };\r\n\r\ndescribe(\"Drawer — cibles tactiles de l'en-tête (R-7.4)\", () => {\r\n it(\"plancher de 44px sur le bouton de fermeture\", () => {\r\n render(\r\n <Drawer open onClose={() => undefined} title=\"Filtres avancés\">\r\n contenu\r\n </Drawer>\r\n );\r\n\r\n expect(screen.getByRole(\"button\", { name: /Fermer/i })).toHaveStyle(\r\n TACTILE_FLOOR\r\n );\r\n });\r\n\r\n /* Les deux flèches ne sont rendues que si un gestionnaire est fourni\r\n (navigation opt-in, D-A10.2) — c'est ce qui a longtemps masqué l'écart. */\r\n it(\"plancher de 44px sur les deux flèches de navigation\", () => {\r\n render(\r\n <Drawer\r\n open\r\n onClose={() => undefined}\r\n title=\"Dossier 2026-IM-00042\"\r\n onPrev={() => undefined}\r\n onNext={() => undefined}\r\n hasPrev\r\n hasNext\r\n >\r\n contenu\r\n </Drawer>\r\n );\r\n\r\n expect(screen.getByRole(\"button\", { name: /Précédent/i })).toHaveStyle(\r\n TACTILE_FLOOR\r\n );\r\n expect(screen.getByRole(\"button\", { name: /Suivant/i })).toHaveStyle(\r\n TACTILE_FLOOR\r\n );\r\n });\r\n\r\n /* Le plancher vaut aussi pour un bouton DÉSACTIVÉ : il reste une cible que\r\n l'utilisateur va viser, et le rendre plus petit que les autres ferait\r\n sauter la rangée d'un tiroir à l'autre. */\r\n it(\"plancher maintenu quand la navigation est désactivée\", () => {\r\n render(\r\n <Drawer\r\n open\r\n onClose={() => undefined}\r\n title=\"Dossier unique\"\r\n onPrev={() => undefined}\r\n onNext={() => undefined}\r\n >\r\n contenu\r\n </Drawer>\r\n );\r\n\r\n const previous = screen.getByRole(\"button\", { name: /Précédent/i });\r\n expect(previous).toBeDisabled();\r\n expect(previous).toHaveStyle(TACTILE_FLOOR);\r\n });\r\n});\r\n"],"mappings":";;AAAAA,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAAmC,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAEA,MAAMG,WAAW,GAAG,GAAGC,cAAM,CAACC,UAAU,IAAI;AAC5C,MAAMC,aAAa,GAAG;EAAEC,QAAQ,EAAEJ,WAAW;EAAEK,SAAS,EAAEL;AAAY,CAAC;AAEvEM,QAAQ,CAAC,+CAA+C,EAAE,MAAM;EAC9DC,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtD,IAAAC,aAAM,eACJ,IAAAZ,WAAA,CAAAa,GAAA,EAAChB,OAAA,CAAAM,OAAM;MAACW,IAAI;MAACC,OAAO,EAAEA,CAAA,KAAMC,SAAU;MAACC,KAAK,EAAC,oBAAiB;MAAAC,QAAA,EAAC;IAE/D,CAAQ,CACV,CAAC;IAEDC,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAU,CAAC,CAAC,CAAC,CAACC,WAAW,CACjEhB,aACF,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;EACEI,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC9D,IAAAC,aAAM,eACJ,IAAAZ,WAAA,CAAAa,GAAA,EAAChB,OAAA,CAAAM,OAAM;MACLW,IAAI;MACJC,OAAO,EAAEA,CAAA,KAAMC,SAAU;MACzBC,KAAK,EAAC,uBAAuB;MAC7BO,MAAM,EAAEA,CAAA,KAAMR,SAAU;MACxBS,MAAM,EAAEA,CAAA,KAAMT,SAAU;MACxBU,OAAO;MACPC,OAAO;MAAAT,QAAA,EACR;IAED,CAAQ,CACV,CAAC;IAEDC,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAa,CAAC,CAAC,CAAC,CAACC,WAAW,CACpEhB,aACF,CAAC;IACDY,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAW,CAAC,CAAC,CAAC,CAACC,WAAW,CAClEhB,aACF,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;AACA;EACEI,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/D,IAAAC,aAAM,eACJ,IAAAZ,WAAA,CAAAa,GAAA,EAAChB,OAAA,CAAAM,OAAM;MACLW,IAAI;MACJC,OAAO,EAAEA,CAAA,KAAMC,SAAU;MACzBC,KAAK,EAAC,gBAAgB;MACtBO,MAAM,EAAEA,CAAA,KAAMR,SAAU;MACxBS,MAAM,EAAEA,CAAA,KAAMT,SAAU;MAAAE,QAAA,EACzB;IAED,CAAQ,CACV,CAAC;IAED,MAAMU,QAAQ,GAAGR,aAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAa,CAAC,CAAC;IACnEH,MAAM,CAACS,QAAQ,CAAC,CAACC,YAAY,CAAC,CAAC;IAC/BV,MAAM,CAACS,QAAQ,CAAC,CAACL,WAAW,CAAChB,aAAa,CAAC;EAC7C,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
3
  require("@testing-library/jest-dom");
5
- var React = _interopRequireWildcard(require("react"));
6
- var _react2 = require("@testing-library/react");
4
+ var _react = require("@testing-library/react");
7
5
  var _FieldError = _interopRequireDefault(require("../components/FieldError"));
8
6
  var _Field = _interopRequireDefault(require("../components/Field"));
9
7
  var _jsxRuntime = require("react/jsx-runtime");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
9
  /**
14
10
  * FieldError — contract tests, including its integration into Field.
15
11
  *
@@ -34,131 +30,164 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
34
30
  * resolves neither CSS variables nor flexbox, so asserting them here would pass
35
31
  * while the message rendered black and centred. Those live in
36
32
  * FieldError.stories.tsx.
37
- */describe("FieldError — standalone", function () {
38
- test("announces itself as an alert carrying the message", function () {
39
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError["default"], {
33
+ */
34
+
35
+ /**
36
+ * Fixture : un champ minimal qui CONSOMME les props que `Field` diffuse.
37
+ *
38
+ * `Field` clone son enfant avec `error` et `fullWidth` — délibérément, parce
39
+ * que plusieurs entrées v2 (`NumberInput`, le `renderInput` de `Combobox`) ne
40
+ * sont pas de purs enfants MUI et lisent ces props directement. Un `<input />`
41
+ * NU les laisse donc filer jusqu'au DOM, et React émet deux avertissements à
42
+ * chaque rendu : « Received `true` for a non-boolean attribute `error` » et
43
+ * « React does not recognize the `fullWidth` prop on a DOM element ».
44
+ *
45
+ * Ce n'est PAS un défaut de `Field` : en production l'enfant est un `Input` ou
46
+ * un `Select` du socle, qui consomme ces props. Mais c'était six
47
+ * avertissements dans la sortie de la suite, au milieu desquels un vrai
48
+ * avertissement passe inaperçu — et un audit du socle a effectivement pris ce
49
+ * bruit pour une fuite de props en production avant de lire le composant.
50
+ *
51
+ * La fixture reste volontairement minimale : pas d'`Input` du socle ici, ce
52
+ * fichier teste le CÂBLAGE de `Field` et non l'intégration d'un composant. Elle
53
+ * ne fait qu'absorber les deux props destinées à un contrôle riche.
54
+ */function BareInput({
55
+ error: _error,
56
+ fullWidth: _fullWidth,
57
+ ...rest
58
+ }) {
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
60
+ ...rest
61
+ });
62
+ }
63
+ describe("FieldError — standalone", () => {
64
+ test("announces itself as an alert carrying the message", () => {
65
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError.default, {
40
66
  children: "Ajoutez au moins un article avant de soumettre."
41
67
  }));
42
- expect(_react2.screen.getByRole("alert")).toHaveTextContent("Ajoutez au moins un article avant de soumettre.");
68
+ expect(_react.screen.getByRole("alert")).toHaveTextContent("Ajoutez au moins un article avant de soumettre.");
43
69
  });
44
- test("forwards id so a host can wire its own aria-describedby", function () {
45
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError["default"], {
70
+ test("forwards id so a host can wire its own aria-describedby", () => {
71
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError.default, {
46
72
  id: "articles-error",
47
73
  children: "Ajoutez au moins un article."
48
74
  }));
49
- expect(_react2.screen.getByRole("alert")).toHaveAttribute("id", "articles-error");
75
+ expect(_react.screen.getByRole("alert")).toHaveAttribute("id", "articles-error");
50
76
  });
51
- test("omits id when none is supplied", function () {
77
+ test("omits id when none is supplied", () => {
52
78
  /* The list-level case usually has nothing to bind to. Emitting an empty or
53
79
  * generated id would create a describedby target nobody references. */
54
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError["default"], {
80
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError.default, {
55
81
  children: "Ajoutez au moins un article."
56
82
  }));
57
- expect(_react2.screen.getByRole("alert")).not.toHaveAttribute("id");
83
+ expect(_react.screen.getByRole("alert")).not.toHaveAttribute("id");
58
84
  });
59
- test("the icon is hidden from assistive tech", function () {
85
+ test("the icon is hidden from assistive tech", () => {
60
86
  /* R-Ar.2 — the message IS the announcement; an announced glyph would double
61
87
  * it. No semantic query reaches a role-less, name-less element, hence the
62
88
  * testid the component exposes for exactly this assertion. */
63
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError["default"], {
89
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldError.default, {
64
90
  children: "Message"
65
91
  }));
66
- expect(_react2.screen.getByTestId("fielderror-icon")).toHaveAttribute("aria-hidden", "true");
92
+ expect(_react.screen.getByTestId("fielderror-icon")).toHaveAttribute("aria-hidden", "true");
67
93
  });
68
94
  });
69
- describe("FieldError — inside Field (the wiring that has no visual tell)", function () {
70
- test("the error becomes the control's accessible description", function () {
71
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
95
+ describe("FieldError — inside Field (the wiring that has no visual tell)", () => {
96
+ test("the error becomes the control's accessible description", () => {
97
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
72
98
  label: "Num\xE9ro de titre",
73
99
  error: "Le num\xE9ro est invalide. Format : AAAA-IM-NNNNN.",
74
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
75
101
  }));
76
- expect(_react2.screen.getByRole("textbox")).toHaveAccessibleDescription("Le numéro est invalide. Format : AAAA-IM-NNNNN.");
102
+ expect(_react.screen.getByRole("textbox")).toHaveAccessibleDescription("Le numéro est invalide. Format : AAAA-IM-NNNNN.");
77
103
  });
78
- test("the control is marked invalid", function () {
79
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
104
+ test("the control is marked invalid", () => {
105
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
80
106
  label: "Num\xE9ro",
81
107
  error: "Invalide.",
82
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
108
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
83
109
  }));
84
110
  // jest-dom's toBeInvalid reads aria-invalid — R-I.3.
85
- expect(_react2.screen.getByRole("textbox")).toBeInvalid();
111
+ expect(_react.screen.getByRole("textbox")).toBeInvalid();
86
112
  });
87
- test("a host-supplied aria-describedby is PRESERVED, not replaced", function () {
113
+ test("a host-supplied aria-describedby is PRESERVED, not replaced", () => {
88
114
  /* The merge is the fragile part. Overwriting instead of merging silently
89
115
  * drops a consumer's external help text, and again nothing visual changes.
90
116
  * Asserted with two order-independent regexes rather than one exact string,
91
117
  * so the test does not encode which fragment Field puts first. */
92
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
118
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
93
119
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
94
120
  id: "host-help",
95
121
  children: "Format attendu : AAAA-IM-NNNNN."
96
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
122
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
97
123
  label: "Num\xE9ro",
98
124
  error: "Le num\xE9ro est incomplet.",
99
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {
100
126
  "aria-describedby": "host-help"
101
127
  })
102
128
  })]
103
129
  }));
104
- var input = _react2.screen.getByRole("textbox");
130
+ const input = _react.screen.getByRole("textbox");
105
131
  expect(input).toHaveAccessibleDescription(/Format attendu/);
106
132
  expect(input).toHaveAccessibleDescription(/incomplet/);
107
133
  });
108
- test("the hint is suppressed while an error is shown", function () {
134
+ test("the hint is suppressed while an error is shown", () => {
109
135
  /* Two competing descriptions under one field is worse than one. The hint
110
136
  * returns once the error clears — verified by the rerender below. */
111
- var _render = (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
112
- label: "Num\xE9ro",
113
- hint: "Format : AAAA-IM-NNNNN",
114
- error: "Le num\xE9ro est incomplet.",
115
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
116
- })),
117
- rerender = _render.rerender;
118
- expect(_react2.screen.getByRole("alert")).toHaveTextContent("Le numéro est incomplet.");
119
- expect(_react2.screen.queryByText("Format : AAAA-IM-NNNNN")).not.toBeInTheDocument();
120
- rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
137
+ const {
138
+ rerender
139
+ } = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
140
+ label: "Num\xE9ro",
141
+ hint: "Format : AAAA-IM-NNNNN",
142
+ error: "Le num\xE9ro est incomplet.",
143
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
144
+ }));
145
+ expect(_react.screen.getByRole("alert")).toHaveTextContent("Le numéro est incomplet.");
146
+ expect(_react.screen.queryByText("Format : AAAA-IM-NNNNN")).not.toBeInTheDocument();
147
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
121
148
  label: "Num\xE9ro",
122
149
  hint: "Format : AAAA-IM-NNNNN",
123
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
150
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
124
151
  }));
125
- expect(_react2.screen.getByText("Format : AAAA-IM-NNNNN")).toBeInTheDocument();
152
+ expect(_react.screen.getByText("Format : AAAA-IM-NNNNN")).toBeInTheDocument();
126
153
  });
127
154
  });
128
- describe("FieldError — live-region mounting contract", function () {
129
- test("no alert exists until an error appears", function () {
155
+ describe("FieldError — live-region mounting contract", () => {
156
+ test("no alert exists until an error appears", () => {
130
157
  /* THE contract. `role=\"alert\"` announces on INSERTION: an element mounted
131
158
  * permanently with empty content announces nothing when it later fills, so
132
159
  * a well-meaning refactor that always renders the container — to \"avoid
133
160
  * layout shift\", say — silently kills the announcement while every pixel
134
161
  * and every screenshot stays identical. */
135
- var _render2 = (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
136
- label: "Num\xE9ro",
137
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
138
- })),
139
- rerender = _render2.rerender;
140
- expect(_react2.screen.queryByRole("alert")).not.toBeInTheDocument();
141
- rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
162
+ const {
163
+ rerender
164
+ } = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
165
+ label: "Num\xE9ro",
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
167
+ }));
168
+ expect(_react.screen.queryByRole("alert")).not.toBeInTheDocument();
169
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
142
170
  label: "Num\xE9ro",
143
171
  error: "Le num\xE9ro est incomplet.",
144
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
172
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
145
173
  }));
146
- expect(_react2.screen.getByRole("alert")).toBeInTheDocument();
174
+ expect(_react.screen.getByRole("alert")).toBeInTheDocument();
147
175
  });
148
- test("the alert unmounts when the error clears", function () {
149
- var _render3 = (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
150
- label: "Num\xE9ro",
151
- error: "Le num\xE9ro est incomplet.",
152
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
153
- })),
154
- rerender = _render3.rerender;
155
- expect(_react2.screen.getByRole("alert")).toBeInTheDocument();
156
- rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field["default"], {
176
+ test("the alert unmounts when the error clears", () => {
177
+ const {
178
+ rerender
179
+ } = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
180
+ label: "Num\xE9ro",
181
+ error: "Le num\xE9ro est incomplet.",
182
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
183
+ }));
184
+ expect(_react.screen.getByRole("alert")).toBeInTheDocument();
185
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
157
186
  label: "Num\xE9ro",
158
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {})
187
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
159
188
  }));
160
- expect(_react2.screen.queryByRole("alert")).not.toBeInTheDocument();
161
- expect(_react2.screen.getByRole("textbox")).not.toBeInvalid();
189
+ expect(_react.screen.queryByRole("alert")).not.toBeInTheDocument();
190
+ expect(_react.screen.getByRole("textbox")).not.toBeInvalid();
162
191
  });
163
192
  });
164
193
  //# sourceMappingURL=FieldError.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldError.test.js","names":["require","React","_interopRequireWildcard","_react2","_FieldError","_interopRequireDefault","_Field","_jsxRuntime","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","describe","test","render","jsx","children","expect","screen","getByRole","toHaveTextContent","id","toHaveAttribute","not","getByTestId","label","error","toHaveAccessibleDescription","toBeInvalid","jsxs","Fragment","input","_render","hint","rerender","queryByText","toBeInTheDocument","getByText","_render2","queryByRole","_render3"],"sources":["../../../src/lib/v2/__tests__/FieldError.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport FieldError from \"../components/FieldError\";\r\nimport Field from \"../components/Field\";\r\n\r\n/**\r\n * FieldError — contract tests, including its integration into Field.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST. But the real reason is narrower and worth stating: the\r\n * contract this component carries is INVISIBLE. `Field` supplies an id, and that\r\n * id must reach the control's `aria-describedby` so a screen reader announces\r\n * the error when focus lands on the input. Break that wiring and NOTHING\r\n * changes: same pixels, same screenshot, same visual review — only a blind user\r\n * silently stops being told why their submit failed. There is no way to catch\r\n * that except by asserting it.\r\n *\r\n * The assertions below use `toHaveAccessibleDescription`, not id comparisons, on\r\n * purpose. It resolves aria-describedby to the text a screen reader would\r\n * actually announce, so the test states the USER-FACING outcome and stays true\r\n * if the id-generation scheme ever changes.\r\n *\r\n * NOT COVERED — deliberately\r\n * R-4.1's visual half (\"sous le champ, en rouge, avec icône\") and the\r\n * first-line icon alignment on a wrapping message are layout and colour. jsdom\r\n * resolves neither CSS variables nor flexbox, so asserting them here would pass\r\n * while the message rendered black and centred. Those live in\r\n * FieldError.stories.tsx.\r\n */\r\ndescribe(\"FieldError — standalone\", () => {\r\n test(\"announces itself as an alert carrying the message\", () => {\r\n render(<FieldError>Ajoutez au moins un article avant de soumettre.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\r\n \"Ajoutez au moins un article avant de soumettre.\"\r\n );\r\n });\r\n\r\n test(\"forwards id so a host can wire its own aria-describedby\", () => {\r\n render(<FieldError id=\"articles-error\">Ajoutez au moins un article.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).toHaveAttribute(\"id\", \"articles-error\");\r\n });\r\n\r\n test(\"omits id when none is supplied\", () => {\r\n /* The list-level case usually has nothing to bind to. Emitting an empty or\r\n * generated id would create a describedby target nobody references. */\r\n render(<FieldError>Ajoutez au moins un article.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).not.toHaveAttribute(\"id\");\r\n });\r\n\r\n test(\"the icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the message IS the announcement; an announced glyph would double\r\n * it. No semantic query reaches a role-less, name-less element, hence the\r\n * testid the component exposes for exactly this assertion. */\r\n render(<FieldError>Message</FieldError>);\r\n expect(screen.getByTestId(\"fielderror-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n});\r\n\r\ndescribe(\"FieldError — inside Field (the wiring that has no visual tell)\", () => {\r\n test(\"the error becomes the control's accessible description\", () => {\r\n render(\r\n <Field label=\"Numéro de titre\" error=\"Le numéro est invalide. Format : AAAA-IM-NNNNN.\">\r\n <input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Le numéro est invalide. Format : AAAA-IM-NNNNN.\"\r\n );\r\n });\r\n\r\n test(\"the control is marked invalid\", () => {\r\n render(\r\n <Field label=\"Numéro\" error=\"Invalide.\">\r\n <input />\r\n </Field>\r\n );\r\n // jest-dom's toBeInvalid reads aria-invalid — R-I.3.\r\n expect(screen.getByRole(\"textbox\")).toBeInvalid();\r\n });\r\n\r\n test(\"a host-supplied aria-describedby is PRESERVED, not replaced\", () => {\r\n /* The merge is the fragile part. Overwriting instead of merging silently\r\n * drops a consumer's external help text, and again nothing visual changes.\r\n * Asserted with two order-independent regexes rather than one exact string,\r\n * so the test does not encode which fragment Field puts first. */\r\n render(\r\n <>\r\n <span id=\"host-help\">Format attendu : AAAA-IM-NNNNN.</span>\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <input aria-describedby=\"host-help\" />\r\n </Field>\r\n </>\r\n );\r\n\r\n const input = screen.getByRole(\"textbox\");\r\n expect(input).toHaveAccessibleDescription(/Format attendu/);\r\n expect(input).toHaveAccessibleDescription(/incomplet/);\r\n });\r\n\r\n test(\"the hint is suppressed while an error is shown\", () => {\r\n /* Two competing descriptions under one field is worse than one. The hint\r\n * returns once the error clears — verified by the rerender below. */\r\n const { rerender } = render(\r\n <Field label=\"Numéro\" hint=\"Format : AAAA-IM-NNNNN\" error=\"Le numéro est incomplet.\">\r\n <input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\"Le numéro est incomplet.\");\r\n expect(screen.queryByText(\"Format : AAAA-IM-NNNNN\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\" hint=\"Format : AAAA-IM-NNNNN\">\r\n <input />\r\n </Field>\r\n );\r\n expect(screen.getByText(\"Format : AAAA-IM-NNNNN\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FieldError — live-region mounting contract\", () => {\r\n test(\"no alert exists until an error appears\", () => {\r\n /* THE contract. `role=\\\"alert\\\"` announces on INSERTION: an element mounted\r\n * permanently with empty content announces nothing when it later fills, so\r\n * a well-meaning refactor that always renders the container — to \\\"avoid\r\n * layout shift\\\", say — silently kills the announcement while every pixel\r\n * and every screenshot stays identical. */\r\n const { rerender } = render(\r\n <Field label=\"Numéro\">\r\n <input />\r\n </Field>\r\n );\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <input />\r\n </Field>\r\n );\r\n expect(screen.getByRole(\"alert\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"the alert unmounts when the error clears\", () => {\r\n const { rerender } = render(\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <input />\r\n </Field>\r\n );\r\n expect(screen.getByRole(\"alert\")).toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\">\r\n <input />\r\n </Field>\r\n );\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n expect(screen.getByRole(\"textbox\")).not.toBeInvalid();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FieldError.test.js","names":["require","_react","_FieldError","_interopRequireDefault","_Field","_jsxRuntime","e","__esModule","default","BareInput","error","_error","fullWidth","_fullWidth","rest","jsx","describe","test","render","children","expect","screen","getByRole","toHaveTextContent","id","toHaveAttribute","not","getByTestId","label","toHaveAccessibleDescription","toBeInvalid","jsxs","Fragment","input","rerender","hint","queryByText","toBeInTheDocument","getByText","queryByRole"],"sources":["../../../src/lib/v2/__tests__/FieldError.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport type { InputHTMLAttributes } from \"react\";\r\nimport FieldError from \"../components/FieldError\";\r\nimport Field from \"../components/Field\";\r\n\r\n/**\r\n * FieldError — contract tests, including its integration into Field.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST. But the real reason is narrower and worth stating: the\r\n * contract this component carries is INVISIBLE. `Field` supplies an id, and that\r\n * id must reach the control's `aria-describedby` so a screen reader announces\r\n * the error when focus lands on the input. Break that wiring and NOTHING\r\n * changes: same pixels, same screenshot, same visual review — only a blind user\r\n * silently stops being told why their submit failed. There is no way to catch\r\n * that except by asserting it.\r\n *\r\n * The assertions below use `toHaveAccessibleDescription`, not id comparisons, on\r\n * purpose. It resolves aria-describedby to the text a screen reader would\r\n * actually announce, so the test states the USER-FACING outcome and stays true\r\n * if the id-generation scheme ever changes.\r\n *\r\n * NOT COVERED — deliberately\r\n * R-4.1's visual half (\"sous le champ, en rouge, avec icône\") and the\r\n * first-line icon alignment on a wrapping message are layout and colour. jsdom\r\n * resolves neither CSS variables nor flexbox, so asserting them here would pass\r\n * while the message rendered black and centred. Those live in\r\n * FieldError.stories.tsx.\r\n */\r\n\r\n/**\r\n * Fixture : un champ minimal qui CONSOMME les props que `Field` diffuse.\r\n *\r\n * `Field` clone son enfant avec `error` et `fullWidth` — délibérément, parce\r\n * que plusieurs entrées v2 (`NumberInput`, le `renderInput` de `Combobox`) ne\r\n * sont pas de purs enfants MUI et lisent ces props directement. Un `<input />`\r\n * NU les laisse donc filer jusqu'au DOM, et React émet deux avertissements à\r\n * chaque rendu : « Received `true` for a non-boolean attribute `error` » et\r\n * « React does not recognize the `fullWidth` prop on a DOM element ».\r\n *\r\n * Ce n'est PAS un défaut de `Field` : en production l'enfant est un `Input` ou\r\n * un `Select` du socle, qui consomme ces props. Mais c'était six\r\n * avertissements dans la sortie de la suite, au milieu desquels un vrai\r\n * avertissement passe inaperçu — et un audit du socle a effectivement pris ce\r\n * bruit pour une fuite de props en production avant de lire le composant.\r\n *\r\n * La fixture reste volontairement minimale : pas d'`Input` du socle ici, ce\r\n * fichier teste le CÂBLAGE de `Field` et non l'intégration d'un composant. Elle\r\n * ne fait qu'absorber les deux props destinées à un contrôle riche.\r\n */\r\nfunction BareInput({\r\n error: _error,\r\n fullWidth: _fullWidth,\r\n ...rest\r\n}: InputHTMLAttributes<HTMLInputElement> & {\r\n error?: boolean | undefined;\r\n fullWidth?: boolean | undefined;\r\n}) {\r\n return <input {...rest} />;\r\n}\r\n\r\ndescribe(\"FieldError — standalone\", () => {\r\n test(\"announces itself as an alert carrying the message\", () => {\r\n render(<FieldError>Ajoutez au moins un article avant de soumettre.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\r\n \"Ajoutez au moins un article avant de soumettre.\"\r\n );\r\n });\r\n\r\n test(\"forwards id so a host can wire its own aria-describedby\", () => {\r\n render(<FieldError id=\"articles-error\">Ajoutez au moins un article.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).toHaveAttribute(\"id\", \"articles-error\");\r\n });\r\n\r\n test(\"omits id when none is supplied\", () => {\r\n /* The list-level case usually has nothing to bind to. Emitting an empty or\r\n * generated id would create a describedby target nobody references. */\r\n render(<FieldError>Ajoutez au moins un article.</FieldError>);\r\n expect(screen.getByRole(\"alert\")).not.toHaveAttribute(\"id\");\r\n });\r\n\r\n test(\"the icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the message IS the announcement; an announced glyph would double\r\n * it. No semantic query reaches a role-less, name-less element, hence the\r\n * testid the component exposes for exactly this assertion. */\r\n render(<FieldError>Message</FieldError>);\r\n expect(screen.getByTestId(\"fielderror-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n});\r\n\r\ndescribe(\"FieldError — inside Field (the wiring that has no visual tell)\", () => {\r\n test(\"the error becomes the control's accessible description\", () => {\r\n render(\r\n <Field label=\"Numéro de titre\" error=\"Le numéro est invalide. Format : AAAA-IM-NNNNN.\">\r\n <BareInput />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Le numéro est invalide. Format : AAAA-IM-NNNNN.\"\r\n );\r\n });\r\n\r\n test(\"the control is marked invalid\", () => {\r\n render(\r\n <Field label=\"Numéro\" error=\"Invalide.\">\r\n <BareInput />\r\n </Field>\r\n );\r\n // jest-dom's toBeInvalid reads aria-invalid — R-I.3.\r\n expect(screen.getByRole(\"textbox\")).toBeInvalid();\r\n });\r\n\r\n test(\"a host-supplied aria-describedby is PRESERVED, not replaced\", () => {\r\n /* The merge is the fragile part. Overwriting instead of merging silently\r\n * drops a consumer's external help text, and again nothing visual changes.\r\n * Asserted with two order-independent regexes rather than one exact string,\r\n * so the test does not encode which fragment Field puts first. */\r\n render(\r\n <>\r\n <span id=\"host-help\">Format attendu : AAAA-IM-NNNNN.</span>\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <BareInput aria-describedby=\"host-help\" />\r\n </Field>\r\n </>\r\n );\r\n\r\n const input = screen.getByRole(\"textbox\");\r\n expect(input).toHaveAccessibleDescription(/Format attendu/);\r\n expect(input).toHaveAccessibleDescription(/incomplet/);\r\n });\r\n\r\n test(\"the hint is suppressed while an error is shown\", () => {\r\n /* Two competing descriptions under one field is worse than one. The hint\r\n * returns once the error clears — verified by the rerender below. */\r\n const { rerender } = render(\r\n <Field label=\"Numéro\" hint=\"Format : AAAA-IM-NNNNN\" error=\"Le numéro est incomplet.\">\r\n <BareInput />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\"Le numéro est incomplet.\");\r\n expect(screen.queryByText(\"Format : AAAA-IM-NNNNN\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\" hint=\"Format : AAAA-IM-NNNNN\">\r\n <BareInput />\r\n </Field>\r\n );\r\n expect(screen.getByText(\"Format : AAAA-IM-NNNNN\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FieldError — live-region mounting contract\", () => {\r\n test(\"no alert exists until an error appears\", () => {\r\n /* THE contract. `role=\\\"alert\\\"` announces on INSERTION: an element mounted\r\n * permanently with empty content announces nothing when it later fills, so\r\n * a well-meaning refactor that always renders the container — to \\\"avoid\r\n * layout shift\\\", say — silently kills the announcement while every pixel\r\n * and every screenshot stays identical. */\r\n const { rerender } = render(\r\n <Field label=\"Numéro\">\r\n <BareInput />\r\n </Field>\r\n );\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <BareInput />\r\n </Field>\r\n );\r\n expect(screen.getByRole(\"alert\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"the alert unmounts when the error clears\", () => {\r\n const { rerender } = render(\r\n <Field label=\"Numéro\" error=\"Le numéro est incomplet.\">\r\n <BareInput />\r\n </Field>\r\n );\r\n expect(screen.getByRole(\"alert\")).toBeInTheDocument();\r\n\r\n rerender(\r\n <Field label=\"Numéro\">\r\n <BareInput />\r\n </Field>\r\n );\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n expect(screen.getByRole(\"textbox\")).not.toBeInvalid();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _Field = _interopRequireDefault(require("../components/Field"));
6
+ var _Select = _interopRequireDefault(require("../components/Select"));
7
+ var _FieldHelp = _interopRequireDefault(require("../components/FieldHelp"));
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * R-I.1 — the accessible NAME of a wrapped control.
12
+ *
13
+ * ── WHY THIS FILE EXISTS ─────────────────────────────────────────────
14
+ *
15
+ * `Field` associated its label through `htmlFor` / `id` only. That pair names
16
+ * LABELABLE elements — input, select, textarea, button, meter, output,
17
+ * progress — and nothing else. `Select` renders its visible surface as a
18
+ * `div[role="combobox"]`, so the pair resolved to NOTHING: the control had no
19
+ * accessible name at all, and a screen reader announced "combobox, collapsed"
20
+ * without ever saying which field it was.
21
+ *
22
+ * Nothing on screen showed it. The label was there, in the right place, in the
23
+ * right colour. Every filter drawer and every form of every module carried the
24
+ * defect, and it took an axe-core run in a consuming module
25
+ * (`autorisation-admis-pour-conforme-fe`, Area 10) to surface it as
26
+ * `aria-input-field-name`.
27
+ *
28
+ * The assertions below use `toHaveAccessibleName`, not attribute comparisons,
29
+ * on purpose: it resolves the whole name computation — `aria-labelledby`, then
30
+ * `aria-label`, then the `label[for]` pair — to the string a screen reader
31
+ * would announce. A test asserting `aria-labelledby="pui-xyz-l"` would pass
32
+ * even if that id pointed at an empty element.
33
+ *
34
+ * ── NOT COVERED, AND IT IS A REAL LIMITATION ────────────────────
35
+ *
36
+ * A consumer-supplied `aria-labelledby` on a NON-group child is not merged
37
+ * into the name. `aria-describedby` is (R-I.3), which makes the asymmetry
38
+ * surprising enough to state: the describedby merge happens in `Field`, while
39
+ * naming goes through MUI's `labelId`, and MUI does not concatenate the two.
40
+ * An earlier version of this file asserted the merge and failed with
41
+ * `Received: "Ville"` — the Field label alone.
42
+ *
43
+ * Nothing is silently lost: the field IS named, by its own label, which is the
44
+ * name a user should hear. A host needing an additional name should put it in
45
+ * `label` rather than reaching around the wrapper. Widening this would mean
46
+ * interpolating a token LIST into `labelId`, a prop documented as "the ID of an
47
+ * element" — clever, undocumented, and the kind of thing that breaks on a MUI
48
+ * minor.
49
+ */
50
+
51
+ /**
52
+ * Fixture : un champ minimal qui CONSOMME les props diffusées par `Field`.
53
+ *
54
+ * Même raison que dans `FieldError.test.tsx` : un `<input />` nu laisse filer
55
+ * `error` et `fullWidth` jusqu'au DOM et produit deux avertissements React par
56
+ * rendu, au milieu desquels un VRAI avertissement passerait inaperçu.
57
+ */function BareInput({
58
+ error: _error,
59
+ fullWidth: _fullWidth,
60
+ ...rest
61
+ }) {
62
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
63
+ ...rest
64
+ });
65
+ }
66
+ const noop = () => undefined;
67
+ const OPTIONS = [{
68
+ value: "1",
69
+ label: "Casablanca"
70
+ }, {
71
+ value: "2",
72
+ label: "Rabat"
73
+ }];
74
+ describe("Field — nom accessible du contrôle", () => {
75
+ /* The case that already worked: a native, labelable child. Asserted so the
76
+ * fix cannot regress it — adding `aria-labelledby` everywhere had to leave
77
+ * this one announcing exactly the same string. */
78
+ it("nomme un contrôle natif (déjà couvert par htmlFor)", () => {
79
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
80
+ label: "R\xE9f\xE9rence de la demande",
81
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BareInput, {})
82
+ }));
83
+ expect(_react.screen.getByRole("textbox")).toHaveAccessibleName("Référence de la demande");
84
+ });
85
+
86
+ /* THE DEFECT. A div-based control cannot be named by htmlFor/id. */
87
+ it("nomme un Select, dont la surface est un div[role=combobox]", () => {
88
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
89
+ label: "Ville de l'unit\xE9",
90
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
91
+ value: "",
92
+ onChange: noop,
93
+ options: OPTIONS
94
+ })
95
+ }));
96
+ expect(_react.screen.getByRole("combobox")).toHaveAccessibleName("Ville de l'unité");
97
+ });
98
+
99
+ /* The required asterisk is `aria-hidden`, so it must not leak into the name:
100
+ * "Ville de l'unité *" is not what a user should hear. */
101
+ it("n'inclut pas l'astérisque des champs requis", () => {
102
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
103
+ label: "Ville de l'unit\xE9",
104
+ required: true,
105
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
106
+ value: "",
107
+ onChange: noop,
108
+ options: OPTIONS
109
+ })
110
+ }));
111
+ expect(_react.screen.getByRole("combobox")).toHaveAccessibleName("Ville de l'unité");
112
+ });
113
+
114
+ /**
115
+ * The reason `labelId` sits on a span around the TEXT and not on the label
116
+ * element: `aria-labelledby` resolves to its target's text content, and a
117
+ * help button inside the label carries its own accessible name. Anchoring on
118
+ * the whole label would announce "Ville de l'unité Aide sur ce champ".
119
+ *
120
+ * This also fixes the `htmlFor` path, which had the same flaw.
121
+ */
122
+ it("n'inclut pas le nom du bouton d'aide du libellé", () => {
123
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
124
+ label: "Ville de l'unit\xE9",
125
+ helpAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldHelp.default, {
126
+ ariaLabel: "Aide sur ce champ",
127
+ children: "Texte d'aide."
128
+ }),
129
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
130
+ value: "",
131
+ onChange: noop,
132
+ options: OPTIONS
133
+ })
134
+ }));
135
+ expect(_react.screen.getByRole("combobox")).toHaveAccessibleName("Ville de l'unité");
136
+ });
137
+
138
+ /* Group mode keeps working: the label is a plain span there, and the group is
139
+ * named by `aria-labelledby` — which DOES reach its target, because it is the
140
+ * child's own root that carries `role="group"`. */
141
+ it("nomme un groupe ARIA", () => {
142
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
143
+ label: "Type de contr\xF4le",
144
+ group: true,
145
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
146
+ role: "group",
147
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
148
+ type: "radio",
149
+ name: "t",
150
+ "aria-label": "Documentaire"
151
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
152
+ type: "radio",
153
+ name: "t",
154
+ "aria-label": "Physique"
155
+ })]
156
+ })
157
+ }));
158
+ expect(_react.screen.getByRole("group")).toHaveAccessibleName("Type de contrôle");
159
+ });
160
+ });
161
+ //# sourceMappingURL=FieldNaming.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldNaming.test.js","names":["require","_react","_Field","_interopRequireDefault","_Select","_FieldHelp","_jsxRuntime","e","__esModule","default","BareInput","error","_error","fullWidth","_fullWidth","rest","jsx","noop","undefined","OPTIONS","value","label","describe","it","render","children","expect","screen","getByRole","toHaveAccessibleName","onChange","options","required","helpAdornment","ariaLabel","group","jsxs","role","type","name"],"sources":["../../../src/lib/v2/__tests__/FieldNaming.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport type { InputHTMLAttributes } from \"react\";\r\n\r\nimport Field from \"../components/Field\";\r\nimport Select from \"../components/Select\";\r\nimport FieldHelp from \"../components/FieldHelp\";\r\n\r\n/**\r\n * R-I.1 — the accessible NAME of a wrapped control.\r\n *\r\n * ── WHY THIS FILE EXISTS ─────────────────────────────────────────────\r\n *\r\n * `Field` associated its label through `htmlFor` / `id` only. That pair names\r\n * LABELABLE elements — input, select, textarea, button, meter, output,\r\n * progress — and nothing else. `Select` renders its visible surface as a\r\n * `div[role=\"combobox\"]`, so the pair resolved to NOTHING: the control had no\r\n * accessible name at all, and a screen reader announced \"combobox, collapsed\"\r\n * without ever saying which field it was.\r\n *\r\n * Nothing on screen showed it. The label was there, in the right place, in the\r\n * right colour. Every filter drawer and every form of every module carried the\r\n * defect, and it took an axe-core run in a consuming module\r\n * (`autorisation-admis-pour-conforme-fe`, Area 10) to surface it as\r\n * `aria-input-field-name`.\r\n *\r\n * The assertions below use `toHaveAccessibleName`, not attribute comparisons,\r\n * on purpose: it resolves the whole name computation — `aria-labelledby`, then\r\n * `aria-label`, then the `label[for]` pair — to the string a screen reader\r\n * would announce. A test asserting `aria-labelledby=\"pui-xyz-l\"` would pass\r\n * even if that id pointed at an empty element.\r\n *\r\n * ── NOT COVERED, AND IT IS A REAL LIMITATION ────────────────────\r\n *\r\n * A consumer-supplied `aria-labelledby` on a NON-group child is not merged\r\n * into the name. `aria-describedby` is (R-I.3), which makes the asymmetry\r\n * surprising enough to state: the describedby merge happens in `Field`, while\r\n * naming goes through MUI's `labelId`, and MUI does not concatenate the two.\r\n * An earlier version of this file asserted the merge and failed with\r\n * `Received: \"Ville\"` — the Field label alone.\r\n *\r\n * Nothing is silently lost: the field IS named, by its own label, which is the\r\n * name a user should hear. A host needing an additional name should put it in\r\n * `label` rather than reaching around the wrapper. Widening this would mean\r\n * interpolating a token LIST into `labelId`, a prop documented as \"the ID of an\r\n * element\" — clever, undocumented, and the kind of thing that breaks on a MUI\r\n * minor.\r\n */\r\n\r\n/**\r\n * Fixture : un champ minimal qui CONSOMME les props diffusées par `Field`.\r\n *\r\n * Même raison que dans `FieldError.test.tsx` : un `<input />` nu laisse filer\r\n * `error` et `fullWidth` jusqu'au DOM et produit deux avertissements React par\r\n * rendu, au milieu desquels un VRAI avertissement passerait inaperçu.\r\n */\r\nfunction BareInput({\r\n error: _error,\r\n fullWidth: _fullWidth,\r\n ...rest\r\n}: InputHTMLAttributes<HTMLInputElement> & {\r\n error?: boolean | undefined;\r\n fullWidth?: boolean | undefined;\r\n}) {\r\n return <input {...rest} />;\r\n}\r\n\r\nconst noop = () => undefined;\r\n\r\nconst OPTIONS = [\r\n { value: \"1\", label: \"Casablanca\" },\r\n { value: \"2\", label: \"Rabat\" },\r\n];\r\n\r\ndescribe(\"Field — nom accessible du contrôle\", () => {\r\n /* The case that already worked: a native, labelable child. Asserted so the\r\n * fix cannot regress it — adding `aria-labelledby` everywhere had to leave\r\n * this one announcing exactly the same string. */\r\n it(\"nomme un contrôle natif (déjà couvert par htmlFor)\", () => {\r\n render(\r\n <Field label=\"Référence de la demande\">\r\n <BareInput />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleName(\r\n \"Référence de la demande\"\r\n );\r\n });\r\n\r\n /* THE DEFECT. A div-based control cannot be named by htmlFor/id. */\r\n it(\"nomme un Select, dont la surface est un div[role=combobox]\", () => {\r\n render(\r\n <Field label=\"Ville de l'unité\">\r\n <Select value=\"\" onChange={noop} options={OPTIONS} />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"combobox\")).toHaveAccessibleName(\r\n \"Ville de l'unité\"\r\n );\r\n });\r\n\r\n /* The required asterisk is `aria-hidden`, so it must not leak into the name:\r\n * \"Ville de l'unité *\" is not what a user should hear. */\r\n it(\"n'inclut pas l'astérisque des champs requis\", () => {\r\n render(\r\n <Field label=\"Ville de l'unité\" required>\r\n <Select value=\"\" onChange={noop} options={OPTIONS} />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"combobox\")).toHaveAccessibleName(\r\n \"Ville de l'unité\"\r\n );\r\n });\r\n\r\n /**\r\n * The reason `labelId` sits on a span around the TEXT and not on the label\r\n * element: `aria-labelledby` resolves to its target's text content, and a\r\n * help button inside the label carries its own accessible name. Anchoring on\r\n * the whole label would announce \"Ville de l'unité Aide sur ce champ\".\r\n *\r\n * This also fixes the `htmlFor` path, which had the same flaw.\r\n */\r\n it(\"n'inclut pas le nom du bouton d'aide du libellé\", () => {\r\n render(\r\n <Field\r\n label=\"Ville de l'unité\"\r\n helpAdornment={<FieldHelp ariaLabel=\"Aide sur ce champ\">Texte d'aide.</FieldHelp>}\r\n >\r\n <Select value=\"\" onChange={noop} options={OPTIONS} />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"combobox\")).toHaveAccessibleName(\r\n \"Ville de l'unité\"\r\n );\r\n });\r\n\r\n /* Group mode keeps working: the label is a plain span there, and the group is\r\n * named by `aria-labelledby` — which DOES reach its target, because it is the\r\n * child's own root that carries `role=\"group\"`. */\r\n it(\"nomme un groupe ARIA\", () => {\r\n render(\r\n <Field label=\"Type de contrôle\" group>\r\n <div role=\"group\">\r\n <input type=\"radio\" name=\"t\" aria-label=\"Documentaire\" />\r\n <input type=\"radio\" name=\"t\" aria-label=\"Physique\" />\r\n </div>\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"group\")).toHaveAccessibleName(\"Type de contrôle\");\r\n });\r\n});\r\n"],"mappings":";;AAAAA,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAGA,IAAAE,MAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,UAAA,GAAAF,sBAAA,CAAAH,OAAA;AAAgD,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GACA,SAASG,SAASA,CAAC;EACjBC,KAAK,EAAEC,MAAM;EACbC,SAAS,EAAEC,UAAU;EACrB,GAAGC;AAIL,CAAC,EAAE;EACD,oBAAO,IAAAT,WAAA,CAAAU,GAAA;IAAA,GAAWD;EAAI,CAAG,CAAC;AAC5B;AAEA,MAAME,IAAI,GAAGA,CAAA,KAAMC,SAAS;AAE5B,MAAMC,OAAO,GAAG,CACd;EAAEC,KAAK,EAAE,GAAG;EAAEC,KAAK,EAAE;AAAa,CAAC,EACnC;EAAED,KAAK,EAAE,GAAG;EAAEC,KAAK,EAAE;AAAQ,CAAC,CAC/B;AAEDC,QAAQ,CAAC,oCAAoC,EAAE,MAAM;EACnD;AACF;AACA;EACEC,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7D,IAAAC,aAAM,eACJ,IAAAlB,WAAA,CAAAU,GAAA,EAACd,MAAA,CAAAO,OAAK;MAACY,KAAK,EAAC,+BAAyB;MAAAI,QAAA,eACpC,IAAAnB,WAAA,CAAAU,GAAA,EAACN,SAAS,IAAE;IAAC,CACR,CACT,CAAC;IAEDgB,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,SAAS,CAAC,CAAC,CAACC,oBAAoB,CACtD,yBACF,CAAC;EACH,CAAC,CAAC;;EAEF;EACAN,EAAE,CAAC,4DAA4D,EAAE,MAAM;IACrE,IAAAC,aAAM,eACJ,IAAAlB,WAAA,CAAAU,GAAA,EAACd,MAAA,CAAAO,OAAK;MAACY,KAAK,EAAC,qBAAkB;MAAAI,QAAA,eAC7B,IAAAnB,WAAA,CAAAU,GAAA,EAACZ,OAAA,CAAAK,OAAM;QAACW,KAAK,EAAC,EAAE;QAACU,QAAQ,EAAEb,IAAK;QAACc,OAAO,EAAEZ;MAAQ,CAAE;IAAC,CAChD,CACT,CAAC;IAEDO,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,oBAAoB,CACvD,kBACF,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;EACEN,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtD,IAAAC,aAAM,eACJ,IAAAlB,WAAA,CAAAU,GAAA,EAACd,MAAA,CAAAO,OAAK;MAACY,KAAK,EAAC,qBAAkB;MAACW,QAAQ;MAAAP,QAAA,eACtC,IAAAnB,WAAA,CAAAU,GAAA,EAACZ,OAAA,CAAAK,OAAM;QAACW,KAAK,EAAC,EAAE;QAACU,QAAQ,EAAEb,IAAK;QAACc,OAAO,EAAEZ;MAAQ,CAAE;IAAC,CAChD,CACT,CAAC;IAEDO,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,oBAAoB,CACvD,kBACF,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEN,EAAE,CAAC,iDAAiD,EAAE,MAAM;IAC1D,IAAAC,aAAM,eACJ,IAAAlB,WAAA,CAAAU,GAAA,EAACd,MAAA,CAAAO,OAAK;MACJY,KAAK,EAAC,qBAAkB;MACxBY,aAAa,eAAE,IAAA3B,WAAA,CAAAU,GAAA,EAACX,UAAA,CAAAI,OAAS;QAACyB,SAAS,EAAC,mBAAmB;QAAAT,QAAA,EAAC;MAAa,CAAW,CAAE;MAAAA,QAAA,eAElF,IAAAnB,WAAA,CAAAU,GAAA,EAACZ,OAAA,CAAAK,OAAM;QAACW,KAAK,EAAC,EAAE;QAACU,QAAQ,EAAEb,IAAK;QAACc,OAAO,EAAEZ;MAAQ,CAAE;IAAC,CAChD,CACT,CAAC;IAEDO,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,oBAAoB,CACvD,kBACF,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;AACA;EACEN,EAAE,CAAC,sBAAsB,EAAE,MAAM;IAC/B,IAAAC,aAAM,eACJ,IAAAlB,WAAA,CAAAU,GAAA,EAACd,MAAA,CAAAO,OAAK;MAACY,KAAK,EAAC,qBAAkB;MAACc,KAAK;MAAAV,QAAA,eACnC,IAAAnB,WAAA,CAAA8B,IAAA;QAAKC,IAAI,EAAC,OAAO;QAAAZ,QAAA,gBACf,IAAAnB,WAAA,CAAAU,GAAA;UAAOsB,IAAI,EAAC,OAAO;UAACC,IAAI,EAAC,GAAG;UAAC,cAAW;QAAc,CAAE,CAAC,eACzD,IAAAjC,WAAA,CAAAU,GAAA;UAAOsB,IAAI,EAAC,OAAO;UAACC,IAAI,EAAC,GAAG;UAAC,cAAW;QAAU,CAAE,CAAC;MAAA,CAClD;IAAC,CACD,CACT,CAAC;IAEDb,MAAM,CAACC,aAAM,CAACC,SAAS,CAAC,OAAO,CAAC,CAAC,CAACC,oBAAoB,CAAC,kBAAkB,CAAC;EAC5E,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}