@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,148 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var _react = require("@testing-library/react");
5
+ var _Field = _interopRequireWildcard(require("../components/Field"));
6
+ var _Input = _interopRequireDefault(require("../components/Input"));
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
+ /**
11
+ * Field — largeur semantique (gap G-H) : tests de contrat.
12
+ *
13
+ * CE QUE JSDOM PEUT ET NE PEUT PAS VERIFIER
14
+ * -----------------------------------------
15
+ * Le plafond n'est pose qu'a partir du palier `sm` — le standard exigeant
16
+ * « 100% grid width » sur mobile. Il passe donc par une requete media
17
+ * qu'`emotion` injecte dans la feuille de style, et jsdom ne resout pas les
18
+ * requetes media : `getComputedStyle` ne rendra jamais la largeur effective au
19
+ * palier desktop. Un test de rendu ne PEUT pas l'assertir, et pretendre le
20
+ * faire donnerait un test qui passe sans rien verifier.
21
+ *
22
+ * Ce fichier epingle donc ce qui est verifiable et qui compte :
23
+ *
24
+ * 1. LES CINQ VALEURS. C'est le point sensible du tour : elles ne se lisent
25
+ * pas dans le standard, qui donne des FOURCHETTES — quelqu'un a choisi, et
26
+ * ce choix doit etre visible et protege. Si l'equipe design les revoit,
27
+ * c'est ce test qui doit etre mis a jour sciemment, pas un ecran qui doit
28
+ * bouger par surprise.
29
+ *
30
+ * 2. QUE `width` NE CASSE PAS LE CABLAGE D'ACCESSIBILITE. `Field` associe
31
+ * libelle, indication et erreur au controle ; ajouter une contrainte de
32
+ * mise en page ne doit rien y toucher. C'est la regression la plus
33
+ * probable d'un changement qui passe par `sx`.
34
+ *
35
+ * 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, aucun plafond : les
36
+ * appelants d'avant G-H ne doivent pas bouger d'un pixel.
37
+ *
38
+ * Le comportement responsive lui-meme se verifie dans la story, en
39
+ * redimensionnant la fenetre — c'est la que le contrat est observable.
40
+ */describe("Field — les cinq gabarits (G-H)", () => {
41
+ test("les valeurs sont celles retenues dans la fourchette du standard", () => {
42
+ /* Fourchettes du standard, et valeur retenue (le HAUT, ces largeurs etant
43
+ * des plafonds) :
44
+ * xs ~80-120 -> 120 s ~160-200 -> 200
45
+ * m ~320-400 -> 400 l ~500-600 -> 600
46
+ * xl 100%
47
+ * Chaque valeur passe par une variable CSS pour etre revue sans toucher au
48
+ * code : c'est le repli qui est epingle ici. */
49
+ expect(_Field.FIELD_MAX_WIDTH.xs).toBe("var(--field-w-xs, 120px)");
50
+ expect(_Field.FIELD_MAX_WIDTH.s).toBe("var(--field-w-s, 200px)");
51
+ expect(_Field.FIELD_MAX_WIDTH.m).toBe("var(--field-w-m, 400px)");
52
+ expect(_Field.FIELD_MAX_WIDTH.l).toBe("var(--field-w-l, 600px)");
53
+ expect(_Field.FIELD_MAX_WIDTH.xl).toBe("100%");
54
+ });
55
+ test("les cinq gabarits du standard sont couverts, ni plus ni moins", () => {
56
+ /* Un gabarit ajoute ou retire est un ecart au standard, pas un detail
57
+ * d'implementation. */
58
+ expect(Object.keys(_Field.FIELD_MAX_WIDTH).sort()).toEqual(["l", "m", "s", "xl", "xs"]);
59
+ });
60
+ });
61
+ describe("Field — `width` ne touche pas au cablage d'accessibilite", () => {
62
+ test("le libelle nomme toujours le controle", () => {
63
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
64
+ label: "Identifiant fiscal",
65
+ htmlFor: "ifu",
66
+ width: "s",
67
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
68
+ }));
69
+ expect(_react.screen.getByRole("textbox", {
70
+ name: /Identifiant fiscal/
71
+ })).toBeInTheDocument();
72
+ });
73
+ test("l'erreur reste la description accessible du controle", () => {
74
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
75
+ label: "Identifiant fiscal",
76
+ htmlFor: "ifu",
77
+ width: "s",
78
+ error: "Quinze caract\xE8res maximum.",
79
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
80
+ }));
81
+ expect(_react.screen.getByRole("textbox")).toHaveAccessibleDescription("Quinze caractères maximum.");
82
+ expect(_react.screen.getByRole("textbox")).toHaveAttribute("aria-invalid", "true");
83
+ });
84
+ test("l'indication reste la description accessible du controle", () => {
85
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
86
+ label: "Adresse",
87
+ htmlFor: "adresse",
88
+ width: "l",
89
+ hint: "Voie, code postal et ville.",
90
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
91
+ }));
92
+ expect(_react.screen.getByRole("textbox")).toHaveAccessibleDescription("Voie, code postal et ville.");
93
+ });
94
+ test("`required` reste annonce comme tel", () => {
95
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
96
+ label: "Marque",
97
+ htmlFor: "marque",
98
+ width: "m",
99
+ required: true,
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
101
+ }));
102
+
103
+ /* `toBeRequired` accepte l'attribut NATIF `required` comme `aria-required` :
104
+ * c'est volontaire, et c'est la bonne assertion ici.
105
+ *
106
+ * Les deux mecanismes coexistent dans la library, par des chemins
107
+ * differents, et viser l'un des deux nommement rendrait le test faux sans
108
+ * que le comportement change :
109
+ * — sur un controle MUI (`Input`, `Textarea`), `Field` passe `required`
110
+ * au `FormControl`, dont le CONTEXTE le propage jusqu'a l'input, qui
111
+ * porte alors l'attribut natif ;
112
+ * — sur un groupe (`RadioGroup`), aucun contexte ne s'applique : `Field`
113
+ * injecte `aria-required` sur l'enfant, que le groupe transmet a son
114
+ * `role="radiogroup"` (voir le test de `FormikRadioGroup`).
115
+ *
116
+ * Ce qui compte pour R-I.2 est qu'une technologie d'assistance l'annonce,
117
+ * pas quel attribut le porte. */
118
+ expect(_react.screen.getByRole("textbox")).toBeRequired();
119
+ });
120
+ });
121
+ describe("Field — l'omission reste neutre", () => {
122
+ test("sans `width`, le champ se rend et se nomme comme avant G-H", () => {
123
+ /* Ce que ce test prouve, et ce qu'il ne prouve pas.
124
+ *
125
+ * L'absence de plafond n'est PAS assertable : elle se lit dans la feuille
126
+ * de style generee par `emotion`, que jsdom ne resout pas plus qu'une
127
+ * requete media. Une premiere version comparait le nombre de noeuds avec
128
+ * et sans `width` — ce qui exigeait un acces direct au DOM, interdit a
129
+ * juste titre par `testing-library/no-node-access` : compter des `<label>`
130
+ * teste l'implementation, pas le comportement.
131
+ *
132
+ * Ce qui EST verifiable et suffit a la retrocompatibilite : sans `width`,
133
+ * le controle est rendu, nomme par son libelle, et n'a herite d'aucun etat
134
+ * qu'il n'a pas demande. Le plafond, lui, se verifie dans la story. */
135
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
136
+ label: "Marque",
137
+ htmlFor: "sans-gabarit",
138
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
139
+ }));
140
+ const champ = _react.screen.getByRole("textbox", {
141
+ name: /Marque/
142
+ });
143
+ expect(champ).toBeInTheDocument();
144
+ expect(champ).not.toBeRequired();
145
+ expect(champ).not.toBeInvalid();
146
+ });
147
+ });
148
+ //# sourceMappingURL=FieldWidth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldWidth.test.js","names":["require","_react","_Field","_interopRequireWildcard","_Input","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","test","expect","FIELD_MAX_WIDTH","xs","toBe","s","m","l","xl","keys","sort","toEqual","render","jsx","label","htmlFor","width","children","screen","getByRole","name","toBeInTheDocument","error","toHaveAccessibleDescription","toHaveAttribute","hint","required","toBeRequired","champ","not","toBeInvalid"],"sources":["../../../src/lib/v2/__tests__/FieldWidth.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport Field, { FIELD_MAX_WIDTH } from \"../components/Field\";\r\nimport Input from \"../components/Input\";\r\n\r\n/**\r\n * Field — largeur semantique (gap G-H) : tests de contrat.\r\n *\r\n * CE QUE JSDOM PEUT ET NE PEUT PAS VERIFIER\r\n * -----------------------------------------\r\n * Le plafond n'est pose qu'a partir du palier `sm` — le standard exigeant\r\n * « 100% grid width » sur mobile. Il passe donc par une requete media\r\n * qu'`emotion` injecte dans la feuille de style, et jsdom ne resout pas les\r\n * requetes media : `getComputedStyle` ne rendra jamais la largeur effective au\r\n * palier desktop. Un test de rendu ne PEUT pas l'assertir, et pretendre le\r\n * faire donnerait un test qui passe sans rien verifier.\r\n *\r\n * Ce fichier epingle donc ce qui est verifiable et qui compte :\r\n *\r\n * 1. LES CINQ VALEURS. C'est le point sensible du tour : elles ne se lisent\r\n * pas dans le standard, qui donne des FOURCHETTES — quelqu'un a choisi, et\r\n * ce choix doit etre visible et protege. Si l'equipe design les revoit,\r\n * c'est ce test qui doit etre mis a jour sciemment, pas un ecran qui doit\r\n * bouger par surprise.\r\n *\r\n * 2. QUE `width` NE CASSE PAS LE CABLAGE D'ACCESSIBILITE. `Field` associe\r\n * libelle, indication et erreur au controle ; ajouter une contrainte de\r\n * mise en page ne doit rien y toucher. C'est la regression la plus\r\n * probable d'un changement qui passe par `sx`.\r\n *\r\n * 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, aucun plafond : les\r\n * appelants d'avant G-H ne doivent pas bouger d'un pixel.\r\n *\r\n * Le comportement responsive lui-meme se verifie dans la story, en\r\n * redimensionnant la fenetre — c'est la que le contrat est observable.\r\n */\r\n\r\ndescribe(\"Field — les cinq gabarits (G-H)\", () => {\r\n test(\"les valeurs sont celles retenues dans la fourchette du standard\", () => {\r\n /* Fourchettes du standard, et valeur retenue (le HAUT, ces largeurs etant\r\n * des plafonds) :\r\n * xs ~80-120 -> 120 s ~160-200 -> 200\r\n * m ~320-400 -> 400 l ~500-600 -> 600\r\n * xl 100%\r\n * Chaque valeur passe par une variable CSS pour etre revue sans toucher au\r\n * code : c'est le repli qui est epingle ici. */\r\n expect(FIELD_MAX_WIDTH.xs).toBe(\"var(--field-w-xs, 120px)\");\r\n expect(FIELD_MAX_WIDTH.s).toBe(\"var(--field-w-s, 200px)\");\r\n expect(FIELD_MAX_WIDTH.m).toBe(\"var(--field-w-m, 400px)\");\r\n expect(FIELD_MAX_WIDTH.l).toBe(\"var(--field-w-l, 600px)\");\r\n expect(FIELD_MAX_WIDTH.xl).toBe(\"100%\");\r\n });\r\n\r\n test(\"les cinq gabarits du standard sont couverts, ni plus ni moins\", () => {\r\n /* Un gabarit ajoute ou retire est un ecart au standard, pas un detail\r\n * d'implementation. */\r\n expect(Object.keys(FIELD_MAX_WIDTH).sort()).toEqual([\r\n \"l\",\r\n \"m\",\r\n \"s\",\r\n \"xl\",\r\n \"xs\",\r\n ]);\r\n });\r\n});\r\n\r\ndescribe(\"Field — `width` ne touche pas au cablage d'accessibilite\", () => {\r\n test(\"le libelle nomme toujours le controle\", () => {\r\n render(\r\n <Field label=\"Identifiant fiscal\" htmlFor=\"ifu\" width=\"s\">\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(\r\n screen.getByRole(\"textbox\", { name: /Identifiant fiscal/ })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"l'erreur reste la description accessible du controle\", () => {\r\n render(\r\n <Field\r\n label=\"Identifiant fiscal\"\r\n htmlFor=\"ifu\"\r\n width=\"s\"\r\n error=\"Quinze caractères maximum.\"\r\n >\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Quinze caractères maximum.\"\r\n );\r\n expect(screen.getByRole(\"textbox\")).toHaveAttribute(\r\n \"aria-invalid\",\r\n \"true\"\r\n );\r\n });\r\n\r\n test(\"l'indication reste la description accessible du controle\", () => {\r\n render(\r\n <Field\r\n label=\"Adresse\"\r\n htmlFor=\"adresse\"\r\n width=\"l\"\r\n hint=\"Voie, code postal et ville.\"\r\n >\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Voie, code postal et ville.\"\r\n );\r\n });\r\n\r\n test(\"`required` reste annonce comme tel\", () => {\r\n render(\r\n <Field label=\"Marque\" htmlFor=\"marque\" width=\"m\" required>\r\n <Input />\r\n </Field>\r\n );\r\n\r\n /* `toBeRequired` accepte l'attribut NATIF `required` comme `aria-required` :\r\n * c'est volontaire, et c'est la bonne assertion ici.\r\n *\r\n * Les deux mecanismes coexistent dans la library, par des chemins\r\n * differents, et viser l'un des deux nommement rendrait le test faux sans\r\n * que le comportement change :\r\n * — sur un controle MUI (`Input`, `Textarea`), `Field` passe `required`\r\n * au `FormControl`, dont le CONTEXTE le propage jusqu'a l'input, qui\r\n * porte alors l'attribut natif ;\r\n * — sur un groupe (`RadioGroup`), aucun contexte ne s'applique : `Field`\r\n * injecte `aria-required` sur l'enfant, que le groupe transmet a son\r\n * `role=\"radiogroup\"` (voir le test de `FormikRadioGroup`).\r\n *\r\n * Ce qui compte pour R-I.2 est qu'une technologie d'assistance l'annonce,\r\n * pas quel attribut le porte. */\r\n expect(screen.getByRole(\"textbox\")).toBeRequired();\r\n });\r\n});\r\n\r\ndescribe(\"Field — l'omission reste neutre\", () => {\r\n test(\"sans `width`, le champ se rend et se nomme comme avant G-H\", () => {\r\n /* Ce que ce test prouve, et ce qu'il ne prouve pas.\r\n *\r\n * L'absence de plafond n'est PAS assertable : elle se lit dans la feuille\r\n * de style generee par `emotion`, que jsdom ne resout pas plus qu'une\r\n * requete media. Une premiere version comparait le nombre de noeuds avec\r\n * et sans `width` — ce qui exigeait un acces direct au DOM, interdit a\r\n * juste titre par `testing-library/no-node-access` : compter des `<label>`\r\n * teste l'implementation, pas le comportement.\r\n *\r\n * Ce qui EST verifiable et suffit a la retrocompatibilite : sans `width`,\r\n * le controle est rendu, nomme par son libelle, et n'a herite d'aucun etat\r\n * qu'il n'a pas demande. Le plafond, lui, se verifie dans la story. */\r\n render(\r\n <Field label=\"Marque\" htmlFor=\"sans-gabarit\">\r\n <Input />\r\n </Field>\r\n );\r\n\r\n const champ = screen.getByRole(\"textbox\", { name: /Marque/ });\r\n expect(champ).toBeInTheDocument();\r\n expect(champ).not.toBeRequired();\r\n expect(champ).not.toBeInvalid();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,14 +1,10 @@
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 _FileCard = _interopRequireDefault(require("../components/FileCard"));
8
6
  var _jsxRuntime = require("react/jsx-runtime");
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
- 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); }
11
- 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; }
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
8
  /**
13
9
  * FileCard — contract tests.
14
10
  *
@@ -30,10 +26,10 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
30
26
  * contract lives in FileCard.stories.tsx ("Long filename"), which is where a
31
27
  * browser can actually check it. Same reasoning as MobileRowCard.test.tsx
32
28
  * records for R-G.3.
33
- */describe("FileCard — identity", function () {
34
- test("renders the filename and mirrors it into title for the truncated case", function () {
35
- var name = "autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf";
36
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
29
+ */describe("FileCard — identity", () => {
30
+ test("renders the filename and mirrors it into title for the truncated case", () => {
31
+ const name = "autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf";
32
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
37
33
  name: name
38
34
  }));
39
35
 
@@ -41,16 +37,16 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
41
37
  * than ReactNode: once the CSS ellipsis hides the tail, the attribute is
42
38
  * what keeps the full filename reachable. Losing it is invisible in every
43
39
  * screenshot and only hurts the user with the long filename. */
44
- expect(_react2.screen.getByText(name)).toHaveAttribute("title", name);
40
+ expect(_react.screen.getByText(name)).toHaveAttribute("title", name);
45
41
  });
46
- test("renders the meta line when supplied", function () {
47
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
42
+ test("renders the meta line when supplied", () => {
43
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
48
44
  name: "facture.pdf",
49
45
  meta: "1,24 Mo"
50
46
  }));
51
- expect(_react2.screen.getByText("1,24 Mo")).toBeInTheDocument();
47
+ expect(_react.screen.getByText("1,24 Mo")).toBeInTheDocument();
52
48
  });
53
- test("omits the meta line entirely when absent or empty", function () {
49
+ test("omits the meta line entirely when absent or empty", () => {
54
50
  /* Not rendered rather than rendered blank: an empty second line reads as
55
51
  * missing data, and it changes the row height, which breaks the alignment
56
52
  * of a list of files. Both `undefined` and `""` are covered because a host
@@ -60,89 +56,90 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
60
56
  * cannot be expressed as a text query, and the repo's eslint config forbids
61
57
  * direct node access — correctly, since a structural child count would also
62
58
  * break the moment the component gains an unrelated third line. */
63
- var _render = (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
64
- name: "a.pdf"
65
- })),
66
- rerender = _render.rerender;
67
- expect(_react2.screen.getByText("a.pdf")).toBeInTheDocument();
68
- expect(_react2.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
69
- rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
59
+ const {
60
+ rerender
61
+ } = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
62
+ name: "a.pdf"
63
+ }));
64
+ expect(_react.screen.getByText("a.pdf")).toBeInTheDocument();
65
+ expect(_react.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
66
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
70
67
  name: "a.pdf",
71
68
  meta: ""
72
69
  }));
