@portnet/ui 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -1 +1 @@
1
- {"version":3,"file":"spacing.js","names":["spacing","s1","s2","s3","s4","s5","s6","s7","s8","s9","s10","xs","sm","md","lg","xl","xxl","spacingBase"],"sources":["../../../../src/lib/v2/tokens/spacing.ts"],"sourcesContent":["/**\r\n * Spacing tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.3 — base grid 8 px.\r\n *\r\n * R-S.1 — Every padding / margin / gap is a multiple of 4 (preferably 8).\r\n * R-S.2 — Use flex/grid `gap`; never sibling-margin.\r\n *\r\n * Two equivalent APIs are exposed:\r\n * - Numeric scale (s1..s10) — historical; keep stable.\r\n * - Semantic alias (xs..xxl) — preferred for new code.\r\n * Both resolve to the same pixel values.\r\n */\r\nexport const spacing = {\r\n s1: 4, // gap d'icônes inline\r\n s2: 8, // gap boutons d'un groupe\r\n s3: 12, // padding cards compact\r\n s4: 16, // gap formulaire (default)\r\n s5: 20, // padding card body\r\n s6: 24, // gap entre sections\r\n s7: 32, // padding content principal\r\n s8: 40, // gap blocs majeurs\r\n s9: 48, // empty states\r\n s10: 64, // marges hero / landing\r\n\r\n /* Semantic aliases — preferred for new code */\r\n xs: 4,\r\n sm: 8,\r\n md: 16,\r\n lg: 24,\r\n xl: 32,\r\n xxl: 48,\r\n};\r\n\r\n/**\r\n * MUI's `theme.spacing(n)` factor. Keep MUI's 4-px unit so existing\r\n * `theme.spacing(2)` == 8 px. Never use fractional units\r\n * (`theme.spacing(2.5)` = 10 px) — R-S.1 violation.\r\n */\r\nexport const spacingBase = 4;\r\n\r\nexport default spacing;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,OAAO,GAAG;EACrBC,EAAE,EAAG,CAAC;EAAG;EACTC,EAAE,EAAG,CAAC;EAAG;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,GAAG,EAAE,EAAE;EAAE;;EAET;EACAC,EAAE,EAAI,CAAC;EACPC,EAAE,EAAI,CAAC;EACPC,EAAE,EAAG,EAAE;EACPC,EAAE,EAAG,EAAE;EACPC,EAAE,EAAG,EAAE;EACPC,GAAG,EAAE;AACP,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,WAAW,GAAG,CAAC;AAE5B,eAAejB,OAAO","ignoreList":[]}
1
+ {"version":3,"file":"spacing.js","names":["spacing","s1","s2","s3","s4","s5","s6","s7","s8","s9","s10","xs","sm","md","lg","xl","xxl","spacingBase"],"sources":["../../../../src/lib/v2/tokens/spacing.ts"],"sourcesContent":["/**\r\n * Spacing tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.3 — base grid 8 px.\r\n *\r\n * R-S.1 — Every padding / margin / gap is a multiple of 4 (preferably 8).\r\n * R-S.2 — Use flex/grid `gap`; never sibling-margin.\r\n *\r\n * Two equivalent APIs are exposed:\r\n * - Numeric scale (s1..s10) — historical; keep stable.\r\n * - Semantic alias (xs..xxl) — preferred for new code.\r\n * Both resolve to the same pixel values.\r\n */\r\nexport const spacing = {\r\n s1: 4, // gap d'icônes inline\r\n s2: 8, // gap boutons d'un groupe\r\n s3: 12, // padding cards compact\r\n s4: 16, // gap formulaire (default)\r\n s5: 20, // padding card body\r\n s6: 24, // gap entre sections\r\n s7: 32, // padding content principal\r\n s8: 40, // gap blocs majeurs\r\n s9: 48, // empty states\r\n s10: 64, // marges hero / landing\r\n\r\n /* Semantic aliases — preferred for new code */\r\n xs: 4,\r\n sm: 8,\r\n md: 16,\r\n lg: 24,\r\n xl: 32,\r\n xxl: 48,\r\n};\r\n\r\n/**\r\n * MUI's `theme.spacing(n)` factor. Keep MUI's 4-px unit so existing\r\n * `theme.spacing(2)` == 8 px. Never use fractional units\r\n * (`theme.spacing(2.5)` = 10 px) — R-S.1 violation.\r\n */\r\nexport const spacingBase = 4;\r\n\r\nexport default spacing;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,OAAO,GAAG;EACrBC,EAAE,EAAG,CAAC;EAAG;EACTC,EAAE,EAAG,CAAC;EAAG;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,EAAE,EAAG,EAAE;EAAE;EACTC,GAAG,EAAE,EAAE;EAAE;;EAET;EACAC,EAAE,EAAI,CAAC;EACPC,EAAE,EAAI,CAAC;EACPC,EAAE,EAAG,EAAE;EACPC,EAAE,EAAG,EAAE;EACPC,EAAE,EAAG,EAAE;EACPC,GAAG,EAAE;AACP,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAG,CAAC;AAE5B,eAAejB,OAAO","ignoreList":[]}
@@ -18,7 +18,7 @@
18
18
  * fourth tier would dilute the meaning.
19
19
  */
20
20
 
21
- export var state = {
21
+ export const state = {
22
22
  /**
23
23
  * Pointer-hover wash. Subtle enough to coexist with the existing
24
24
  * surface colour without blocking text contrast. R-1.4.3.
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","names":["state","hoverOverlay","pressedOverlay","selectedOverlay"],"sources":["../../../../src/lib/v2/tokens/state.ts"],"sourcesContent":["/**\r\n * State tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.5 (states).\r\n *\r\n * Semantic interaction overlays. Replaces ad-hoc `color-mix(in srgb,\r\n * currentColor 8%, transparent)` / 10% / 14% / 18% / 30% percentages\r\n * scattered across component sx blocks with three named tiers.\r\n *\r\n * The overlays use `currentColor` so they ADAPT to whichever\r\n * foreground is in scope:\r\n * - On a light card with --fg ink, the overlay is a soft ink wash.\r\n * - On the BulkActionBar (bg = --fg, fg = --fg-inverse), the\r\n * overlay is a soft white wash. Same token, opposite intent.\r\n *\r\n * Three tiers — DO NOT add a fourth without DS council sign-off.\r\n * The tiers map onto a perceptual scale (light tap, firm press,\r\n * persistent selection) that hosts have learned to recognise; a\r\n * fourth tier would dilute the meaning.\r\n */\r\n\r\nexport const state = {\r\n /**\r\n * Pointer-hover wash. Subtle enough to coexist with the existing\r\n * surface colour without blocking text contrast. R-1.4.3.\r\n */\r\n hoverOverlay: \"color-mix(in srgb, currentColor 8%, transparent)\",\r\n\r\n /**\r\n * Active / pressed wash. Stronger than hover but still translucent\r\n * so the underlying state (selected, focused) remains visible.\r\n */\r\n pressedOverlay: \"color-mix(in srgb, currentColor 14%, transparent)\",\r\n\r\n /**\r\n * Persistent \"selected\" state — list rows, chip selected, etc.\r\n * Slightly weaker than pressed so a SELECTED row that is also\r\n * hovered (overlay = hover + selected ≈ 20%) doesn't become a\r\n * solid block.\r\n */\r\n selectedOverlay: \"color-mix(in srgb, currentColor 12%, transparent)\",\r\n};\r\n\r\nexport default state;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,IAAMA,KAAK,GAAG;EACnB;AACF;AACA;AACA;EACEC,YAAY,EAAK,kDAAkD;EAEnE;AACF;AACA;AACA;EACEC,cAAc,EAAG,mDAAmD;EAEpE;AACF;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE;AACnB,CAAC;AAED,eAAeH,KAAK","ignoreList":[]}
1
+ {"version":3,"file":"state.js","names":["state","hoverOverlay","pressedOverlay","selectedOverlay"],"sources":["../../../../src/lib/v2/tokens/state.ts"],"sourcesContent":["/**\r\n * State tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.5 (states).\r\n *\r\n * Semantic interaction overlays. Replaces ad-hoc `color-mix(in srgb,\r\n * currentColor 8%, transparent)` / 10% / 14% / 18% / 30% percentages\r\n * scattered across component sx blocks with three named tiers.\r\n *\r\n * The overlays use `currentColor` so they ADAPT to whichever\r\n * foreground is in scope:\r\n * - On a light card with --fg ink, the overlay is a soft ink wash.\r\n * - On the BulkActionBar (bg = --fg, fg = --fg-inverse), the\r\n * overlay is a soft white wash. Same token, opposite intent.\r\n *\r\n * Three tiers — DO NOT add a fourth without DS council sign-off.\r\n * The tiers map onto a perceptual scale (light tap, firm press,\r\n * persistent selection) that hosts have learned to recognise; a\r\n * fourth tier would dilute the meaning.\r\n */\r\n\r\nexport const state = {\r\n /**\r\n * Pointer-hover wash. Subtle enough to coexist with the existing\r\n * surface colour without blocking text contrast. R-1.4.3.\r\n */\r\n hoverOverlay: \"color-mix(in srgb, currentColor 8%, transparent)\",\r\n\r\n /**\r\n * Active / pressed wash. Stronger than hover but still translucent\r\n * so the underlying state (selected, focused) remains visible.\r\n */\r\n pressedOverlay: \"color-mix(in srgb, currentColor 14%, transparent)\",\r\n\r\n /**\r\n * Persistent \"selected\" state — list rows, chip selected, etc.\r\n * Slightly weaker than pressed so a SELECTED row that is also\r\n * hovered (overlay = hover + selected ≈ 20%) doesn't become a\r\n * solid block.\r\n */\r\n selectedOverlay: \"color-mix(in srgb, currentColor 12%, transparent)\",\r\n};\r\n\r\nexport default state;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,KAAK,GAAG;EACnB;AACF;AACA;AACA;EACEC,YAAY,EAAK,kDAAkD;EAEnE;AACF;AACA;AACA;EACEC,cAAc,EAAG,mDAAmD;EAEpE;AACF;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE;AACnB,CAAC;AAED,eAAeH,KAAK","ignoreList":[]}
@@ -1,9 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
1
  /**
8
2
  * Status palette mapping — Portnet UI v2
9
3
  *
@@ -17,8 +11,8 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
17
11
  * Charter §02.1 / R-2.2.
18
12
  */
19
13
  import { status } from "./colors";
20
- export var STATUS_KEYS = Object.freeze(["new", "sent", "pending", "approved", "rejected", "neutral"]);
21
- var _STATUS_KEYS_SET = new Set(STATUS_KEYS);
14
+ export const STATUS_KEYS = Object.freeze(["new", "sent", "pending", "approved", "rejected", "neutral"]);
15
+ const _STATUS_KEYS_SET = new Set(STATUS_KEYS);
22
16
 
23
17
  /**
24
18
  * Resolve a status descriptor.
@@ -32,35 +26,37 @@ export function statusToken(key) {
32
26
  if (!_STATUS_KEYS_SET.has(key)) {
33
27
  if (process.env["NODE_ENV"] !== "production" && key !== undefined && key !== null) {
34
28
  // eslint-disable-next-line no-console
35
- console.warn("[@portnet/ui] statusToken: unknown key \"".concat(key, "\". ") + "Falling back to \"neutral\". Allowed: ".concat(STATUS_KEYS.join(", "), "."));
29
+ console.warn(`[@portnet/ui] statusToken: unknown key "${key}". ` + `Falling back to "neutral". Allowed: ${STATUS_KEYS.join(", ")}.`);
36
30
  }
37
- return _objectSpread(_objectSpread({}, status.neutral), {}, {
31
+ return {
32
+ ...status.neutral,
38
33
  cls: "status-neutral",
39
34
  key: "neutral"
40
- });
35
+ };
41
36
  }
42
- return _objectSpread(_objectSpread({}, status[key]), {}, {
43
- cls: "status-".concat(key),
44
- key: key
45
- });
37
+ return {
38
+ ...status[key],
39
+ cls: `status-${key}`,
40
+ key
41
+ };
46
42
  }
47
43
 
48
44
  /**
49
45
  * @deprecated FR labels belong in consumer i18n bundles, not tokens.
50
46
  * Will be removed in v0.3. Kept for backward compatibility only.
51
47
  */
52
- export var STATUS_LABELS_FR = Object.freeze({
53
- "new": "Nouveau",
48
+ export const STATUS_LABELS_FR = Object.freeze({
49
+ new: "Nouveau",
54
50
  sent: "Soumis",
55
51
  pending: "En attente",
56
52
  approved: "Approuvé",
57
53
  rejected: "Rejeté",
58
54
  neutral: "Neutre"
59
55
  });
60
- var statusPalette = {
61
- STATUS_KEYS: STATUS_KEYS,
62
- statusToken: statusToken,
63
- STATUS_LABELS_FR: STATUS_LABELS_FR
56
+ const statusPalette = {
57
+ STATUS_KEYS,
58
+ statusToken,
59
+ STATUS_LABELS_FR
64
60
  };
65
61
  export default statusPalette;
66
62
  //# sourceMappingURL=statusPalette.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statusPalette.js","names":["status","STATUS_KEYS","Object","freeze","_STATUS_KEYS_SET","Set","statusToken","key","has","process","env","undefined","console","warn","concat","join","_objectSpread","neutral","cls","STATUS_LABELS_FR","sent","pending","approved","rejected","statusPalette"],"sources":["../../../../src/lib/v2/tokens/statusPalette.ts"],"sourcesContent":["/**\r\n * Status palette mapping — Portnet UI v2\r\n *\r\n * Six and only six canonical workflow statuses (R-2.2).\r\n * Any new business status must map onto one of these.\r\n * New chips with custom colours require a charter amendment.\r\n *\r\n * UX writing (labels) is the consumer's responsibility (i18n) — do not\r\n * couple labels to design tokens.\r\n *\r\n * Charter §02.1 / R-2.2.\r\n */\r\nimport { status } from \"./colors\";\r\n\r\nexport const STATUS_KEYS = Object.freeze([\r\n \"new\", \"sent\", \"pending\", \"approved\", \"rejected\", \"neutral\",\r\n]);\r\n\r\nconst _STATUS_KEYS_SET = new Set(STATUS_KEYS);\r\n\r\n/**\r\n * Resolve a status descriptor.\r\n *\r\n * statusToken(\"approved\") → { key, soft, fg, cls: \"status-approved\" }\r\n *\r\n * Unknown keys silently resolve to `neutral`. In dev mode a console\r\n * warning is emitted to surface bad data without breaking UI.\r\n */\r\nexport function statusToken(key: keyof typeof status) {\r\n if (!_STATUS_KEYS_SET.has(key)) {\r\n if (\r\n process.env[\"NODE_ENV\"] !== \"production\" &&\r\n key !== undefined &&\r\n key !== null\r\n ) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[@portnet/ui] statusToken: unknown key \"${key}\". ` +\r\n `Falling back to \"neutral\". Allowed: ${STATUS_KEYS.join(\", \")}.`\r\n );\r\n }\r\n return { ...status.neutral, cls: \"status-neutral\", key: \"neutral\" };\r\n }\r\n return { ...status[key], cls: `status-${key}`, key };\r\n}\r\n\r\n/**\r\n * @deprecated FR labels belong in consumer i18n bundles, not tokens.\r\n * Will be removed in v0.3. Kept for backward compatibility only.\r\n */\r\nexport const STATUS_LABELS_FR = Object.freeze({\r\n new: \"Nouveau\",\r\n sent: \"Soumis\",\r\n pending: \"En attente\",\r\n approved: \"Approuvé\",\r\n rejected: \"Rejeté\",\r\n neutral: \"Neutre\",\r\n});\r\n\r\nconst statusPalette = { STATUS_KEYS, statusToken, STATUS_LABELS_FR };\r\nexport default statusPalette;\r\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,MAAM,QAAQ,UAAU;AAEjC,OAAO,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC,CACvC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAC5D,CAAC;AAEF,IAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAACJ,WAAW,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,WAAWA,CAACC,GAAwB,EAAE;EACpD,IAAI,CAACH,gBAAgB,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;IAC9B,IACEE,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,IACxCH,GAAG,KAAKI,SAAS,IACjBJ,GAAG,KAAK,IAAI,EACZ;MACA;MACAK,OAAO,CAACC,IAAI,CACV,4CAAAC,MAAA,CAA2CP,GAAG,qDAAAO,MAAA,CACPb,WAAW,CAACc,IAAI,CAAC,IAAI,CAAC,MAC/D,CAAC;IACH;IACA,OAAAC,aAAA,CAAAA,aAAA,KAAYhB,MAAM,CAACiB,OAAO;MAAEC,GAAG,EAAE,gBAAgB;MAAEX,GAAG,EAAE;IAAS;EACnE;EACA,OAAAS,aAAA,CAAAA,aAAA,KAAYhB,MAAM,CAACO,GAAG,CAAC;IAAEW,GAAG,YAAAJ,MAAA,CAAYP,GAAG,CAAE;IAAEA,GAAG,EAAHA;EAAG;AACpD;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAMY,gBAAgB,GAAGjB,MAAM,CAACC,MAAM,CAAC;EAC5C,OAAU,SAAS;EACnBiB,IAAI,EAAM,QAAQ;EAClBC,OAAO,EAAG,YAAY;EACtBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,QAAQ;EAClBN,OAAO,EAAG;AACZ,CAAC,CAAC;AAEF,IAAMO,aAAa,GAAG;EAAEvB,WAAW,EAAXA,WAAW;EAAEK,WAAW,EAAXA,WAAW;EAAEa,gBAAgB,EAAhBA;AAAiB,CAAC;AACpE,eAAeK,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"statusPalette.js","names":["status","STATUS_KEYS","Object","freeze","_STATUS_KEYS_SET","Set","statusToken","key","has","process","env","undefined","console","warn","join","neutral","cls","STATUS_LABELS_FR","new","sent","pending","approved","rejected","statusPalette"],"sources":["../../../../src/lib/v2/tokens/statusPalette.ts"],"sourcesContent":["/**\r\n * Status palette mapping — Portnet UI v2\r\n *\r\n * Six and only six canonical workflow statuses (R-2.2).\r\n * Any new business status must map onto one of these.\r\n * New chips with custom colours require a charter amendment.\r\n *\r\n * UX writing (labels) is the consumer's responsibility (i18n) — do not\r\n * couple labels to design tokens.\r\n *\r\n * Charter §02.1 / R-2.2.\r\n */\r\nimport { status } from \"./colors\";\r\n\r\nexport const STATUS_KEYS = Object.freeze([\r\n \"new\", \"sent\", \"pending\", \"approved\", \"rejected\", \"neutral\",\r\n]);\r\n\r\nconst _STATUS_KEYS_SET = new Set(STATUS_KEYS);\r\n\r\n/**\r\n * Resolve a status descriptor.\r\n *\r\n * statusToken(\"approved\") → { key, soft, fg, cls: \"status-approved\" }\r\n *\r\n * Unknown keys silently resolve to `neutral`. In dev mode a console\r\n * warning is emitted to surface bad data without breaking UI.\r\n */\r\nexport function statusToken(key: keyof typeof status) {\r\n if (!_STATUS_KEYS_SET.has(key)) {\r\n if (\r\n process.env[\"NODE_ENV\"] !== \"production\" &&\r\n key !== undefined &&\r\n key !== null\r\n ) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[@portnet/ui] statusToken: unknown key \"${key}\". ` +\r\n `Falling back to \"neutral\". Allowed: ${STATUS_KEYS.join(\", \")}.`\r\n );\r\n }\r\n return { ...status.neutral, cls: \"status-neutral\", key: \"neutral\" };\r\n }\r\n return { ...status[key], cls: `status-${key}`, key };\r\n}\r\n\r\n/**\r\n * @deprecated FR labels belong in consumer i18n bundles, not tokens.\r\n * Will be removed in v0.3. Kept for backward compatibility only.\r\n */\r\nexport const STATUS_LABELS_FR = Object.freeze({\r\n new: \"Nouveau\",\r\n sent: \"Soumis\",\r\n pending: \"En attente\",\r\n approved: \"Approuvé\",\r\n rejected: \"Rejeté\",\r\n neutral: \"Neutre\",\r\n});\r\n\r\nconst statusPalette = { STATUS_KEYS, statusToken, STATUS_LABELS_FR };\r\nexport default statusPalette;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,MAAM,QAAQ,UAAU;AAEjC,OAAO,MAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC,CACvC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAC5D,CAAC;AAEF,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAACJ,WAAW,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,WAAWA,CAACC,GAAwB,EAAE;EACpD,IAAI,CAACH,gBAAgB,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;IAC9B,IACEE,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,IACxCH,GAAG,KAAKI,SAAS,IACjBJ,GAAG,KAAK,IAAI,EACZ;MACA;MACAK,OAAO,CAACC,IAAI,CACV,2CAA2CN,GAAG,KAAK,GACnD,uCAAuCN,WAAW,CAACa,IAAI,CAAC,IAAI,CAAC,GAC/D,CAAC;IACH;IACA,OAAO;MAAE,GAAGd,MAAM,CAACe,OAAO;MAAEC,GAAG,EAAE,gBAAgB;MAAET,GAAG,EAAE;IAAU,CAAC;EACrE;EACA,OAAO;IAAE,GAAGP,MAAM,CAACO,GAAG,CAAC;IAAES,GAAG,EAAE,UAAUT,GAAG,EAAE;IAAEA;EAAI,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMU,gBAAgB,GAAGf,MAAM,CAACC,MAAM,CAAC;EAC5Ce,GAAG,EAAO,SAAS;EACnBC,IAAI,EAAM,QAAQ;EAClBC,OAAO,EAAG,YAAY;EACtBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,QAAQ;EAClBP,OAAO,EAAG;AACZ,CAAC,CAAC;AAEF,MAAMQ,aAAa,GAAG;EAAEtB,WAAW;EAAEK,WAAW;EAAEW;AAAiB,CAAC;AACpE,eAAeM,aAAa","ignoreList":[]}
@@ -114,7 +114,12 @@
114
114
  "lg": { "value": 840 },
115
115
  "xl": { "value": 1000 }
116
116
  },
117
- "drawer": { "value": 560 }
117
+ "drawer": { "value": 560 },
118
+ "detail": {
119
+ "mainMin": { "value": 560, "_ref": "§07 R-L.7 — detail content column (flex-basis)" },
120
+ "aside": { "value": 300, "_ref": "§Detail / Vertical Progress — right-hand rail" },
121
+ "asideMin": { "value": 260, "_use": "rail wraps under the content below this width (WCAG 1.4.10)" }
122
+ }
118
123
  }
119
124
  },
120
125
 
@@ -13,11 +13,11 @@
13
13
  * append the unit. For raw CSS strings, use `${n}px` at the call site.
14
14
  */
15
15
 
16
- export var fontFamily = {
16
+ export const fontFamily = {
17
17
  sans: 'Inter, system-ui, -apple-system, "Segoe UI", sans-serif',
18
18
  mono: '"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace'
19
19
  };
20
- export var fontSize = {
20
+ export const fontSize = {
21
21
  display: 26,
22
22
  // H1 — page title
23
23
  h2: 20,
@@ -36,13 +36,13 @@ export var fontSize = {
36
36
  /* Standard CSS weights only — non-variable fallbacks (system-ui /
37
37
  * Segoe UI) cannot render arbitrary weights such as 650; they would
38
38
  * silently round to 700, breaking visual rhythm across browsers. */
39
- export var fontWeight = {
39
+ export const fontWeight = {
40
40
  regular: 400,
41
41
  medium: 500,
42
42
  semibold: 600,
43
43
  bold: 700
44
44
  };
45
- export var lineHeight = {
45
+ export const lineHeight = {
46
46
  tight: 1.25,
47
47
  snug: 1.4,
48
48
  normal: 1.5,
@@ -78,7 +78,7 @@ export var lineHeight = {
78
78
  *
79
79
  * Charter §02.2 amendment. Requires a MINOR bump + changelog entry.
80
80
  */
81
- export var letterSpacing = {
81
+ export const letterSpacing = {
82
82
  /** Display / mono — tightens large text and monospaced references. */
83
83
  tight: "-0.01em",
84
84
  /** Default — explicit so a consumer can reset tracking via a token. */
@@ -91,7 +91,7 @@ export var letterSpacing = {
91
91
  * Pre-baked typography variants for direct use in `<Typography variant="…">`
92
92
  * or as a reference for native components.
93
93
  */
94
- export var variants = {
94
+ export const variants = {
95
95
  display: {
96
96
  fontSize: fontSize.display,
97
97
  fontWeight: fontWeight.bold,
@@ -137,13 +137,13 @@ export var variants = {
137
137
  letterSpacing: letterSpacing.tight
138
138
  }
139
139
  };
140
- var typography = {
141
- fontFamily: fontFamily,
142
- fontSize: fontSize,
143
- fontWeight: fontWeight,
144
- lineHeight: lineHeight,
145
- letterSpacing: letterSpacing,
146
- variants: variants
140
+ const typography = {
141
+ fontFamily,
142
+ fontSize,
143
+ fontWeight,
144
+ lineHeight,
145
+ letterSpacing,
146
+ variants
147
147
  };
148
148
  export default typography;
149
149
  //# sourceMappingURL=typography.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography.js","names":["fontFamily","sans","mono","fontSize","display","h2","h3","h4","body","sm","xs","fontWeight","regular","medium","semibold","bold","lineHeight","tight","snug","normal","loose","letterSpacing","wide","variants","fontVariantNumeric","typography"],"sources":["../../../../src/lib/v2/tokens/typography.ts"],"sourcesContent":["/**\r\n * Typography tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.2.\r\n *\r\n * Stack: Inter (UI) + JetBrains Mono (codes, IDs, montants).\r\n * Production: auto-host via woff2 (R-9.1). Dev: fall back to Google Fonts.\r\n *\r\n * R-T.1 — Font-size minimum 12 px (WCAG 1.4.4).\r\n * R-T.2 — Line-height ≥ 1.5 on body text.\r\n * R-T.3 — Tabular numerals on numeric columns.\r\n *\r\n * Pixel values are stored as integers; the theme layer + cssVariables\r\n * append the unit. For raw CSS strings, use `${n}px` at the call site.\r\n */\r\n\r\nexport const fontFamily = {\r\n sans: 'Inter, system-ui, -apple-system, \"Segoe UI\", sans-serif',\r\n mono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\r\n};\r\n\r\nexport const fontSize = {\r\n display: 26, // H1 — page title\r\n h2: 20, // section header\r\n h3: 16, // card / form group\r\n h4: 14, // sub-section\r\n body: 14, // default\r\n sm: 13, // compact / tables\r\n xs: 12, // labels, hints (MIN — R-T.1)\r\n};\r\n\r\n/* Standard CSS weights only — non-variable fallbacks (system-ui /\r\n * Segoe UI) cannot render arbitrary weights such as 650; they would\r\n * silently round to 700, breaking visual rhythm across browsers. */\r\nexport const fontWeight = {\r\n regular: 400,\r\n medium: 500,\r\n semibold: 600,\r\n bold: 700,\r\n};\r\n\r\nexport const lineHeight = {\r\n tight: 1.25,\r\n snug: 1.4,\r\n normal: 1.5, // R-T.2 minimum on body\r\n loose: 1.6,\r\n};\r\n\r\n/**\r\n * Letter-spacing scale — added by the ms-dfd-fe Area 7 audit (A7-02).\r\n *\r\n * WHY THIS IS A CODIFICATION, NOT AN INVENTION.\r\n *\r\n * Both values were ALREADY platform vocabulary before this scale existed; they\r\n * simply had no CSS-variable route, so every consumer hardcoded them:\r\n *\r\n * -0.01em was hardcoded TWICE in this very file (`variants.display`,\r\n * `variants.mono`) — both now reference `letterSpacing.tight`, so\r\n * adding the scale REMOVED two magic values from the token layer.\r\n *\r\n * 0.04em was hardcoded inside the LIBRARY's own components (KV's eyebrow\r\n * label, ConfirmDialog's \"Conséquences\" heading) and appeared 5+\r\n * times across ms-dfd-fe and ms-ti-fe — always for the same purpose:\r\n * positive tracking on uppercase micro-labels, which is a\r\n * typographic necessity at 11-12px, not decoration.\r\n *\r\n * The audit found six token names referenced fleet-wide that cssVariables never\r\n * emitted (`--ls-tight`, `--ls-wide`, `--border-subtle`, `--r-xs`, `--icon-sm`,\r\n * `--icon-xl`). For each, the `var(--x, literal)` fallback was the only thing\r\n * that had ever rendered — hard-coded magic values wearing a token's name\r\n * (R-2.3 / R-AI.1). Only the two letter-spacing names had a genuine platform\r\n * basis, so only they are promoted here. The others are local inventions and\r\n * are fixed at their call sites instead.\r\n *\r\n * Charter §02.2 amendment. Requires a MINOR bump + changelog entry.\r\n */\r\nexport const letterSpacing = {\r\n /** Display / mono — tightens large text and monospaced references. */\r\n tight: \"-0.01em\",\r\n /** Default — explicit so a consumer can reset tracking via a token. */\r\n normal: \"0\",\r\n /** Uppercase micro-labels (KV eyebrows, section captions, stat labels). */\r\n wide: \"0.04em\",\r\n};\r\n\r\n/**\r\n * Pre-baked typography variants for direct use in `<Typography variant=\"…\">`\r\n * or as a reference for native components.\r\n */\r\nexport const variants = {\r\n display: {\r\n fontSize: fontSize.display,\r\n fontWeight: fontWeight.bold,\r\n lineHeight: lineHeight.tight,\r\n letterSpacing: letterSpacing.tight,\r\n },\r\n h2: {\r\n fontSize: fontSize.h2,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.tight,\r\n },\r\n h3: {\r\n fontSize: fontSize.h3,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.snug,\r\n },\r\n h4: {\r\n fontSize: fontSize.h4,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.snug,\r\n },\r\n body: {\r\n fontSize: fontSize.body,\r\n fontWeight: fontWeight.regular,\r\n lineHeight: lineHeight.normal,\r\n },\r\n sm: {\r\n fontSize: fontSize.sm,\r\n fontWeight: fontWeight.regular,\r\n lineHeight: lineHeight.normal,\r\n },\r\n xs: {\r\n fontSize: fontSize.xs,\r\n fontWeight: fontWeight.medium,\r\n lineHeight: lineHeight.normal,\r\n },\r\n mono: {\r\n fontFamily: fontFamily.mono,\r\n fontSize: fontSize.sm,\r\n fontWeight: fontWeight.medium,\r\n fontVariantNumeric: \"tabular-nums\", // R-T.3\r\n letterSpacing: letterSpacing.tight,\r\n },\r\n};\r\n\r\nconst typography = { fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, variants };\r\nexport default typography;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"typography.js","names":["fontFamily","sans","mono","fontSize","display","h2","h3","h4","body","sm","xs","fontWeight","regular","medium","semibold","bold","lineHeight","tight","snug","normal","loose","letterSpacing","wide","variants","fontVariantNumeric","typography"],"sources":["../../../../src/lib/v2/tokens/typography.ts"],"sourcesContent":["/**\r\n * Typography tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.2.\r\n *\r\n * Stack: Inter (UI) + JetBrains Mono (codes, IDs, montants).\r\n * Production: auto-host via woff2 (R-9.1). Dev: fall back to Google Fonts.\r\n *\r\n * R-T.1 — Font-size minimum 12 px (WCAG 1.4.4).\r\n * R-T.2 — Line-height ≥ 1.5 on body text.\r\n * R-T.3 — Tabular numerals on numeric columns.\r\n *\r\n * Pixel values are stored as integers; the theme layer + cssVariables\r\n * append the unit. For raw CSS strings, use `${n}px` at the call site.\r\n */\r\n\r\nexport const fontFamily = {\r\n sans: 'Inter, system-ui, -apple-system, \"Segoe UI\", sans-serif',\r\n mono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\r\n};\r\n\r\nexport const fontSize = {\r\n display: 26, // H1 — page title\r\n h2: 20, // section header\r\n h3: 16, // card / form group\r\n h4: 14, // sub-section\r\n body: 14, // default\r\n sm: 13, // compact / tables\r\n xs: 12, // labels, hints (MIN — R-T.1)\r\n};\r\n\r\n/* Standard CSS weights only — non-variable fallbacks (system-ui /\r\n * Segoe UI) cannot render arbitrary weights such as 650; they would\r\n * silently round to 700, breaking visual rhythm across browsers. */\r\nexport const fontWeight = {\r\n regular: 400,\r\n medium: 500,\r\n semibold: 600,\r\n bold: 700,\r\n};\r\n\r\nexport const lineHeight = {\r\n tight: 1.25,\r\n snug: 1.4,\r\n normal: 1.5, // R-T.2 minimum on body\r\n loose: 1.6,\r\n};\r\n\r\n/**\r\n * Letter-spacing scale — added by the ms-dfd-fe Area 7 audit (A7-02).\r\n *\r\n * WHY THIS IS A CODIFICATION, NOT AN INVENTION.\r\n *\r\n * Both values were ALREADY platform vocabulary before this scale existed; they\r\n * simply had no CSS-variable route, so every consumer hardcoded them:\r\n *\r\n * -0.01em was hardcoded TWICE in this very file (`variants.display`,\r\n * `variants.mono`) — both now reference `letterSpacing.tight`, so\r\n * adding the scale REMOVED two magic values from the token layer.\r\n *\r\n * 0.04em was hardcoded inside the LIBRARY's own components (KV's eyebrow\r\n * label, ConfirmDialog's \"Conséquences\" heading) and appeared 5+\r\n * times across ms-dfd-fe and ms-ti-fe — always for the same purpose:\r\n * positive tracking on uppercase micro-labels, which is a\r\n * typographic necessity at 11-12px, not decoration.\r\n *\r\n * The audit found six token names referenced fleet-wide that cssVariables never\r\n * emitted (`--ls-tight`, `--ls-wide`, `--border-subtle`, `--r-xs`, `--icon-sm`,\r\n * `--icon-xl`). For each, the `var(--x, literal)` fallback was the only thing\r\n * that had ever rendered — hard-coded magic values wearing a token's name\r\n * (R-2.3 / R-AI.1). Only the two letter-spacing names had a genuine platform\r\n * basis, so only they are promoted here. The others are local inventions and\r\n * are fixed at their call sites instead.\r\n *\r\n * Charter §02.2 amendment. Requires a MINOR bump + changelog entry.\r\n */\r\nexport const letterSpacing = {\r\n /** Display / mono — tightens large text and monospaced references. */\r\n tight: \"-0.01em\",\r\n /** Default — explicit so a consumer can reset tracking via a token. */\r\n normal: \"0\",\r\n /** Uppercase micro-labels (KV eyebrows, section captions, stat labels). */\r\n wide: \"0.04em\",\r\n};\r\n\r\n/**\r\n * Pre-baked typography variants for direct use in `<Typography variant=\"…\">`\r\n * or as a reference for native components.\r\n */\r\nexport const variants = {\r\n display: {\r\n fontSize: fontSize.display,\r\n fontWeight: fontWeight.bold,\r\n lineHeight: lineHeight.tight,\r\n letterSpacing: letterSpacing.tight,\r\n },\r\n h2: {\r\n fontSize: fontSize.h2,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.tight,\r\n },\r\n h3: {\r\n fontSize: fontSize.h3,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.snug,\r\n },\r\n h4: {\r\n fontSize: fontSize.h4,\r\n fontWeight: fontWeight.semibold,\r\n lineHeight: lineHeight.snug,\r\n },\r\n body: {\r\n fontSize: fontSize.body,\r\n fontWeight: fontWeight.regular,\r\n lineHeight: lineHeight.normal,\r\n },\r\n sm: {\r\n fontSize: fontSize.sm,\r\n fontWeight: fontWeight.regular,\r\n lineHeight: lineHeight.normal,\r\n },\r\n xs: {\r\n fontSize: fontSize.xs,\r\n fontWeight: fontWeight.medium,\r\n lineHeight: lineHeight.normal,\r\n },\r\n mono: {\r\n fontFamily: fontFamily.mono,\r\n fontSize: fontSize.sm,\r\n fontWeight: fontWeight.medium,\r\n fontVariantNumeric: \"tabular-nums\", // R-T.3\r\n letterSpacing: letterSpacing.tight,\r\n },\r\n};\r\n\r\nconst typography = { fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, variants };\r\nexport default typography;\r\n"],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@
14
14
  * when the network-error banner is on screen, otherwise users
15
15
  * lose their keyboard escape hatch the moment connectivity drops.
16
16
  */
17
- export var zIndex = {
17
+ export const zIndex = {
18
18
  base: 0,
19
19
  sticky: 15,
20
20
  // sticky headers (action bar)
@@ -1 +1 @@
1
- {"version":3,"file":"zIndex.js","names":["zIndex","base","sticky","topbar","bulk","overflow","popover","drawer","modal","snackbar","toast","tooltip","netError","skipLink"],"sources":["../../../../src/lib/v2/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Z-index scale — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.6.\r\n *\r\n * Charter forbids inline z-index numerics. Use named tokens only.\r\n *\r\n * MUI compatibility:\r\n * Material UI's default zIndex scale runs 1100..1500. We override\r\n * it via `createPortnetTheme` so MUI components (Tooltip, Popper,\r\n * Snackbar, Modal) align with this scale and stay below `netError`.\r\n *\r\n * Layering invariant:\r\n * skipLink > netError. The skip-link must remain visible even\r\n * when the network-error banner is on screen, otherwise users\r\n * lose their keyboard escape hatch the moment connectivity drops.\r\n */\r\nexport const zIndex = {\r\n base: 0,\r\n sticky: 15, // sticky headers (action bar)\r\n topbar: 20, // app topbar\r\n bulk: 30, // bulk action bar\r\n overflow: 50, // overflow menus inside flow\r\n popover: 60, // popovers (above overflow)\r\n drawer: 80, // drawer + backdrop\r\n modal: 100, // modal + backdrop\r\n snackbar: 150, // snackbars\r\n toast: 200, // toasts, command palette\r\n tooltip: 250, // tooltips (above toasts/modals)\r\n netError: 2000, // network error banner (top of all)\r\n skipLink: 2010, // skip-link must remain visible above netError\r\n};\r\n\r\nexport default zIndex;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMA,MAAM,GAAG;EACpBC,IAAI,EAAM,CAAC;EACXC,MAAM,EAAI,EAAE;EAAK;EACjBC,MAAM,EAAI,EAAE;EAAK;EACjBC,IAAI,EAAM,EAAE;EAAK;EACjBC,QAAQ,EAAE,EAAE;EAAK;EACjBC,OAAO,EAAG,EAAE;EAAK;EACjBC,MAAM,EAAI,EAAE;EAAK;EACjBC,KAAK,EAAK,GAAG;EAAI;EACjBC,QAAQ,EAAE,GAAG;EAAI;EACjBC,KAAK,EAAK,GAAG;EAAI;EACjBC,OAAO,EAAG,GAAG;EAAI;EACjBC,QAAQ,EAAE,IAAI;EAAG;EACjBC,QAAQ,EAAE,IAAI,CAAG;AACnB,CAAC;AAED,eAAeb,MAAM","ignoreList":[]}
1
+ {"version":3,"file":"zIndex.js","names":["zIndex","base","sticky","topbar","bulk","overflow","popover","drawer","modal","snackbar","toast","tooltip","netError","skipLink"],"sources":["../../../../src/lib/v2/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Z-index scale — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.6.\r\n *\r\n * Charter forbids inline z-index numerics. Use named tokens only.\r\n *\r\n * MUI compatibility:\r\n * Material UI's default zIndex scale runs 1100..1500. We override\r\n * it via `createPortnetTheme` so MUI components (Tooltip, Popper,\r\n * Snackbar, Modal) align with this scale and stay below `netError`.\r\n *\r\n * Layering invariant:\r\n * skipLink > netError. The skip-link must remain visible even\r\n * when the network-error banner is on screen, otherwise users\r\n * lose their keyboard escape hatch the moment connectivity drops.\r\n */\r\nexport const zIndex = {\r\n base: 0,\r\n sticky: 15, // sticky headers (action bar)\r\n topbar: 20, // app topbar\r\n bulk: 30, // bulk action bar\r\n overflow: 50, // overflow menus inside flow\r\n popover: 60, // popovers (above overflow)\r\n drawer: 80, // drawer + backdrop\r\n modal: 100, // modal + backdrop\r\n snackbar: 150, // snackbars\r\n toast: 200, // toasts, command palette\r\n tooltip: 250, // tooltips (above toasts/modals)\r\n netError: 2000, // network error banner (top of all)\r\n skipLink: 2010, // skip-link must remain visible above netError\r\n};\r\n\r\nexport default zIndex;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,MAAM,GAAG;EACpBC,IAAI,EAAM,CAAC;EACXC,MAAM,EAAI,EAAE;EAAK;EACjBC,MAAM,EAAI,EAAE;EAAK;EACjBC,IAAI,EAAM,EAAE;EAAK;EACjBC,QAAQ,EAAE,EAAE;EAAK;EACjBC,OAAO,EAAG,EAAE;EAAK;EACjBC,MAAM,EAAI,EAAE;EAAK;EACjBC,KAAK,EAAK,GAAG;EAAI;EACjBC,QAAQ,EAAE,GAAG;EAAI;EACjBC,KAAK,EAAK,GAAG;EAAI;EACjBC,OAAO,EAAG,GAAG;EAAI;EACjBC,QAAQ,EAAE,IAAI;EAAG;EACjBC,QAAQ,EAAE,IAAI,CAAG;AACnB,CAAC;AAED,eAAeb,MAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"datagrid.js","names":[],"sources":["../../../../src/lib/v2/types/datagrid.ts"],"sourcesContent":["/**\r\n * @portnet/ui v2 — DataGrid generic contract.\r\n *\r\n * Derived verbatim from the DataGrid / SortableHeader / _dataGridShared\r\n * PropTypes + implementation (the executable contract). MUI-independent:\r\n * component-level composition with MUI prop types happens in the component\r\n * itself (Part 2), not here.\r\n */\r\n\r\nimport type { Dispatch, ReactNode, SetStateAction } from \"react\";\r\nimport type { Alignment, Breakpoint, Density, RowId, SortDescriptor } from \"./common\";\r\n\r\n/** A DataGrid column definition over row type `T`. */\r\nexport interface DataGridColumn<T> {\r\n /** Unique column key; also the default value accessor (`row[key]`). */\r\n key: string;\r\n /** Header content. */\r\n header: ReactNode;\r\n align?: Alignment | undefined;\r\n /** Right-align + tabular numerals. */\r\n numeric?: boolean | undefined;\r\n /** Monospaced cell font + tabular numerals. */\r\n mono?: boolean | undefined;\r\n /** Default true when `onSortChange` is set; `false` opts the column out of sorting. */\r\n sortable?: boolean | undefined;\r\n /** Default true when the grid is `resizable`; `false` opts the column out. */\r\n resizable?: boolean | undefined;\r\n /** Default true when the grid is `reorderable`; `false` opts the column out. */\r\n reorderable?: boolean | undefined;\r\n /** Reveal the cell only on row hover / focus-within / coarse pointer. */\r\n hoverOnly?: boolean | undefined;\r\n /** Column may be toggled by a column-visibility UI. */\r\n toggleable?: boolean | undefined;\r\n /** Preferred width (px number or CSS length). */\r\n width?: number | string | undefined;\r\n /** Hard max width (px number or CSS length). */\r\n maxWidth?: number | string | undefined;\r\n /** Wrap long content instead of truncating with an ellipsis. */\r\n wrap?: boolean | undefined;\r\n /** Custom cell renderer; overrides `getValue` / `row[key]`. */\r\n render?: ((row: T) => ReactNode) | undefined;\r\n /** Custom value accessor used when `render` is absent (default `row[key]`). */\r\n getValue?: ((row: T) => unknown) | undefined;\r\n}\r\n\r\n/** Pagination model for DataGrid (`page` is 1-based). */\r\nexport interface DataGridPagination {\r\n page: number;\r\n pageSize: number;\r\n total: number;\r\n onPageChange: (page: number) => void;\r\n onPageSizeChange?: ((pageSize: number) => void) | undefined;\r\n pageSizes?: number[] | undefined;\r\n}\r\n\r\n/** i18n labels for the DataGrid pagination bar. */\r\nexport interface DataGridPaginationLabels {\r\n loading?: ReactNode | undefined;\r\n rowsPerPage?: ReactNode | undefined;\r\n firstPage?: string | undefined;\r\n previousPage?: string | undefined;\r\n nextPage?: string | undefined;\r\n lastPage?: string | undefined;\r\n /** Accessible name for the pagination navigation landmark (WCAG landmark / 2.4.1). */\r\n navLabel?: string | undefined;\r\n /** Range summary; `fmt` is the resolved locale number formatter. */\r\n rangeOf?: ((from: number, to: number, total: number, fmt: (n: number) => string) => ReactNode) | undefined;\r\n}\r\n\r\n/** i18n labels for DataGrid. */\r\nexport interface DataGridLabels {\r\n tableAria?: string | undefined;\r\n selectAll?: string | undefined;\r\n selectRow?: ((id: RowId) => string) | undefined;\r\n actionsHeader?: string | undefined;\r\n pagination?: DataGridPaginationLabels | undefined;\r\n}\r\n\r\n/** Context object passed to `renderMobileCard`. */\r\nexport interface DataGridMobileCardContext {\r\n isActive: boolean;\r\n isSelected: boolean;\r\n}\r\n\r\n/** Options accepted by the exported `applySort` helper. */\r\nexport interface ApplySortOptions {\r\n /** BCP-47 locale for collation (default \"fr-FR\"). */\r\n locale?: string | undefined;\r\n}\r\n\r\n/** Props for the DataGrid pattern over row type `T`. */\r\nexport interface DataGridProps<T> {\r\n rows?: T[] | undefined;\r\n columns: DataGridColumn<T>[];\r\n loading?: boolean | undefined;\r\n /** Any truthy value switches the grid to its error branch (renders `errorState`). */\r\n error?: unknown;\r\n sort?: SortDescriptor[] | undefined;\r\n /**\r\n * Sort-state setter. DataGrid forwards this straight to SortableHeader,\r\n * which invokes it with an UPDATER function — so it must behave like a\r\n * `useState` dispatcher (accepts a value OR a `(prev) => next` updater).\r\n */\r\n onSortChange?: Dispatch<SetStateAction<SortDescriptor[]>> | undefined;\r\n selection?: Set<RowId> | RowId[] | undefined;\r\n /** Receives the next selection as a `Set`. Presence enables the checkbox column. */\r\n onSelectionChange?: ((selection: Set<RowId>) => void) | undefined;\r\n pagination?: DataGridPagination | undefined;\r\n emptyState?: ReactNode | undefined;\r\n filteredEmptyState?: ReactNode | undefined;\r\n errorState?: ReactNode | undefined;\r\n /** Row identity (default `(row) => row.id`). */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n onRowClick?: ((row: T) => void) | undefined;\r\n rowFlashId?: RowId | undefined;\r\n activeRowId?: RowId | undefined;\r\n /** Renders the per-row actions overlay. Presence enables the actions column. */\r\n rowActions?: ((row: T) => ReactNode) | undefined;\r\n hiddenColumns?: Set<string> | string[] | undefined;\r\n /** Marks an empty result as filter-induced (renders `filteredEmptyState`). */\r\n filtered?: boolean | undefined;\r\n density?: Density | undefined;\r\n /** Contextual accessible table name (WCAG 1.3.1 / Charter R-DG). */\r\n ariaLabel?: string | undefined;\r\n /** BCP-47 locale for number formatting (default \"fr-FR\"). */\r\n locale?: string | undefined;\r\n labels?: DataGridLabels | undefined;\r\n maxBodyHeight?: number | string | undefined;\r\n resizable?: boolean | undefined;\r\n columnWidths?: Record<string, number> | undefined;\r\n onColumnWidthsChange?: ((widths: Record<string, number>) => void) | undefined;\r\n reorderable?: boolean | undefined;\r\n columnOrder?: string[] | undefined;\r\n onColumnOrderChange?: ((order: string[]) => void) | undefined;\r\n /** Opt-in mobile card renderer; below `mobileBreakpoint` the grid renders cards. */\r\n renderMobileCard?: ((row: T, ctx: DataGridMobileCardContext) => ReactNode) | undefined;\r\n mobileBreakpoint?: Breakpoint | undefined;\r\n}\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"datagrid.js","names":[],"sources":["../../../../src/lib/v2/types/datagrid.ts"],"sourcesContent":["/**\r\n * @portnet/ui v2 — DataGrid generic contract.\r\n *\r\n * Derived verbatim from the DataGrid / SortableHeader / _dataGridShared\r\n * PropTypes + implementation (the executable contract). MUI-independent:\r\n * component-level composition with MUI prop types happens in the component\r\n * itself (Part 2), not here.\r\n */\r\n\r\nimport type { Dispatch, ReactNode, SetStateAction } from \"react\";\r\nimport type { Alignment, Breakpoint, Density, RowId, SortDescriptor } from \"./common\";\r\n\r\n/** A DataGrid column definition over row type `T`. */\r\nexport interface DataGridColumn<T> {\r\n /** Unique column key; also the default value accessor (`row[key]`). */\r\n key: string;\r\n /** Header content. */\r\n header: ReactNode;\r\n align?: Alignment | undefined;\r\n /** Right-align + tabular numerals. */\r\n numeric?: boolean | undefined;\r\n /** Monospaced cell font + tabular numerals. */\r\n mono?: boolean | undefined;\r\n /** Default true when `onSortChange` is set; `false` opts the column out of sorting. */\r\n sortable?: boolean | undefined;\r\n /** Default true when the grid is `resizable`; `false` opts the column out. */\r\n resizable?: boolean | undefined;\r\n /** Default true when the grid is `reorderable`; `false` opts the column out. */\r\n reorderable?: boolean | undefined;\r\n /** Reveal the cell only on row hover / focus-within / coarse pointer. */\r\n hoverOnly?: boolean | undefined;\r\n /** Column may be toggled by a column-visibility UI. */\r\n toggleable?: boolean | undefined;\r\n /** Preferred width (px number or CSS length). */\r\n width?: number | string | undefined;\r\n /** Hard max width (px number or CSS length). */\r\n maxWidth?: number | string | undefined;\r\n /** Wrap long content instead of truncating with an ellipsis. */\r\n wrap?: boolean | undefined;\r\n /** Custom cell renderer; overrides `getValue` / `row[key]`. */\r\n render?: ((row: T) => ReactNode) | undefined;\r\n /** Custom value accessor used when `render` is absent (default `row[key]`). */\r\n getValue?: ((row: T) => unknown) | undefined;\r\n}\r\n\r\n/** Pagination model for DataGrid (`page` is 1-based). */\r\nexport interface DataGridPagination {\r\n page: number;\r\n pageSize: number;\r\n total: number;\r\n onPageChange: (page: number) => void;\r\n onPageSizeChange?: ((pageSize: number) => void) | undefined;\r\n pageSizes?: number[] | undefined;\r\n}\r\n\r\n/** i18n labels for the DataGrid pagination bar. */\r\nexport interface DataGridPaginationLabels {\r\n loading?: ReactNode | undefined;\r\n rowsPerPage?: ReactNode | undefined;\r\n firstPage?: string | undefined;\r\n previousPage?: string | undefined;\r\n nextPage?: string | undefined;\r\n lastPage?: string | undefined;\r\n /** Accessible name for the pagination navigation landmark (WCAG landmark / 2.4.1). */\r\n navLabel?: string | undefined;\r\n /** Range summary; `fmt` is the resolved locale number formatter. */\r\n rangeOf?: ((from: number, to: number, total: number, fmt: (n: number) => string) => ReactNode) | undefined;\r\n}\r\n\r\n/** i18n labels for DataGrid. */\r\nexport interface DataGridLabels {\r\n tableAria?: string | undefined;\r\n selectAll?: string | undefined;\r\n selectRow?: ((id: RowId) => string) | undefined;\r\n actionsHeader?: string | undefined;\r\n pagination?: DataGridPaginationLabels | undefined;\r\n}\r\n\r\n/** Context object passed to `renderMobileCard`. */\r\nexport interface DataGridMobileCardContext {\r\n isActive: boolean;\r\n isSelected: boolean;\r\n}\r\n\r\n/** Options accepted by the exported `applySort` helper. */\r\nexport interface ApplySortOptions {\r\n /** BCP-47 locale for collation (default \"fr-FR\"). */\r\n locale?: string | undefined;\r\n}\r\n\r\n/** Props for the DataGrid pattern over row type `T`. */\r\nexport interface DataGridProps<T> {\r\n /**\r\n * `readonly T[]` rather than `T[]`: DataGrid only ever reads rows (map,\r\n * length, every/some, find via getRowId) — it never mutates the array —\r\n * so a frozen/immutable rows array (`Object.freeze`'d sample data, a\r\n * `readonly` state field) should be assignable without a cast at the call\r\n * site. Purely additive: an existing mutable `T[]` is still assignable to\r\n * `readonly T[]`, so no caller changes.\r\n */\r\n rows?: readonly T[] | undefined;\r\n columns: DataGridColumn<T>[];\r\n loading?: boolean | undefined;\r\n /** Any truthy value switches the grid to its error branch (renders `errorState`). */\r\n error?: unknown;\r\n sort?: SortDescriptor[] | undefined;\r\n /**\r\n * Sort-state setter. DataGrid forwards this straight to SortableHeader,\r\n * which invokes it with an UPDATER function — so it must behave like a\r\n * `useState` dispatcher (accepts a value OR a `(prev) => next` updater).\r\n */\r\n onSortChange?: Dispatch<SetStateAction<SortDescriptor[]>> | undefined;\r\n selection?: Set<RowId> | RowId[] | undefined;\r\n /** Receives the next selection as a `Set`. Presence enables the checkbox column. */\r\n onSelectionChange?: ((selection: Set<RowId>) => void) | undefined;\r\n pagination?: DataGridPagination | undefined;\r\n emptyState?: ReactNode | undefined;\r\n filteredEmptyState?: ReactNode | undefined;\r\n errorState?: ReactNode | undefined;\r\n /** Row identity (default `(row) => row.id`). */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n onRowClick?: ((row: T) => void) | undefined;\r\n rowFlashId?: RowId | undefined;\r\n activeRowId?: RowId | undefined;\r\n /** Renders the per-row actions overlay. Presence enables the actions column. */\r\n rowActions?: ((row: T) => ReactNode) | undefined;\r\n hiddenColumns?: Set<string> | string[] | undefined;\r\n /** Marks an empty result as filter-induced (renders `filteredEmptyState`). */\r\n filtered?: boolean | undefined;\r\n density?: Density | undefined;\r\n /** Contextual accessible table name (WCAG 1.3.1 / Charter R-DG). */\r\n ariaLabel?: string | undefined;\r\n /** BCP-47 locale for number formatting (default \"fr-FR\"). */\r\n locale?: string | undefined;\r\n labels?: DataGridLabels | undefined;\r\n maxBodyHeight?: number | string | undefined;\r\n resizable?: boolean | undefined;\r\n columnWidths?: Record<string, number> | undefined;\r\n onColumnWidthsChange?: ((widths: Record<string, number>) => void) | undefined;\r\n reorderable?: boolean | undefined;\r\n columnOrder?: string[] | undefined;\r\n onColumnOrderChange?: ((order: string[]) => void) | undefined;\r\n /** Opt-in mobile card renderer; below `mobileBreakpoint` the grid renders cards. */\r\n renderMobileCard?: ((row: T, ctx: DataGridMobileCardContext) => ReactNode) | undefined;\r\n mobileBreakpoint?: Breakpoint | undefined;\r\n}\r\n"],"mappings":"","ignoreList":[]}
@@ -1,7 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
3
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
5
1
  /**
6
2
  * apiError — narrow an `unknown` rejection into something displayable.
7
3
  *
@@ -49,34 +45,23 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
49
45
  * §09.3 (no raw technical detail — never "Erreur 422 Unprocessable Entity").
50
46
  * Override per call site when a screen can say something more useful.
51
47
  */
52
- export var DEFAULT_API_ERROR_MESSAGE = "Une erreur est survenue. Veuillez réessayer.";
48
+ export const DEFAULT_API_ERROR_MESSAGE = "Une erreur est survenue. Veuillez réessayer.";
53
49
 
54
50
  /**
55
51
  * Walk `path` through nested non-null objects, returning the value at the end,
56
52
  * or `undefined` if any hop is missing. Assertion-free.
57
53
  */
58
- var readPath = function readPath(source, path) {
59
- var current = source;
60
- var _iterator = _createForOfIteratorHelper(path),
61
- _step;
62
- try {
63
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
64
- var key = _step.value;
65
- if (_typeof(current) !== "object" || current === null || !(key in current)) {
66
- return undefined;
67
- }
68
- current = Reflect.get(current, key);
54
+ const readPath = (source, path) => {
55
+ let current = source;
56
+ for (const key of path) {
57
+ if (typeof current !== "object" || current === null || !(key in current)) {
58
+ return undefined;
69
59
  }
70
- } catch (err) {
71
- _iterator.e(err);
72
- } finally {
73
- _iterator.f();
60
+ current = Reflect.get(current, key);
74
61
  }
75
62
  return current;
76
63
  };
77
- var asNonEmptyString = function asNonEmptyString(value) {
78
- return typeof value === "string" && value.length > 0 ? value : undefined;
79
- };
64
+ const asNonEmptyString = value => typeof value === "string" && value.length > 0 ? value : undefined;
80
65
 
81
66
  /**
82
67
  * Transport-layer phrasings that must NEVER reach a user — capability gap G-07.
@@ -117,7 +102,7 @@ var asNonEmptyString = function asNonEmptyString(value) {
117
102
  * phrasing that surfaces through SSR and test doubles.
118
103
  * ──────────────────────────────────────────────────────────────────────
119
104
  */
120
- var TRANSPORT_MESSAGE_PATTERNS = [/^request failed with status code \d+$/i, /^network error$/i, /^timeout of \d+ms exceeded$/i, /^timeout exceeded$/i, /^request aborted$/i, /^canceled$/i, /^unsupported protocol/i, /^maximum content size exceeded$/i, /^socket hang up$/i,
105
+ const TRANSPORT_MESSAGE_PATTERNS = [/^request failed with status code \d+$/i, /^network error$/i, /^timeout of \d+ms exceeded$/i, /^timeout exceeded$/i, /^request aborted$/i, /^canceled$/i, /^unsupported protocol/i, /^maximum content size exceeded$/i, /^socket hang up$/i,
121
106
  /* ── errno codes and axios error codes ── CASE-SENSITIVE, DELIBERATELY ─────
122
107
  *
123
108
  * These two are the only patterns here NOT marked `/i`, and the asymmetry is
@@ -142,11 +127,7 @@ var TRANSPORT_MESSAGE_PATTERNS = [/^request failed with status code \d+$/i, /^ne
142
127
  ];
143
128
 
144
129
  /** Is this string an axios/transport artefact rather than something for a user? */
145
- var isTransportMessage = function isTransportMessage(value) {
146
- return TRANSPORT_MESSAGE_PATTERNS.some(function (pattern) {
147
- return pattern.test(value.trim());
148
- });
149
- };
130
+ const isTransportMessage = value => TRANSPORT_MESSAGE_PATTERNS.some(pattern => pattern.test(value.trim()));
150
131
 
151
132
  /**
152
133
  * `error.message`, but only when it is fit to show a user.
@@ -154,8 +135,8 @@ var isTransportMessage = function isTransportMessage(value) {
154
135
  * Suppresses transport phrasings (G-07) so the caller's French fallback is
155
136
  * reached instead. Module-thrown `Error` messages pass through untouched.
156
137
  */
157
- var asUserFacingMessage = function asUserFacingMessage(value) {
158
- var text = asNonEmptyString(value);
138
+ const asUserFacingMessage = value => {
139
+ const text = asNonEmptyString(value);
159
140
  if (text === undefined) return undefined;
160
141
  return isTransportMessage(text) ? undefined : text;
161
142
  };
@@ -211,11 +192,9 @@ var asUserFacingMessage = function asUserFacingMessage(value) {
211
192
  * @param error The caught value. `unknown` by design.
212
193
  * @param fallback Message when nothing usable is found.
213
194
  */
214
- export function getApiErrorMessage(error) {
215
- var _ref, _ref2, _ref3, _asNonEmptyString;
216
- var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_API_ERROR_MESSAGE;
195
+ export function getApiErrorMessage(error, fallback = DEFAULT_API_ERROR_MESSAGE) {
217
196
  if (typeof error === "string" && error.length > 0) return error;
218
- return (_ref = (_ref2 = (_ref3 = (_asNonEmptyString = asNonEmptyString(readPath(error, ["response", "data", "body"]))) !== null && _asNonEmptyString !== void 0 ? _asNonEmptyString : asNonEmptyString(readPath(error, ["response", "data", "message"]))) !== null && _ref3 !== void 0 ? _ref3 : asNonEmptyString(readPath(error, ["response", "data", "error"]))) !== null && _ref2 !== void 0 ? _ref2 : asUserFacingMessage(readPath(error, ["message"]))) !== null && _ref !== void 0 ? _ref : fallback;
197
+ return asNonEmptyString(readPath(error, ["response", "data", "body"])) ?? asNonEmptyString(readPath(error, ["response", "data", "message"])) ?? asNonEmptyString(readPath(error, ["response", "data", "error"])) ?? asUserFacingMessage(readPath(error, ["message"])) ?? fallback;
219
198
  }
220
199
 
221
200
  /**
@@ -273,9 +252,9 @@ export function getApiErrorDetail(error) {
273
252
  * answer, and it keeps the return type honest — the signature promises a number.
274
253
  */
275
254
  export function getApiErrorStatus(error) {
276
- var bodyStatus = readPath(error, ["response", "data", "status"]);
255
+ const bodyStatus = readPath(error, ["response", "data", "status"]);
277
256
  if (typeof bodyStatus === "number") return bodyStatus;
278
- var status = readPath(error, ["response", "status"]);
257
+ const status = readPath(error, ["response", "status"]);
279
258
  return typeof status === "number" ? status : undefined;
280
259
  }
281
260
  //# sourceMappingURL=apiError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apiError.js","names":["DEFAULT_API_ERROR_MESSAGE","readPath","source","path","current","_iterator","_createForOfIteratorHelper","_step","s","n","done","key","value","_typeof","undefined","Reflect","get","err","e","f","asNonEmptyString","length","TRANSPORT_MESSAGE_PATTERNS","isTransportMessage","some","pattern","test","trim","asUserFacingMessage","text","getApiErrorMessage","error","_ref","_ref2","_ref3","_asNonEmptyString","fallback","arguments","getApiErrorDetail","getApiErrorStatus","bodyStatus","status"],"sources":["../../../../src/lib/v2/utils/apiError.ts"],"sourcesContent":["/**\r\n * apiError — narrow an `unknown` rejection into something displayable.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-04)\r\n *\r\n * The Platform TypeScript Guidelines mandate `useUnknownInCatchVariables`, so\r\n * `catch (e)` binds `unknown` in EVERY saga of EVERY consuming module. The same\r\n * guidelines forbid `any` and unsafe assertions. Between those two rules sits a\r\n * narrowing helper that the library did not provide — so each module wrote its\r\n * own, and the observed outcome was that they wrote it the forbidden way:\r\n *\r\n * (error as { response?: { data?: { message?: unknown } } }).response\r\n *\r\n * i.e. an unchecked assertion on an `unknown`, used to work around a flag the\r\n * platform imposes. Two modules audited (`procuration-portnet-fe`,\r\n * `procuration-fe`) had independently reached for exactly that construct.\r\n * A mandated strict-mode flag with no sanctioned escape hatch produces\r\n * unsanctioned ones.\r\n *\r\n * Implementation notes\r\n * --------------------\r\n * `readPath` walks nested objects using the `in` operator, which narrows without\r\n * an assertion, and `Reflect.get`, which returns the value as `unknown` rather\r\n * than widening anything to `any`. No assertion appears anywhere in this file.\r\n *\r\n * Deliberately DUCK-TYPED rather than built on `axios.isAxiosError`. Three\r\n * reasons: this library must not take a hard axios dependency for a string\r\n * helper; a plain object shaped like an axios error (a hand-rolled reject, a\r\n * test double, a non-axios transport) still resolves correctly; and the check\r\n * stays valid across axios majors.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * getApiErrorMessage(err) → backend message, or the default\r\n * getApiErrorMessage(err, \"Échec de l'envoi.\") → custom fallback\r\n * getApiErrorStatus(err) → 404 | undefined\r\n *\r\n * Envelope keys read, in order: `data.body`, `data.message`, `data.error`.\r\n * Three keys because three PORTNET back-ends chose differently; see the\r\n * resolution-order note on `getApiErrorMessage` before adding a fourth.\r\n */\r\n\r\n/**\r\n * Default user-facing fallback. French per Charter §09 (voice, vouvoiement) and\r\n * §09.3 (no raw technical detail — never \"Erreur 422 Unprocessable Entity\").\r\n * Override per call site when a screen can say something more useful.\r\n */\r\nexport const DEFAULT_API_ERROR_MESSAGE =\r\n \"Une erreur est survenue. Veuillez réessayer.\";\r\n\r\n/**\r\n * Walk `path` through nested non-null objects, returning the value at the end,\r\n * or `undefined` if any hop is missing. Assertion-free.\r\n */\r\nconst readPath = (source: unknown, path: readonly string[]): unknown => {\r\n let current: unknown = source;\r\n\r\n for (const key of path) {\r\n if (typeof current !== \"object\" || current === null || !(key in current)) {\r\n return undefined;\r\n }\r\n current = Reflect.get(current, key);\r\n }\r\n\r\n return current;\r\n};\r\n\r\nconst asNonEmptyString = (value: unknown): string | undefined =>\r\n typeof value === \"string\" && value.length > 0 ? value : undefined;\r\n\r\n/**\r\n * Transport-layer phrasings that must NEVER reach a user — capability gap G-07.\r\n *\r\n * ──────────────────────────────────────────────────────────────────────\r\n * THE DEFECT THIS FIXES\r\n *\r\n * `getApiErrorMessage` resolved `error.message` BEFORE its fallback. An\r\n * `AxiosError` always has `.message`, so on any server error carrying no\r\n * `response.data.message` — a 500 with an empty body, a gateway error, a\r\n * timeout — step 3 won and the user was shown:\r\n *\r\n * \"Request failed with status code 500\"\r\n *\r\n * English, technical, and precisely the shape Charter §09.3 names as forbidden\r\n * (\"✗ « Erreur 422 — Unprocessable Entity »\"). Worse, it made every consuming\r\n * module's carefully-written French fallback effectively UNREACHABLE — the\r\n * argument was accepted and then almost never used. Found during the\r\n * `procuration-portnet-fe` Area 10 audit, where 12 call sites pass a considered\r\n * fallback that could essentially never render.\r\n *\r\n * WHY A DENY-LIST AND NOT SIMPLY DROPPING STEP 3\r\n *\r\n * Step 3 also carries LEGITIMATE messages: any `throw new Error(\"Ce titre ne\r\n * peut pas être supprimé car il est en cours de validation.\")` in module code\r\n * arrives through exactly the same path. Removing the hop would trade a leak of\r\n * technical strings for the loss of real business messages across the whole\r\n * platform — a worse outcome. So the hop stays and only transport phrasings are\r\n * suppressed.\r\n *\r\n * The list is deliberately CONSERVATIVE: anything not recognised passes through,\r\n * on the assumption a human wrote it. A false negative shows one ugly string; a\r\n * false positive silently replaces a real business message with a generic\r\n * fallback, which is the more damaging error.\r\n *\r\n * Sourced from axios's own message construction (`settle`, `AxiosError` codes\r\n * ECONNABORTED / ETIMEDOUT / ERR_NETWORK / ERR_CANCELED) plus the Node socket\r\n * phrasing that surfaces through SSR and test doubles.\r\n * ──────────────────────────────────────────────────────────────────────\r\n */\r\nconst TRANSPORT_MESSAGE_PATTERNS: readonly RegExp[] = [\r\n /^request failed with status code \\d+$/i,\r\n /^network error$/i,\r\n /^timeout of \\d+ms exceeded$/i,\r\n /^timeout exceeded$/i,\r\n /^request aborted$/i,\r\n /^canceled$/i,\r\n /^unsupported protocol/i,\r\n /^maximum content size exceeded$/i,\r\n /^socket hang up$/i,\r\n /* ── errno codes and axios error codes ── CASE-SENSITIVE, DELIBERATELY ─────\r\n *\r\n * These two are the only patterns here NOT marked `/i`, and the asymmetry is\r\n * load-bearing. errno constants are uppercase by universal convention\r\n * (`ETIMEDOUT`, `ECONNREFUSED`, `ENOTFOUND`, `EPIPE`), so an uppercase-only\r\n * match identifies them precisely. Matching case-insensitively would make\r\n * `/^e[a-z]+$/i` swallow ordinary French words beginning with \"e\" — \"erreur\",\r\n * \"expiré\", \"échec\" — turning a real business message into a generic fallback,\r\n * which is the more damaging failure this list is tuned against.\r\n *\r\n * ⚠ An earlier version of the first pattern was `/^ec[a-z]+$/i`, which matched\r\n * `ECONNREFUSED` (it begins \"EC\") but silently MISSED `ETIMEDOUT` (\"ET\"),\r\n * despite the comment claiming otherwise. The unit test caught it. Do not\r\n * narrow the prefix again: the family is \"E + uppercase word\", not \"EC...\".\r\n *\r\n * Residual, accepted: an all-caps single word like \"ERREUR\" is treated as an\r\n * errno code. A module should not be throwing all-caps single-word messages at\r\n * users, and replacing one with a proper French fallback is an improvement. */\r\n /^E[A-Z]{3,}$/, // errno: ETIMEDOUT, ECONNREFUSED, ECONNRESET, ENOTFOUND, EPIPE\r\n /^ERR_[A-Z_]+$/, // axios: ERR_NETWORK, ERR_CANCELED, ERR_BAD_RESPONSE\r\n];\r\n\r\n/** Is this string an axios/transport artefact rather than something for a user? */\r\nconst isTransportMessage = (value: string): boolean =>\r\n TRANSPORT_MESSAGE_PATTERNS.some((pattern) => pattern.test(value.trim()));\r\n\r\n/**\r\n * `error.message`, but only when it is fit to show a user.\r\n *\r\n * Suppresses transport phrasings (G-07) so the caller's French fallback is\r\n * reached instead. Module-thrown `Error` messages pass through untouched.\r\n */\r\nconst asUserFacingMessage = (value: unknown): string | undefined => {\r\n const text = asNonEmptyString(value);\r\n if (text === undefined) return undefined;\r\n return isTransportMessage(text) ? undefined : text;\r\n};\r\n\r\n/**\r\n * Best available human-readable message for a rejection of unknown shape.\r\n *\r\n * Resolution order, first match wins:\r\n * 1. the rejection itself, when it is a non-empty string;\r\n * 2. `error.response.data.body` — the SAME envelope's third key;\r\n * 3. `error.response.data.message` — the backend's own message;\r\n * 4. `error.response.data.error` — the SAME envelope's alternate key;\r\n * 5. `error.message` — **only when it is not a transport artefact** (G-07);\r\n * 6. `fallback`.\r\n *\r\n * Step 4 closes capability gap G-08. Several PORTNET back-ends populate\r\n * `data.error` rather than `data.message` (addpe-fe declares BOTH on its\r\n * `ApiErrorBody` and read both at seven call sites), so a helper that stopped at\r\n * `data.message` skipped a real business message and fell through to the generic\r\n * fallback — which made it non-substitutable for the module-local extractors it\r\n * exists to replace. Strictly additive: what step 4 now catches previously\r\n * reached step 5 or 6.\r\n *\r\n * Step 2 closes G-08bis — the same defect, a third key. `caution-ui`'s axios\r\n * interceptor reads `error.response.data.body ?? error.response.data.message`,\r\n * so on that back-end a helper stopping at `message` again skipped a real\r\n * business message. Without step 2 the helper was non-substitutable there and\r\n * the module would have had to keep its own assertion-based extractor.\r\n *\r\n * WHY STEP 2 SITS BEFORE `message` AND NOT AFTER `error`.\r\n * `caution-ui` uses `??`, which is direct evidence that a single response can\r\n * carry both keys and that `body` is the one that back-end means. Appending\r\n * `body` at the end of the envelope hops would therefore have SILENTLY FLIPPED\r\n * which message its users see. Placing it first preserves that precedence, and\r\n * is provably a no-op for every module that does not populate `body`: `readPath`\r\n * returns `undefined` and resolution falls straight through to `message`.\r\n *\r\n * The one case this perturbs is a back-end that populates BOTH `body` and\r\n * `message` while intending `message` to win. No such module exists in the\r\n * portfolio — addpe-fe's `ApiErrorBody` declares `message` and `error`, not\r\n * `body` — and a module in that position should say so here rather than have the\r\n * order guessed for it.\r\n *\r\n * Step 5 is filtered: `\"Request failed with status code 500\"`, `\"Network Error\"`,\r\n * timeouts and errno codes are SUPPRESSED so the caller's own French copy is\r\n * used instead (Charter §09.3 — no raw technical detail). A message a module\r\n * threw deliberately still passes through. Use `getApiErrorDetail` when you want\r\n * the unfiltered string for a log.\r\n *\r\n * Never throws and never returns an empty string, so it is safe to render\r\n * directly into a toast or a `Banner`.\r\n *\r\n * @param error The caught value. `unknown` by design.\r\n * @param fallback Message when nothing usable is found.\r\n */\r\nexport function getApiErrorMessage(\r\n error: unknown,\r\n fallback: string = DEFAULT_API_ERROR_MESSAGE\r\n): string {\r\n if (typeof error === \"string\" && error.length > 0) return error;\r\n\r\n return (\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"body\"])) ??\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"message\"])) ??\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"error\"])) ??\r\n asUserFacingMessage(readPath(error, [\"message\"])) ??\r\n fallback\r\n );\r\n}\r\n\r\n/**\r\n * Unfiltered technical detail for LOGGING — never for display.\r\n *\r\n * `getApiErrorMessage` deliberately suppresses transport phrasings (G-07), which\r\n * is right for a toast and wrong for a console or an APM breadcrumb, where\r\n * `\"Request failed with status code 502\"` is exactly what an operator needs. This\r\n * is the escape hatch: it returns the raw `error.message` when there is one,\r\n * whatever its shape.\r\n *\r\n * Pair them:\r\n *\r\n * toast(getApiErrorMessage(err, \"Échec de l'envoi.\"), \"error\");\r\n * console.error(\"[submit]\", getApiErrorStatus(err), getApiErrorDetail(err));\r\n */\r\nexport function getApiErrorDetail(error: unknown): string | undefined {\r\n if (typeof error === \"string\" && error.length > 0) return error;\r\n return asNonEmptyString(readPath(error, [\"message\"]));\r\n}\r\n\r\n/**\r\n * HTTP status carried by a rejection, when there is one.\r\n *\r\n * Resolution order, first numeric match wins:\r\n * 1. `error.response.data.status` — a BODY-level status;\r\n * 2. `error.response.status` — the transport status.\r\n *\r\n * Returns `undefined` for a network drop, a timeout, or any non-HTTP rejection —\r\n * which is the signal callers use to distinguish \"the server answered with an\r\n * error\" from \"there was no answer at all\" (Charter R-4.3: a status-less failure\r\n * is a network banner, not a toast).\r\n *\r\n * Step 1 closes G-08ter, the status-side counterpart of the envelope-key gaps\r\n * G-08 / G-08bis. Several PORTNET back-ends put the meaningful status in the\r\n * BODY: caution-ui's axios interceptor reads\r\n * `error.response.data.status ?? error.response.status` and routes on the\r\n * result (404 -> not-found page, 500 -> server-error page, 401 -> re-login), and\r\n * its RESPONSE interceptor does the same for success handling. A helper reading\r\n * only the transport status was therefore not substitutable there — the module\r\n * had to keep a hand-written `HttpErrorLike` interface and assert onto it, which\r\n * is exactly the anti-pattern G-04 exists to end. Closing the message side\r\n * (G-08bis) without the status side would have left that assertion in place for\r\n * the sake of one field.\r\n *\r\n * Body-first ordering mirrors the module's own `??` and is provably a no-op for\r\n * every back-end that does not populate `data.status`: `readPath` returns\r\n * `undefined` and resolution falls through to the transport status.\r\n *\r\n * BOTH hops are numeric-guarded, which is a deliberate tightening over the\r\n * module code being replaced. That code did `String(status)` on whatever it\r\n * found, so a body carrying `status: \"ERROR\"` produced a `String` switch miss\r\n * and fell to the default toast branch; here a non-numeric `data.status` is\r\n * ignored and the real transport status is used instead. That is the more useful\r\n * answer, and it keeps the return type honest — the signature promises a number.\r\n */\r\nexport function getApiErrorStatus(error: unknown): number | undefined {\r\n const bodyStatus = readPath(error, [\"response\", \"data\", \"status\"]);\r\n if (typeof bodyStatus === \"number\") return bodyStatus;\r\n\r\n const status = readPath(error, [\"response\", \"status\"]);\r\n return typeof status === \"number\" ? status : undefined;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"apiError.js","names":["DEFAULT_API_ERROR_MESSAGE","readPath","source","path","current","key","undefined","Reflect","get","asNonEmptyString","value","length","TRANSPORT_MESSAGE_PATTERNS","isTransportMessage","some","pattern","test","trim","asUserFacingMessage","text","getApiErrorMessage","error","fallback","getApiErrorDetail","getApiErrorStatus","bodyStatus","status"],"sources":["../../../../src/lib/v2/utils/apiError.ts"],"sourcesContent":["/**\r\n * apiError — narrow an `unknown` rejection into something displayable.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-04)\r\n *\r\n * The Platform TypeScript Guidelines mandate `useUnknownInCatchVariables`, so\r\n * `catch (e)` binds `unknown` in EVERY saga of EVERY consuming module. The same\r\n * guidelines forbid `any` and unsafe assertions. Between those two rules sits a\r\n * narrowing helper that the library did not provide — so each module wrote its\r\n * own, and the observed outcome was that they wrote it the forbidden way:\r\n *\r\n * (error as { response?: { data?: { message?: unknown } } }).response\r\n *\r\n * i.e. an unchecked assertion on an `unknown`, used to work around a flag the\r\n * platform imposes. Two modules audited (`procuration-portnet-fe`,\r\n * `procuration-fe`) had independently reached for exactly that construct.\r\n * A mandated strict-mode flag with no sanctioned escape hatch produces\r\n * unsanctioned ones.\r\n *\r\n * Implementation notes\r\n * --------------------\r\n * `readPath` walks nested objects using the `in` operator, which narrows without\r\n * an assertion, and `Reflect.get`, which returns the value as `unknown` rather\r\n * than widening anything to `any`. No assertion appears anywhere in this file.\r\n *\r\n * Deliberately DUCK-TYPED rather than built on `axios.isAxiosError`. Three\r\n * reasons: this library must not take a hard axios dependency for a string\r\n * helper; a plain object shaped like an axios error (a hand-rolled reject, a\r\n * test double, a non-axios transport) still resolves correctly; and the check\r\n * stays valid across axios majors.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * getApiErrorMessage(err) → backend message, or the default\r\n * getApiErrorMessage(err, \"Échec de l'envoi.\") → custom fallback\r\n * getApiErrorStatus(err) → 404 | undefined\r\n *\r\n * Envelope keys read, in order: `data.body`, `data.message`, `data.error`.\r\n * Three keys because three PORTNET back-ends chose differently; see the\r\n * resolution-order note on `getApiErrorMessage` before adding a fourth.\r\n */\r\n\r\n/**\r\n * Default user-facing fallback. French per Charter §09 (voice, vouvoiement) and\r\n * §09.3 (no raw technical detail — never \"Erreur 422 Unprocessable Entity\").\r\n * Override per call site when a screen can say something more useful.\r\n */\r\nexport const DEFAULT_API_ERROR_MESSAGE =\r\n \"Une erreur est survenue. Veuillez réessayer.\";\r\n\r\n/**\r\n * Walk `path` through nested non-null objects, returning the value at the end,\r\n * or `undefined` if any hop is missing. Assertion-free.\r\n */\r\nconst readPath = (source: unknown, path: readonly string[]): unknown => {\r\n let current: unknown = source;\r\n\r\n for (const key of path) {\r\n if (typeof current !== \"object\" || current === null || !(key in current)) {\r\n return undefined;\r\n }\r\n current = Reflect.get(current, key);\r\n }\r\n\r\n return current;\r\n};\r\n\r\nconst asNonEmptyString = (value: unknown): string | undefined =>\r\n typeof value === \"string\" && value.length > 0 ? value : undefined;\r\n\r\n/**\r\n * Transport-layer phrasings that must NEVER reach a user — capability gap G-07.\r\n *\r\n * ──────────────────────────────────────────────────────────────────────\r\n * THE DEFECT THIS FIXES\r\n *\r\n * `getApiErrorMessage` resolved `error.message` BEFORE its fallback. An\r\n * `AxiosError` always has `.message`, so on any server error carrying no\r\n * `response.data.message` — a 500 with an empty body, a gateway error, a\r\n * timeout — step 3 won and the user was shown:\r\n *\r\n * \"Request failed with status code 500\"\r\n *\r\n * English, technical, and precisely the shape Charter §09.3 names as forbidden\r\n * (\"✗ « Erreur 422 — Unprocessable Entity »\"). Worse, it made every consuming\r\n * module's carefully-written French fallback effectively UNREACHABLE — the\r\n * argument was accepted and then almost never used. Found during the\r\n * `procuration-portnet-fe` Area 10 audit, where 12 call sites pass a considered\r\n * fallback that could essentially never render.\r\n *\r\n * WHY A DENY-LIST AND NOT SIMPLY DROPPING STEP 3\r\n *\r\n * Step 3 also carries LEGITIMATE messages: any `throw new Error(\"Ce titre ne\r\n * peut pas être supprimé car il est en cours de validation.\")` in module code\r\n * arrives through exactly the same path. Removing the hop would trade a leak of\r\n * technical strings for the loss of real business messages across the whole\r\n * platform — a worse outcome. So the hop stays and only transport phrasings are\r\n * suppressed.\r\n *\r\n * The list is deliberately CONSERVATIVE: anything not recognised passes through,\r\n * on the assumption a human wrote it. A false negative shows one ugly string; a\r\n * false positive silently replaces a real business message with a generic\r\n * fallback, which is the more damaging error.\r\n *\r\n * Sourced from axios's own message construction (`settle`, `AxiosError` codes\r\n * ECONNABORTED / ETIMEDOUT / ERR_NETWORK / ERR_CANCELED) plus the Node socket\r\n * phrasing that surfaces through SSR and test doubles.\r\n * ──────────────────────────────────────────────────────────────────────\r\n */\r\nconst TRANSPORT_MESSAGE_PATTERNS: readonly RegExp[] = [\r\n /^request failed with status code \\d+$/i,\r\n /^network error$/i,\r\n /^timeout of \\d+ms exceeded$/i,\r\n /^timeout exceeded$/i,\r\n /^request aborted$/i,\r\n /^canceled$/i,\r\n /^unsupported protocol/i,\r\n /^maximum content size exceeded$/i,\r\n /^socket hang up$/i,\r\n /* ── errno codes and axios error codes ── CASE-SENSITIVE, DELIBERATELY ─────\r\n *\r\n * These two are the only patterns here NOT marked `/i`, and the asymmetry is\r\n * load-bearing. errno constants are uppercase by universal convention\r\n * (`ETIMEDOUT`, `ECONNREFUSED`, `ENOTFOUND`, `EPIPE`), so an uppercase-only\r\n * match identifies them precisely. Matching case-insensitively would make\r\n * `/^e[a-z]+$/i` swallow ordinary French words beginning with \"e\" — \"erreur\",\r\n * \"expiré\", \"échec\" — turning a real business message into a generic fallback,\r\n * which is the more damaging failure this list is tuned against.\r\n *\r\n * ⚠ An earlier version of the first pattern was `/^ec[a-z]+$/i`, which matched\r\n * `ECONNREFUSED` (it begins \"EC\") but silently MISSED `ETIMEDOUT` (\"ET\"),\r\n * despite the comment claiming otherwise. The unit test caught it. Do not\r\n * narrow the prefix again: the family is \"E + uppercase word\", not \"EC...\".\r\n *\r\n * Residual, accepted: an all-caps single word like \"ERREUR\" is treated as an\r\n * errno code. A module should not be throwing all-caps single-word messages at\r\n * users, and replacing one with a proper French fallback is an improvement. */\r\n /^E[A-Z]{3,}$/, // errno: ETIMEDOUT, ECONNREFUSED, ECONNRESET, ENOTFOUND, EPIPE\r\n /^ERR_[A-Z_]+$/, // axios: ERR_NETWORK, ERR_CANCELED, ERR_BAD_RESPONSE\r\n];\r\n\r\n/** Is this string an axios/transport artefact rather than something for a user? */\r\nconst isTransportMessage = (value: string): boolean =>\r\n TRANSPORT_MESSAGE_PATTERNS.some((pattern) => pattern.test(value.trim()));\r\n\r\n/**\r\n * `error.message`, but only when it is fit to show a user.\r\n *\r\n * Suppresses transport phrasings (G-07) so the caller's French fallback is\r\n * reached instead. Module-thrown `Error` messages pass through untouched.\r\n */\r\nconst asUserFacingMessage = (value: unknown): string | undefined => {\r\n const text = asNonEmptyString(value);\r\n if (text === undefined) return undefined;\r\n return isTransportMessage(text) ? undefined : text;\r\n};\r\n\r\n/**\r\n * Best available human-readable message for a rejection of unknown shape.\r\n *\r\n * Resolution order, first match wins:\r\n * 1. the rejection itself, when it is a non-empty string;\r\n * 2. `error.response.data.body` — the SAME envelope's third key;\r\n * 3. `error.response.data.message` — the backend's own message;\r\n * 4. `error.response.data.error` — the SAME envelope's alternate key;\r\n * 5. `error.message` — **only when it is not a transport artefact** (G-07);\r\n * 6. `fallback`.\r\n *\r\n * Step 4 closes capability gap G-08. Several PORTNET back-ends populate\r\n * `data.error` rather than `data.message` (addpe-fe declares BOTH on its\r\n * `ApiErrorBody` and read both at seven call sites), so a helper that stopped at\r\n * `data.message` skipped a real business message and fell through to the generic\r\n * fallback — which made it non-substitutable for the module-local extractors it\r\n * exists to replace. Strictly additive: what step 4 now catches previously\r\n * reached step 5 or 6.\r\n *\r\n * Step 2 closes G-08bis — the same defect, a third key. `caution-ui`'s axios\r\n * interceptor reads `error.response.data.body ?? error.response.data.message`,\r\n * so on that back-end a helper stopping at `message` again skipped a real\r\n * business message. Without step 2 the helper was non-substitutable there and\r\n * the module would have had to keep its own assertion-based extractor.\r\n *\r\n * WHY STEP 2 SITS BEFORE `message` AND NOT AFTER `error`.\r\n * `caution-ui` uses `??`, which is direct evidence that a single response can\r\n * carry both keys and that `body` is the one that back-end means. Appending\r\n * `body` at the end of the envelope hops would therefore have SILENTLY FLIPPED\r\n * which message its users see. Placing it first preserves that precedence, and\r\n * is provably a no-op for every module that does not populate `body`: `readPath`\r\n * returns `undefined` and resolution falls straight through to `message`.\r\n *\r\n * The one case this perturbs is a back-end that populates BOTH `body` and\r\n * `message` while intending `message` to win. No such module exists in the\r\n * portfolio — addpe-fe's `ApiErrorBody` declares `message` and `error`, not\r\n * `body` — and a module in that position should say so here rather than have the\r\n * order guessed for it.\r\n *\r\n * Step 5 is filtered: `\"Request failed with status code 500\"`, `\"Network Error\"`,\r\n * timeouts and errno codes are SUPPRESSED so the caller's own French copy is\r\n * used instead (Charter §09.3 — no raw technical detail). A message a module\r\n * threw deliberately still passes through. Use `getApiErrorDetail` when you want\r\n * the unfiltered string for a log.\r\n *\r\n * Never throws and never returns an empty string, so it is safe to render\r\n * directly into a toast or a `Banner`.\r\n *\r\n * @param error The caught value. `unknown` by design.\r\n * @param fallback Message when nothing usable is found.\r\n */\r\nexport function getApiErrorMessage(\r\n error: unknown,\r\n fallback: string = DEFAULT_API_ERROR_MESSAGE\r\n): string {\r\n if (typeof error === \"string\" && error.length > 0) return error;\r\n\r\n return (\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"body\"])) ??\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"message\"])) ??\r\n asNonEmptyString(readPath(error, [\"response\", \"data\", \"error\"])) ??\r\n asUserFacingMessage(readPath(error, [\"message\"])) ??\r\n fallback\r\n );\r\n}\r\n\r\n/**\r\n * Unfiltered technical detail for LOGGING — never for display.\r\n *\r\n * `getApiErrorMessage` deliberately suppresses transport phrasings (G-07), which\r\n * is right for a toast and wrong for a console or an APM breadcrumb, where\r\n * `\"Request failed with status code 502\"` is exactly what an operator needs. This\r\n * is the escape hatch: it returns the raw `error.message` when there is one,\r\n * whatever its shape.\r\n *\r\n * Pair them:\r\n *\r\n * toast(getApiErrorMessage(err, \"Échec de l'envoi.\"), \"error\");\r\n * console.error(\"[submit]\", getApiErrorStatus(err), getApiErrorDetail(err));\r\n */\r\nexport function getApiErrorDetail(error: unknown): string | undefined {\r\n if (typeof error === \"string\" && error.length > 0) return error;\r\n return asNonEmptyString(readPath(error, [\"message\"]));\r\n}\r\n\r\n/**\r\n * HTTP status carried by a rejection, when there is one.\r\n *\r\n * Resolution order, first numeric match wins:\r\n * 1. `error.response.data.status` — a BODY-level status;\r\n * 2. `error.response.status` — the transport status.\r\n *\r\n * Returns `undefined` for a network drop, a timeout, or any non-HTTP rejection —\r\n * which is the signal callers use to distinguish \"the server answered with an\r\n * error\" from \"there was no answer at all\" (Charter R-4.3: a status-less failure\r\n * is a network banner, not a toast).\r\n *\r\n * Step 1 closes G-08ter, the status-side counterpart of the envelope-key gaps\r\n * G-08 / G-08bis. Several PORTNET back-ends put the meaningful status in the\r\n * BODY: caution-ui's axios interceptor reads\r\n * `error.response.data.status ?? error.response.status` and routes on the\r\n * result (404 -> not-found page, 500 -> server-error page, 401 -> re-login), and\r\n * its RESPONSE interceptor does the same for success handling. A helper reading\r\n * only the transport status was therefore not substitutable there — the module\r\n * had to keep a hand-written `HttpErrorLike` interface and assert onto it, which\r\n * is exactly the anti-pattern G-04 exists to end. Closing the message side\r\n * (G-08bis) without the status side would have left that assertion in place for\r\n * the sake of one field.\r\n *\r\n * Body-first ordering mirrors the module's own `??` and is provably a no-op for\r\n * every back-end that does not populate `data.status`: `readPath` returns\r\n * `undefined` and resolution falls through to the transport status.\r\n *\r\n * BOTH hops are numeric-guarded, which is a deliberate tightening over the\r\n * module code being replaced. That code did `String(status)` on whatever it\r\n * found, so a body carrying `status: \"ERROR\"` produced a `String` switch miss\r\n * and fell to the default toast branch; here a non-numeric `data.status` is\r\n * ignored and the real transport status is used instead. That is the more useful\r\n * answer, and it keeps the return type honest — the signature promises a number.\r\n */\r\nexport function getApiErrorStatus(error: unknown): number | undefined {\r\n const bodyStatus = readPath(error, [\"response\", \"data\", \"status\"]);\r\n if (typeof bodyStatus === \"number\") return bodyStatus;\r\n\r\n const status = readPath(error, [\"response\", \"status\"]);\r\n return typeof status === \"number\" ? status : undefined;\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,yBAAyB,GACpC,8CAA8C;;AAEhD;AACA;AACA;AACA;AACA,MAAMC,QAAQ,GAAGA,CAACC,MAAe,EAAEC,IAAuB,KAAc;EACtE,IAAIC,OAAgB,GAAGF,MAAM;EAE7B,KAAK,MAAMG,GAAG,IAAIF,IAAI,EAAE;IACtB,IAAI,OAAOC,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,IAAI,EAAEC,GAAG,IAAID,OAAO,CAAC,EAAE;MACxE,OAAOE,SAAS;IAClB;IACAF,OAAO,GAAGG,OAAO,CAACC,GAAG,CAACJ,OAAO,EAAEC,GAAG,CAAC;EACrC;EAEA,OAAOD,OAAO;AAChB,CAAC;AAED,MAAMK,gBAAgB,GAAIC,KAAc,IACtC,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,MAAM,GAAG,CAAC,GAAGD,KAAK,GAAGJ,SAAS;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,0BAA6C,GAAG,CACpD,wCAAwC,EACxC,kBAAkB,EAClB,8BAA8B,EAC9B,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,kCAAkC,EAClC,mBAAmB;AACnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAAE;AAChB,eAAe,CAAE;AAAA,CAClB;;AAED;AACA,MAAMC,kBAAkB,GAAIH,KAAa,IACvCE,0BAA0B,CAACE,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACC,IAAI,CAACN,KAAK,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAIR,KAAc,IAAyB;EAClE,MAAMS,IAAI,GAAGV,gBAAgB,CAACC,KAAK,CAAC;EACpC,IAAIS,IAAI,KAAKb,SAAS,EAAE,OAAOA,SAAS;EACxC,OAAOO,kBAAkB,CAACM,IAAI,CAAC,GAAGb,SAAS,GAAGa,IAAI;AACpD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAc,EACdC,QAAgB,GAAGtB,yBAAyB,EACpC;EACR,IAAI,OAAOqB,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACV,MAAM,GAAG,CAAC,EAAE,OAAOU,KAAK;EAE/D,OACEZ,gBAAgB,CAACR,QAAQ,CAACoB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAC/DZ,gBAAgB,CAACR,QAAQ,CAACoB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAClEZ,gBAAgB,CAACR,QAAQ,CAACoB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAChEH,mBAAmB,CAACjB,QAAQ,CAACoB,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IACjDC,QAAQ;AAEZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACF,KAAc,EAAsB;EACpE,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACV,MAAM,GAAG,CAAC,EAAE,OAAOU,KAAK;EAC/D,OAAOZ,gBAAgB,CAACR,QAAQ,CAACoB,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,iBAAiBA,CAACH,KAAc,EAAsB;EACpE,MAAMI,UAAU,GAAGxB,QAAQ,CAACoB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;EAClE,IAAI,OAAOI,UAAU,KAAK,QAAQ,EAAE,OAAOA,UAAU;EAErD,MAAMC,MAAM,GAAGzB,QAAQ,CAACoB,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EACtD,OAAO,OAAOK,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGpB,SAAS;AACxD","ignoreList":[]}