@portnet/ui 6.0.2 → 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 (980) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/dist/esm/index.js +72 -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 -38
  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 +11 -11
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  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 +118 -199
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
  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 -21
  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 +81 -86
  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 +155 -59
  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 +37 -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 +2 -3
  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 +15 -17
  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 +29 -39
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
  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 -69
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
  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 -53
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
  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 -87
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
  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 +27 -22
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
  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 +6 -8
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
  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 +152 -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 +28 -34
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  346. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  347. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  348. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  349. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  350. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  351. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  352. package/dist/esm/v2/personalization/index.js +17 -0
  353. package/dist/esm/v2/personalization/index.js.map +1 -1
  354. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  355. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  356. package/dist/esm/v2/personalization/schema.js +8 -9
  357. package/dist/esm/v2/personalization/schema.js.map +1 -1
  358. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  359. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  360. package/dist/esm/v2/referentiel/types.js +2 -0
  361. package/dist/esm/v2/referentiel/types.js.map +1 -0
  362. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  363. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  364. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  365. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  367. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  368. package/dist/esm/v2/theme/_brand.js +8 -24
  369. package/dist/esm/v2/theme/_brand.js.map +1 -1
  370. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  371. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  372. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  373. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  374. package/dist/esm/v2/theme/cssVariables.js +62 -69
  375. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  376. package/dist/esm/v2/theme/index.js +5 -5
  377. package/dist/esm/v2/theme/index.js.map +1 -1
  378. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  379. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  380. package/dist/esm/v2/tokens/chart.js +261 -0
  381. package/dist/esm/v2/tokens/chart.js.map +1 -0
  382. package/dist/esm/v2/tokens/colors.js +22 -22
  383. package/dist/esm/v2/tokens/colors.js.map +1 -1
  384. package/dist/esm/v2/tokens/density.js +62 -7
  385. package/dist/esm/v2/tokens/density.js.map +1 -1
  386. package/dist/esm/v2/tokens/index.js +49 -34
  387. package/dist/esm/v2/tokens/index.js.map +1 -1
  388. package/dist/esm/v2/tokens/motion.js +12 -20
  389. package/dist/esm/v2/tokens/motion.js.map +1 -1
  390. package/dist/esm/v2/tokens/radius.js +1 -1
  391. package/dist/esm/v2/tokens/radius.js.map +1 -1
  392. package/dist/esm/v2/tokens/shadows.js +6 -6
  393. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  394. package/dist/esm/v2/tokens/spacing.js +2 -2
  395. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  396. package/dist/esm/v2/tokens/state.js +1 -1
  397. package/dist/esm/v2/tokens/state.js.map +1 -1
  398. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  399. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  400. package/dist/esm/v2/tokens/tokens.json +6 -1
  401. package/dist/esm/v2/tokens/typography.js +13 -13
  402. package/dist/esm/v2/tokens/typography.js.map +1 -1
  403. package/dist/esm/v2/tokens/zIndex.js +1 -1
  404. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  405. package/dist/esm/v2/types/datagrid.js.map +1 -1
  406. package/dist/esm/v2/utils/apiError.js +16 -37
  407. package/dist/esm/v2/utils/apiError.js.map +1 -1
  408. package/dist/esm/v2/utils/contrast.js +31 -32
  409. package/dist/esm/v2/utils/contrast.js.map +1 -1
  410. package/dist/esm/v2/utils/cx.js +5 -25
  411. package/dist/esm/v2/utils/cx.js.map +1 -1
  412. package/dist/esm/v2/utils/fileDownload.js +23 -26
  413. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  414. package/dist/esm/v2/utils/fileValidation.js +209 -0
  415. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  416. package/dist/esm/v2/utils/fmtDate.js +111 -0
  417. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  419. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  420. package/dist/esm/v2/utils/formikErrors.js +78 -0
  421. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  422. package/dist/esm/v2/utils/index.js +35 -2
  423. package/dist/esm/v2/utils/index.js.map +1 -1
  424. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  425. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  426. package/dist/esm/v2/utils/networkStatus.js +12 -12
  427. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  428. package/dist/index.d.ts +7 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +110 -49
  431. package/dist/index.js.map +1 -1
  432. package/dist/v2/__tests__/AppMain.test.js +133 -0
  433. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  434. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  435. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  436. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  437. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  438. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  439. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  440. package/dist/v2/__tests__/FieldError.test.js +82 -49
  441. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  442. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  443. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  444. package/dist/v2/__tests__/FieldWidth.test.js +23 -25
  445. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
  446. package/dist/v2/__tests__/FileCard.test.js +29 -28
  447. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  448. package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
  449. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
  451. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  452. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  453. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
  455. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  456. package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
  457. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  458. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  459. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  460. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  461. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  462. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  463. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  464. package/dist/v2/__tests__/apiError.test.js +50 -69
  465. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  466. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  467. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  468. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  469. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  470. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  471. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  472. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  473. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  474. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  475. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  476. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  477. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  478. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  479. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  480. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  481. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  482. package/dist/v2/__tests__/labels-merge.test.js +23 -27
  483. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  484. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  485. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  486. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  487. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  488. package/dist/v2/__tests__/rowActions.test.js +186 -0
  489. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  490. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  491. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  493. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  494. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  495. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  496. package/dist/v2/components/Accordion.js +60 -82
  497. package/dist/v2/components/Accordion.js.map +1 -1
  498. package/dist/v2/components/ActionStrip.js +40 -52
  499. package/dist/v2/components/ActionStrip.js.map +1 -1
  500. package/dist/v2/components/Banner.js +42 -41
  501. package/dist/v2/components/Banner.js.map +1 -1
  502. package/dist/v2/components/Busy.js +22 -27
  503. package/dist/v2/components/Busy.js.map +1 -1
  504. package/dist/v2/components/Button.js +39 -50
  505. package/dist/v2/components/Button.js.map +1 -1
  506. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  507. package/dist/v2/components/CategoryTag.js +49 -32
  508. package/dist/v2/components/CategoryTag.js.map +1 -1
  509. package/dist/v2/components/Checkbox.js +39 -45
  510. package/dist/v2/components/Checkbox.js.map +1 -1
  511. package/dist/v2/components/Chip.js +29 -42
  512. package/dist/v2/components/Chip.js.map +1 -1
  513. package/dist/v2/components/Combobox.js +122 -144
  514. package/dist/v2/components/Combobox.js.map +1 -1
  515. package/dist/v2/components/CommandPalette.js +138 -225
  516. package/dist/v2/components/CommandPalette.js.map +1 -1
  517. package/dist/v2/components/ConfirmDialog.js +46 -56
  518. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  519. package/dist/v2/components/DatePicker.js +81 -86
  520. package/dist/v2/components/DatePicker.js.map +1 -1
  521. package/dist/v2/components/DateRangePicker.js +77 -87
  522. package/dist/v2/components/DateRangePicker.js.map +1 -1
  523. package/dist/v2/components/DateTimePicker.js +84 -91
  524. package/dist/v2/components/DateTimePicker.js.map +1 -1
  525. package/dist/v2/components/Drawer.d.ts.map +1 -1
  526. package/dist/v2/components/Drawer.js +93 -88
  527. package/dist/v2/components/Drawer.js.map +1 -1
  528. package/dist/v2/components/Dropzone.js +150 -196
  529. package/dist/v2/components/Dropzone.js.map +1 -1
  530. package/dist/v2/components/EmptyState.js +18 -20
  531. package/dist/v2/components/EmptyState.js.map +1 -1
  532. package/dist/v2/components/FavoriteToggle.js +28 -39
  533. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  534. package/dist/v2/components/Field.d.ts +62 -4
  535. package/dist/v2/components/Field.d.ts.map +1 -1
  536. package/dist/v2/components/Field.js +169 -70
  537. package/dist/v2/components/Field.js.map +1 -1
  538. package/dist/v2/components/FieldError.js +18 -21
  539. package/dist/v2/components/FieldError.js.map +1 -1
  540. package/dist/v2/components/FieldHelp.js +40 -60
  541. package/dist/v2/components/FieldHelp.js.map +1 -1
  542. package/dist/v2/components/FileCard.js +27 -31
  543. package/dist/v2/components/FileCard.js.map +1 -1
  544. package/dist/v2/components/FilterTab.js +30 -38
  545. package/dist/v2/components/FilterTab.js.map +1 -1
  546. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  547. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  548. package/dist/v2/components/ForbiddenPage.js +37 -17
  549. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  550. package/dist/v2/components/FormGrid.js +53 -59
  551. package/dist/v2/components/FormGrid.js.map +1 -1
  552. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  553. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  554. package/dist/v2/components/FormikDisplay.js +108 -33
  555. package/dist/v2/components/FormikDisplay.js.map +1 -1
  556. package/dist/v2/components/Input.d.ts +40 -0
  557. package/dist/v2/components/Input.d.ts.map +1 -1
  558. package/dist/v2/components/Input.js +81 -41
  559. package/dist/v2/components/Input.js.map +1 -1
  560. package/dist/v2/components/KPICard.js +57 -67
  561. package/dist/v2/components/KPICard.js.map +1 -1
  562. package/dist/v2/components/KPIStrip.js +16 -22
  563. package/dist/v2/components/KPIStrip.js.map +1 -1
  564. package/dist/v2/components/KV.js +25 -31
  565. package/dist/v2/components/KV.js.map +1 -1
  566. package/dist/v2/components/KVGrid.js +19 -26
  567. package/dist/v2/components/KVGrid.js.map +1 -1
  568. package/dist/v2/components/Layout.js +91 -120
  569. package/dist/v2/components/Layout.js.map +1 -1
  570. package/dist/v2/components/MobileRowCard.js +79 -91
  571. package/dist/v2/components/MobileRowCard.js.map +1 -1
  572. package/dist/v2/components/Modal.js +61 -69
  573. package/dist/v2/components/Modal.js.map +1 -1
  574. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  575. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  576. package/dist/v2/components/NetworkErrorPage.js +38 -21
  577. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  578. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  579. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  580. package/dist/v2/components/NotFoundPage.js +37 -18
  581. package/dist/v2/components/NotFoundPage.js.map +1 -1
  582. package/dist/v2/components/NumberInput.js +88 -118
  583. package/dist/v2/components/NumberInput.js.map +1 -1
  584. package/dist/v2/components/OverflowMenu.js +38 -56
  585. package/dist/v2/components/OverflowMenu.js.map +1 -1
  586. package/dist/v2/components/PdfViewer.js +34 -45
  587. package/dist/v2/components/PdfViewer.js.map +1 -1
  588. package/dist/v2/components/ProgressBar.js +42 -49
  589. package/dist/v2/components/ProgressBar.js.map +1 -1
  590. package/dist/v2/components/Radio.js +59 -67
  591. package/dist/v2/components/Radio.js.map +1 -1
  592. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  593. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  594. package/dist/v2/components/SectionHeader.js +34 -41
  595. package/dist/v2/components/SectionHeader.js.map +1 -1
  596. package/dist/v2/components/Segmented.js +69 -93
  597. package/dist/v2/components/Segmented.js.map +1 -1
  598. package/dist/v2/components/Select.d.ts +26 -2
  599. package/dist/v2/components/Select.d.ts.map +1 -1
  600. package/dist/v2/components/Select.js +120 -155
  601. package/dist/v2/components/Select.js.map +1 -1
  602. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  603. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  604. package/dist/v2/components/ServerErrorPage.js +37 -20
  605. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  606. package/dist/v2/components/Skeleton.js +86 -100
  607. package/dist/v2/components/Skeleton.js.map +1 -1
  608. package/dist/v2/components/SkipLink.js +9 -12
  609. package/dist/v2/components/SkipLink.js.map +1 -1
  610. package/dist/v2/components/Spinner.js +16 -25
  611. package/dist/v2/components/Spinner.js.map +1 -1
  612. package/dist/v2/components/Status.js +18 -29
  613. package/dist/v2/components/Status.js.map +1 -1
  614. package/dist/v2/components/Stepper.js +80 -82
  615. package/dist/v2/components/Stepper.js.map +1 -1
  616. package/dist/v2/components/Surface.js +34 -49
  617. package/dist/v2/components/Surface.js.map +1 -1
  618. package/dist/v2/components/Switch.js +29 -37
  619. package/dist/v2/components/Switch.js.map +1 -1
  620. package/dist/v2/components/TabPanel.d.ts +17 -0
  621. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  622. package/dist/v2/components/TabPanel.js +90 -0
  623. package/dist/v2/components/TabPanel.js.map +1 -0
  624. package/dist/v2/components/Tabs.d.ts +25 -0
  625. package/dist/v2/components/Tabs.d.ts.map +1 -1
  626. package/dist/v2/components/Tabs.js +53 -29
  627. package/dist/v2/components/Tabs.js.map +1 -1
  628. package/dist/v2/components/TelInput.js +80 -115
  629. package/dist/v2/components/TelInput.js.map +1 -1
  630. package/dist/v2/components/Textarea.js +26 -35
  631. package/dist/v2/components/Textarea.js.map +1 -1
  632. package/dist/v2/components/TimePicker.js +62 -74
  633. package/dist/v2/components/TimePicker.js.map +1 -1
  634. package/dist/v2/components/Toast.js +119 -174
  635. package/dist/v2/components/Toast.js.map +1 -1
  636. package/dist/v2/components/Tooltip.js +23 -38
  637. package/dist/v2/components/Tooltip.js.map +1 -1
  638. package/dist/v2/components/_ErrorPageBody.js +15 -16
  639. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  640. package/dist/v2/components/_pickerShared.js +5 -5
  641. package/dist/v2/components/_pickerShared.js.map +1 -1
  642. package/dist/v2/components/index.d.ts +40 -1
  643. package/dist/v2/components/index.d.ts.map +1 -1
  644. package/dist/v2/components/index.js +153 -136
  645. package/dist/v2/components/index.js.map +1 -1
  646. package/dist/v2/hooks/index.d.ts +65 -0
  647. package/dist/v2/hooks/index.d.ts.map +1 -1
  648. package/dist/v2/hooks/index.js +63 -24
  649. package/dist/v2/hooks/index.js.map +1 -1
  650. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  651. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  652. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  653. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  654. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  655. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  656. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  657. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  658. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  659. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  660. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  661. package/dist/v2/hooks/useDensity.js +14 -18
  662. package/dist/v2/hooks/useDensity.js.map +1 -1
  663. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  664. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  665. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  666. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  667. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  668. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  669. package/dist/v2/hooks/useFocusTrap.js +20 -24
  670. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  671. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  672. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  673. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  674. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  675. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  676. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  677. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  678. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  679. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  680. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  681. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  682. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  683. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  684. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  685. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  687. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  688. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  689. package/dist/v2/hooks/useSortedRows.js +4 -6
  690. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  691. package/dist/v2/hooks/useTabLoading.js +7 -22
  692. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  693. package/dist/v2/index.js +143 -145
  694. package/dist/v2/index.js.map +1 -1
  695. package/dist/v2/modalContext.js +2 -2
  696. package/dist/v2/modalContext.js.map +1 -1
  697. package/dist/v2/models/favorite.d.ts +8 -9
  698. package/dist/v2/models/favorite.d.ts.map +1 -1
  699. package/dist/v2/models/favorite.js.map +1 -1
  700. package/dist/v2/models/index.js +4 -4
  701. package/dist/v2/models/index.js.map +1 -1
  702. package/dist/v2/models/personalization.d.ts +44 -48
  703. package/dist/v2/models/personalization.d.ts.map +1 -1
  704. package/dist/v2/models/personalization.js.map +1 -1
  705. package/dist/v2/models/referentiel.d.ts +32 -50
  706. package/dist/v2/models/referentiel.d.ts.map +1 -1
  707. package/dist/v2/models/referentiel.js.map +1 -1
  708. package/dist/v2/models/savedFilter.d.ts +8 -17
  709. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  710. package/dist/v2/models/savedFilter.js.map +1 -1
  711. package/dist/v2/patterns/ActionBar.js +152 -187
  712. package/dist/v2/patterns/ActionBar.js.map +1 -1
  713. package/dist/v2/patterns/AppMain.d.ts +109 -0
  714. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  715. package/dist/v2/patterns/AppMain.js +115 -0
  716. package/dist/v2/patterns/AppMain.js.map +1 -0
  717. package/dist/v2/patterns/BulkActionBar.js +40 -42
  718. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  719. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  720. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  721. package/dist/v2/patterns/ChartFigure.js +159 -0
  722. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  723. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  724. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  725. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  726. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  727. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  728. package/dist/v2/patterns/DataGrid.js +262 -297
  729. package/dist/v2/patterns/DataGrid.js.map +1 -1
  730. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  731. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  733. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  734. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  735. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  736. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  737. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  738. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  739. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  740. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  741. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  742. package/dist/v2/patterns/DetailSplit.js +116 -0
  743. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  744. package/dist/v2/patterns/FavoriteColumn.js +22 -23
  745. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  746. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  747. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  748. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  749. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  750. package/dist/v2/patterns/FilterTabBar.js +120 -0
  751. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  752. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  753. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  754. package/dist/v2/patterns/FormPageShell.js +53 -50
  755. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  756. package/dist/v2/patterns/FormSection.d.ts +8 -3
  757. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  758. package/dist/v2/patterns/FormSection.js +44 -51
  759. package/dist/v2/patterns/FormSection.js.map +1 -1
  760. package/dist/v2/patterns/FormikCheckbox.js +36 -45
  761. package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
  762. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  763. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  765. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  766. package/dist/v2/patterns/FormikCombobox.js +55 -72
  767. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  768. package/dist/v2/patterns/FormikDatePicker.js +50 -64
  769. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  770. package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
  771. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
  772. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  773. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  774. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  775. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  776. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  777. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  778. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  779. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikFile.js +99 -83
  781. package/dist/v2/patterns/FormikFile.js.map +1 -1
  782. package/dist/v2/patterns/FormikInput.js +45 -58
  783. package/dist/v2/patterns/FormikInput.js.map +1 -1
  784. package/dist/v2/patterns/FormikRadioGroup.js +45 -56
  785. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
  786. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  787. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  788. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  789. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  790. package/dist/v2/patterns/FormikSelect.js +70 -92
  791. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  792. package/dist/v2/patterns/FormikTextarea.js +35 -51
  793. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  794. package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
  795. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  796. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  797. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  798. package/dist/v2/patterns/PageContent.js +17 -20
  799. package/dist/v2/patterns/PageContent.js.map +1 -1
  800. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  801. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  802. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  803. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  804. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  805. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/ReferentielField.js +347 -327
  807. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
  809. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
  810. package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
  811. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
  812. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  813. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  814. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  815. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  816. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  817. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  818. package/dist/v2/patterns/SortableHeader.js +35 -57
  819. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  820. package/dist/v2/patterns/Tour.js +121 -142
  821. package/dist/v2/patterns/Tour.js.map +1 -1
  822. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  823. package/dist/v2/patterns/_dataGridShared.js +131 -147
  824. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  825. package/dist/v2/patterns/_pickerSerialisation.js +9 -10
  826. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
  827. package/dist/v2/patterns/_sort.js +17 -33
  828. package/dist/v2/patterns/_sort.js.map +1 -1
  829. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  830. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  831. package/dist/v2/patterns/_useColumnResize.js +80 -99
  832. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  833. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  834. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  835. package/dist/v2/patterns/filterCriteria.js +110 -0
  836. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  837. package/dist/v2/patterns/index.d.ts +160 -0
  838. package/dist/v2/patterns/index.d.ts.map +1 -1
  839. package/dist/v2/patterns/index.js +157 -79
  840. package/dist/v2/patterns/index.js.map +1 -1
  841. package/dist/v2/patterns/rowActions.d.ts +150 -0
  842. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  843. package/dist/v2/patterns/rowActions.js +232 -0
  844. package/dist/v2/patterns/rowActions.js.map +1 -0
  845. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  846. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  847. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  848. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  849. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  850. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  851. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  852. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  853. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  854. package/dist/v2/personalization/adapters/index.js +5 -5
  855. package/dist/v2/personalization/adapters/index.js.map +1 -1
  856. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  857. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  858. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  859. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  860. package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
  861. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  862. package/dist/v2/personalization/capabilities/index.js +12 -12
  863. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  864. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  865. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  866. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  867. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  868. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  869. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  870. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  871. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  872. package/dist/v2/personalization/index.d.ts +16 -0
  873. package/dist/v2/personalization/index.d.ts.map +1 -1
  874. package/dist/v2/personalization/index.js +30 -23
  875. package/dist/v2/personalization/index.js.map +1 -1
  876. package/dist/v2/personalization/personalizationContext.js +10 -12
  877. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  878. package/dist/v2/personalization/schema.js +8 -9
  879. package/dist/v2/personalization/schema.js.map +1 -1
  880. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  881. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  882. package/dist/v2/referentiel/index.js +11 -13
  883. package/dist/v2/referentiel/index.js.map +1 -1
  884. package/dist/v2/referentiel/types.d.ts +105 -0
  885. package/dist/v2/referentiel/types.d.ts.map +1 -0
  886. package/dist/v2/referentiel/types.js +6 -0
  887. package/dist/v2/referentiel/types.js.map +1 -0
  888. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  889. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  890. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  891. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  892. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  893. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  894. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  895. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  896. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  897. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  898. package/dist/v2/theme/_brand.js +12 -26
  899. package/dist/v2/theme/_brand.js.map +1 -1
  900. package/dist/v2/theme/_brandSecondary.js +12 -26
  901. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  902. package/dist/v2/theme/createPortnetTheme.js +41 -49
  903. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  904. package/dist/v2/theme/cssVariables.d.ts +3 -3
  905. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  906. package/dist/v2/theme/cssVariables.js +65 -70
  907. package/dist/v2/theme/cssVariables.js.map +1 -1
  908. package/dist/v2/theme/index.js +10 -10
  909. package/dist/v2/theme/index.js.map +1 -1
  910. package/dist/v2/tokens/breakpoints.js +16 -16
  911. package/dist/v2/tokens/breakpoints.js.map +1 -1
  912. package/dist/v2/tokens/chart.d.ts +103 -0
  913. package/dist/v2/tokens/chart.d.ts.map +1 -0
  914. package/dist/v2/tokens/chart.js +270 -0
  915. package/dist/v2/tokens/chart.js.map +1 -0
  916. package/dist/v2/tokens/colors.js +24 -24
  917. package/dist/v2/tokens/colors.js.map +1 -1
  918. package/dist/v2/tokens/density.d.ts +104 -0
  919. package/dist/v2/tokens/density.d.ts.map +1 -1
  920. package/dist/v2/tokens/density.js +67 -12
  921. package/dist/v2/tokens/density.js.map +1 -1
  922. package/dist/v2/tokens/index.d.ts +50 -1
  923. package/dist/v2/tokens/index.d.ts.map +1 -1
  924. package/dist/v2/tokens/index.js +116 -68
  925. package/dist/v2/tokens/index.js.map +1 -1
  926. package/dist/v2/tokens/motion.js +16 -22
  927. package/dist/v2/tokens/motion.js.map +1 -1
  928. package/dist/v2/tokens/radius.js +3 -3
  929. package/dist/v2/tokens/radius.js.map +1 -1
  930. package/dist/v2/tokens/shadows.js +8 -8
  931. package/dist/v2/tokens/shadows.js.map +1 -1
  932. package/dist/v2/tokens/spacing.js +4 -4
  933. package/dist/v2/tokens/spacing.js.map +1 -1
  934. package/dist/v2/tokens/state.js +3 -3
  935. package/dist/v2/tokens/state.js.map +1 -1
  936. package/dist/v2/tokens/statusPalette.js +21 -23
  937. package/dist/v2/tokens/statusPalette.js.map +1 -1
  938. package/dist/v2/tokens/tokens.json +6 -1
  939. package/dist/v2/tokens/typography.js +15 -15
  940. package/dist/v2/tokens/typography.js.map +1 -1
  941. package/dist/v2/tokens/zIndex.js +3 -3
  942. package/dist/v2/tokens/zIndex.js.map +1 -1
  943. package/dist/v2/types/datagrid.d.ts +9 -1
  944. package/dist/v2/types/datagrid.d.ts.map +1 -1
  945. package/dist/v2/types/datagrid.js.map +1 -1
  946. package/dist/v2/types/index.js +2 -2
  947. package/dist/v2/types/index.js.map +1 -1
  948. package/dist/v2/utils/apiError.js +16 -37
  949. package/dist/v2/utils/apiError.js.map +1 -1
  950. package/dist/v2/utils/contrast.js +31 -32
  951. package/dist/v2/utils/contrast.js.map +1 -1
  952. package/dist/v2/utils/cx.js +7 -27
  953. package/dist/v2/utils/cx.js.map +1 -1
  954. package/dist/v2/utils/fileDownload.js +25 -28
  955. package/dist/v2/utils/fileDownload.js.map +1 -1
  956. package/dist/v2/utils/fileValidation.d.ts +116 -0
  957. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  958. package/dist/v2/utils/fileValidation.js +220 -0
  959. package/dist/v2/utils/fileValidation.js.map +1 -0
  960. package/dist/v2/utils/fmtDate.d.ts +103 -0
  961. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  962. package/dist/v2/utils/fmtDate.js +119 -0
  963. package/dist/v2/utils/fmtDate.js.map +1 -0
  964. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  965. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  966. package/dist/v2/utils/fmtMoney.js +9 -11
  967. package/dist/v2/utils/fmtMoney.js.map +1 -1
  968. package/dist/v2/utils/formikErrors.d.ts +67 -0
  969. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  970. package/dist/v2/utils/formikErrors.js +85 -0
  971. package/dist/v2/utils/formikErrors.js.map +1 -0
  972. package/dist/v2/utils/index.d.ts +5 -0
  973. package/dist/v2/utils/index.d.ts.map +1 -1
  974. package/dist/v2/utils/index.js +67 -18
  975. package/dist/v2/utils/index.js.map +1 -1
  976. package/dist/v2/utils/mergeLabels.js +9 -14
  977. package/dist/v2/utils/mergeLabels.js.map +1 -1
  978. package/dist/v2/utils/networkStatus.js +14 -14
  979. package/dist/v2/utils/networkStatus.js.map +1 -1
  980. package/package.json +26 -9
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+ var _filterCriteria = require("../patterns/filterCriteria");
5
+ var _useAppliedFilters = _interopRequireDefault(require("../hooks/useAppliedFilters"));
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ /**
8
+ * @jest-environment jsdom
9
+ */
10
+
11
+ /**
12
+ * filterCriteria (G-42) + useAppliedFilters (G-43) — promoted from
13
+ * `refonte-frontend` (Area 5).
14
+ *
15
+ * THE CASES BELOW ARE THE HOSTS' OWN, not invented ones. Each was read off the
16
+ * nine listings that consumed these two capabilities, which is why this file
17
+ * was written last: a test built on imagined descriptors would have covered
18
+ * the easy half and missed all four things that actually differ between
19
+ * screens.
20
+ */
21
+
22
+ describe("isCriterionSet", () => {
23
+ /**
24
+ * CASE 1 — `0` MEANS UNSET. Four payloads in the promoting module carry
25
+ * `villeEntreeId: 0` / `importateurId: 0` as their "no selection" value. A
26
+ * chip appearing for `0` announces a criterion nobody chose.
27
+ */
28
+ test("0 is not set — it is the unset value of a reference mirror", () => {
29
+ expect((0, _filterCriteria.isCriterionSet)(0)).toBe(false);
30
+ });
31
+ test("null, undefined, empty string and empty array are not set", () => {
32
+ expect((0, _filterCriteria.isCriterionSet)(null)).toBe(false);
33
+ expect((0, _filterCriteria.isCriterionSet)(undefined)).toBe(false);
34
+ expect((0, _filterCriteria.isCriterionSet)("")).toBe(false);
35
+ expect((0, _filterCriteria.isCriterionSet)([])).toBe(false);
36
+ });
37
+ test("a reference object, a non-empty string and a non-zero id are set", () => {
38
+ expect((0, _filterCriteria.isCriterionSet)({
39
+ id: 42,
40
+ description: "SOFRANE SA"
41
+ })).toBe(true);
42
+ expect((0, _filterCriteria.isCriterionSet)("2025-IM-0042")).toBe(true);
43
+ expect((0, _filterCriteria.isCriterionSet)(42)).toBe(true);
44
+ });
45
+ });
46
+ describe("buildFilterChips", () => {
47
+ test("only SET criteria produce a chip", () => {
48
+ const criteria = [{
49
+ key: "identifiant",
50
+ label: "Référence"
51
+ }, {
52
+ key: "villeEntreeId",
53
+ label: "DPCI"
54
+ }];
55
+ const chips = (0, _filterCriteria.buildFilterChips)({
56
+ identifiant: "2025-IM-0042",
57
+ villeEntreeId: 0
58
+ }, criteria, jest.fn());
59
+ expect(chips).toHaveLength(1);
60
+ expect(chips[0]?.key).toBe("identifiant");
61
+ });
62
+
63
+ /**
64
+ * "Label: value" and not the value alone: "AFFECTE" does not say WHICH
65
+ * criterion it is when three chips sit side by side.
66
+ */
67
+ test("the chip reads « label : value »", () => {
68
+ const chips = (0, _filterCriteria.buildFilterChips)({
69
+ statut: {
70
+ id: 3,
71
+ description: "Affecté"
72
+ }
73
+ }, [{
74
+ key: "statut",
75
+ label: "Statut"
76
+ }], jest.fn());
77
+ expect(chips[0]?.label).toBe("Statut : Affecté");
78
+ });
79
+ test("a reference object renders through its description by default", () => {
80
+ const chips = (0, _filterCriteria.buildFilterChips)({
81
+ importateurCode: {
82
+ id: 7,
83
+ description: "NOVATIS"
84
+ }
85
+ }, [{
86
+ key: "importateurCode",
87
+ label: "Importateur"
88
+ }], jest.fn());
89
+ expect(chips[0]?.label).toBe("Importateur : NOVATIS");
90
+ });
91
+
92
+ /**
93
+ * CASE 4 — `format`. `typeReponse` stores the id DIRECTLY, with no object
94
+ * mirror, so without a formatter the chip would read "Réponse ministère : 3".
95
+ */
96
+ test("format renders a scalar id through the host's lookup", () => {
97
+ const lookup = {
98
+ "3": "Favorable"
99
+ };
100
+ const chips = (0, _filterCriteria.buildFilterChips)({
101
+ typeReponse: 3
102
+ }, [{
103
+ key: "typeReponse",
104
+ label: "Réponse ministère",
105
+ format: v => lookup[String(v)] ?? String(v)
106
+ }], jest.fn());
107
+ expect(chips[0]?.label).toBe("Réponse ministère : Favorable");
108
+ });
109
+
110
+ /**
111
+ * CASE 2 — THE PAIR. Reference criteria are held as two fields: an object for
112
+ * display and a scalar mirror for the payload. Clearing only the displayed
113
+ * key removes the chip from the screen while the criterion STAYS IN THE
114
+ * PAYLOAD — an invisible filter that still filters.
115
+ */
116
+ test("removing a paired criterion clears its mirror too", () => {
117
+ const onRemove = jest.fn();
118
+ const chips = (0, _filterCriteria.buildFilterChips)({
119
+ importateurCode: {
120
+ id: 7,
121
+ description: "NOVATIS"
122
+ }
123
+ }, [{
124
+ key: "importateurCode",
125
+ label: "Importateur",
126
+ linkedKeys: ["importateurId"]
127
+ }], onRemove);
128
+ chips[0]?.onRemove?.();
129
+ expect(onRemove).toHaveBeenCalledWith(["importateurCode", "importateurId"]);
130
+ });
131
+
132
+ /**
133
+ * CASE 3 — TWO NOMENCLATURES, not one mirror. One host's persisted filter
134
+ * suffixes its objects with `_obj` while its form names them plainly, so
135
+ * `linkedKeys` reconciles the two vocabularies: the chip READS
136
+ * `categorie_obj` and CLEARS all three keys.
137
+ */
138
+ test("linkedKeys can reconcile two key nomenclatures, not just a mirror", () => {
139
+ const onRemove = jest.fn();
140
+ const chips = (0, _filterCriteria.buildFilterChips)({
141
+ categorie_obj: {
142
+ id: 1,
143
+ description: "Balances"
144
+ }
145
+ }, [{
146
+ key: "categorie_obj",
147
+ label: "Catégorie d'IM",
148
+ linkedKeys: ["categorie", "categorieId"]
149
+ }], onRemove);
150
+ chips[0]?.onRemove?.();
151
+ expect(onRemove).toHaveBeenCalledWith(["categorie_obj", "categorie", "categorieId"]);
152
+ });
153
+ test("filterCriteriaKeys lists every key, mirrors included — for a clear-all", () => {
154
+ expect((0, _filterCriteria.filterCriteriaKeys)([{
155
+ key: "identifiant",
156
+ label: "Référence"
157
+ }, {
158
+ key: "delegation",
159
+ label: "DPCI",
160
+ linkedKeys: ["delegationId", "villeEntreeId"]
161
+ }])).toEqual(["identifiant", "delegation", "delegationId", "villeEntreeId"]);
162
+ });
163
+ });
164
+ describe("useAppliedFilters", () => {
165
+ const makeForm = values => ({
166
+ values,
167
+ setFieldValue: jest.fn()
168
+ });
169
+
170
+ /**
171
+ * THE DEFECT THIS HOOK EXISTS FOR. `DataGridToolbar`'s search input writes
172
+ * into the form on every keystroke; the snapshot must not follow it, or a
173
+ * chip appears mid-typing announcing a filter that filters nothing.
174
+ */
175
+ test("the snapshot ignores typing until apply() is called", () => {
176
+ const form = makeForm({
177
+ identifiant: "202"
178
+ });
179
+ const {
180
+ result
181
+ } = (0, _react.renderHook)(() => (0, _useAppliedFilters.default)(form, {
182
+ onApply: jest.fn(),
183
+ onReset: jest.fn(),
184
+ onRemove: jest.fn()
185
+ }));
186
+ expect(result.current.appliedFilters).toEqual({});
187
+ (0, _react.act)(() => {
188
+ result.current.apply();
189
+ });
190
+ expect(result.current.appliedFilters).toEqual({
191
+ identifiant: "202"
192
+ });
193
+ });
194
+ test("apply() runs the screen's search, resetAll() clears and resets", () => {
195
+ const onApply = jest.fn();
196
+ const onReset = jest.fn();
197
+ const form = makeForm({
198
+ identifiant: "2025-IM-0042"
199
+ });
200
+ const {
201
+ result
202
+ } = (0, _react.renderHook)(() => (0, _useAppliedFilters.default)(form, {
203
+ onApply,
204
+ onReset,
205
+ onRemove: jest.fn()
206
+ }));
207
+ (0, _react.act)(() => {
208
+ result.current.apply();
209
+ });
210
+ expect(onApply).toHaveBeenCalled();
211
+ (0, _react.act)(() => {
212
+ result.current.resetAll();
213
+ });
214
+ expect(onReset).toHaveBeenCalled();
215
+ /* The mirror-image defect: a snapshot left full after "clear criteria"
216
+ * shows chips for criteria that no longer filter anything. */
217
+ expect(result.current.appliedFilters).toEqual({});
218
+ });
219
+
220
+ /**
221
+ * The payload is rebuilt from the AMPUTATED SNAPSHOT and never re-read from
222
+ * the form: `setFieldValue` is asynchronous, so reading values back would
223
+ * give the criteria as they were BEFORE the removal.
224
+ */
225
+ test("removeCriteria clears the fields and hands back the REMAINING criteria", () => {
226
+ const onRemove = jest.fn();
227
+ const form = makeForm({
228
+ identifiant: "2025-IM-0042",
229
+ importateurCode: {
230
+ id: 7
231
+ },
232
+ importateurId: 7
233
+ });
234
+ const {
235
+ result
236
+ } = (0, _react.renderHook)(() => (0, _useAppliedFilters.default)(form, {
237
+ onApply: jest.fn(),
238
+ onReset: jest.fn(),
239
+ onRemove
240
+ }));
241
+ (0, _react.act)(() => {
242
+ result.current.apply();
243
+ });
244
+ (0, _react.act)(() => {
245
+ result.current.removeCriteria(["importateurCode", "importateurId"]);
246
+ });
247
+ expect(form.setFieldValue).toHaveBeenCalledWith("importateurCode", null);
248
+ expect(form.setFieldValue).toHaveBeenCalledWith("importateurId", null);
249
+ expect(onRemove).toHaveBeenCalledWith({
250
+ identifiant: "2025-IM-0042",
251
+ importateurCode: null,
252
+ importateurId: null
253
+ });
254
+ expect(result.current.appliedFilters["importateurCode"]).toBeNull();
255
+ });
256
+
257
+ /**
258
+ * Hosts disagree on what "empty" means, per field — which is why this is a
259
+ * parameter and not a library convention. One real host clears id mirrors to
260
+ * `0` and everything else to `null`, because that is what ITS reset payload
261
+ * uses.
262
+ */
263
+ test("emptyValueFor lets the host decide what empty means, per field", () => {
264
+ const onRemove = jest.fn();
265
+ const form = makeForm({
266
+ categorie: {
267
+ id: 1
268
+ },
269
+ categorieId: 1
270
+ });
271
+ const {
272
+ result
273
+ } = (0, _react.renderHook)(() => (0, _useAppliedFilters.default)(form, {
274
+ onApply: jest.fn(),
275
+ onReset: jest.fn(),
276
+ onRemove,
277
+ emptyValueFor: key => key.endsWith("Id") ? 0 : null
278
+ }));
279
+ (0, _react.act)(() => {
280
+ result.current.apply();
281
+ });
282
+ (0, _react.act)(() => {
283
+ result.current.removeCriteria(["categorie", "categorieId"]);
284
+ });
285
+ expect(form.setFieldValue).toHaveBeenCalledWith("categorie", null);
286
+ expect(form.setFieldValue).toHaveBeenCalledWith("categorieId", 0);
287
+ expect(onRemove).toHaveBeenCalledWith({
288
+ categorie: null,
289
+ categorieId: 0
290
+ });
291
+ });
292
+
293
+ /**
294
+ * THE THREE PATHS THAT BYPASS apply(). Restoring a saved filter or clicking
295
+ * a status chip changes what actually filters the list without going through
296
+ * the form's submit — and both used to leave the chips lying: the list was
297
+ * filtered and NO chip appeared.
298
+ */
299
+ test("setApplied covers the paths that never go through apply()", () => {
300
+ const form = makeForm({});
301
+ const {
302
+ result
303
+ } = (0, _react.renderHook)(() => (0, _useAppliedFilters.default)(form, {
304
+ onApply: jest.fn(),
305
+ onReset: jest.fn(),
306
+ onRemove: jest.fn()
307
+ }));
308
+ (0, _react.act)(() => {
309
+ result.current.setApplied({
310
+ statut: {
311
+ id: 3,
312
+ description: "Affecté"
313
+ }
314
+ });
315
+ });
316
+ expect(result.current.appliedFilters).toEqual({
317
+ statut: {
318
+ id: 3,
319
+ description: "Affecté"
320
+ }
321
+ });
322
+ });
323
+ });
324
+ //# sourceMappingURL=filterCriteria.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterCriteria.test.js","names":["_react","require","_filterCriteria","_useAppliedFilters","_interopRequireDefault","e","__esModule","default","describe","test","expect","isCriterionSet","toBe","undefined","id","description","criteria","key","label","chips","buildFilterChips","identifiant","villeEntreeId","jest","fn","toHaveLength","statut","importateurCode","lookup","typeReponse","format","v","String","onRemove","linkedKeys","toHaveBeenCalledWith","categorie_obj","filterCriteriaKeys","toEqual","makeForm","values","setFieldValue","form","result","renderHook","useAppliedFilters","onApply","onReset","current","appliedFilters","act","apply","toHaveBeenCalled","resetAll","importateurId","removeCriteria","toBeNull","categorie","categorieId","emptyValueFor","endsWith","setApplied"],"sources":["../../../src/lib/v2/__tests__/filterCriteria.test.tsx"],"sourcesContent":["/**\r\n * @jest-environment jsdom\r\n */\r\nimport { renderHook, act } from \"@testing-library/react\";\r\nimport {\r\n buildFilterChips,\r\n filterCriteriaKeys,\r\n isCriterionSet,\r\n} from \"../patterns/filterCriteria\";\r\nimport type { FilterCriterion } from \"../patterns/filterCriteria\";\r\nimport useAppliedFilters from \"../hooks/useAppliedFilters\";\r\n\r\n/**\r\n * filterCriteria (G-42) + useAppliedFilters (G-43) — promoted from\r\n * `refonte-frontend` (Area 5).\r\n *\r\n * THE CASES BELOW ARE THE HOSTS' OWN, not invented ones. Each was read off the\r\n * nine listings that consumed these two capabilities, which is why this file\r\n * was written last: a test built on imagined descriptors would have covered\r\n * the easy half and missed all four things that actually differ between\r\n * screens.\r\n */\r\n\r\ndescribe(\"isCriterionSet\", () => {\r\n /**\r\n * CASE 1 — `0` MEANS UNSET. Four payloads in the promoting module carry\r\n * `villeEntreeId: 0` / `importateurId: 0` as their \"no selection\" value. A\r\n * chip appearing for `0` announces a criterion nobody chose.\r\n */\r\n test(\"0 is not set — it is the unset value of a reference mirror\", () => {\r\n expect(isCriterionSet(0)).toBe(false);\r\n });\r\n\r\n test(\"null, undefined, empty string and empty array are not set\", () => {\r\n expect(isCriterionSet(null)).toBe(false);\r\n expect(isCriterionSet(undefined)).toBe(false);\r\n expect(isCriterionSet(\"\")).toBe(false);\r\n expect(isCriterionSet([])).toBe(false);\r\n });\r\n\r\n test(\"a reference object, a non-empty string and a non-zero id are set\", () => {\r\n expect(isCriterionSet({ id: 42, description: \"SOFRANE SA\" })).toBe(true);\r\n expect(isCriterionSet(\"2025-IM-0042\")).toBe(true);\r\n expect(isCriterionSet(42)).toBe(true);\r\n });\r\n});\r\n\r\ndescribe(\"buildFilterChips\", () => {\r\n test(\"only SET criteria produce a chip\", () => {\r\n const criteria: FilterCriterion[] = [\r\n { key: \"identifiant\", label: \"Référence\" },\r\n { key: \"villeEntreeId\", label: \"DPCI\" },\r\n ];\r\n const chips = buildFilterChips(\r\n { identifiant: \"2025-IM-0042\", villeEntreeId: 0 },\r\n criteria,\r\n jest.fn()\r\n );\r\n expect(chips).toHaveLength(1);\r\n expect(chips[0]?.key).toBe(\"identifiant\");\r\n });\r\n\r\n /**\r\n * \"Label: value\" and not the value alone: \"AFFECTE\" does not say WHICH\r\n * criterion it is when three chips sit side by side.\r\n */\r\n test(\"the chip reads « label : value »\", () => {\r\n const chips = buildFilterChips(\r\n { statut: { id: 3, description: \"Affecté\" } },\r\n [{ key: \"statut\", label: \"Statut\" }],\r\n jest.fn()\r\n );\r\n expect(chips[0]?.label).toBe(\"Statut : Affecté\");\r\n });\r\n\r\n test(\"a reference object renders through its description by default\", () => {\r\n const chips = buildFilterChips(\r\n { importateurCode: { id: 7, description: \"NOVATIS\" } },\r\n [{ key: \"importateurCode\", label: \"Importateur\" }],\r\n jest.fn()\r\n );\r\n expect(chips[0]?.label).toBe(\"Importateur : NOVATIS\");\r\n });\r\n\r\n /**\r\n * CASE 4 — `format`. `typeReponse` stores the id DIRECTLY, with no object\r\n * mirror, so without a formatter the chip would read \"Réponse ministère : 3\".\r\n */\r\n test(\"format renders a scalar id through the host's lookup\", () => {\r\n const lookup: Record<string, string> = { \"3\": \"Favorable\" };\r\n const chips = buildFilterChips(\r\n { typeReponse: 3 },\r\n [\r\n {\r\n key: \"typeReponse\",\r\n label: \"Réponse ministère\",\r\n format: (v) => lookup[String(v)] ?? String(v),\r\n },\r\n ],\r\n jest.fn()\r\n );\r\n expect(chips[0]?.label).toBe(\"Réponse ministère : Favorable\");\r\n });\r\n\r\n /**\r\n * CASE 2 — THE PAIR. Reference criteria are held as two fields: an object for\r\n * display and a scalar mirror for the payload. Clearing only the displayed\r\n * key removes the chip from the screen while the criterion STAYS IN THE\r\n * PAYLOAD — an invisible filter that still filters.\r\n */\r\n test(\"removing a paired criterion clears its mirror too\", () => {\r\n const onRemove = jest.fn();\r\n const chips = buildFilterChips(\r\n { importateurCode: { id: 7, description: \"NOVATIS\" } },\r\n [\r\n {\r\n key: \"importateurCode\",\r\n label: \"Importateur\",\r\n linkedKeys: [\"importateurId\"],\r\n },\r\n ],\r\n onRemove\r\n );\r\n chips[0]?.onRemove?.();\r\n expect(onRemove).toHaveBeenCalledWith([\"importateurCode\", \"importateurId\"]);\r\n });\r\n\r\n /**\r\n * CASE 3 — TWO NOMENCLATURES, not one mirror. One host's persisted filter\r\n * suffixes its objects with `_obj` while its form names them plainly, so\r\n * `linkedKeys` reconciles the two vocabularies: the chip READS\r\n * `categorie_obj` and CLEARS all three keys.\r\n */\r\n test(\"linkedKeys can reconcile two key nomenclatures, not just a mirror\", () => {\r\n const onRemove = jest.fn();\r\n const chips = buildFilterChips(\r\n { categorie_obj: { id: 1, description: \"Balances\" } },\r\n [\r\n {\r\n key: \"categorie_obj\",\r\n label: \"Catégorie d'IM\",\r\n linkedKeys: [\"categorie\", \"categorieId\"],\r\n },\r\n ],\r\n onRemove\r\n );\r\n chips[0]?.onRemove?.();\r\n expect(onRemove).toHaveBeenCalledWith([\r\n \"categorie_obj\",\r\n \"categorie\",\r\n \"categorieId\",\r\n ]);\r\n });\r\n\r\n test(\"filterCriteriaKeys lists every key, mirrors included — for a clear-all\", () => {\r\n expect(\r\n filterCriteriaKeys([\r\n { key: \"identifiant\", label: \"Référence\" },\r\n { key: \"delegation\", label: \"DPCI\", linkedKeys: [\"delegationId\", \"villeEntreeId\"] },\r\n ])\r\n ).toEqual([\"identifiant\", \"delegation\", \"delegationId\", \"villeEntreeId\"]);\r\n });\r\n});\r\n\r\ndescribe(\"useAppliedFilters\", () => {\r\n interface Form {\r\n values: Record<string, unknown>;\r\n setFieldValue: jest.Mock;\r\n }\r\n\r\n const makeForm = (values: Record<string, unknown>): Form => ({\r\n values,\r\n setFieldValue: jest.fn(),\r\n });\r\n\r\n /**\r\n * THE DEFECT THIS HOOK EXISTS FOR. `DataGridToolbar`'s search input writes\r\n * into the form on every keystroke; the snapshot must not follow it, or a\r\n * chip appears mid-typing announcing a filter that filters nothing.\r\n */\r\n test(\"the snapshot ignores typing until apply() is called\", () => {\r\n const form = makeForm({ identifiant: \"202\" });\r\n const { result } = renderHook(() =>\r\n useAppliedFilters(form, {\r\n onApply: jest.fn(),\r\n onReset: jest.fn(),\r\n onRemove: jest.fn(),\r\n })\r\n );\r\n\r\n expect(result.current.appliedFilters).toEqual({});\r\n\r\n act(() => {\r\n result.current.apply();\r\n });\r\n expect(result.current.appliedFilters).toEqual({ identifiant: \"202\" });\r\n });\r\n\r\n test(\"apply() runs the screen's search, resetAll() clears and resets\", () => {\r\n const onApply = jest.fn();\r\n const onReset = jest.fn();\r\n const form = makeForm({ identifiant: \"2025-IM-0042\" });\r\n const { result } = renderHook(() =>\r\n useAppliedFilters(form, { onApply, onReset, onRemove: jest.fn() })\r\n );\r\n\r\n act(() => {\r\n result.current.apply();\r\n });\r\n expect(onApply).toHaveBeenCalled();\r\n\r\n act(() => {\r\n result.current.resetAll();\r\n });\r\n expect(onReset).toHaveBeenCalled();\r\n /* The mirror-image defect: a snapshot left full after \"clear criteria\"\r\n * shows chips for criteria that no longer filter anything. */\r\n expect(result.current.appliedFilters).toEqual({});\r\n });\r\n\r\n /**\r\n * The payload is rebuilt from the AMPUTATED SNAPSHOT and never re-read from\r\n * the form: `setFieldValue` is asynchronous, so reading values back would\r\n * give the criteria as they were BEFORE the removal.\r\n */\r\n test(\"removeCriteria clears the fields and hands back the REMAINING criteria\", () => {\r\n const onRemove = jest.fn();\r\n const form = makeForm({\r\n identifiant: \"2025-IM-0042\",\r\n importateurCode: { id: 7 },\r\n importateurId: 7,\r\n });\r\n const { result } = renderHook(() =>\r\n useAppliedFilters(form, {\r\n onApply: jest.fn(),\r\n onReset: jest.fn(),\r\n onRemove,\r\n })\r\n );\r\n\r\n act(() => {\r\n result.current.apply();\r\n });\r\n act(() => {\r\n result.current.removeCriteria([\"importateurCode\", \"importateurId\"]);\r\n });\r\n\r\n expect(form.setFieldValue).toHaveBeenCalledWith(\"importateurCode\", null);\r\n expect(form.setFieldValue).toHaveBeenCalledWith(\"importateurId\", null);\r\n expect(onRemove).toHaveBeenCalledWith({\r\n identifiant: \"2025-IM-0042\",\r\n importateurCode: null,\r\n importateurId: null,\r\n });\r\n expect(result.current.appliedFilters[\"importateurCode\"]).toBeNull();\r\n });\r\n\r\n /**\r\n * Hosts disagree on what \"empty\" means, per field — which is why this is a\r\n * parameter and not a library convention. One real host clears id mirrors to\r\n * `0` and everything else to `null`, because that is what ITS reset payload\r\n * uses.\r\n */\r\n test(\"emptyValueFor lets the host decide what empty means, per field\", () => {\r\n const onRemove = jest.fn();\r\n const form = makeForm({ categorie: { id: 1 }, categorieId: 1 });\r\n const { result } = renderHook(() =>\r\n useAppliedFilters(form, {\r\n onApply: jest.fn(),\r\n onReset: jest.fn(),\r\n onRemove,\r\n emptyValueFor: (key) => (key.endsWith(\"Id\") ? 0 : null),\r\n })\r\n );\r\n\r\n act(() => {\r\n result.current.apply();\r\n });\r\n act(() => {\r\n result.current.removeCriteria([\"categorie\", \"categorieId\"]);\r\n });\r\n\r\n expect(form.setFieldValue).toHaveBeenCalledWith(\"categorie\", null);\r\n expect(form.setFieldValue).toHaveBeenCalledWith(\"categorieId\", 0);\r\n expect(onRemove).toHaveBeenCalledWith({ categorie: null, categorieId: 0 });\r\n });\r\n\r\n /**\r\n * THE THREE PATHS THAT BYPASS apply(). Restoring a saved filter or clicking\r\n * a status chip changes what actually filters the list without going through\r\n * the form's submit — and both used to leave the chips lying: the list was\r\n * filtered and NO chip appeared.\r\n */\r\n test(\"setApplied covers the paths that never go through apply()\", () => {\r\n const form = makeForm({});\r\n const { result } = renderHook(() =>\r\n useAppliedFilters(form, {\r\n onApply: jest.fn(),\r\n onReset: jest.fn(),\r\n onRemove: jest.fn(),\r\n })\r\n );\r\n\r\n act(() => {\r\n result.current.setApplied({ statut: { id: 3, description: \"Affecté\" } });\r\n });\r\n\r\n expect(result.current.appliedFilters).toEqual({\r\n statut: { id: 3, description: \"Affecté\" },\r\n });\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _fmtDate = require("../utils/fmtDate");
4
+ /* Local time, deliberately (see the file header): the assertions below build
5
+ * their expectations from a local-time Date so the suite passes in any CI
6
+ * timezone. Where an ISO instant is used as input, only the parts that cannot
7
+ * shift with the zone are asserted. */
8
+
9
+ describe("fmtDate", () => {
10
+ it("formats a Date as DD/MM/YYYY", () => {
11
+ expect((0, _fmtDate.fmtDate)(new Date(2026, 2, 5))).toBe("05/03/2026");
12
+ });
13
+ it("pads day and month to two digits", () => {
14
+ expect((0, _fmtDate.fmtDate)(new Date(2026, 0, 9))).toBe("09/01/2026");
15
+ });
16
+
17
+ /* THE DEFECT THIS EXISTS FOR. Every module copy fed `new Date(undefined)`
18
+ * into `getDate()`, whose accessors all return NaN — so an optional date
19
+ * field rendered the literal "NaN/NaN/NaN". */
20
+ it("never renders NaN for an absent or unparseable value", () => {
21
+ expect((0, _fmtDate.fmtDate)(undefined)).toBe("—");
22
+ expect((0, _fmtDate.fmtDate)(null)).toBe("—");
23
+ expect((0, _fmtDate.fmtDate)("")).toBe("—");
24
+ expect((0, _fmtDate.fmtDate)("pas une date")).toBe("—");
25
+ expect((0, _fmtDate.fmtDate)(new Date("nope"))).toBe("—");
26
+ expect((0, _fmtDate.fmtDate)(undefined)).not.toContain("NaN");
27
+ expect((0, _fmtDate.fmtDateTime)(undefined)).not.toContain("NaN");
28
+ });
29
+
30
+ /* An absent date must be DISTINGUISHABLE from a cell that failed to render,
31
+ * which an empty string is not. */
32
+ it("marks absence with an em dash by default", () => {
33
+ expect((0, _fmtDate.fmtDate)(null)).toBe("—");
34
+ });
35
+ it("accepts a caller-chosen absence mark, for a deliberately empty cell", () => {
36
+ expect((0, _fmtDate.fmtDate)(null, {
37
+ absent: ""
38
+ })).toBe("");
39
+ expect((0, _fmtDate.fmtDateTime)(null, {
40
+ absent: ""
41
+ })).toBe("");
42
+ });
43
+
44
+ /* `new Date(0)` is a real instant (1970) while `new Date("")` is Invalid: a
45
+ * falsy guard would conflate them, so epoch 0 must survive. */
46
+ it("treats epoch 0 as a date, not as absent", () => {
47
+ expect((0, _fmtDate.fmtDate)(0)).not.toBe("—");
48
+ expect((0, _fmtDate.fmtDate)(0)).toMatch(/^\d{2}\/\d{2}\/19(69|70)$/);
49
+ });
50
+ it("parses an ISO string from the API", () => {
51
+ // Day can shift with the runner's zone; the month and year cannot here.
52
+ expect((0, _fmtDate.fmtDate)("2026-03-05T12:00:00Z")).toMatch(/^\d{2}\/03\/2026$/);
53
+ });
54
+ });
55
+ describe("fmtDateTime", () => {
56
+ it("formats a Date as DD/MM/YYYY HH:mm", () => {
57
+ expect((0, _fmtDate.fmtDateTime)(new Date(2026, 2, 5, 14, 30))).toBe("05/03/2026 14:30");
58
+ });
59
+ it("pads hours and minutes", () => {
60
+ expect((0, _fmtDate.fmtDateTime)(new Date(2026, 2, 5, 9, 5))).toBe("05/03/2026 09:05");
61
+ });
62
+ it("omits seconds", () => {
63
+ expect((0, _fmtDate.fmtDateTime)(new Date(2026, 2, 5, 14, 30, 59))).toBe("05/03/2026 14:30");
64
+ });
65
+ it("renders midnight as 00:00, not as absent", () => {
66
+ expect((0, _fmtDate.fmtDateTime)(new Date(2026, 2, 5, 0, 0))).toBe("05/03/2026 00:00");
67
+ });
68
+ });
69
+ //# sourceMappingURL=fmtDate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmtDate.test.js","names":["_fmtDate","require","describe","it","expect","fmtDate","Date","toBe","undefined","not","toContain","fmtDateTime","absent","toMatch"],"sources":["../../../src/lib/v2/__tests__/fmtDate.test.ts"],"sourcesContent":["import { fmtDate, fmtDateTime } from \"../utils/fmtDate\";\r\n\r\n/* Local time, deliberately (see the file header): the assertions below build\r\n * their expectations from a local-time Date so the suite passes in any CI\r\n * timezone. Where an ISO instant is used as input, only the parts that cannot\r\n * shift with the zone are asserted. */\r\n\r\ndescribe(\"fmtDate\", () => {\r\n it(\"formats a Date as DD/MM/YYYY\", () => {\r\n expect(fmtDate(new Date(2026, 2, 5))).toBe(\"05/03/2026\");\r\n });\r\n\r\n it(\"pads day and month to two digits\", () => {\r\n expect(fmtDate(new Date(2026, 0, 9))).toBe(\"09/01/2026\");\r\n });\r\n\r\n /* THE DEFECT THIS EXISTS FOR. Every module copy fed `new Date(undefined)`\r\n * into `getDate()`, whose accessors all return NaN — so an optional date\r\n * field rendered the literal \"NaN/NaN/NaN\". */\r\n it(\"never renders NaN for an absent or unparseable value\", () => {\r\n expect(fmtDate(undefined)).toBe(\"—\");\r\n expect(fmtDate(null)).toBe(\"—\");\r\n expect(fmtDate(\"\")).toBe(\"—\");\r\n expect(fmtDate(\"pas une date\")).toBe(\"—\");\r\n expect(fmtDate(new Date(\"nope\"))).toBe(\"—\");\r\n\r\n expect(fmtDate(undefined)).not.toContain(\"NaN\");\r\n expect(fmtDateTime(undefined)).not.toContain(\"NaN\");\r\n });\r\n\r\n /* An absent date must be DISTINGUISHABLE from a cell that failed to render,\r\n * which an empty string is not. */\r\n it(\"marks absence with an em dash by default\", () => {\r\n expect(fmtDate(null)).toBe(\"—\");\r\n });\r\n\r\n it(\"accepts a caller-chosen absence mark, for a deliberately empty cell\", () => {\r\n expect(fmtDate(null, { absent: \"\" })).toBe(\"\");\r\n expect(fmtDateTime(null, { absent: \"\" })).toBe(\"\");\r\n });\r\n\r\n /* `new Date(0)` is a real instant (1970) while `new Date(\"\")` is Invalid: a\r\n * falsy guard would conflate them, so epoch 0 must survive. */\r\n it(\"treats epoch 0 as a date, not as absent\", () => {\r\n expect(fmtDate(0)).not.toBe(\"—\");\r\n expect(fmtDate(0)).toMatch(/^\\d{2}\\/\\d{2}\\/19(69|70)$/);\r\n });\r\n\r\n it(\"parses an ISO string from the API\", () => {\r\n // Day can shift with the runner's zone; the month and year cannot here.\r\n expect(fmtDate(\"2026-03-05T12:00:00Z\")).toMatch(/^\\d{2}\\/03\\/2026$/);\r\n });\r\n});\r\n\r\ndescribe(\"fmtDateTime\", () => {\r\n it(\"formats a Date as DD/MM/YYYY HH:mm\", () => {\r\n expect(fmtDateTime(new Date(2026, 2, 5, 14, 30))).toBe(\"05/03/2026 14:30\");\r\n });\r\n\r\n it(\"pads hours and minutes\", () => {\r\n expect(fmtDateTime(new Date(2026, 2, 5, 9, 5))).toBe(\"05/03/2026 09:05\");\r\n });\r\n\r\n it(\"omits seconds\", () => {\r\n expect(fmtDateTime(new Date(2026, 2, 5, 14, 30, 59))).toBe(\r\n \"05/03/2026 14:30\"\r\n );\r\n });\r\n\r\n it(\"renders midnight as 00:00, not as absent\", () => {\r\n expect(fmtDateTime(new Date(2026, 2, 5, 0, 0))).toBe(\"05/03/2026 00:00\");\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+ var _formikErrors = require("../utils/formikErrors");
5
+ var _useDebouncedCallback = _interopRequireDefault(require("../hooks/useDebouncedCallback"));
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ /**
8
+ * @jest-environment jsdom
9
+ */
10
+
11
+ /*
12
+ * L'EN-TETE `@jest-environment jsdom` CI-DESSUS EST NECESSAIRE, PAS DECORATIF.
13
+ *
14
+ * Les autres tests de composants de ce dossier n'en portent pas : ils ne
15
+ * tournent que par `react-scripts test`, qui impose jsdom par configuration.
16
+ * Lance par `npx jest`, l'environnement retombe sur `node` et TOUT rendu React
17
+ * echoue sur `ReferenceError: document is not defined` - ce qui est arrive a ce
18
+ * fichier, et le message de Jest accuse alors le test plutot que le runner.
19
+ *
20
+ * Le bloc rend ce fichier independant du runner : il passe par les deux voies.
21
+ * Les tests de `flattenFormikErrors` sont purs et n'en ont pas besoin, mais un
22
+ * environnement par fichier est le grain de Jest, et separer les deux moities
23
+ * en deux fichiers pour cette seule raison couterait plus que cette note.
24
+ */
25
+
26
+ /**
27
+ * Two capabilities promoted out of `refonte-frontend` (Area 5 — gap leakage).
28
+ *
29
+ * Both were module-local, both are pure platform concerns, and both had a
30
+ * failure mode that is INVISIBLE at the call site — which is the argument for
31
+ * owning them here and the reason each gets a test rather than a docstring.
32
+ */
33
+
34
+ describe("flattenFormikErrors (G-38)", () => {
35
+ test("flat errors pass through", () => {
36
+ expect((0, _formikErrors.flattenFormikErrors)({
37
+ nom: "Requis",
38
+ ifu: "Format invalide"
39
+ })).toEqual([{
40
+ name: "nom",
41
+ message: "Requis"
42
+ }, {
43
+ name: "ifu",
44
+ message: "Format invalide"
45
+ }]);
46
+ });
47
+
48
+ /**
49
+ * THE PATH IS THE WHOLE POINT. `FormErrorSummary.onItemClick` hands this
50
+ * string to `focusFieldByName`, which resolves it as `[name="…"]`. A
51
+ * separator dropped here produces a banner that lists the right message and
52
+ * whose jump button does nothing.
53
+ */
54
+ test("nested objects accumulate a dotted Formik path", () => {
55
+ expect((0, _formikErrors.flattenFormikErrors)({
56
+ importateur: {
57
+ positionSh: "Requis"
58
+ }
59
+ })).toEqual([{
60
+ name: "importateur.positionSh",
61
+ message: "Requis"
62
+ }]);
63
+ });
64
+
65
+ /**
66
+ * Yup.array() keys its errors by index, and Formik writes the field name as
67
+ * `beneficiaires.0.nom` — dot, not bracket. `beneficiaires[0].nom` would read
68
+ * more naturally and match no node in the DOM.
69
+ */
70
+ test("array errors are indexed with a dot, matching Formik's own field names", () => {
71
+ expect((0, _formikErrors.flattenFormikErrors)({
72
+ beneficiaires: [{
73
+ nom: "Requis"
74
+ }, {
75
+ ifu: "Trop court"
76
+ }]
77
+ })).toEqual([{
78
+ name: "beneficiaires.0.nom",
79
+ message: "Requis"
80
+ }, {
81
+ name: "beneficiaires.1.ifu",
82
+ message: "Trop court"
83
+ }]);
84
+ });
85
+ test("sparse arrays skip their holes instead of emitting empty items", () => {
86
+ const errors = {
87
+ lignes: [undefined, {
88
+ qte: "Requis"
89
+ }]
90
+ };
91
+ expect((0, _formikErrors.flattenFormikErrors)(errors)).toEqual([{
92
+ name: "lignes.1.qte",
93
+ message: "Requis"
94
+ }]);
95
+ });
96
+
97
+ /**
98
+ * A clickable summary line with no text lists no reason and still steals a
99
+ * click, so an empty leaf yields nothing at all.
100
+ */
101
+ test("empty and non-string leaves yield nothing", () => {
102
+ expect((0, _formikErrors.flattenFormikErrors)({
103
+ a: "",
104
+ b: null,
105
+ c: false,
106
+ d: 0
107
+ })).toEqual([]);
108
+ });
109
+ test("nullish and primitive input yield an empty list, never a throw", () => {
110
+ expect((0, _formikErrors.flattenFormikErrors)(undefined)).toEqual([]);
111
+ expect((0, _formikErrors.flattenFormikErrors)(null)).toEqual([]);
112
+ expect((0, _formikErrors.flattenFormikErrors)("Requis")).toEqual([]);
113
+ });
114
+ });
115
+ describe("useDebouncedCallback (G-39)", () => {
116
+ beforeEach(() => {
117
+ jest.useFakeTimers();
118
+ });
119
+ afterEach(() => {
120
+ jest.useRealTimers();
121
+ });
122
+ test("fires once, after the delay, with the last value", () => {
123
+ const action = jest.fn();
124
+ const {
125
+ result
126
+ } = (0, _react.renderHook)(() => (0, _useDebouncedCallback.default)(action, 400));
127
+ (0, _react.act)(() => {
128
+ result.current("a");
129
+ result.current("ab");
130
+ result.current("abc");
131
+ });
132
+ expect(action).not.toHaveBeenCalled();
133
+ (0, _react.act)(() => {
134
+ jest.advanceTimersByTime(400);
135
+ });
136
+ expect(action).toHaveBeenCalledTimes(1);
137
+ expect(action).toHaveBeenCalledWith("abc");
138
+ });
139
+
140
+ /**
141
+ * DEFECT 2 OF THE `lodash.debounce` ERA, asserted. Calling `debounce(...)` in
142
+ * a render body produced a new instance per render, each with its own timer:
143
+ * every keystroke fired, late. A stable identity is what makes that
144
+ * impossible, so it is pinned here rather than left to the docstring.
145
+ */
146
+ test("the returned trigger keeps a stable identity across re-renders", () => {
147
+ const {
148
+ result,
149
+ rerender
150
+ } = (0, _react.renderHook)(({
151
+ action
152
+ }) => (0, _useDebouncedCallback.default)(action, 400), {
153
+ initialProps: {
154
+ action: jest.fn()
155
+ }
156
+ });
157
+ const first = result.current;
158
+ rerender({
159
+ action: jest.fn()
160
+ });
161
+ expect(result.current).toBe(first);
162
+ });
163
+
164
+ /** The trigger is stable, so it must still reach the LATEST action. */
165
+ test("invokes the latest action, not a stale closure", () => {
166
+ const stale = jest.fn();
167
+ const fresh = jest.fn();
168
+ const {
169
+ result,
170
+ rerender
171
+ } = (0, _react.renderHook)(({
172
+ action
173
+ }) => (0, _useDebouncedCallback.default)(action, 400), {
174
+ initialProps: {
175
+ action: stale
176
+ }
177
+ });
178
+ rerender({
179
+ action: fresh
180
+ });
181
+ (0, _react.act)(() => {
182
+ result.current("x");
183
+ jest.advanceTimersByTime(400);
184
+ });
185
+ expect(stale).not.toHaveBeenCalled();
186
+ expect(fresh).toHaveBeenCalledWith("x");
187
+ });
188
+ test("the default delay is 500 ms — the value promoted from the module", () => {
189
+ const action = jest.fn();
190
+ const {
191
+ result
192
+ } = (0, _react.renderHook)(() => (0, _useDebouncedCallback.default)(action));
193
+ (0, _react.act)(() => {
194
+ result.current("x");
195
+ jest.advanceTimersByTime(499);
196
+ });
197
+ expect(action).not.toHaveBeenCalled();
198
+ (0, _react.act)(() => {
199
+ jest.advanceTimersByTime(1);
200
+ });
201
+ expect(action).toHaveBeenCalledWith("x");
202
+ });
203
+
204
+ /** Defect 3: a pending timer firing after unmount set state on a dead tree. */
205
+ test("a pending call is cancelled on unmount", () => {
206
+ const action = jest.fn();
207
+ const {
208
+ result,
209
+ unmount
210
+ } = (0, _react.renderHook)(() => (0, _useDebouncedCallback.default)(action, 400));
211
+ (0, _react.act)(() => {
212
+ result.current("x");
213
+ });
214
+ unmount();
215
+ (0, _react.act)(() => {
216
+ jest.advanceTimersByTime(1000);
217
+ });
218
+ expect(action).not.toHaveBeenCalled();
219
+ });
220
+ });
221
+ //# sourceMappingURL=gap-leakage-refonte.test.js.map