73
- expect(_react2.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
74
- rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
70
+ expect(_react.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
71
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
75
72
  name: "a.pdf",
76
73
  meta: "248 Ko"
77
74
  }));
78
- expect(_react2.screen.getByTestId("filecard-meta")).toHaveTextContent("248 Ko");
75
+ expect(_react.screen.getByTestId("filecard-meta")).toHaveTextContent("248 Ko");
79
76
  });
80
77
  });
81
- describe("FileCard — actions slot", function () {
82
- test("renders host-supplied actions", function () {
83
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
78
+ describe("FileCard — actions slot", () => {
79
+ test("renders host-supplied actions", () => {
80
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
84
81
  name: "a.pdf",
85
82
  actions: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
86
83
  type: "button",
87
84
  children: "T\xE9l\xE9charger"
88
85
  })
89
86
  }));
90
- expect(_react2.screen.getByRole("button", {
87
+ expect(_react.screen.getByRole("button", {
91
88
  name: "Télécharger"
92
89
  })).toBeInTheDocument();
93
90
  });
94
- test("renders no action cluster when actions is absent", function () {
95
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
91
+ test("renders no action cluster when actions is absent", () => {
92
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
96
93
  name: "a.pdf"
97
94
  }));
98
- expect(_react2.screen.queryByRole("button")).not.toBeInTheDocument();
95
+ expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
99
96
  });
100
- test("does not invent any action of its own", function () {
97
+ test("does not invent any action of its own", () => {
101
98
  /* Regression guard on the component's SCOPE, not its rendering. FileCard is
102
99
  * presentational: a download link, a delete confirmation and a blob URL all
103
100
  * belong to the host. If a future change adds a built-in button, this fails
104
101
  * — which is the intent. */
105
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
102
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
106
103
  name: "a.pdf",
107
104
  meta: "1 Ko"
108
105
  }));
109
- expect(_react2.screen.queryByRole("button")).not.toBeInTheDocument();
110
- expect(_react2.screen.queryByRole("link")).not.toBeInTheDocument();
106
+ expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
107
+ expect(_react.screen.queryByRole("link")).not.toBeInTheDocument();
111
108
  });
112
109
  });
