@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,173 @@
1
+ import "@testing-library/jest-dom";
2
+ import * as React from "react";
3
+ import { render, screen } from "@testing-library/react";
4
+ import userEvent from "@testing-library/user-event";
5
+ import { Formik, Form } from "formik";
6
+ import FormikCheckbox from "../patterns/FormikCheckbox";
7
+
8
+ /**
9
+ * FormikCheckbox — contract tests (gap G-A).
10
+ *
11
+ * WHY THIS FILE EXISTS
12
+ * --------------------
13
+ * §10.3 R-G.6 MUST. But the contracts worth pinning here are the ones a
14
+ * screenshot cannot see, and each of them is a real defect this bridge was
15
+ * created to stop repeating:
16
+ *
17
+ * 1. THE VALUE SHAPE. This component exists because `FormikCheckboxGroup`
18
+ * writes an ARRAY. If a refactor ever routed this bridge through the group,
19
+ * hosts would start sending `["on"]` where their payload declares a
20
+ * boolean — visually identical, and wrong all the way to the database.
21
+ *
22
+ * 2. TOUCHED-ON-CHANGE. A checkbox has no meaningful blur-before-change, so
23
+ * if the field is only marked touched on blur, a required-checkbox error
24
+ * stays invisible however many times the user clicks. That is exactly the
25
+ * defect reported from refonte-frontend, where a hand-rolled bridge
26
+ * rendered no message at all.
27
+ *
28
+ * 3. `aria-required` LANDS ON THE INPUT. `Field` injects it onto its child,
29
+ * which here is the CheckboxGroup — a `role="group"` div that does not
30
+ * forward it. Assert the input, not the group.
31
+ *
32
+ * 4. NO `error` ATTRIBUTE ON THE DOM. `Field` clones its child with
33
+ * `error`/`disabled` for the v2 inputs that read them directly. A bare
34
+ * `Checkbox` would spread `error` down to the native input; the
35
+ * CheckboxGroup wrapper is what absorbs it. Drop the wrapper and React
36
+ * starts warning while every pixel stays identical.
37
+ *
38
+ * NOT COVERED — deliberately: the asterisk colour and the grey error panel are
39
+ * CSS variables, which jsdom does not resolve. Those belong to the story.
40
+ */
41
+
42
+ /** Minimal host: a Formik form exposing its values for assertion. */
43
+ import { jsx as _jsx } from "react/jsx-runtime";
44
+ function Hote({
45
+ initialValue,
46
+ required,
47
+ onValues,
48
+ ...props
49
+ }) {
50
+ return /*#__PURE__*/_jsx(Formik, {
51
+ initialValues: {
52
+ flag: initialValue
53
+ },
54
+ validate: values => required && values.flag !== true ? {
55
+ flag: "Cochez cette case pour continuer."
56
+ } : {},
57
+ onSubmit: () => undefined,
58
+ children: ({
59
+ values
60
+ }) => {
61
+ onValues?.(values);
62
+ return /*#__PURE__*/_jsx(Form, {
63
+ children: /*#__PURE__*/_jsx(FormikCheckbox, {
64
+ name: "flag",
65
+ label: "Premi\xE8re d\xE9claration",
66
+ ...(required !== undefined ? {
67
+ required
68
+ } : {}),
69
+ ...props
70
+ })
71
+ });
72
+ }
73
+ });
74
+ }
75
+ describe("FormikCheckbox — the value stays a BOOLEAN", () => {
76
+ test("toggling writes `true`, untoggling writes `false` — never an array", async () => {
77
+ const vues = [];
78
+ render(/*#__PURE__*/_jsx(Hote, {
79
+ initialValue: false,
80
+ onValues: v => vues.push(v.flag)
81
+ }));
82
+ await userEvent.click(screen.getByRole("checkbox"));
83
+ expect(vues.at(-1)).toBe(true);
84
+ await userEvent.click(screen.getByRole("checkbox"));
85
+ expect(vues.at(-1)).toBe(false);
86
+
87
+ /* The point of the assertion: not one intermediate value was an array. */
88
+ expect(vues.some(v => Array.isArray(v))).toBe(false);
89
+ });
90
+ test("a `null` seed renders a CONTROLLED, unchecked input", () => {
91
+ /* Hosts seed these flags with `null` (« not answered yet »). Passing that
92
+ * straight to `checked` makes React treat the input as uncontrolled for one
93
+ * render, then warn and lose the first click. */
94
+ const avertissements = [];
95
+ const spy = jest.spyOn(console, "error").mockImplementation((...args) => {
96
+ avertissements.push(args);
97
+ });
98
+ render(/*#__PURE__*/_jsx(Hote, {
99
+ initialValue: null
100
+ }));
101
+ expect(screen.getByRole("checkbox")).not.toBeChecked();
102
+ expect(avertissements.some(a => String(a[0]).includes("uncontrolled"))).toBe(false);
103
+ spy.mockRestore();
104
+ });
105
+ });
106
+ describe("FormikCheckbox — the error is reachable without a blur", () => {
107
+ test("clicking marks the field touched, so the message appears", async () => {
108
+ render(/*#__PURE__*/_jsx(Hote, {
109
+ initialValue: false,
110
+ required: true
111
+ }));
112
+
113
+ /* Untouched: no message, however invalid the value is. */
114
+ expect(screen.queryByRole("alert")).not.toBeInTheDocument();
115
+
116
+ /* Check then uncheck — the field is now touched AND invalid. */
117
+ await userEvent.click(screen.getByRole("checkbox"));
118
+ await userEvent.click(screen.getByRole("checkbox"));
119
+ expect(screen.getByRole("alert")).toHaveTextContent("Cochez cette case pour continuer.");
120
+ });
121
+ test("the message becomes the group's accessible description", async () => {
122
+ render(/*#__PURE__*/_jsx(Hote, {
123
+ initialValue: false,
124
+ required: true
125
+ }));
126
+ await userEvent.click(screen.getByRole("checkbox"));
127
+ await userEvent.click(screen.getByRole("checkbox"));
128
+ expect(screen.getByRole("group")).toHaveAccessibleDescription("Cochez cette case pour continuer.");
129
+ });
130
+ test("the hint shows while valid and is suppressed by the error", async () => {
131
+ render(/*#__PURE__*/_jsx(Hote, {
132
+ initialValue: false,
133
+ required: true,
134
+ hint: "Obligatoire pour soumettre la demande"
135
+ }));
136
+ expect(screen.getByText("Obligatoire pour soumettre la demande")).toBeInTheDocument();
137
+ await userEvent.click(screen.getByRole("checkbox"));
138
+ await userEvent.click(screen.getByRole("checkbox"));
139
+ expect(screen.queryByText("Obligatoire pour soumettre la demande")).not.toBeInTheDocument();
140
+ });
141
+ });
142
+ describe("FormikCheckbox — ARIA and DOM hygiene", () => {
143
+ test("`required` puts aria-required on the INPUT, not on the group", () => {
144
+ /* Field's own injection lands on the CheckboxGroup, which is a role=group
145
+ * div and does not forward it — hence the explicit inputProps route. */
146
+ render(/*#__PURE__*/_jsx(Hote, {
147
+ initialValue: false,
148
+ required: true
149
+ }));
150
+ expect(screen.getByRole("checkbox")).toHaveAttribute("aria-required", "true");
151
+ });
152
+ test("the label names the checkbox", () => {
153
+ render(/*#__PURE__*/_jsx(Hote, {
154
+ initialValue: false
155
+ }));
156
+ expect(screen.getByRole("checkbox", {
157
+ name: /Première déclaration/
158
+ })).toBeInTheDocument();
159
+ });
160
+ test("no `error` attribute leaks onto the native input", async () => {
161
+ /* The CheckboxGroup wrapper is what absorbs Field's `error` clone. Without
162
+ * it React warns and the DOM carries an invalid attribute — with no visual
163
+ * tell whatsoever. */
164
+ render(/*#__PURE__*/_jsx(Hote, {
165
+ initialValue: false,
166
+ required: true
167
+ }));
168
+ await userEvent.click(screen.getByRole("checkbox"));
169
+ await userEvent.click(screen.getByRole("checkbox"));
170
+ expect(screen.getByRole("checkbox")).not.toHaveAttribute("error");
171
+ });
172
+ });
173
+ //# sourceMappingURL=FormikCheckbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormikCheckbox.test.js","names":["React","render","screen","userEvent","Formik","Form","FormikCheckbox","jsx","_jsx","Hote","initialValue","required","onValues","props","initialValues","flag","validate","values","onSubmit","undefined","children","name","label","describe","test","vues","v","push","click","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":[]}
@@ -0,0 +1,236 @@
1
+ import "@testing-library/jest-dom";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { Formik, Form } from "formik";
4
+ import FormikDateTimePicker from "../patterns/FormikDateTimePicker";
5
+ import FormikDatePicker from "../patterns/FormikDatePicker";
6
+ import { DATETIME_FORMAT_CHARTER } from "../components/DateTimePicker";
7
+
8
+ /**
9
+ * FormikDateTimePicker — contract tests (gap G-E).
10
+ *
11
+ * WHY THIS FILE EXISTS
12
+ * --------------------
13
+ * §10.3 R-G.6 MUST. Every case below pins a contract that a screenshot cannot
14
+ * see, and each corresponds to a defect this bridge exists to stop:
15
+ *
16
+ * 1. THE TIME SURVIVES. The whole reason the gap was opened: routed through
17
+ * the date-only bridge, a visit scheduled at 14:30 would have been stored
18
+ * at 00:00 — silently, with no error, and only the agent showing up at the
19
+ * wrong hour would notice. The date-only sibling is asserted side by side,
20
+ * so the reason TWO bridges exist stays legible.
21
+ *
22
+ * 2. THE ROUND-TRIP IS SYMMETRIC (S-03). A value written with a non-ISO
23
+ * format must be READ BACK with that same format. The sibling once wrote
24
+ * through moment and read through `new Date()`, which turned "31-12-2026"
25
+ * into Invalid Date and "05-03-2026" into 3 May. The write path worked, so
26
+ * the damage only appeared on RE-POPULATE — an edit flow, the path a smoke
27
+ * test never exercises. One module shipped it for seven batches under a
28
+ * clean strict typecheck.
29
+ *
30
+ * 3. A MALFORMED STORED VALUE YIELDS EMPTY, NOT A PLAUSIBLE WRONG DATE.
31
+ * Strict parsing. A missing date is recoverable; a date quietly off by two
32
+ * months is not.
33
+ *
34
+ * ── HOW THESE ASSERTIONS READ THE FIELD (and why not by role "textbox") ──
35
+ *
36
+ * MUI X v9 renders no textbox. The field is a `role="group"` containing one
37
+ * `role="spinbutton"` PER SECTION (Year, Month, Day, Hours, Minutes), each
38
+ * carrying `aria-valuenow`; the input that holds the formatted string is
39
+ * `aria-hidden`. So the assertions read the sections.
40
+ *
41
+ * That is not a workaround, it is the better probe: `aria-valuenow` is the
42
+ * PARSED value, independent of any display format. A test reading the
43
+ * formatted text would pass or fail on locale and format changes that have
44
+ * nothing to do with the contract under test. Reading the sections also makes
45
+ * the date-only comparison exact — the sibling renders no Hours section at
46
+ * all, rather than rendering one that happens to read 00.
47
+ *
48
+ * NOT COVERED — deliberately: opening the picker popup and clicking a day.
49
+ * MUI X renders its calendar in a portal with its own interaction model; the
50
+ * value plumbing is what belongs to this bridge. The visual side belongs to
51
+ * the story.
52
+ */
53
+
54
+ /** Valeur analysee d'une section du champ (Year, Month, Day, Hours, Minutes). */
55
+ import { jsx as _jsx } from "react/jsx-runtime";
56
+ function sectionValeur(nom) {
57
+ return screen.getByRole("spinbutton", {
58
+ name: nom
59
+ }).getAttribute("aria-valuenow");
60
+ }
61
+
62
+ /** Vrai quand la section est vide (aucune date rendue). */
63
+ function sectionVide(nom) {
64
+ return screen.getByRole("spinbutton", {
65
+ name: nom
66
+ }).getAttribute("aria-valuetext") === "Empty";
67
+ }
68
+ function HoteLecture({
69
+ valeurInitiale,
70
+ outputFormat,
71
+ readOnly
72
+ }) {
73
+ return /*#__PURE__*/_jsx(Formik, {
74
+ initialValues: {
75
+ dateVisite: valeurInitiale
76
+ },
77
+ onSubmit: () => undefined,
78
+ children: /*#__PURE__*/_jsx(Form, {
79
+ children: /*#__PURE__*/_jsx(FormikDateTimePicker, {
80
+ name: "dateVisite",
81
+ label: "Date de la visite",
82
+ ...(outputFormat !== undefined ? {
83
+ outputFormat
84
+ } : {}),
85
+ ...(readOnly !== undefined ? {
86
+ readOnly
87
+ } : {})
88
+ })
89
+ })
90
+ });
91
+ }
92
+ describe("FormikDateTimePicker — the time survives", () => {
93
+ test("an hour stored in Formik reaches the field's time sections", () => {
94
+ render(/*#__PURE__*/_jsx(HoteLecture, {
95
+ valeurInitiale: new Date(2026, 4, 31, 14, 30)
96
+ }));
97
+ expect(sectionValeur("Hours")).toBe("14");
98
+ expect(sectionValeur("Minutes")).toBe("30");
99
+ /* La date, elle, est intacte : 31 mai 2026. */
100
+ expect(sectionValeur("Day")).toBe("31");
101
+ expect(sectionValeur("Month")).toBe("5");
102
+ });
103
+ test("the date-only sibling has NO time section — which is why G-E exists", () => {
104
+ render(/*#__PURE__*/_jsx(Formik, {
105
+ initialValues: {
106
+ dateVisite: new Date(2026, 4, 31, 14, 30)
107
+ },
108
+ onSubmit: () => undefined,
109
+ children: /*#__PURE__*/_jsx(Form, {
110
+ children: /*#__PURE__*/_jsx(FormikDatePicker, {
111
+ name: "dateVisite",
112
+ label: "Date de la visite"
113
+ })
114
+ })
115
+ }));
116
+
117
+ /* Pas de section « Hours » du tout : l'heure n'est pas affichee a 00, elle
118
+ * est absente du champ — donc perdue des que la valeur est reserialisee. */
119
+ expect(screen.queryByRole("spinbutton", {
120
+ name: "Hours"
121
+ })).not.toBeInTheDocument();
122
+ expect(screen.getByRole("spinbutton", {
123
+ name: "Day"
124
+ })).toBeInTheDocument();
125
+ });
126
+ });
127
+ describe("FormikDateTimePicker — the round-trip is symmetric (S-03)", () => {
128
+ test("a value written in the charter format is read back with it", () => {
129
+ render(/*#__PURE__*/_jsx(HoteLecture, {
130
+ valeurInitiale: "2026-12-31 14:30",
131
+ outputFormat: DATETIME_FORMAT_CHARTER
132
+ }));
133
+ expect(sectionValeur("Day")).toBe("31");
134
+ expect(sectionValeur("Month")).toBe("12");
135
+ expect(sectionValeur("Hours")).toBe("14");
136
+ expect(sectionValeur("Minutes")).toBe("30");
137
+ });
138
+ test("a day-first stored value is NOT misread as month-first", () => {
139
+ /* `new Date("05-03-2026 09:15")` lit MM-DD en V8 : le 3 mai au lieu du
140
+ * 5 mars. Avec le format declare, moment lit bien le 5 mars. C'est
141
+ * exactement le cas que S-03 decrit. */
142
+ render(/*#__PURE__*/_jsx(HoteLecture, {
143
+ valeurInitiale: "05-03-2026 09:15",
144
+ outputFormat: "DD-MM-YYYY HH:mm"
145
+ }));
146
+ expect(sectionValeur("Month")).toBe("3");
147
+ expect(sectionValeur("Day")).toBe("5");
148
+ expect(sectionValeur("Hours")).toBe("9");
149
+ expect(sectionValeur("Minutes")).toBe("15");
150
+ });
151
+ test("a malformed stored value renders EMPTY, not a guess", () => {
152
+ render(/*#__PURE__*/_jsx(HoteLecture, {
153
+ valeurInitiale: "pas-une-date",
154
+ outputFormat: DATETIME_FORMAT_CHARTER
155
+ }));
156
+ expect(sectionVide("Year")).toBe(true);
157
+ expect(sectionVide("Day")).toBe(true);
158
+ expect(sectionVide("Hours")).toBe(true);
159
+ });
160
+ test("`null` renders empty and does not warn about an uncontrolled input", () => {
161
+ const avertissements = [];
162
+ const spy = jest.spyOn(console, "error").mockImplementation((...args) => {
163
+ avertissements.push(args);
164
+ });
165
+ render(/*#__PURE__*/_jsx(HoteLecture, {
166
+ valeurInitiale: null
167
+ }));
168
+ expect(sectionVide("Year")).toBe(true);
169
+ expect(avertissements.some(a => String(a[0]).includes("uncontrolled"))).toBe(false);
170
+ spy.mockRestore();
171
+ });
172
+ });
173
+ describe("FormikDateTimePicker — read-only mode", () => {
174
+ test("`readOnly` renders display TEXT, not a picker", () => {
175
+ /* Section Read Only Mode : « Inputs are forbidden in read-only mode. » */
176
+ render(/*#__PURE__*/_jsx(HoteLecture, {
177
+ valeurInitiale: new Date(2026, 11, 31, 14, 30),
178
+ readOnly: true
179
+ }));
180
+ expect(screen.queryByRole("spinbutton", {
181
+ name: "Year"
182
+ })).not.toBeInTheDocument();
183
+ expect(screen.getByText(/31\/12\/2026 14:30/)).toBeInTheDocument();
184
+ });
185
+ test("an empty value in read-only mode shows the dash, not a blank panel", () => {
186
+ render(/*#__PURE__*/_jsx(HoteLecture, {
187
+ valeurInitiale: null,
188
+ readOnly: true
189
+ }));
190
+ expect(screen.getByText("—")).toBeInTheDocument();
191
+ });
192
+ });
193
+ describe("FormikDateTimePicker — labelling", () => {
194
+ test("the visible label is wired to the field id produced by Field", () => {
195
+ render(/*#__PURE__*/_jsx(HoteLecture, {
196
+ valeurInitiale: null
197
+ }));
198
+
199
+ /* Une premiere version verifiait aussi, par `document.getElementById`, que
200
+ * l'element porteur de cet id existe. Deux raisons de l'avoir retiree :
201
+ * `testing-library/no-node-access` l'interdit a juste titre, et surtout
202
+ * l'assertion visait a cote. L'element existe bel et bien — c'est l'input
203
+ * porteur de valeur — mais MUI X v9 le marque `aria-hidden`, donc son
204
+ * existence ne prouve RIEN sur ce qui compte. Voir la note ci-dessous. */
205
+ expect(screen.getByText("Date de la visite")).toHaveAttribute("for", "dateVisite");
206
+ });
207
+
208
+ /**
209
+ * CE QUI N'EST PAS ASSERTE ICI, ET POURQUOI — defaut ouvert (G-F, reporte)
210
+ *
211
+ * Le champ n'a PAS de nom accessible, et ce n'est pas le seul degat : les
212
+ * QUATRE attributs d'association poses par `Field` sont inertes.
213
+ *
214
+ * `DateTimePicker` intercepte bien `id`, `aria-describedby`, `aria-invalid`
215
+ * et `aria-required` et les route sur l'`<input>` porteur de valeur (c'est le
216
+ * correctif DP-1, ecrit exprès) — mais MUI X v9 marque cet input
217
+ * `aria-hidden="true"`. Le champ visible est un `role="group"` de
218
+ * `role="spinbutton"` par section. Donc : l'etiquette ne nomme rien
219
+ * (R-I.1), l'indication et le message d'erreur ne sont jamais annonces
220
+ * (R-I.3, R-4.1), et un champ requis ne se declare pas requis (R-I.2).
221
+ *
222
+ * DEUX TENTATIVES ONT ECHOUE, notees pour ne pas etre refaites :
223
+ * 1. router les attributs par `slotProps.textField.InputProps` — accepte
224
+ * par les types, n'atterrit nulle part ;
225
+ * 2. passer le pont en mode `group` de `Field` — `Field` emet bien
226
+ * `aria-labelledby`, mais rien ne le porte jusqu'au groupe, ET le mode
227
+ * `group` supprime le `<label for>` : on perd le clic-sur-libellé sans
228
+ * rien gagner.
229
+ *
230
+ * Figer l'etat actuel par une assertion « le nom est vide » en ferait un
231
+ * comportement attendu, ce qu'il n'est pas. Le correctif demande le vrai
232
+ * point d'ancrage v9 de `PickersInputBase`, et il touche `DatePicker` ET
233
+ * `DateTimePicker` — donc tous les champs de date du portefeuille. Batch 10.
234
+ */
235
+ });
236
+ //# sourceMappingURL=FormikDateTimePicker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormikDateTimePicker.test.js","names":["render","screen","Formik","Form","FormikDateTimePicker","FormikDatePicker","DATETIME_FORMAT_CHARTER","jsx","_jsx","sectionValeur","nom","getByRole","name","getAttribute","sectionVide","HoteLecture","valeurInitiale","outputFormat","readOnly","initialValues","dateVisite","onSubmit","undefined","children","label","describe","test","Date","expect","toBe","queryByRole","not","toBeInTheDocument","avertissements","spy","jest","spyOn","console","mockImplementation","args","push","some","a","String","includes","mockRestore","getByText","toHaveAttribute"],"sources":["../../../../src/lib/v2/__tests__/FormikDateTimePicker.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport { Formik, Form } from \"formik\";\r\nimport FormikDateTimePicker from \"../patterns/FormikDateTimePicker\";\r\nimport FormikDatePicker from \"../patterns/FormikDatePicker\";\r\nimport { DATETIME_FORMAT_CHARTER } from \"../components/DateTimePicker\";\r\n\r\n/**\r\n * FormikDateTimePicker — contract tests (gap G-E).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST. Every case below pins a contract that a screenshot cannot\r\n * see, and each corresponds to a defect this bridge exists to stop:\r\n *\r\n * 1. THE TIME SURVIVES. The whole reason the gap was opened: routed through\r\n * the date-only bridge, a visit scheduled at 14:30 would have been stored\r\n * at 00:00 — silently, with no error, and only the agent showing up at the\r\n * wrong hour would notice. The date-only sibling is asserted side by side,\r\n * so the reason TWO bridges exist stays legible.\r\n *\r\n * 2. THE ROUND-TRIP IS SYMMETRIC (S-03). A value written with a non-ISO\r\n * format must be READ BACK with that same format. The sibling once wrote\r\n * through moment and read through `new Date()`, which turned \"31-12-2026\"\r\n * into Invalid Date and \"05-03-2026\" into 3 May. The write path worked, so\r\n * the damage only appeared on RE-POPULATE — an edit flow, the path a smoke\r\n * test never exercises. One module shipped it for seven batches under a\r\n * clean strict typecheck.\r\n *\r\n * 3. A MALFORMED STORED VALUE YIELDS EMPTY, NOT A PLAUSIBLE WRONG DATE.\r\n * Strict parsing. A missing date is recoverable; a date quietly off by two\r\n * months is not.\r\n *\r\n * ── HOW THESE ASSERTIONS READ THE FIELD (and why not by role \"textbox\") ──\r\n *\r\n * MUI X v9 renders no textbox. The field is a `role=\"group\"` containing one\r\n * `role=\"spinbutton\"` PER SECTION (Year, Month, Day, Hours, Minutes), each\r\n * carrying `aria-valuenow`; the input that holds the formatted string is\r\n * `aria-hidden`. So the assertions read the sections.\r\n *\r\n * That is not a workaround, it is the better probe: `aria-valuenow` is the\r\n * PARSED value, independent of any display format. A test reading the\r\n * formatted text would pass or fail on locale and format changes that have\r\n * nothing to do with the contract under test. Reading the sections also makes\r\n * the date-only comparison exact — the sibling renders no Hours section at\r\n * all, rather than rendering one that happens to read 00.\r\n *\r\n * NOT COVERED — deliberately: opening the picker popup and clicking a day.\r\n * MUI X renders its calendar in a portal with its own interaction model; the\r\n * value plumbing is what belongs to this bridge. The visual side belongs to\r\n * the story.\r\n */\r\n\r\n/** Valeur analysee d'une section du champ (Year, Month, Day, Hours, Minutes). */\r\nfunction sectionValeur(nom: string): string | null {\r\n return screen\r\n .getByRole(\"spinbutton\", { name: nom })\r\n .getAttribute(\"aria-valuenow\");\r\n}\r\n\r\n/** Vrai quand la section est vide (aucune date rendue). */\r\nfunction sectionVide(nom: string): boolean {\r\n return (\r\n screen.getByRole(\"spinbutton\", { name: nom }).getAttribute(\"aria-valuetext\") ===\r\n \"Empty\"\r\n );\r\n}\r\n\r\nfunction HoteLecture({\r\n valeurInitiale,\r\n outputFormat,\r\n readOnly,\r\n}: {\r\n valeurInitiale: unknown;\r\n outputFormat?: string;\r\n readOnly?: boolean;\r\n}) {\r\n return (\r\n <Formik\r\n initialValues={{ dateVisite: valeurInitiale }}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikDateTimePicker\r\n name=\"dateVisite\"\r\n label=\"Date de la visite\"\r\n {...(outputFormat !== undefined ? { outputFormat } : {})}\r\n {...(readOnly !== undefined ? { readOnly } : {})}\r\n />\r\n </Form>\r\n </Formik>\r\n );\r\n}\r\n\r\ndescribe(\"FormikDateTimePicker — the time survives\", () => {\r\n test(\"an hour stored in Formik reaches the field's time sections\", () => {\r\n render(<HoteLecture valeurInitiale={new Date(2026, 4, 31, 14, 30)} />);\r\n\r\n expect(sectionValeur(\"Hours\")).toBe(\"14\");\r\n expect(sectionValeur(\"Minutes\")).toBe(\"30\");\r\n /* La date, elle, est intacte : 31 mai 2026. */\r\n expect(sectionValeur(\"Day\")).toBe(\"31\");\r\n expect(sectionValeur(\"Month\")).toBe(\"5\");\r\n });\r\n\r\n test(\"the date-only sibling has NO time section — which is why G-E exists\", () => {\r\n render(\r\n <Formik\r\n initialValues={{ dateVisite: new Date(2026, 4, 31, 14, 30) }}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikDatePicker name=\"dateVisite\" label=\"Date de la visite\" />\r\n </Form>\r\n </Formik>\r\n );\r\n\r\n /* Pas de section « Hours » du tout : l'heure n'est pas affichee a 00, elle\r\n * est absente du champ — donc perdue des que la valeur est reserialisee. */\r\n expect(\r\n screen.queryByRole(\"spinbutton\", { name: \"Hours\" })\r\n ).not.toBeInTheDocument();\r\n expect(screen.getByRole(\"spinbutton\", { name: \"Day\" })).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikDateTimePicker — the round-trip is symmetric (S-03)\", () => {\r\n test(\"a value written in the charter format is read back with it\", () => {\r\n render(\r\n <HoteLecture\r\n valeurInitiale=\"2026-12-31 14:30\"\r\n outputFormat={DATETIME_FORMAT_CHARTER}\r\n />\r\n );\r\n\r\n expect(sectionValeur(\"Day\")).toBe(\"31\");\r\n expect(sectionValeur(\"Month\")).toBe(\"12\");\r\n expect(sectionValeur(\"Hours\")).toBe(\"14\");\r\n expect(sectionValeur(\"Minutes\")).toBe(\"30\");\r\n });\r\n\r\n test(\"a day-first stored value is NOT misread as month-first\", () => {\r\n /* `new Date(\"05-03-2026 09:15\")` lit MM-DD en V8 : le 3 mai au lieu du\r\n * 5 mars. Avec le format declare, moment lit bien le 5 mars. C'est\r\n * exactement le cas que S-03 decrit. */\r\n render(\r\n <HoteLecture\r\n valeurInitiale=\"05-03-2026 09:15\"\r\n outputFormat=\"DD-MM-YYYY HH:mm\"\r\n />\r\n );\r\n\r\n expect(sectionValeur(\"Month\")).toBe(\"3\");\r\n expect(sectionValeur(\"Day\")).toBe(\"5\");\r\n expect(sectionValeur(\"Hours\")).toBe(\"9\");\r\n expect(sectionValeur(\"Minutes\")).toBe(\"15\");\r\n });\r\n\r\n test(\"a malformed stored value renders EMPTY, not a guess\", () => {\r\n render(\r\n <HoteLecture\r\n valeurInitiale=\"pas-une-date\"\r\n outputFormat={DATETIME_FORMAT_CHARTER}\r\n />\r\n );\r\n\r\n expect(sectionVide(\"Year\")).toBe(true);\r\n expect(sectionVide(\"Day\")).toBe(true);\r\n expect(sectionVide(\"Hours\")).toBe(true);\r\n });\r\n\r\n test(\"`null` renders empty and does not warn about an uncontrolled input\", () => {\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(<HoteLecture valeurInitiale={null} />);\r\n\r\n expect(sectionVide(\"Year\")).toBe(true);\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(\"FormikDateTimePicker — read-only mode\", () => {\r\n test(\"`readOnly` renders display TEXT, not a picker\", () => {\r\n /* Section Read Only Mode : « Inputs are forbidden in read-only mode. » */\r\n render(\r\n <HoteLecture valeurInitiale={new Date(2026, 11, 31, 14, 30)} readOnly />\r\n );\r\n\r\n expect(\r\n screen.queryByRole(\"spinbutton\", { name: \"Year\" })\r\n ).not.toBeInTheDocument();\r\n expect(screen.getByText(/31\\/12\\/2026 14:30/)).toBeInTheDocument();\r\n });\r\n\r\n test(\"an empty value in read-only mode shows the dash, not a blank panel\", () => {\r\n render(<HoteLecture valeurInitiale={null} readOnly />);\r\n expect(screen.getByText(\"—\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikDateTimePicker — labelling\", () => {\r\n test(\"the visible label is wired to the field id produced by Field\", () => {\r\n render(<HoteLecture valeurInitiale={null} />);\r\n\r\n /* Une premiere version verifiait aussi, par `document.getElementById`, que\r\n * l'element porteur de cet id existe. Deux raisons de l'avoir retiree :\r\n * `testing-library/no-node-access` l'interdit a juste titre, et surtout\r\n * l'assertion visait a cote. L'element existe bel et bien — c'est l'input\r\n * porteur de valeur — mais MUI X v9 le marque `aria-hidden`, donc son\r\n * existence ne prouve RIEN sur ce qui compte. Voir la note ci-dessous. */\r\n expect(screen.getByText(\"Date de la visite\")).toHaveAttribute(\r\n \"for\",\r\n \"dateVisite\"\r\n );\r\n });\r\n\r\n /**\r\n * CE QUI N'EST PAS ASSERTE ICI, ET POURQUOI — defaut ouvert (G-F, reporte)\r\n *\r\n * Le champ n'a PAS de nom accessible, et ce n'est pas le seul degat : les\r\n * QUATRE attributs d'association poses par `Field` sont inertes.\r\n *\r\n * `DateTimePicker` intercepte bien `id`, `aria-describedby`, `aria-invalid`\r\n * et `aria-required` et les route sur l'`<input>` porteur de valeur (c'est le\r\n * correctif DP-1, ecrit exprès) — mais MUI X v9 marque cet input\r\n * `aria-hidden=\"true\"`. Le champ visible est un `role=\"group\"` de\r\n * `role=\"spinbutton\"` par section. Donc : l'etiquette ne nomme rien\r\n * (R-I.1), l'indication et le message d'erreur ne sont jamais annonces\r\n * (R-I.3, R-4.1), et un champ requis ne se declare pas requis (R-I.2).\r\n *\r\n * DEUX TENTATIVES ONT ECHOUE, notees pour ne pas etre refaites :\r\n * 1. router les attributs par `slotProps.textField.InputProps` — accepte\r\n * par les types, n'atterrit nulle part ;\r\n * 2. passer le pont en mode `group` de `Field` — `Field` emet bien\r\n * `aria-labelledby`, mais rien ne le porte jusqu'au groupe, ET le mode\r\n * `group` supprime le `<label for>` : on perd le clic-sur-libellé sans\r\n * rien gagner.\r\n *\r\n * Figer l'etat actuel par une assertion « le nom est vide » en ferait un\r\n * comportement attendu, ce qu'il n'est pas. Le correctif demande le vrai\r\n * point d'ancrage v9 de `PickersInputBase`, et il touche `DatePicker` ET\r\n * `DateTimePicker` — donc tous les champs de date du portefeuille. Batch 10.\r\n */\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,101 @@
1
+ import "@testing-library/jest-dom";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { Formik } from "formik";
4
+ import { FIELD_MAX_WIDTH } from "../components/Field";
5
+ import FormikDisplay from "../components/FormikDisplay";
6
+
7
+ /**
8
+ * FormikDisplay — largeur semantique (gap G-H, suite) : tests de contrat.
9
+ *
10
+ * MEME LIMITE QUE `FieldWidth.test.tsx`, ET POUR LA MEME RAISON. Le plafond
11
+ * n'est pose qu'a partir du palier `sm`, donc derriere une requete media
12
+ * qu'`emotion` injecte dans la feuille de style et que jsdom ne resout pas :
13
+ * `getComputedStyle` ne rendra jamais la largeur effective. Asserter la
14
+ * largeur ici donnerait un test qui passe sans rien verifier. Le comportement
15
+ * responsive s'observe dans la story, en redimensionnant la fenetre.
16
+ *
17
+ * Ce fichier epingle donc ce qui compte et qui est verifiable :
18
+ *
19
+ * 1. QUE LA TABLE DE LARGEURS EST CELLE DE `Field`, ET NON UNE COPIE. C'est
20
+ * le risque propre a cet ajout : `FormikDisplay` ne passe pas par `Field`,
21
+ * il aurait donc pu redeclarer ses cinq valeurs. Deux tables finiraient
22
+ * par diverger, et un formulaire melant saisie et affichage retomberait
23
+ * dans le « jagged alignment » que le standard interdit — exactement le
24
+ * defaut que cet ajout corrige.
25
+ *
26
+ * 2. QUE `width` NE TOUCHE PAS AU RENDU NI AU NOM ACCESSIBLE. Une contrainte
27
+ * de mise en page passee par `sx` ne doit rien changer a la valeur
28
+ * affichee ni a ce qu'annonce une technologie d'assistance : c'est la
29
+ * regression la plus probable du changement.
30
+ *
31
+ * 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, les appelants d'avant ne
32
+ * doivent pas bouger.
33
+ */
34
+ import { jsx as _jsx } from "react/jsx-runtime";
35
+ const withFormik = (children, values) => render(/*#__PURE__*/_jsx(Formik, {
36
+ initialValues: values,
37
+ onSubmit: () => undefined,
38
+ children: () => children
39
+ }));
40
+ describe("FormikDisplay — la table de largeurs est partagee avec Field", () => {
41
+ test("les cinq gabarits sont ceux de `Field`, importes et non recopies", () => {
42
+ /* Ce test echouerait si quelqu'un redeclarait une table locale dans
43
+ * `FormikDisplay` : les valeurs sont epinglees UNE fois, dans
44
+ * `FieldWidth.test.tsx`, et ce fichier verifie que c'est bien la meme
45
+ * source qui est exposee aux deux composants. */
46
+ expect(Object.keys(FIELD_MAX_WIDTH).sort()).toEqual(["l", "m", "s", "xl", "xs"]);
47
+ });
48
+ });
49
+ describe("FormikDisplay — `width` ne touche ni au rendu ni au nom accessible", () => {
50
+ test("la valeur Formik reste affichee", () => {
51
+ withFormik(/*#__PURE__*/_jsx(FormikDisplay, {
52
+ name: "ice",
53
+ label: "ICE",
54
+ width: "s"
55
+ }), {
56
+ ice: "001234567000089"
57
+ });
58
+ expect(screen.getByText("001234567000089")).toBeInTheDocument();
59
+ });
60
+ test("le libelle et la valeur restent annonces ensemble", () => {
61
+ /* `FormikDisplay` expose sa boite en `role="status"` avec un
62
+ * `aria-label` « libelle : valeur » — c'est ce couple qu'une technologie
63
+ * d'assistance lit, et il ne doit pas dependre du gabarit. */
64
+ withFormik(/*#__PURE__*/_jsx(FormikDisplay, {
65
+ name: "raisonSociale",
66
+ label: "Raison sociale",
67
+ width: "l"
68
+ }), {
69
+ raisonSociale: "SOFRANE SA"
70
+ });
71
+ expect(screen.getByRole("status", {
72
+ name: "Raison sociale : SOFRANE SA"
73
+ })).toBeInTheDocument();
74
+ });
75
+ test("le placeholder de valeur vide est inchange", () => {
76
+ withFormik(/*#__PURE__*/_jsx(FormikDisplay, {
77
+ name: "ice",
78
+ label: "ICE",
79
+ width: "s"
80
+ }), {
81
+ ice: ""
82
+ });
83
+ expect(screen.getByRole("status", {
84
+ name: "ICE : \u2014"
85
+ })).toBeInTheDocument();
86
+ });
87
+ });
88
+ describe("FormikDisplay — l'omission reste neutre", () => {
89
+ test("sans `width`, la valeur et son nom accessible sont identiques", () => {
90
+ withFormik(/*#__PURE__*/_jsx(FormikDisplay, {
91
+ name: "email",
92
+ label: "Email"
93
+ }), {
94
+ email: "operateur@example.ma"
95
+ });
96
+ expect(screen.getByRole("status", {
97
+ name: "Email : operateur@example.ma"
98
+ })).toBeInTheDocument();
99
+ });
100
+ });
101
+ //# sourceMappingURL=FormikDisplayWidth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormikDisplayWidth.test.js","names":["render","screen","Formik","FIELD_MAX_WIDTH","FormikDisplay","jsx","_jsx","withFormik","children","values","initialValues","onSubmit","undefined","describe","test","expect","Object","keys","sort","toEqual","name","label","width","ice","getByText","toBeInTheDocument","raisonSociale","getByRole","email"],"sources":["../../../../src/lib/v2/__tests__/FormikDisplayWidth.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport { Formik } from \"formik\";\r\nimport type { ReactNode } from \"react\";\r\nimport { FIELD_MAX_WIDTH } from \"../components/Field\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\n\r\n/**\r\n * FormikDisplay — largeur semantique (gap G-H, suite) : tests de contrat.\r\n *\r\n * MEME LIMITE QUE `FieldWidth.test.tsx`, ET POUR LA MEME RAISON. Le plafond\r\n * n'est pose qu'a partir du palier `sm`, donc derriere une requete media\r\n * qu'`emotion` injecte dans la feuille de style et que jsdom ne resout pas :\r\n * `getComputedStyle` ne rendra jamais la largeur effective. Asserter la\r\n * largeur ici donnerait un test qui passe sans rien verifier. Le comportement\r\n * responsive s'observe dans la story, en redimensionnant la fenetre.\r\n *\r\n * Ce fichier epingle donc ce qui compte et qui est verifiable :\r\n *\r\n * 1. QUE LA TABLE DE LARGEURS EST CELLE DE `Field`, ET NON UNE COPIE. C'est\r\n * le risque propre a cet ajout : `FormikDisplay` ne passe pas par `Field`,\r\n * il aurait donc pu redeclarer ses cinq valeurs. Deux tables finiraient\r\n * par diverger, et un formulaire melant saisie et affichage retomberait\r\n * dans le « jagged alignment » que le standard interdit — exactement le\r\n * defaut que cet ajout corrige.\r\n *\r\n * 2. QUE `width` NE TOUCHE PAS AU RENDU NI AU NOM ACCESSIBLE. Une contrainte\r\n * de mise en page passee par `sx` ne doit rien changer a la valeur\r\n * affichee ni a ce qu'annonce une technologie d'assistance : c'est la\r\n * regression la plus probable du changement.\r\n *\r\n * 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, les appelants d'avant ne\r\n * doivent pas bouger.\r\n */\r\n\r\nconst withFormik = (children: ReactNode, values: Record<string, unknown>) =>\r\n render(\r\n <Formik initialValues={values} onSubmit={() => undefined}>\r\n {() => children}\r\n </Formik>\r\n );\r\n\r\ndescribe(\"FormikDisplay — la table de largeurs est partagee avec Field\", () => {\r\n test(\"les cinq gabarits sont ceux de `Field`, importes et non recopies\", () => {\r\n /* Ce test echouerait si quelqu'un redeclarait une table locale dans\r\n * `FormikDisplay` : les valeurs sont epinglees UNE fois, dans\r\n * `FieldWidth.test.tsx`, et ce fichier verifie que c'est bien la meme\r\n * source qui est exposee aux deux composants. */\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(\"FormikDisplay — `width` ne touche ni au rendu ni au nom accessible\", () => {\r\n test(\"la valeur Formik reste affichee\", () => {\r\n withFormik(\r\n <FormikDisplay name=\"ice\" label=\"ICE\" width=\"s\" />,\r\n { ice: \"001234567000089\" }\r\n );\r\n\r\n expect(screen.getByText(\"001234567000089\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"le libelle et la valeur restent annonces ensemble\", () => {\r\n /* `FormikDisplay` expose sa boite en `role=\"status\"` avec un\r\n * `aria-label` « libelle : valeur » — c'est ce couple qu'une technologie\r\n * d'assistance lit, et il ne doit pas dependre du gabarit. */\r\n withFormik(\r\n <FormikDisplay name=\"raisonSociale\" label=\"Raison sociale\" width=\"l\" />,\r\n { raisonSociale: \"SOFRANE SA\" }\r\n );\r\n\r\n expect(\r\n screen.getByRole(\"status\", { name: \"Raison sociale : SOFRANE SA\" })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"le placeholder de valeur vide est inchange\", () => {\r\n withFormik(<FormikDisplay name=\"ice\" label=\"ICE\" width=\"s\" />, { ice: \"\" });\r\n\r\n expect(\r\n screen.getByRole(\"status\", { name: \"ICE : \\u2014\" })\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikDisplay — l'omission reste neutre\", () => {\r\n test(\"sans `width`, la valeur et son nom accessible sont identiques\", () => {\r\n withFormik(<FormikDisplay name=\"email\" label=\"Email\" />, {\r\n email: \"operateur@example.ma\",\r\n });\r\n\r\n expect(\r\n screen.getByRole(\"status\", { name: \"Email : operateur@example.ma\" })\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}