113
- describe("FileCard — accessibility", function () {
114
- test("the leading icon is hidden from assistive tech", function () {
110
+ describe("FileCard — accessibility", () => {
111
+ test("the leading icon is hidden from assistive tech", () => {
115
112
  /* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying
116
113
  * one would make a screen reader announce the row twice. The wrapper has no
117
114
  * role and no name by design, so there is no semantic query for it: the
118
115
  * component exposes a stable testid for exactly this assertion. */
119
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
116
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
120
117
  name: "a.pdf"
121
118
  }));
122
- expect(_react2.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
119
+ expect(_react.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
123
120
  });
124
- test("a custom icon replaces the default and stays hidden", function () {
121
+ test("a custom icon replaces the default and stays hidden", () => {
125
122
  /* The second assertion is the one that matters: a host passing its own glyph
126
123
  * must not be able to leak it into the accessibility tree. */
127
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
124
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
128
125
  name: "a.pdf",
129
126
  icon: /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
130
127
  "data-testid": "custom"
131
128
  })
132
129
  }));
133
- expect(_react2.screen.getByTestId("custom")).toBeInTheDocument();
134
- expect(_react2.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
130
+ expect(_react.screen.getByTestId("custom")).toBeInTheDocument();
131
+ expect(_react.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
135
132
  });
136
- test("carries no role of its own", function () {
133
+ test("carries no role of its own", () => {
137
134
  /* The card is not interactive — only its actions are. Giving it role=button
138
135
  * or wrapping it in a group without an accessible name would add noise to
139
136
  * the SR tree. Asserted so a future "make the whole row clickable" change
140
137
  * has to be a deliberate decision rather than a drive-by. */
141
- (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard["default"], {
138
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
142
139
  name: "a.pdf"
143
140
  }));
144
- expect(_react2.screen.queryByRole("button")).not.toBeInTheDocument();
145
- expect(_react2.screen.queryByRole("group")).not.toBeInTheDocument();
141
+ expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
142
+ expect(_react.screen.queryByRole("group")).not.toBeInTheDocument();
146
143
  });
147
144
  });
148
145
  //# sourceMappingURL=FileCard.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileCard.test.js","names":["require","React","_interopRequireWildcard","_react2","_FileCard","_interopRequireDefault","_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","name","render","jsx","expect","screen","getByText","toHaveAttribute","meta","toBeInTheDocument","_render","rerender","queryByTestId","not","getByTestId","toHaveTextContent","actions","type","children","getByRole","queryByRole","icon"],"sources":["../../../src/lib/v2/__tests__/FileCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport FileCard from \"../components/FileCard\";\r\n\r\n/**\r\n * FileCard — contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\". The\r\n * component was extracted from THREE hand-written copies found in addpe-fe\r\n * (Attachment, AutorisationPreviewDrawer, AutorisationDetail), which had drifted\r\n * to three different paddings for one concept. Consolidating them means a single\r\n * change now moves every attachment row in the fleet, so the contracts below are\r\n * the ones that must not move silently.\r\n *\r\n * NOT COVERED — deliberately\r\n * The width negotiation is the most fragile part of this component and it is\r\n * NOT tested here: `text-overflow: ellipsis`, `minWidth: 0` on the identity\r\n * block and `flexShrink: 0` on the action cluster are LAYOUT, and jsdom computes\r\n * no layout. A test asserting them would pass while the card is broken on a\r\n * phone — worse than no coverage, because it would look like coverage. That\r\n * contract lives in FileCard.stories.tsx (\"Long filename\"), which is where a\r\n * browser can actually check it. Same reasoning as MobileRowCard.test.tsx\r\n * records for R-G.3.\r\n */\r\ndescribe(\"FileCard — identity\", () => {\r\n test(\"renders the filename and mirrors it into title for the truncated case\", () => {\r\n const name =\r\n \"autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf\";\r\n render(<FileCard name={name} />);\r\n\r\n /* The title attribute is the ONLY reason `name` is typed `string` rather\r\n * than ReactNode: once the CSS ellipsis hides the tail, the attribute is\r\n * what keeps the full filename reachable. Losing it is invisible in every\r\n * screenshot and only hurts the user with the long filename. */\r\n expect(screen.getByText(name)).toHaveAttribute(\"title\", name);\r\n });\r\n\r\n test(\"renders the meta line when supplied\", () => {\r\n render(<FileCard name=\"facture.pdf\" meta=\"1,24 Mo\" />);\r\n expect(screen.getByText(\"1,24 Mo\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"omits the meta line entirely when absent or empty\", () => {\r\n /* Not rendered rather than rendered blank: an empty second line reads as\r\n * missing data, and it changes the row height, which breaks the alignment\r\n * of a list of files. Both `undefined` and `\"\"` are covered because a host\r\n * formatting a byte count from an optional field produces either.\r\n *\r\n * Queried by testid, not by walking parentElement: \"absent, not empty\"\r\n * cannot be expressed as a text query, and the repo's eslint config forbids\r\n * direct node access — correctly, since a structural child count would also\r\n * break the moment the component gains an unrelated third line. */\r\n const { rerender } = render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByText(\"a.pdf\")).toBeInTheDocument();\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"\" />);\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"248 Ko\" />);\r\n expect(screen.getByTestId(\"filecard-meta\")).toHaveTextContent(\"248 Ko\");\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — actions slot\", () => {\r\n test(\"renders host-supplied actions\", () => {\r\n render(\r\n <FileCard\r\n name=\"a.pdf\"\r\n actions={<button type=\"button\">Télécharger</button>}\r\n />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Télécharger\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"renders no action cluster when actions is absent\", () => {\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"does not invent any action of its own\", () => {\r\n /* Regression guard on the component's SCOPE, not its rendering. FileCard is\r\n * presentational: a download link, a delete confirmation and a blob URL all\r\n * belong to the host. If a future change adds a built-in button, this fails\r\n * — which is the intent. */\r\n render(<FileCard name=\"a.pdf\" meta=\"1 Ko\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"link\")).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — accessibility\", () => {\r\n test(\"the leading icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying\r\n * one would make a screen reader announce the row twice. The wrapper has no\r\n * role and no name by design, so there is no semantic query for it: the\r\n * component exposes a stable testid for exactly this assertion. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"a custom icon replaces the default and stays hidden\", () => {\r\n /* The second assertion is the one that matters: a host passing its own glyph\r\n * must not be able to leak it into the accessibility tree. */\r\n render(<FileCard name=\"a.pdf\" icon={<svg data-testid=\"custom\" />} />);\r\n expect(screen.getByTestId(\"custom\")).toBeInTheDocument();\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"carries no role of its own\", () => {\r\n /* The card is not interactive — only its actions are. Giving it role=button\r\n * or wrapping it in a group without an accessible name would add noise to\r\n * the SR tree. Asserted so a future \"make the whole row clickable\" change\r\n * has to be a deliberate decision rather than a drive-by. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"group\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileCard.test.js","names":["require","_react","_FileCard","_interopRequireDefault","_jsxRuntime","e","__esModule","default","describe","test","name","render","jsx","expect","screen","getByText","toHaveAttribute","meta","toBeInTheDocument","rerender","queryByTestId","not","getByTestId","toHaveTextContent","actions","type","children","getByRole","queryByRole","icon"],"sources":["../../../src/lib/v2/__tests__/FileCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport FileCard from \"../components/FileCard\";\r\n\r\n/**\r\n * FileCard — contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\". The\r\n * component was extracted from THREE hand-written copies found in addpe-fe\r\n * (Attachment, AutorisationPreviewDrawer, AutorisationDetail), which had drifted\r\n * to three different paddings for one concept. Consolidating them means a single\r\n * change now moves every attachment row in the fleet, so the contracts below are\r\n * the ones that must not move silently.\r\n *\r\n * NOT COVERED — deliberately\r\n * The width negotiation is the most fragile part of this component and it is\r\n * NOT tested here: `text-overflow: ellipsis`, `minWidth: 0` on the identity\r\n * block and `flexShrink: 0` on the action cluster are LAYOUT, and jsdom computes\r\n * no layout. A test asserting them would pass while the card is broken on a\r\n * phone — worse than no coverage, because it would look like coverage. That\r\n * contract lives in FileCard.stories.tsx (\"Long filename\"), which is where a\r\n * browser can actually check it. Same reasoning as MobileRowCard.test.tsx\r\n * records for R-G.3.\r\n */\r\ndescribe(\"FileCard — identity\", () => {\r\n test(\"renders the filename and mirrors it into title for the truncated case\", () => {\r\n const name =\r\n \"autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf\";\r\n render(<FileCard name={name} />);\r\n\r\n /* The title attribute is the ONLY reason `name` is typed `string` rather\r\n * than ReactNode: once the CSS ellipsis hides the tail, the attribute is\r\n * what keeps the full filename reachable. Losing it is invisible in every\r\n * screenshot and only hurts the user with the long filename. */\r\n expect(screen.getByText(name)).toHaveAttribute(\"title\", name);\r\n });\r\n\r\n test(\"renders the meta line when supplied\", () => {\r\n render(<FileCard name=\"facture.pdf\" meta=\"1,24 Mo\" />);\r\n expect(screen.getByText(\"1,24 Mo\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"omits the meta line entirely when absent or empty\", () => {\r\n /* Not rendered rather than rendered blank: an empty second line reads as\r\n * missing data, and it changes the row height, which breaks the alignment\r\n * of a list of files. Both `undefined` and `\"\"` are covered because a host\r\n * formatting a byte count from an optional field produces either.\r\n *\r\n * Queried by testid, not by walking parentElement: \"absent, not empty\"\r\n * cannot be expressed as a text query, and the repo's eslint config forbids\r\n * direct node access — correctly, since a structural child count would also\r\n * break the moment the component gains an unrelated third line. */\r\n const { rerender } = render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByText(\"a.pdf\")).toBeInTheDocument();\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"\" />);\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"248 Ko\" />);\r\n expect(screen.getByTestId(\"filecard-meta\")).toHaveTextContent(\"248 Ko\");\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — actions slot\", () => {\r\n test(\"renders host-supplied actions\", () => {\r\n render(\r\n <FileCard\r\n name=\"a.pdf\"\r\n actions={<button type=\"button\">Télécharger</button>}\r\n />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Télécharger\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"renders no action cluster when actions is absent\", () => {\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"does not invent any action of its own\", () => {\r\n /* Regression guard on the component's SCOPE, not its rendering. FileCard is\r\n * presentational: a download link, a delete confirmation and a blob URL all\r\n * belong to the host. If a future change adds a built-in button, this fails\r\n * — which is the intent. */\r\n render(<FileCard name=\"a.pdf\" meta=\"1 Ko\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"link\")).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — accessibility\", () => {\r\n test(\"the leading icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying\r\n * one would make a screen reader announce the row twice. The wrapper has no\r\n * role and no name by design, so there is no semantic query for it: the\r\n * component exposes a stable testid for exactly this assertion. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"a custom icon replaces the default and stays hidden\", () => {\r\n /* The second assertion is the one that matters: a host passing its own glyph\r\n * must not be able to leak it into the accessibility tree. */\r\n render(<FileCard name=\"a.pdf\" icon={<svg data-testid=\"custom\" />} />);\r\n expect(screen.getByTestId(\"custom\")).toBeInTheDocument();\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"carries no role of its own\", () => {\r\n /* The card is not interactive — only its actions are. Giving it role=button\r\n * or wrapping it in a group without an accessible name would add noise to\r\n * the SR tree. Asserted so a future \"make the whole row clickable\" change\r\n * has to be a deliberate decision rather than a drive-by. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"group\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+
3
+ require("@testing-library/jest-dom");
4
+ var React = _interopRequireWildcard(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
7
+ var _formik = require("formik");
8
+ var _FormikCheckbox = _interopRequireDefault(require("../patterns/FormikCheckbox"));
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ /**
13
+ * FormikCheckbox — contract tests (gap G-A).
14
+ *
15
+ * WHY THIS FILE EXISTS
16
+ * --------------------
17
+ * §10.3 R-G.6 MUST. But the contracts worth pinning here are the ones a
18
+ * screenshot cannot see, and each of them is a real defect this bridge was
19
+ * created to stop repeating:
20
+ *
21
+ * 1. THE VALUE SHAPE. This component exists because `FormikCheckboxGroup`
22
+ * writes an ARRAY. If a refactor ever routed this bridge through the group,
23
+ * hosts would start sending `["on"]` where their payload declares a
24
+ * boolean — visually identical, and wrong all the way to the database.
25
+ *
26
+ * 2. TOUCHED-ON-CHANGE. A checkbox has no meaningful blur-before-change, so
27
+ * if the field is only marked touched on blur, a required-checkbox error
28
+ * stays invisible however many times the user clicks. That is exactly the
29
+ * defect reported from refonte-frontend, where a hand-rolled bridge
30
+ * rendered no message at all.
31
+ *
32
+ * 3. `aria-required` LANDS ON THE INPUT. `Field` injects it onto its child,
33
+ * which here is the CheckboxGroup — a `role="group"` div that does not
34
+ * forward it. Assert the input, not the group.
35
+ *
36
+ * 4. NO `error` ATTRIBUTE ON THE DOM. `Field` clones its child with
37
+ * `error`/`disabled` for the v2 inputs that read them directly. A bare
38
+ * `Checkbox` would spread `error` down to the native input; the
39
+ * CheckboxGroup wrapper is what absorbs it. Drop the wrapper and React
40
+ * starts warning while every pixel stays identical.
41
+ *
42
+ * NOT COVERED — deliberately: the asterisk colour and the grey error panel are
43
+ * CSS variables, which jsdom does not resolve. Those belong to the story.
44
+ */
45
+
46
+ /** Minimal host: a Formik form exposing its values for assertion. */function Hote({
47
+ initialValue,
48
+ required,
49
+ onValues,
50
+ ...props
51
+ }) {
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.Formik, {
53
+ initialValues: {
54
+ flag: initialValue
55
+ },
56
+ validate: values => required && values.flag !== true ? {
57
+ flag: "Cochez cette case pour continuer."
58
+ } : {},
59
+ onSubmit: () => undefined,
60
+ children: ({
61
+ values
62
+ }) => {
63
+ onValues?.(values);
64
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.Form, {
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormikCheckbox.default, {
66
+ name: "flag",
67
+ label: "Premi\xE8re d\xE9claration",
68
+ ...(required !== undefined ? {
69
+ required
70
+ } : {}),
71
+ ...props
72
+ })
73
+ });
74
+ }
75
+ });
76
+ }
77
+ describe("FormikCheckbox — the value stays a BOOLEAN", () => {
78
+ test("toggling writes `true`, untoggling writes `false` — never an array", async () => {
79
+ const vues = [];
80
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
81
+ initialValue: false,
82
+ onValues: v => vues.push(v.flag)
83
+ }));
84
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
85
+ expect(vues.at(-1)).toBe(true);
86
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
87
+ expect(vues.at(-1)).toBe(false);
88
+
89
+ /* The point of the assertion: not one intermediate value was an array. */
90
+ expect(vues.some(v => Array.isArray(v))).toBe(false);
91
+ });
92
+ test("a `null` seed renders a CONTROLLED, unchecked input", () => {
93
+ /* Hosts seed these flags with `null` (« not answered yet »). Passing that
94
+ * straight to `checked` makes React treat the input as uncontrolled for one
95
+ * render, then warn and lose the first click. */
96
+ const avertissements = [];
97
+ const spy = jest.spyOn(console, "error").mockImplementation((...args) => {
98
+ avertissements.push(args);
99
+ });
100
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
101
+ initialValue: null
102
+ }));
103
+ expect(_react2.screen.getByRole("checkbox")).not.toBeChecked();
104
+ expect(avertissements.some(a => String(a[0]).includes("uncontrolled"))).toBe(false);
105
+ spy.mockRestore();
106
+ });
107
+ });
108
+ describe("FormikCheckbox — the error is reachable without a blur", () => {
109
+ test("clicking marks the field touched, so the message appears", async () => {
110
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
111
+ initialValue: false,
112
+ required: true
113
+ }));
114
+
115
+ /* Untouched: no message, however invalid the value is. */
116
+ expect(_react2.screen.queryByRole("alert")).not.toBeInTheDocument();
117
+
118
+ /* Check then uncheck — the field is now touched AND invalid. */
119
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
120
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
121
+ expect(_react2.screen.getByRole("alert")).toHaveTextContent("Cochez cette case pour continuer.");
122
+ });
123
+ test("the message becomes the group's accessible description", async () => {
124
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
125
+ initialValue: false,
126
+ required: true
127
+ }));
128
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
129
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
130
+ expect(_react2.screen.getByRole("group")).toHaveAccessibleDescription("Cochez cette case pour continuer.");
131
+ });
132
+ test("the hint shows while valid and is suppressed by the error", async () => {
133
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
134
+ initialValue: false,
135
+ required: true,
136
+ hint: "Obligatoire pour soumettre la demande"
137
+ }));
138
+ expect(_react2.screen.getByText("Obligatoire pour soumettre la demande")).toBeInTheDocument();
139
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
140
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
141
+ expect(_react2.screen.queryByText("Obligatoire pour soumettre la demande")).not.toBeInTheDocument();
142
+ });
143
+ });
144
+ describe("FormikCheckbox — ARIA and DOM hygiene", () => {
145
+ test("`required` puts aria-required on the INPUT, not on the group", () => {
146
+ /* Field's own injection lands on the CheckboxGroup, which is a role=group
147
+ * div and does not forward it — hence the explicit inputProps route. */
148
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
149
+ initialValue: false,
150
+ required: true
151
+ }));
152
+ expect(_react2.screen.getByRole("checkbox")).toHaveAttribute("aria-required", "true");
153
+ });
154
+ test("the label names the checkbox", () => {
155
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
156
+ initialValue: false
157
+ }));
158
+ expect(_react2.screen.getByRole("checkbox", {
159
+ name: /Première déclaration/
160
+ })).toBeInTheDocument();
161
+ });
162
+ test("no `error` attribute leaks onto the native input", async () => {
163
+ /* The CheckboxGroup wrapper is what absorbs Field's `error` clone. Without
164
+ * it React warns and the DOM carries an invalid attribute — with no visual
165
+ * tell whatsoever. */
166
+ (0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
167
+ initialValue: false,
168
+ required: true
169
+ }));
170
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
171
+ await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
172
+ expect(_react2.screen.getByRole("checkbox")).not.toHaveAttribute("error");
173
+ });
174
+ });
175
+ //# sourceMappingURL=FormikCheckbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormikCheckbox.test.js","names":["require","React","_interopRequireWildcard","_react2","_userEvent","_interopRequireDefault","_formik","_FormikCheckbox","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Hote","initialValue","required","onValues","props","jsx","Formik","initialValues","flag","validate","values","onSubmit","undefined","children","Form","name","label","describe","test","vues","render","v","push","userEvent","click","screen","getByRole","expect","at","toBe","some","Array","isArray","avertissements","spy","jest","spyOn","console","mockImplementation","args","not","toBeChecked","a","String","includes","mockRestore","queryByRole","toBeInTheDocument","toHaveTextContent","toHaveAccessibleDescription","hint","getByText","queryByText","toHaveAttribute"],"sources":["../../../src/lib/v2/__tests__/FormikCheckbox.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport { Formik, Form } from \"formik\";\r\nimport FormikCheckbox from \"../patterns/FormikCheckbox\";\r\n\r\n/**\r\n * FormikCheckbox — contract tests (gap G-A).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST. But the contracts worth pinning here are the ones a\r\n * screenshot cannot see, and each of them is a real defect this bridge was\r\n * created to stop repeating:\r\n *\r\n * 1. THE VALUE SHAPE. This component exists because `FormikCheckboxGroup`\r\n * writes an ARRAY. If a refactor ever routed this bridge through the group,\r\n * hosts would start sending `[\"on\"]` where their payload declares a\r\n * boolean — visually identical, and wrong all the way to the database.\r\n *\r\n * 2. TOUCHED-ON-CHANGE. A checkbox has no meaningful blur-before-change, so\r\n * if the field is only marked touched on blur, a required-checkbox error\r\n * stays invisible however many times the user clicks. That is exactly the\r\n * defect reported from refonte-frontend, where a hand-rolled bridge\r\n * rendered no message at all.\r\n *\r\n * 3. `aria-required` LANDS ON THE INPUT. `Field` injects it onto its child,\r\n * which here is the CheckboxGroup — a `role=\"group\"` div that does not\r\n * forward it. Assert the input, not the group.\r\n *\r\n * 4. NO `error` ATTRIBUTE ON THE DOM. `Field` clones its child with\r\n * `error`/`disabled` for the v2 inputs that read them directly. A bare\r\n * `Checkbox` would spread `error` down to the native input; the\r\n * CheckboxGroup wrapper is what absorbs it. Drop the wrapper and React\r\n * starts warning while every pixel stays identical.\r\n *\r\n * NOT COVERED — deliberately: the asterisk colour and the grey error panel are\r\n * CSS variables, which jsdom does not resolve. Those belong to the story.\r\n */\r\n\r\n/** Minimal host: a Formik form exposing its values for assertion. */\r\nfunction Hote({\r\n initialValue,\r\n required,\r\n onValues,\r\n ...props\r\n}: {\r\n initialValue: boolean | null;\r\n required?: boolean;\r\n onValues?: (values: { flag: unknown }) => void;\r\n label?: React.ReactNode;\r\n hint?: React.ReactNode;\r\n}) {\r\n return (\r\n <Formik\r\n initialValues={{ flag: initialValue }}\r\n validate={(values) =>\r\n required && values.flag !== true\r\n ? { flag: \"Cochez cette case pour continuer.\" }\r\n : {}\r\n }\r\n onSubmit={() => undefined}\r\n >\r\n {({ values }) => {\r\n onValues?.(values);\r\n return (\r\n <Form>\r\n <FormikCheckbox\r\n name=\"flag\"\r\n label=\"Première déclaration\"\r\n {...(required !== undefined ? { required } : {})}\r\n {...props}\r\n />\r\n </Form>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\ndescribe(\"FormikCheckbox — the value stays a BOOLEAN\", () => {\r\n test(\"toggling writes `true`, untoggling writes `false` — never an array\", async () => {\r\n const vues: unknown[] = [];\r\n render(\r\n <Hote initialValue={false} onValues={(v) => vues.push(v.flag)} />\r\n );\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n expect(vues.at(-1)).toBe(true);\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n expect(vues.at(-1)).toBe(false);\r\n\r\n /* The point of the assertion: not one intermediate value was an array. */\r\n expect(vues.some((v) => Array.isArray(v))).toBe(false);\r\n });\r\n\r\n test(\"a `null` seed renders a CONTROLLED, unchecked input\", () => {\r\n /* Hosts seed these flags with `null` (« not answered yet »). Passing that\r\n * straight to `checked` makes React treat the input as uncontrolled for one\r\n * render, then warn and lose the first click. */\r\n const avertissements: unknown[][] = [];\r\n const spy = jest\r\n .spyOn(console, \"error\")\r\n .mockImplementation((...args: unknown[]) => {\r\n avertissements.push(args);\r\n });\r\n\r\n render(<Hote initialValue={null} />);\r\n\r\n expect(screen.getByRole(\"checkbox\")).not.toBeChecked();\r\n expect(\r\n avertissements.some((a) => String(a[0]).includes(\"uncontrolled\"))\r\n ).toBe(false);\r\n\r\n spy.mockRestore();\r\n });\r\n});\r\n\r\ndescribe(\"FormikCheckbox — the error is reachable without a blur\", () => {\r\n test(\"clicking marks the field touched, so the message appears\", async () => {\r\n render(<Hote initialValue={false} required />);\r\n\r\n /* Untouched: no message, however invalid the value is. */\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n\r\n /* Check then uncheck — the field is now touched AND invalid. */\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\r\n \"Cochez cette case pour continuer.\"\r\n );\r\n });\r\n\r\n test(\"the message becomes the group's accessible description\", async () => {\r\n render(<Hote initialValue={false} required />);\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"group\")).toHaveAccessibleDescription(\r\n \"Cochez cette case pour continuer.\"\r\n );\r\n });\r\n\r\n test(\"the hint shows while valid and is suppressed by the error\", async () => {\r\n render(\r\n <Hote\r\n initialValue={false}\r\n required\r\n hint=\"Obligatoire pour soumettre la demande\"\r\n />\r\n );\r\n\r\n expect(\r\n screen.getByText(\"Obligatoire pour soumettre la demande\")\r\n ).toBeInTheDocument();\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(\r\n screen.queryByText(\"Obligatoire pour soumettre la demande\")\r\n ).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikCheckbox — ARIA and DOM hygiene\", () => {\r\n test(\"`required` puts aria-required on the INPUT, not on the group\", () => {\r\n /* Field's own injection lands on the CheckboxGroup, which is a role=group\r\n * div and does not forward it — hence the explicit inputProps route. */\r\n render(<Hote initialValue={false} required />);\r\n\r\n expect(screen.getByRole(\"checkbox\")).toHaveAttribute(\r\n \"aria-required\",\r\n \"true\"\r\n );\r\n });\r\n\r\n test(\"the label names the checkbox\", () => {\r\n render(<Hote initialValue={false} />);\r\n expect(\r\n screen.getByRole(\"checkbox\", { name: /Première déclaration/ })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"no `error` attribute leaks onto the native input\", async () => {\r\n /* The CheckboxGroup wrapper is what absorbs Field's `error` clone. Without\r\n * it React warns and the DOM carries an invalid attribute — with no visual\r\n * tell whatsoever. */\r\n render(<Hote initialValue={false} required />);\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"checkbox\")).not.toHaveAttribute(\"error\");\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}