@portnet/ui 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (980) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/dist/esm/index.js +72 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +81 -86
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +155 -59
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +37 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +2 -3
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -53
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -87
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +152 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  346. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  347. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  348. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  349. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  350. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  351. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  352. package/dist/esm/v2/personalization/index.js +17 -0
  353. package/dist/esm/v2/personalization/index.js.map +1 -1
  354. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  355. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  356. package/dist/esm/v2/personalization/schema.js +8 -9
  357. package/dist/esm/v2/personalization/schema.js.map +1 -1
  358. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  359. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  360. package/dist/esm/v2/referentiel/types.js +2 -0
  361. package/dist/esm/v2/referentiel/types.js.map +1 -0
  362. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  363. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  364. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  365. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  367. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  368. package/dist/esm/v2/theme/_brand.js +8 -24
  369. package/dist/esm/v2/theme/_brand.js.map +1 -1
  370. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  371. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  372. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  373. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  374. package/dist/esm/v2/theme/cssVariables.js +62 -69
  375. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  376. package/dist/esm/v2/theme/index.js +5 -5
  377. package/dist/esm/v2/theme/index.js.map +1 -1
  378. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  379. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  380. package/dist/esm/v2/tokens/chart.js +261 -0
  381. package/dist/esm/v2/tokens/chart.js.map +1 -0
  382. package/dist/esm/v2/tokens/colors.js +22 -22
  383. package/dist/esm/v2/tokens/colors.js.map +1 -1
  384. package/dist/esm/v2/tokens/density.js +62 -7
  385. package/dist/esm/v2/tokens/density.js.map +1 -1
  386. package/dist/esm/v2/tokens/index.js +49 -34
  387. package/dist/esm/v2/tokens/index.js.map +1 -1
  388. package/dist/esm/v2/tokens/motion.js +12 -20
  389. package/dist/esm/v2/tokens/motion.js.map +1 -1
  390. package/dist/esm/v2/tokens/radius.js +1 -1
  391. package/dist/esm/v2/tokens/radius.js.map +1 -1
  392. package/dist/esm/v2/tokens/shadows.js +6 -6
  393. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  394. package/dist/esm/v2/tokens/spacing.js +2 -2
  395. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  396. package/dist/esm/v2/tokens/state.js +1 -1
  397. package/dist/esm/v2/tokens/state.js.map +1 -1
  398. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  399. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  400. package/dist/esm/v2/tokens/tokens.json +6 -1
  401. package/dist/esm/v2/tokens/typography.js +13 -13
  402. package/dist/esm/v2/tokens/typography.js.map +1 -1
  403. package/dist/esm/v2/tokens/zIndex.js +1 -1
  404. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  405. package/dist/esm/v2/types/datagrid.js.map +1 -1
  406. package/dist/esm/v2/utils/apiError.js +16 -37
  407. package/dist/esm/v2/utils/apiError.js.map +1 -1
  408. package/dist/esm/v2/utils/contrast.js +31 -32
  409. package/dist/esm/v2/utils/contrast.js.map +1 -1
  410. package/dist/esm/v2/utils/cx.js +5 -25
  411. package/dist/esm/v2/utils/cx.js.map +1 -1
  412. package/dist/esm/v2/utils/fileDownload.js +23 -26
  413. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  414. package/dist/esm/v2/utils/fileValidation.js +209 -0
  415. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  416. package/dist/esm/v2/utils/fmtDate.js +111 -0
  417. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  419. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  420. package/dist/esm/v2/utils/formikErrors.js +78 -0
  421. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  422. package/dist/esm/v2/utils/index.js +35 -2
  423. package/dist/esm/v2/utils/index.js.map +1 -1
  424. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  425. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  426. package/dist/esm/v2/utils/networkStatus.js +12 -12
  427. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  428. package/dist/index.d.ts +7 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +110 -49
  431. package/dist/index.js.map +1 -1
  432. package/dist/v2/__tests__/AppMain.test.js +133 -0
  433. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  434. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  435. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  436. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  437. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  438. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  439. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  440. package/dist/v2/__tests__/FieldError.test.js +82 -49
  441. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  442. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  443. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  444. package/dist/v2/__tests__/FieldWidth.test.js +23 -25
  445. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
  446. package/dist/v2/__tests__/FileCard.test.js +29 -28
  447. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  448. package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
  449. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
  451. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  452. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  453. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
  455. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  456. package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
  457. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  458. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  459. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  460. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  461. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  462. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  463. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  464. package/dist/v2/__tests__/apiError.test.js +50 -69
  465. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  466. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  467. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  468. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  469. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  470. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  471. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  472. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  473. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  474. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  475. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  476. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  477. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  478. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  479. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  480. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  481. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  482. package/dist/v2/__tests__/labels-merge.test.js +23 -27
  483. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  484. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  485. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  486. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  487. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  488. package/dist/v2/__tests__/rowActions.test.js +186 -0
  489. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  490. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  491. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  493. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  494. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  495. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  496. package/dist/v2/components/Accordion.js +60 -82
  497. package/dist/v2/components/Accordion.js.map +1 -1
  498. package/dist/v2/components/ActionStrip.js +40 -52
  499. package/dist/v2/components/ActionStrip.js.map +1 -1
  500. package/dist/v2/components/Banner.js +42 -41
  501. package/dist/v2/components/Banner.js.map +1 -1
  502. package/dist/v2/components/Busy.js +22 -27
  503. package/dist/v2/components/Busy.js.map +1 -1
  504. package/dist/v2/components/Button.js +39 -50
  505. package/dist/v2/components/Button.js.map +1 -1
  506. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  507. package/dist/v2/components/CategoryTag.js +49 -32
  508. package/dist/v2/components/CategoryTag.js.map +1 -1
  509. package/dist/v2/components/Checkbox.js +39 -45
  510. package/dist/v2/components/Checkbox.js.map +1 -1
  511. package/dist/v2/components/Chip.js +29 -42
  512. package/dist/v2/components/Chip.js.map +1 -1
  513. package/dist/v2/components/Combobox.js +122 -144
  514. package/dist/v2/components/Combobox.js.map +1 -1
  515. package/dist/v2/components/CommandPalette.js +138 -225
  516. package/dist/v2/components/CommandPalette.js.map +1 -1
  517. package/dist/v2/components/ConfirmDialog.js +46 -56
  518. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  519. package/dist/v2/components/DatePicker.js +81 -86
  520. package/dist/v2/components/DatePicker.js.map +1 -1
  521. package/dist/v2/components/DateRangePicker.js +77 -87
  522. package/dist/v2/components/DateRangePicker.js.map +1 -1
  523. package/dist/v2/components/DateTimePicker.js +84 -91
  524. package/dist/v2/components/DateTimePicker.js.map +1 -1
  525. package/dist/v2/components/Drawer.d.ts.map +1 -1
  526. package/dist/v2/components/Drawer.js +93 -88
  527. package/dist/v2/components/Drawer.js.map +1 -1
  528. package/dist/v2/components/Dropzone.js +150 -196
  529. package/dist/v2/components/Dropzone.js.map +1 -1
  530. package/dist/v2/components/EmptyState.js +18 -20
  531. package/dist/v2/components/EmptyState.js.map +1 -1
  532. package/dist/v2/components/FavoriteToggle.js +28 -39
  533. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  534. package/dist/v2/components/Field.d.ts +62 -4
  535. package/dist/v2/components/Field.d.ts.map +1 -1
  536. package/dist/v2/components/Field.js +169 -70
  537. package/dist/v2/components/Field.js.map +1 -1
  538. package/dist/v2/components/FieldError.js +18 -21
  539. package/dist/v2/components/FieldError.js.map +1 -1
  540. package/dist/v2/components/FieldHelp.js +40 -60
  541. package/dist/v2/components/FieldHelp.js.map +1 -1
  542. package/dist/v2/components/FileCard.js +27 -31
  543. package/dist/v2/components/FileCard.js.map +1 -1
  544. package/dist/v2/components/FilterTab.js +30 -38
  545. package/dist/v2/components/FilterTab.js.map +1 -1
  546. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  547. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  548. package/dist/v2/components/ForbiddenPage.js +37 -17
  549. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  550. package/dist/v2/components/FormGrid.js +53 -59
  551. package/dist/v2/components/FormGrid.js.map +1 -1
  552. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  553. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  554. package/dist/v2/components/FormikDisplay.js +108 -33
  555. package/dist/v2/components/FormikDisplay.js.map +1 -1
  556. package/dist/v2/components/Input.d.ts +40 -0
  557. package/dist/v2/components/Input.d.ts.map +1 -1
  558. package/dist/v2/components/Input.js +81 -41
  559. package/dist/v2/components/Input.js.map +1 -1
  560. package/dist/v2/components/KPICard.js +57 -67
  561. package/dist/v2/components/KPICard.js.map +1 -1
  562. package/dist/v2/components/KPIStrip.js +16 -22
  563. package/dist/v2/components/KPIStrip.js.map +1 -1
  564. package/dist/v2/components/KV.js +25 -31
  565. package/dist/v2/components/KV.js.map +1 -1
  566. package/dist/v2/components/KVGrid.js +19 -26
  567. package/dist/v2/components/KVGrid.js.map +1 -1
  568. package/dist/v2/components/Layout.js +91 -120
  569. package/dist/v2/components/Layout.js.map +1 -1
  570. package/dist/v2/components/MobileRowCard.js +79 -91
  571. package/dist/v2/components/MobileRowCard.js.map +1 -1
  572. package/dist/v2/components/Modal.js +61 -69
  573. package/dist/v2/components/Modal.js.map +1 -1
  574. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  575. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  576. package/dist/v2/components/NetworkErrorPage.js +38 -21
  577. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  578. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  579. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  580. package/dist/v2/components/NotFoundPage.js +37 -18
  581. package/dist/v2/components/NotFoundPage.js.map +1 -1
  582. package/dist/v2/components/NumberInput.js +88 -118
  583. package/dist/v2/components/NumberInput.js.map +1 -1
  584. package/dist/v2/components/OverflowMenu.js +38 -56
  585. package/dist/v2/components/OverflowMenu.js.map +1 -1
  586. package/dist/v2/components/PdfViewer.js +34 -45
  587. package/dist/v2/components/PdfViewer.js.map +1 -1
  588. package/dist/v2/components/ProgressBar.js +42 -49
  589. package/dist/v2/components/ProgressBar.js.map +1 -1
  590. package/dist/v2/components/Radio.js +59 -67
  591. package/dist/v2/components/Radio.js.map +1 -1
  592. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  593. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  594. package/dist/v2/components/SectionHeader.js +34 -41
  595. package/dist/v2/components/SectionHeader.js.map +1 -1
  596. package/dist/v2/components/Segmented.js +69 -93
  597. package/dist/v2/components/Segmented.js.map +1 -1
  598. package/dist/v2/components/Select.d.ts +26 -2
  599. package/dist/v2/components/Select.d.ts.map +1 -1
  600. package/dist/v2/components/Select.js +120 -155
  601. package/dist/v2/components/Select.js.map +1 -1
  602. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  603. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  604. package/dist/v2/components/ServerErrorPage.js +37 -20
  605. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  606. package/dist/v2/components/Skeleton.js +86 -100
  607. package/dist/v2/components/Skeleton.js.map +1 -1
  608. package/dist/v2/components/SkipLink.js +9 -12
  609. package/dist/v2/components/SkipLink.js.map +1 -1
  610. package/dist/v2/components/Spinner.js +16 -25
  611. package/dist/v2/components/Spinner.js.map +1 -1
  612. package/dist/v2/components/Status.js +18 -29
  613. package/dist/v2/components/Status.js.map +1 -1
  614. package/dist/v2/components/Stepper.js +80 -82
  615. package/dist/v2/components/Stepper.js.map +1 -1
  616. package/dist/v2/components/Surface.js +34 -49
  617. package/dist/v2/components/Surface.js.map +1 -1
  618. package/dist/v2/components/Switch.js +29 -37
  619. package/dist/v2/components/Switch.js.map +1 -1
  620. package/dist/v2/components/TabPanel.d.ts +17 -0
  621. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  622. package/dist/v2/components/TabPanel.js +90 -0
  623. package/dist/v2/components/TabPanel.js.map +1 -0
  624. package/dist/v2/components/Tabs.d.ts +25 -0
  625. package/dist/v2/components/Tabs.d.ts.map +1 -1
  626. package/dist/v2/components/Tabs.js +53 -29
  627. package/dist/v2/components/Tabs.js.map +1 -1
  628. package/dist/v2/components/TelInput.js +80 -115
  629. package/dist/v2/components/TelInput.js.map +1 -1
  630. package/dist/v2/components/Textarea.js +26 -35
  631. package/dist/v2/components/Textarea.js.map +1 -1
  632. package/dist/v2/components/TimePicker.js +62 -74
  633. package/dist/v2/components/TimePicker.js.map +1 -1
  634. package/dist/v2/components/Toast.js +119 -174
  635. package/dist/v2/components/Toast.js.map +1 -1
  636. package/dist/v2/components/Tooltip.js +23 -38
  637. package/dist/v2/components/Tooltip.js.map +1 -1
  638. package/dist/v2/components/_ErrorPageBody.js +15 -16
  639. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  640. package/dist/v2/components/_pickerShared.js +5 -5
  641. package/dist/v2/components/_pickerShared.js.map +1 -1
  642. package/dist/v2/components/index.d.ts +40 -1
  643. package/dist/v2/components/index.d.ts.map +1 -1
  644. package/dist/v2/components/index.js +153 -136
  645. package/dist/v2/components/index.js.map +1 -1
  646. package/dist/v2/hooks/index.d.ts +65 -0
  647. package/dist/v2/hooks/index.d.ts.map +1 -1
  648. package/dist/v2/hooks/index.js +63 -24
  649. package/dist/v2/hooks/index.js.map +1 -1
  650. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  651. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  652. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  653. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  654. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  655. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  656. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  657. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  658. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  659. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  660. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  661. package/dist/v2/hooks/useDensity.js +14 -18
  662. package/dist/v2/hooks/useDensity.js.map +1 -1
  663. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  664. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  665. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  666. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  667. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  668. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  669. package/dist/v2/hooks/useFocusTrap.js +20 -24
  670. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  671. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  672. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  673. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  674. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  675. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  676. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  677. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  678. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  679. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  680. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  681. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  682. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  683. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  684. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  685. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  687. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  688. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  689. package/dist/v2/hooks/useSortedRows.js +4 -6
  690. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  691. package/dist/v2/hooks/useTabLoading.js +7 -22
  692. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  693. package/dist/v2/index.js +143 -145
  694. package/dist/v2/index.js.map +1 -1
  695. package/dist/v2/modalContext.js +2 -2
  696. package/dist/v2/modalContext.js.map +1 -1
  697. package/dist/v2/models/favorite.d.ts +8 -9
  698. package/dist/v2/models/favorite.d.ts.map +1 -1
  699. package/dist/v2/models/favorite.js.map +1 -1
  700. package/dist/v2/models/index.js +4 -4
  701. package/dist/v2/models/index.js.map +1 -1
  702. package/dist/v2/models/personalization.d.ts +44 -48
  703. package/dist/v2/models/personalization.d.ts.map +1 -1
  704. package/dist/v2/models/personalization.js.map +1 -1
  705. package/dist/v2/models/referentiel.d.ts +32 -50
  706. package/dist/v2/models/referentiel.d.ts.map +1 -1
  707. package/dist/v2/models/referentiel.js.map +1 -1
  708. package/dist/v2/models/savedFilter.d.ts +8 -17
  709. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  710. package/dist/v2/models/savedFilter.js.map +1 -1
  711. package/dist/v2/patterns/ActionBar.js +152 -187
  712. package/dist/v2/patterns/ActionBar.js.map +1 -1
  713. package/dist/v2/patterns/AppMain.d.ts +109 -0
  714. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  715. package/dist/v2/patterns/AppMain.js +115 -0
  716. package/dist/v2/patterns/AppMain.js.map +1 -0
  717. package/dist/v2/patterns/BulkActionBar.js +40 -42
  718. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  719. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  720. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  721. package/dist/v2/patterns/ChartFigure.js +159 -0
  722. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  723. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  724. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  725. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  726. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  727. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  728. package/dist/v2/patterns/DataGrid.js +262 -297
  729. package/dist/v2/patterns/DataGrid.js.map +1 -1
  730. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  731. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  733. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  734. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  735. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  736. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  737. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  738. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  739. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  740. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  741. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  742. package/dist/v2/patterns/DetailSplit.js +116 -0
  743. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  744. package/dist/v2/patterns/FavoriteColumn.js +22 -23
  745. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  746. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  747. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  748. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  749. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  750. package/dist/v2/patterns/FilterTabBar.js +120 -0
  751. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  752. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  753. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  754. package/dist/v2/patterns/FormPageShell.js +53 -50
  755. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  756. package/dist/v2/patterns/FormSection.d.ts +8 -3
  757. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  758. package/dist/v2/patterns/FormSection.js +44 -51
  759. package/dist/v2/patterns/FormSection.js.map +1 -1
  760. package/dist/v2/patterns/FormikCheckbox.js +36 -45
  761. package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
  762. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  763. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  765. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  766. package/dist/v2/patterns/FormikCombobox.js +55 -72
  767. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  768. package/dist/v2/patterns/FormikDatePicker.js +50 -64
  769. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  770. package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
  771. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
  772. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  773. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  774. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  775. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  776. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  777. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  778. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  779. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikFile.js +99 -83
  781. package/dist/v2/patterns/FormikFile.js.map +1 -1
  782. package/dist/v2/patterns/FormikInput.js +45 -58
  783. package/dist/v2/patterns/FormikInput.js.map +1 -1
  784. package/dist/v2/patterns/FormikRadioGroup.js +45 -56
  785. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
  786. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  787. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  788. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  789. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  790. package/dist/v2/patterns/FormikSelect.js +70 -92
  791. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  792. package/dist/v2/patterns/FormikTextarea.js +35 -51
  793. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  794. package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
  795. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  796. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  797. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  798. package/dist/v2/patterns/PageContent.js +17 -20
  799. package/dist/v2/patterns/PageContent.js.map +1 -1
  800. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  801. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  802. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  803. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  804. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  805. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/ReferentielField.js +347 -327
  807. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
  809. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
  810. package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
  811. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
  812. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  813. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  814. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  815. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  816. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  817. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  818. package/dist/v2/patterns/SortableHeader.js +35 -57
  819. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  820. package/dist/v2/patterns/Tour.js +121 -142
  821. package/dist/v2/patterns/Tour.js.map +1 -1
  822. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  823. package/dist/v2/patterns/_dataGridShared.js +131 -147
  824. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  825. package/dist/v2/patterns/_pickerSerialisation.js +9 -10
  826. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
  827. package/dist/v2/patterns/_sort.js +17 -33
  828. package/dist/v2/patterns/_sort.js.map +1 -1
  829. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  830. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  831. package/dist/v2/patterns/_useColumnResize.js +80 -99
  832. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  833. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  834. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  835. package/dist/v2/patterns/filterCriteria.js +110 -0
  836. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  837. package/dist/v2/patterns/index.d.ts +160 -0
  838. package/dist/v2/patterns/index.d.ts.map +1 -1
  839. package/dist/v2/patterns/index.js +157 -79
  840. package/dist/v2/patterns/index.js.map +1 -1
  841. package/dist/v2/patterns/rowActions.d.ts +150 -0
  842. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  843. package/dist/v2/patterns/rowActions.js +232 -0
  844. package/dist/v2/patterns/rowActions.js.map +1 -0
  845. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  846. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  847. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  848. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  849. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  850. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  851. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  852. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  853. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  854. package/dist/v2/personalization/adapters/index.js +5 -5
  855. package/dist/v2/personalization/adapters/index.js.map +1 -1
  856. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  857. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  858. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  859. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  860. package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
  861. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  862. package/dist/v2/personalization/capabilities/index.js +12 -12
  863. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  864. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  865. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  866. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  867. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  868. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  869. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  870. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  871. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  872. package/dist/v2/personalization/index.d.ts +16 -0
  873. package/dist/v2/personalization/index.d.ts.map +1 -1
  874. package/dist/v2/personalization/index.js +30 -23
  875. package/dist/v2/personalization/index.js.map +1 -1
  876. package/dist/v2/personalization/personalizationContext.js +10 -12
  877. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  878. package/dist/v2/personalization/schema.js +8 -9
  879. package/dist/v2/personalization/schema.js.map +1 -1
  880. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  881. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  882. package/dist/v2/referentiel/index.js +11 -13
  883. package/dist/v2/referentiel/index.js.map +1 -1
  884. package/dist/v2/referentiel/types.d.ts +105 -0
  885. package/dist/v2/referentiel/types.d.ts.map +1 -0
  886. package/dist/v2/referentiel/types.js +6 -0
  887. package/dist/v2/referentiel/types.js.map +1 -0
  888. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  889. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  890. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  891. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  892. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  893. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  894. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  895. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  896. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  897. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  898. package/dist/v2/theme/_brand.js +12 -26
  899. package/dist/v2/theme/_brand.js.map +1 -1
  900. package/dist/v2/theme/_brandSecondary.js +12 -26
  901. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  902. package/dist/v2/theme/createPortnetTheme.js +41 -49
  903. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  904. package/dist/v2/theme/cssVariables.d.ts +3 -3
  905. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  906. package/dist/v2/theme/cssVariables.js +65 -70
  907. package/dist/v2/theme/cssVariables.js.map +1 -1
  908. package/dist/v2/theme/index.js +10 -10
  909. package/dist/v2/theme/index.js.map +1 -1
  910. package/dist/v2/tokens/breakpoints.js +16 -16
  911. package/dist/v2/tokens/breakpoints.js.map +1 -1
  912. package/dist/v2/tokens/chart.d.ts +103 -0
  913. package/dist/v2/tokens/chart.d.ts.map +1 -0
  914. package/dist/v2/tokens/chart.js +270 -0
  915. package/dist/v2/tokens/chart.js.map +1 -0
  916. package/dist/v2/tokens/colors.js +24 -24
  917. package/dist/v2/tokens/colors.js.map +1 -1
  918. package/dist/v2/tokens/density.d.ts +104 -0
  919. package/dist/v2/tokens/density.d.ts.map +1 -1
  920. package/dist/v2/tokens/density.js +67 -12
  921. package/dist/v2/tokens/density.js.map +1 -1
  922. package/dist/v2/tokens/index.d.ts +50 -1
  923. package/dist/v2/tokens/index.d.ts.map +1 -1
  924. package/dist/v2/tokens/index.js +116 -68
  925. package/dist/v2/tokens/index.js.map +1 -1
  926. package/dist/v2/tokens/motion.js +16 -22
  927. package/dist/v2/tokens/motion.js.map +1 -1
  928. package/dist/v2/tokens/radius.js +3 -3
  929. package/dist/v2/tokens/radius.js.map +1 -1
  930. package/dist/v2/tokens/shadows.js +8 -8
  931. package/dist/v2/tokens/shadows.js.map +1 -1
  932. package/dist/v2/tokens/spacing.js +4 -4
  933. package/dist/v2/tokens/spacing.js.map +1 -1
  934. package/dist/v2/tokens/state.js +3 -3
  935. package/dist/v2/tokens/state.js.map +1 -1
  936. package/dist/v2/tokens/statusPalette.js +21 -23
  937. package/dist/v2/tokens/statusPalette.js.map +1 -1
  938. package/dist/v2/tokens/tokens.json +6 -1
  939. package/dist/v2/tokens/typography.js +15 -15
  940. package/dist/v2/tokens/typography.js.map +1 -1
  941. package/dist/v2/tokens/zIndex.js +3 -3
  942. package/dist/v2/tokens/zIndex.js.map +1 -1
  943. package/dist/v2/types/datagrid.d.ts +9 -1
  944. package/dist/v2/types/datagrid.d.ts.map +1 -1
  945. package/dist/v2/types/datagrid.js.map +1 -1
  946. package/dist/v2/types/index.js +2 -2
  947. package/dist/v2/types/index.js.map +1 -1
  948. package/dist/v2/utils/apiError.js +16 -37
  949. package/dist/v2/utils/apiError.js.map +1 -1
  950. package/dist/v2/utils/contrast.js +31 -32
  951. package/dist/v2/utils/contrast.js.map +1 -1
  952. package/dist/v2/utils/cx.js +7 -27
  953. package/dist/v2/utils/cx.js.map +1 -1
  954. package/dist/v2/utils/fileDownload.js +25 -28
  955. package/dist/v2/utils/fileDownload.js.map +1 -1
  956. package/dist/v2/utils/fileValidation.d.ts +116 -0
  957. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  958. package/dist/v2/utils/fileValidation.js +220 -0
  959. package/dist/v2/utils/fileValidation.js.map +1 -0
  960. package/dist/v2/utils/fmtDate.d.ts +103 -0
  961. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  962. package/dist/v2/utils/fmtDate.js +119 -0
  963. package/dist/v2/utils/fmtDate.js.map +1 -0
  964. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  965. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  966. package/dist/v2/utils/fmtMoney.js +9 -11
  967. package/dist/v2/utils/fmtMoney.js.map +1 -1
  968. package/dist/v2/utils/formikErrors.d.ts +67 -0
  969. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  970. package/dist/v2/utils/formikErrors.js +85 -0
  971. package/dist/v2/utils/formikErrors.js.map +1 -0
  972. package/dist/v2/utils/index.d.ts +5 -0
  973. package/dist/v2/utils/index.d.ts.map +1 -1
  974. package/dist/v2/utils/index.js +67 -18
  975. package/dist/v2/utils/index.js.map +1 -1
  976. package/dist/v2/utils/mergeLabels.js +9 -14
  977. package/dist/v2/utils/mergeLabels.js.map +1 -1
  978. package/dist/v2/utils/networkStatus.js +14 -14
  979. package/dist/v2/utils/networkStatus.js.map +1 -1
  980. package/package.json +26 -9
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardShortcutsHelp.js","names":["React","Modal","mergeLabels","jsx","_jsx","jsxs","_jsxs","isFocusOnTextEntry","el","document","activeElement","tag","tagName","HTMLElement","isContentEditable","ShortcutKey","_ref","children","style","display","minWidth","padding","background","border","borderBottomColor","borderRadius","boxShadow","fontFamily","fontSize","textAlign","lineHeight","color","SHORTCUT_ROW_SX","gridTemplateColumns","gap","alignItems","borderBottom","SHORTCUT_KEYS_SX","flexWrap","HELP_FOOTNOTE_SX","marginTop","paddingTop","borderTop","DEFAULT_LABELS","Object","freeze","footnoteIntro","footnoteOutro","listAriaLabel","keyJoiner","KeyboardShortcutsHelp","_ref2","_ref2$shortcuts","shortcuts","_ref2$title","title","labels","open","onOpenChange","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledOpen","setUncontrolledOpen","isControlled","undefined","isOpen","L","isOpenRef","useRef","current","onOpenChangeRef","isControlledRef","requestOpen","useCallback","next","_onOpenChangeRef$curr","call","useEffect","handler","event","key","ctrlKey","metaKey","altKey","preventDefault","window","addEventListener","removeEventListener","Array","isArray","length","onClose","size","margin","map","sc","i","keys","k","j","Fragment","description"],"sources":["../../../../src/lib/v2/patterns/KeyboardShortcutsHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"../components/Modal\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/* ── Body-only focus guard ────────────────────────────────────────\r\n * The \"?\" key is a printable character. If a user types \"?\" inside an\r\n * Input / Textarea / contentEditable element we must NOT hijack the\r\n * keypress to open the help — they're trying to type a question mark.\r\n *\r\n * BUTTON / A focus is NOT blocking by design: when the user has tabbed\r\n * onto an interactive non-text element, hitting \"?\" makes sense as a\r\n * help affordance (navigation mode, not text-entry mode).\r\n */\r\nfunction isFocusOnTextEntry(): boolean {\r\n const el = typeof document !== \"undefined\" ? document.activeElement : null;\r\n if (!el) return false;\r\n const tag = el.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (el instanceof HTMLElement && el.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction ShortcutKey({ children }: { children?: React.ReactNode }) {\r\n return (\r\n <kbd\r\n style={{\r\n display: \"inline-block\",\r\n minWidth: \"1.75em\",\r\n padding: \"0.15em 0.5em\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderBottomColor: \"var(--border-strong, var(--border))\",\r\n borderRadius: \"var(--r-sm)\",\r\n boxShadow: \"inset 0 -1px 0 var(--border)\",\r\n fontFamily: \"var(--font-mono, monospace)\",\r\n fontSize: \"var(--text-sm)\",\r\n textAlign: \"center\",\r\n lineHeight: 1.4,\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n}\r\n\r\nconst SHORTCUT_ROW_SX: React.CSSProperties = {\r\n display: \"grid\",\r\n gridTemplateColumns: \"auto 1fr\",\r\n gap: \"var(--s-4)\",\r\n alignItems: \"center\",\r\n padding: \"var(--s-2) 0\",\r\n borderBottom: \"1px solid var(--border-subtle, var(--border))\",\r\n};\r\n\r\nconst SHORTCUT_KEYS_SX: React.CSSProperties = {\r\n display: \"flex\",\r\n gap: \"var(--s-1)\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n};\r\n\r\nconst HELP_FOOTNOTE_SX: React.CSSProperties = {\r\n marginTop: \"var(--s-4)\",\r\n paddingTop: \"var(--s-3)\",\r\n borderTop: \"1px solid var(--border)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: 1.5,\r\n};\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n /* Footnote rendered below the shortcut list. Split into two parts so the\r\n * keycap can be embedded in the middle without forcing the i18n string to\r\n * carry HTML tags. */\r\n footnoteIntro: \"Astuce : appuyez sur\",\r\n footnoteOutro:\r\n \"à tout moment pour ouvrir ou fermer cette aide. Les raccourcis s'activent uniquement quand votre curseur n'est pas dans un champ de saisie.\",\r\n /* aria-label on the <dl> listing every shortcut. */\r\n listAriaLabel: \"Liste des raccourcis clavier disponibles sur cette page\",\r\n /* Joiner rendered between alternative keys for the same shortcut. */\r\n keyJoiner: \"ou\",\r\n});\r\n\r\n/**\r\n * KeyboardShortcutsHelp — Portnet UI v2\r\n *\r\n * Charter §5.2 SHOULD — discoverable help overlay for page-level keyboard\r\n * shortcuts. Listens globally for \"?\" and opens a v2.Modal listing every\r\n * shortcut as <kbd> elements (WCAG 1.3.1 semantic).\r\n *\r\n * Self-contained: the host page only declares the shortcuts array and renders\r\n * <KeyboardShortcutsHelp shortcuts={…} /> once.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <KeyboardShortcutsHelp\r\n * title=\"Keyboard shortcuts\"\r\n * labels={{\r\n * footnoteIntro: \"Tip: press\",\r\n * footnoteOutro: \"anytime to toggle this help…\",\r\n * listAriaLabel: \"List of keyboard shortcuts available on this page\",\r\n * keyJoiner: \"or\",\r\n * }}\r\n * shortcuts={…}\r\n * />\r\n *\r\n * Charter §5.2 SHOULD + WCAG 1.3.1 (semantic <kbd>) + 2.1.1 (keyboard\r\n * reachable) + R-M.* (modal focus trap inherited from v2.Modal).\r\n */\r\n\r\nexport interface KeyboardShortcut {\r\n keys: string[];\r\n description: React.ReactNode;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpLabels {\r\n footnoteIntro?: string | undefined;\r\n footnoteOutro?: string | undefined;\r\n listAriaLabel?: string | undefined;\r\n keyJoiner?: string | undefined;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpProps {\r\n shortcuts?: KeyboardShortcut[] | undefined;\r\n title?: React.ReactNode | undefined;\r\n labels?: KeyboardShortcutsHelpLabels | undefined;\r\n /**\r\n * Optional CONTROLLED open state. Omit for the original self-contained\r\n * behaviour (the \"?\" listener owns the state).\r\n *\r\n * Added because the panel had no trigger but the keystroke. Hosts wired it\r\n * correctly and users still reported the shortcuts \"missing\" — they are, in\r\n * every practical sense, if the only affordance is a key you have to already\r\n * know about. Charter §05.2 asks for DISCOVERABLE help, and a host cannot add\r\n * a menu item or button without being able to open this.\r\n */\r\n open?: boolean | undefined;\r\n /** Called with the requested next state, for both \"?\" and the close button. */\r\n onOpenChange?: ((open: boolean) => void) | undefined;\r\n}\r\n\r\nfunction KeyboardShortcutsHelp({\r\n shortcuts = [],\r\n title = \"Raccourcis clavier\",\r\n labels,\r\n open,\r\n onOpenChange,\r\n}: KeyboardShortcutsHelpProps) {\r\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\r\n const isControlled = open !== undefined;\r\n const isOpen = isControlled ? open : uncontrolledOpen;\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n /* Refs so the \"?\" listener can stay on a `[]` dependency list — it must not\r\n * be torn down and re-added on every open/close, and in controlled mode there\r\n * is no functional-update form to fall back on. */\r\n const isOpenRef = React.useRef(isOpen);\r\n isOpenRef.current = isOpen;\r\n const onOpenChangeRef = React.useRef(onOpenChange);\r\n onOpenChangeRef.current = onOpenChange;\r\n const isControlledRef = React.useRef(isControlled);\r\n isControlledRef.current = isControlled;\r\n\r\n const requestOpen = React.useCallback((next: boolean) => {\r\n if (!isControlledRef.current) setUncontrolledOpen(next);\r\n onOpenChangeRef.current?.(next);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const handler = (event: KeyboardEvent) => {\r\n // Only react to \"?\" (Shift+/ on US, AltGr+, on many AZERTY layouts).\r\n // event.key gives us the resolved character regardless of physical key.\r\n if (event.key !== \"?\") return;\r\n\r\n // Modifier keys (Ctrl, Meta, Alt) reserved for browser / OS shortcuts.\r\n if (event.ctrlKey || event.metaKey || event.altKey) return;\r\n\r\n // User is typing in a text field — let \"?\" through.\r\n if (isFocusOnTextEntry()) return;\r\n\r\n event.preventDefault();\r\n requestOpen(!isOpenRef.current);\r\n };\r\n\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, [requestOpen]);\r\n\r\n if (!Array.isArray(shortcuts) || shortcuts.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n title={title}\r\n onClose={() => requestOpen(false)}\r\n size=\"md\"\r\n >\r\n <dl style={{ margin: 0, padding: 0 }} aria-label={L.listAriaLabel}>\r\n {shortcuts.map((sc, i) => (\r\n <div key={i} style={SHORTCUT_ROW_SX}>\r\n <dt style={SHORTCUT_KEYS_SX}>\r\n {sc.keys.map((k, j) => (\r\n <React.Fragment key={j}>\r\n <ShortcutKey>{k}</ShortcutKey>\r\n {j < sc.keys.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: \"var(--fg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n }}\r\n >\r\n {L.keyJoiner}\r\n </span>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </dt>\r\n <dd style={{ margin: 0, fontSize: \"var(--text-body)\" }}>\r\n {sc.description}\r\n </dd>\r\n </div>\r\n ))}\r\n </dl>\r\n <div style={HELP_FOOTNOTE_SX}>\r\n {L.footnoteIntro}{\" \"}\r\n <ShortcutKey>?</ShortcutKey>{\" \"}\r\n {L.footnoteOutro}\r\n </div>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default KeyboardShortcutsHelp;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"KeyboardShortcutsHelp.js","names":["React","Modal","mergeLabels","jsx","_jsx","jsxs","_jsxs","isFocusOnTextEntry","el","document","activeElement","tag","tagName","HTMLElement","isContentEditable","ShortcutKey","children","style","display","minWidth","padding","background","border","borderBottomColor","borderRadius","boxShadow","fontFamily","fontSize","textAlign","lineHeight","color","SHORTCUT_ROW_SX","gridTemplateColumns","gap","alignItems","borderBottom","SHORTCUT_KEYS_SX","flexWrap","HELP_FOOTNOTE_SX","marginTop","paddingTop","borderTop","DEFAULT_LABELS","Object","freeze","footnoteIntro","footnoteOutro","listAriaLabel","keyJoiner","KeyboardShortcutsHelp","shortcuts","title","labels","open","onOpenChange","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","undefined","isOpen","L","isOpenRef","useRef","current","onOpenChangeRef","isControlledRef","requestOpen","useCallback","next","useEffect","handler","event","key","ctrlKey","metaKey","altKey","preventDefault","window","addEventListener","removeEventListener","Array","isArray","length","onClose","size","margin","map","sc","i","keys","k","j","Fragment","description"],"sources":["../../../../src/lib/v2/patterns/KeyboardShortcutsHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"../components/Modal\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/* ── Body-only focus guard ────────────────────────────────────────\r\n * The \"?\" key is a printable character. If a user types \"?\" inside an\r\n * Input / Textarea / contentEditable element we must NOT hijack the\r\n * keypress to open the help — they're trying to type a question mark.\r\n *\r\n * BUTTON / A focus is NOT blocking by design: when the user has tabbed\r\n * onto an interactive non-text element, hitting \"?\" makes sense as a\r\n * help affordance (navigation mode, not text-entry mode).\r\n */\r\nfunction isFocusOnTextEntry(): boolean {\r\n const el = typeof document !== \"undefined\" ? document.activeElement : null;\r\n if (!el) return false;\r\n const tag = el.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (el instanceof HTMLElement && el.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction ShortcutKey({ children }: { children?: React.ReactNode }) {\r\n return (\r\n <kbd\r\n style={{\r\n display: \"inline-block\",\r\n minWidth: \"1.75em\",\r\n padding: \"0.15em 0.5em\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderBottomColor: \"var(--border-strong, var(--border))\",\r\n borderRadius: \"var(--r-sm)\",\r\n boxShadow: \"inset 0 -1px 0 var(--border)\",\r\n fontFamily: \"var(--font-mono, monospace)\",\r\n fontSize: \"var(--text-sm)\",\r\n textAlign: \"center\",\r\n lineHeight: 1.4,\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n}\r\n\r\nconst SHORTCUT_ROW_SX: React.CSSProperties = {\r\n display: \"grid\",\r\n gridTemplateColumns: \"auto 1fr\",\r\n gap: \"var(--s-4)\",\r\n alignItems: \"center\",\r\n padding: \"var(--s-2) 0\",\r\n borderBottom: \"1px solid var(--border-subtle, var(--border))\",\r\n};\r\n\r\nconst SHORTCUT_KEYS_SX: React.CSSProperties = {\r\n display: \"flex\",\r\n gap: \"var(--s-1)\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n};\r\n\r\nconst HELP_FOOTNOTE_SX: React.CSSProperties = {\r\n marginTop: \"var(--s-4)\",\r\n paddingTop: \"var(--s-3)\",\r\n borderTop: \"1px solid var(--border)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: 1.5,\r\n};\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n /* Footnote rendered below the shortcut list. Split into two parts so the\r\n * keycap can be embedded in the middle without forcing the i18n string to\r\n * carry HTML tags. */\r\n footnoteIntro: \"Astuce : appuyez sur\",\r\n footnoteOutro:\r\n \"à tout moment pour ouvrir ou fermer cette aide. Les raccourcis s'activent uniquement quand votre curseur n'est pas dans un champ de saisie.\",\r\n /* aria-label on the <dl> listing every shortcut. */\r\n listAriaLabel: \"Liste des raccourcis clavier disponibles sur cette page\",\r\n /* Joiner rendered between alternative keys for the same shortcut. */\r\n keyJoiner: \"ou\",\r\n});\r\n\r\n/**\r\n * KeyboardShortcutsHelp — Portnet UI v2\r\n *\r\n * Charter §5.2 SHOULD — discoverable help overlay for page-level keyboard\r\n * shortcuts. Listens globally for \"?\" and opens a v2.Modal listing every\r\n * shortcut as <kbd> elements (WCAG 1.3.1 semantic).\r\n *\r\n * Self-contained: the host page only declares the shortcuts array and renders\r\n * <KeyboardShortcutsHelp shortcuts={…} /> once.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <KeyboardShortcutsHelp\r\n * title=\"Keyboard shortcuts\"\r\n * labels={{\r\n * footnoteIntro: \"Tip: press\",\r\n * footnoteOutro: \"anytime to toggle this help…\",\r\n * listAriaLabel: \"List of keyboard shortcuts available on this page\",\r\n * keyJoiner: \"or\",\r\n * }}\r\n * shortcuts={…}\r\n * />\r\n *\r\n * Charter §5.2 SHOULD + WCAG 1.3.1 (semantic <kbd>) + 2.1.1 (keyboard\r\n * reachable) + R-M.* (modal focus trap inherited from v2.Modal).\r\n */\r\n\r\nexport interface KeyboardShortcut {\r\n keys: string[];\r\n description: React.ReactNode;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpLabels {\r\n footnoteIntro?: string | undefined;\r\n footnoteOutro?: string | undefined;\r\n listAriaLabel?: string | undefined;\r\n keyJoiner?: string | undefined;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpProps {\r\n shortcuts?: KeyboardShortcut[] | undefined;\r\n title?: React.ReactNode | undefined;\r\n labels?: KeyboardShortcutsHelpLabels | undefined;\r\n /**\r\n * Optional CONTROLLED open state. Omit for the original self-contained\r\n * behaviour (the \"?\" listener owns the state).\r\n *\r\n * Added because the panel had no trigger but the keystroke. Hosts wired it\r\n * correctly and users still reported the shortcuts \"missing\" — they are, in\r\n * every practical sense, if the only affordance is a key you have to already\r\n * know about. Charter §05.2 asks for DISCOVERABLE help, and a host cannot add\r\n * a menu item or button without being able to open this.\r\n */\r\n open?: boolean | undefined;\r\n /** Called with the requested next state, for both \"?\" and the close button. */\r\n onOpenChange?: ((open: boolean) => void) | undefined;\r\n}\r\n\r\nfunction KeyboardShortcutsHelp({\r\n shortcuts = [],\r\n title = \"Raccourcis clavier\",\r\n labels,\r\n open,\r\n onOpenChange,\r\n}: KeyboardShortcutsHelpProps) {\r\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\r\n const isControlled = open !== undefined;\r\n const isOpen = isControlled ? open : uncontrolledOpen;\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n /* Refs so the \"?\" listener can stay on a `[]` dependency list — it must not\r\n * be torn down and re-added on every open/close, and in controlled mode there\r\n * is no functional-update form to fall back on. */\r\n const isOpenRef = React.useRef(isOpen);\r\n isOpenRef.current = isOpen;\r\n const onOpenChangeRef = React.useRef(onOpenChange);\r\n onOpenChangeRef.current = onOpenChange;\r\n const isControlledRef = React.useRef(isControlled);\r\n isControlledRef.current = isControlled;\r\n\r\n const requestOpen = React.useCallback((next: boolean) => {\r\n if (!isControlledRef.current) setUncontrolledOpen(next);\r\n onOpenChangeRef.current?.(next);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const handler = (event: KeyboardEvent) => {\r\n // Only react to \"?\" (Shift+/ on US, AltGr+, on many AZERTY layouts).\r\n // event.key gives us the resolved character regardless of physical key.\r\n if (event.key !== \"?\") return;\r\n\r\n // Modifier keys (Ctrl, Meta, Alt) reserved for browser / OS shortcuts.\r\n if (event.ctrlKey || event.metaKey || event.altKey) return;\r\n\r\n // User is typing in a text field — let \"?\" through.\r\n if (isFocusOnTextEntry()) return;\r\n\r\n event.preventDefault();\r\n requestOpen(!isOpenRef.current);\r\n };\r\n\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, [requestOpen]);\r\n\r\n if (!Array.isArray(shortcuts) || shortcuts.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n title={title}\r\n onClose={() => requestOpen(false)}\r\n size=\"md\"\r\n >\r\n <dl style={{ margin: 0, padding: 0 }} aria-label={L.listAriaLabel}>\r\n {shortcuts.map((sc, i) => (\r\n <div key={i} style={SHORTCUT_ROW_SX}>\r\n <dt style={SHORTCUT_KEYS_SX}>\r\n {sc.keys.map((k, j) => (\r\n <React.Fragment key={j}>\r\n <ShortcutKey>{k}</ShortcutKey>\r\n {j < sc.keys.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: \"var(--fg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n }}\r\n >\r\n {L.keyJoiner}\r\n </span>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </dt>\r\n <dd style={{ margin: 0, fontSize: \"var(--text-body)\" }}>\r\n {sc.description}\r\n </dd>\r\n </div>\r\n ))}\r\n </dl>\r\n <div style={HELP_FOOTNOTE_SX}>\r\n {L.footnoteIntro}{\" \"}\r\n <ShortcutKey>?</ShortcutKey>{\" \"}\r\n {L.footnoteOutro}\r\n </div>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default KeyboardShortcutsHelp;\r\n"],"mappings":"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","ignoreList":[]}
@@ -19,13 +19,12 @@ import ErrorIcon from "@mui/icons-material/ErrorOutlined";
19
19
  * Defaults stay French for back-compat.
20
20
  */
21
21
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
- function NetworkErrorBanner(_ref) {
23
- var visible = _ref.visible,
24
- _ref$message = _ref.message,
25
- message = _ref$message === void 0 ? "Connexion perdue." : _ref$message,
26
- onRetry = _ref.onRetry,
27
- _ref$retryLabel = _ref.retryLabel,
28
- retryLabel = _ref$retryLabel === void 0 ? "Réessayer" : _ref$retryLabel;
22
+ function NetworkErrorBanner({
23
+ visible,
24
+ message = "Connexion perdue.",
25
+ onRetry,
26
+ retryLabel = "Réessayer"
27
+ }) {
29
28
  if (!visible) return null;
30
29
  return /*#__PURE__*/_jsxs(Box, {
31
30
  role: "alert",
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkErrorBanner.js","names":["React","Box","ErrorIcon","jsx","_jsx","jsxs","_jsxs","NetworkErrorBanner","_ref","visible","_ref$message","message","onRetry","_ref$retryLabel","retryLabel","role","className","children","fontSize","component","type","onClick","sx","background","border","color","borderRadius","padding","fontWeight","cursor","fontFamily","marginInlineStart","transition","outline","outlineOffset"],"sources":["../../../../src/lib/v2/patterns/NetworkErrorBanner.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ErrorIcon from \"@mui/icons-material/ErrorOutlined\";\r\n\r\n/**\r\n * NetworkErrorBanner - Portnet UI v2 (pattern)\r\n *\r\n * Charter R-4.3 - erreur réseau globale = bandeau persistant top, \"Réessayer\".\r\n * Z-index 2000 (above modals).\r\n *\r\n * <NetworkErrorBanner\r\n * visible={!online}\r\n * message=\"Connexion perdue.\"\r\n * onRetry={refresh}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * `message` and `retryLabel` are direct overrides on the props.\r\n * Defaults stay French for back-compat.\r\n */\r\n\r\nexport interface NetworkErrorBannerProps {\r\n visible?: boolean | undefined;\r\n message?: React.ReactNode | undefined;\r\n onRetry?: (() => void) | undefined;\r\n retryLabel?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction NetworkErrorBanner({\r\n visible,\r\n message = \"Connexion perdue.\",\r\n onRetry,\r\n retryLabel = \"Réessayer\",\r\n}: NetworkErrorBannerProps) {\r\n if (!visible) return null;\r\n return (\r\n <Box role=\"alert\" aria-live=\"assertive\" className=\"pui-net-error-banner\">\r\n <ErrorIcon fontSize=\"small\" aria-hidden=\"true\" />\r\n <span>{message}</span>\r\n {onRetry && (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={onRetry}\r\n className=\"pui-net-error-banner-retry\"\r\n sx={{\r\n // R-AI.1 - tokenised inverse colour mix (was rgba(255,255,255,...))\r\n background: \"color-mix(in srgb, var(--fg-inverse) 20%, transparent)\",\r\n border:\r\n \"1px solid color-mix(in srgb, var(--fg-inverse) 35%, transparent)\",\r\n color: \"inherit\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"var(--s-1) var(--s-3)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n // NEB-1 - logical inline-start margin so it sits correctly under RTL.\r\n marginInlineStart: 0.5,\r\n transition: \"background var(--duration-fast, 80ms) ease\",\r\n \"&:hover\": {\r\n background:\r\n \"color-mix(in srgb, var(--fg-inverse) 30%, transparent)\",\r\n },\r\n // R-F.1 - focus visible required, charter §05.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--fg-inverse)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {retryLabel}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default NetworkErrorBanner;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,mCAAmC;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAwBA,SAASC,kBAAkBA,CAAAC,IAAA,EAKC;EAAA,IAJ1BC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IAAAC,YAAA,GAAAF,IAAA,CACPG,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,mBAAmB,GAAAA,YAAA;IAC7BE,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IAAAC,eAAA,GAAAL,IAAA,CACPM,UAAU;IAAVA,UAAU,GAAAD,eAAA,cAAG,WAAW,GAAAA,eAAA;EAExB,IAAI,CAACJ,OAAO,EAAE,OAAO,IAAI;EACzB,oBACEH,KAAA,CAACL,GAAG;IAACc,IAAI,EAAC,OAAO;IAAC,aAAU,WAAW;IAACC,SAAS,EAAC,sBAAsB;IAAAC,QAAA,gBACtEb,IAAA,CAACF,SAAS;MAACgB,QAAQ,EAAC,OAAO;MAAC,eAAY;IAAM,CAAE,CAAC,eACjDd,IAAA;MAAAa,QAAA,EAAON;IAAO,CAAO,CAAC,EACrBC,OAAO,iBACNR,IAAA,CAACH,GAAG;MACFkB,SAAS,EAAC,QAAQ;MAClBC,IAAI,EAAC,QAAQ;MACbC,OAAO,EAAET,OAAQ;MACjBI,SAAS,EAAC,4BAA4B;MACtCM,EAAE,EAAE;QACF;QACAC,UAAU,EAAE,wDAAwD;QACpEC,MAAM,EACJ,kEAAkE;QACpEC,KAAK,EAAE,SAAS;QAChBC,YAAY,EAAE,aAAa;QAC3BC,OAAO,EAAE,uBAAuB;QAChCT,QAAQ,EAAE,gBAAgB;QAC1BU,UAAU,EAAE,oBAAoB;QAChCC,MAAM,EAAE,SAAS;QACjBC,UAAU,EAAE,SAAS;QACrB;QACAC,iBAAiB,EAAE,GAAG;QACtBC,UAAU,EAAE,4CAA4C;QACxD,SAAS,EAAE;UACTT,UAAU,EACR;QACJ,CAAC;QACD;QACA,iBAAiB,EAAE;UACjBU,OAAO,EAAE,6BAA6B;UACtCC,aAAa,EAAE;QACjB;MACF,CAAE;MAAAjB,QAAA,EAEDH;IAAU,CACR,CACN;EAAA,CACE,CAAC;AAEV;AAEA,eAAeP,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"NetworkErrorBanner.js","names":["React","Box","ErrorIcon","jsx","_jsx","jsxs","_jsxs","NetworkErrorBanner","visible","message","onRetry","retryLabel","role","className","children","fontSize","component","type","onClick","sx","background","border","color","borderRadius","padding","fontWeight","cursor","fontFamily","marginInlineStart","transition","outline","outlineOffset"],"sources":["../../../../src/lib/v2/patterns/NetworkErrorBanner.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ErrorIcon from \"@mui/icons-material/ErrorOutlined\";\r\n\r\n/**\r\n * NetworkErrorBanner - Portnet UI v2 (pattern)\r\n *\r\n * Charter R-4.3 - erreur réseau globale = bandeau persistant top, \"Réessayer\".\r\n * Z-index 2000 (above modals).\r\n *\r\n * <NetworkErrorBanner\r\n * visible={!online}\r\n * message=\"Connexion perdue.\"\r\n * onRetry={refresh}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * `message` and `retryLabel` are direct overrides on the props.\r\n * Defaults stay French for back-compat.\r\n */\r\n\r\nexport interface NetworkErrorBannerProps {\r\n visible?: boolean | undefined;\r\n message?: React.ReactNode | undefined;\r\n onRetry?: (() => void) | undefined;\r\n retryLabel?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction NetworkErrorBanner({\r\n visible,\r\n message = \"Connexion perdue.\",\r\n onRetry,\r\n retryLabel = \"Réessayer\",\r\n}: NetworkErrorBannerProps) {\r\n if (!visible) return null;\r\n return (\r\n <Box role=\"alert\" aria-live=\"assertive\" className=\"pui-net-error-banner\">\r\n <ErrorIcon fontSize=\"small\" aria-hidden=\"true\" />\r\n <span>{message}</span>\r\n {onRetry && (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={onRetry}\r\n className=\"pui-net-error-banner-retry\"\r\n sx={{\r\n // R-AI.1 - tokenised inverse colour mix (was rgba(255,255,255,...))\r\n background: \"color-mix(in srgb, var(--fg-inverse) 20%, transparent)\",\r\n border:\r\n \"1px solid color-mix(in srgb, var(--fg-inverse) 35%, transparent)\",\r\n color: \"inherit\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"var(--s-1) var(--s-3)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n // NEB-1 - logical inline-start margin so it sits correctly under RTL.\r\n marginInlineStart: 0.5,\r\n transition: \"background var(--duration-fast, 80ms) ease\",\r\n \"&:hover\": {\r\n background:\r\n \"color-mix(in srgb, var(--fg-inverse) 30%, transparent)\",\r\n },\r\n // R-F.1 - focus visible required, charter §05.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--fg-inverse)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {retryLabel}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default NetworkErrorBanner;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,mCAAmC;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAwBA,SAASC,kBAAkBA,CAAC;EAC1BC,OAAO;EACPC,OAAO,GAAG,mBAAmB;EAC7BC,OAAO;EACPC,UAAU,GAAG;AACU,CAAC,EAAE;EAC1B,IAAI,CAACH,OAAO,EAAE,OAAO,IAAI;EACzB,oBACEF,KAAA,CAACL,GAAG;IAACW,IAAI,EAAC,OAAO;IAAC,aAAU,WAAW;IAACC,SAAS,EAAC,sBAAsB;IAAAC,QAAA,gBACtEV,IAAA,CAACF,SAAS;MAACa,QAAQ,EAAC,OAAO;MAAC,eAAY;IAAM,CAAE,CAAC,eACjDX,IAAA;MAAAU,QAAA,EAAOL;IAAO,CAAO,CAAC,EACrBC,OAAO,iBACNN,IAAA,CAACH,GAAG;MACFe,SAAS,EAAC,QAAQ;MAClBC,IAAI,EAAC,QAAQ;MACbC,OAAO,EAAER,OAAQ;MACjBG,SAAS,EAAC,4BAA4B;MACtCM,EAAE,EAAE;QACF;QACAC,UAAU,EAAE,wDAAwD;QACpEC,MAAM,EACJ,kEAAkE;QACpEC,KAAK,EAAE,SAAS;QAChBC,YAAY,EAAE,aAAa;QAC3BC,OAAO,EAAE,uBAAuB;QAChCT,QAAQ,EAAE,gBAAgB;QAC1BU,UAAU,EAAE,oBAAoB;QAChCC,MAAM,EAAE,SAAS;QACjBC,UAAU,EAAE,SAAS;QACrB;QACAC,iBAAiB,EAAE,GAAG;QACtBC,UAAU,EAAE,4CAA4C;QACxD,SAAS,EAAE;UACTT,UAAU,EACR;QACJ,CAAC;QACD;QACA,iBAAiB,EAAE;UACjBU,OAAO,EAAE,6BAA6B;UACtCC,aAAa,EAAE;QACjB;MACF,CAAE;MAAAjB,QAAA,EAEDH;IAAU,CACR,CACN;EAAA,CACE,CAAC;AAEV;AAEA,eAAeJ,kBAAkB","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
  import * as React from "react";
8
2
  import Box from "@mui/material/Box";
9
3
 
@@ -35,12 +29,13 @@ import Box from "@mui/material/Box";
35
29
  * </PageContent>
36
30
  */
37
31
  import { jsx as _jsx } from "react/jsx-runtime";
38
- function PageContent(_ref) {
39
- var children = _ref.children,
40
- gap = _ref.gap,
41
- sx = _ref.sx;
32
+ function PageContent({
33
+ children,
34
+ gap,
35
+ sx
36
+ }) {
42
37
  return /*#__PURE__*/_jsx(Box, {
43
- sx: _objectSpread({
38
+ sx: {
44
39
  /* Responsive padding — charter §7.1 bis */
45
40
  padding: {
46
41
  xs: "var(--s-3)" /* 12 px — mobile */,
@@ -50,11 +45,12 @@ function PageContent(_ref) {
50
45
  /* Section layout */
51
46
  display: "flex",
52
47
  flexDirection: "column",
53
- gap: gap !== null && gap !== void 0 ? gap : "var(--s-4)",
48
+ gap: gap ?? "var(--s-4)",
54
49
  /* Prevent content from overflowing the viewport on narrow screens
55
50
  while still allowing inner scroll containers (DataGrid) to work. */
56
- minWidth: 0
57
- }, sx),
51
+ minWidth: 0,
52
+ ...sx
53
+ },
58
54
  children: children
59
55
  });
60
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PageContent.js","names":["React","Box","jsx","_jsx","PageContent","_ref","children","gap","sx","_objectSpread","padding","xs","sm","lg","display","flexDirection","minWidth"],"sources":["../../../../src/lib/v2/patterns/PageContent.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport type { SystemStyleObject } from \"@mui/system\";\r\n\r\n/**\r\n * PageContent — Portnet UI v2 (pattern)\r\n *\r\n * Charter §07 · Template canonique — zone contenu (§7.1 bis).\r\n *\r\n * Wraps the main content zone inside the shell applicatif with the\r\n * canonical responsive padding and vertical gap defined in §7.1 bis:\r\n *\r\n * xs ( 0 – 480 px ) → padding 12 px (--s-3)\r\n * sm ( 481 – 1023 px) → padding 16 px (--s-4)\r\n * lg ( 1024 px + ) → padding 24 px (--s-6)\r\n *\r\n * Usage:\r\n * import { PageContent } from \"@portnet/ui\";\r\n *\r\n * <PageContent>\r\n * <FilterCard />\r\n * <DataGrid ... />\r\n * </PageContent>\r\n *\r\n * Override gap or add extra sx when the default section gap\r\n * (var(--s-4) = 16 px) is not appropriate for the context.\r\n *\r\n * <PageContent gap=\"var(--s-6)\" sx={{ maxWidth: 720 }}>\r\n * ...\r\n * </PageContent>\r\n */\r\n\r\nexport interface PageContentProps {\r\n /** Page sections / content */\r\n children?: React.ReactNode | undefined;\r\n /** Override the vertical gap between direct children (default var(--s-4)) */\r\n gap?: string | undefined;\r\n /** MUI sx overrides applied to the root Box */\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction PageContent({ children, gap, sx }: PageContentProps) {\r\n return (\r\n <Box\r\n sx={{\r\n /* Responsive padding — charter §7.1 bis */\r\n padding: {\r\n xs: \"var(--s-3)\" /* 12 px — mobile */,\r\n sm: \"var(--s-4)\" /* 16 px — tablet */,\r\n lg: \"var(--s-6)\" /* 24 px — desktop */,\r\n },\r\n /* Section layout */\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: gap ?? \"var(--s-4)\",\r\n /* Prevent content from overflowing the viewport on narrow screens\r\n while still allowing inner scroll containers (DataGrid) to work. */\r\n minWidth: 0,\r\n ...(sx as SystemStyleObject<Theme>),\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default PageContent;\r\n"],"mappings":";;;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;;AAInC;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;AA1BA,SAAAC,GAAA,IAAAC,IAAA;AAqCA,SAASC,WAAWA,CAAAC,IAAA,EAA0C;EAAA,IAAvCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IAAEC,EAAE,GAAAH,IAAA,CAAFG,EAAE;EACtC,oBACEL,IAAA,CAACF,GAAG;IACFO,EAAE,EAAAC,aAAA;MACA;MACAC,OAAO,EAAE;QACPC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;MACnB,CAAC;MACD;MACAC,OAAO,EAAE,MAAM;MACfC,aAAa,EAAE,QAAQ;MACvBR,GAAG,EAAEA,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,YAAY;MACxB;AACR;MACQS,QAAQ,EAAE;IAAC,GACPR,EAAE,CACN;IAAAF,QAAA,EAEDA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeF,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"PageContent.js","names":["React","Box","jsx","_jsx","PageContent","children","gap","sx","padding","xs","sm","lg","display","flexDirection","minWidth"],"sources":["../../../../src/lib/v2/patterns/PageContent.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport type { SystemStyleObject } from \"@mui/system\";\r\n\r\n/**\r\n * PageContent — Portnet UI v2 (pattern)\r\n *\r\n * Charter §07 · Template canonique — zone contenu (§7.1 bis).\r\n *\r\n * Wraps the main content zone inside the shell applicatif with the\r\n * canonical responsive padding and vertical gap defined in §7.1 bis:\r\n *\r\n * xs ( 0 – 480 px ) → padding 12 px (--s-3)\r\n * sm ( 481 – 1023 px) → padding 16 px (--s-4)\r\n * lg ( 1024 px + ) → padding 24 px (--s-6)\r\n *\r\n * Usage:\r\n * import { PageContent } from \"@portnet/ui\";\r\n *\r\n * <PageContent>\r\n * <FilterCard />\r\n * <DataGrid ... />\r\n * </PageContent>\r\n *\r\n * Override gap or add extra sx when the default section gap\r\n * (var(--s-4) = 16 px) is not appropriate for the context.\r\n *\r\n * <PageContent gap=\"var(--s-6)\" sx={{ maxWidth: 720 }}>\r\n * ...\r\n * </PageContent>\r\n */\r\n\r\nexport interface PageContentProps {\r\n /** Page sections / content */\r\n children?: React.ReactNode | undefined;\r\n /** Override the vertical gap between direct children (default var(--s-4)) */\r\n gap?: string | undefined;\r\n /** MUI sx overrides applied to the root Box */\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction PageContent({ children, gap, sx }: PageContentProps) {\r\n return (\r\n <Box\r\n sx={{\r\n /* Responsive padding — charter §7.1 bis */\r\n padding: {\r\n xs: \"var(--s-3)\" /* 12 px — mobile */,\r\n sm: \"var(--s-4)\" /* 16 px — tablet */,\r\n lg: \"var(--s-6)\" /* 24 px — desktop */,\r\n },\r\n /* Section layout */\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: gap ?? \"var(--s-4)\",\r\n /* Prevent content from overflowing the viewport on narrow screens\r\n while still allowing inner scroll containers (DataGrid) to work. */\r\n minWidth: 0,\r\n ...(sx as SystemStyleObject<Theme>),\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default PageContent;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;;AAInC;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;AA1BA,SAAAC,GAAA,IAAAC,IAAA;AAqCA,SAASC,WAAWA,CAAC;EAAEC,QAAQ;EAAEC,GAAG;EAAEC;AAAqB,CAAC,EAAE;EAC5D,oBACEJ,IAAA,CAACF,GAAG;IACFM,EAAE,EAAE;MACF;MACAC,OAAO,EAAE;QACPC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;MACnB,CAAC;MACD;MACAC,OAAO,EAAE,MAAM;MACfC,aAAa,EAAE,QAAQ;MACvBP,GAAG,EAAEA,GAAG,IAAI,YAAY;MACxB;AACR;MACQQ,QAAQ,EAAE,CAAC;MACX,GAAIP;IACN,CAAE;IAAAF,QAAA,EAEDA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeD,WAAW","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ import * as React from "react";
2
+ import VisibilityIcon from "@mui/icons-material/Visibility";
3
+ import Button from "../components/Button";
4
+ import Drawer from "../components/Drawer";
5
+ import KV from "../components/KV";
6
+ import KVGrid from "../components/KVGrid";
7
+ import { mergeLabels } from "../utils/mergeLabels";
8
+
9
+ /**
10
+ * PreviewDrawer — Portnet UI v2 (pattern)
11
+ *
12
+ * §Preview Drawer of the Platform Mandatory UX Patterns: the summary of a
13
+ * listing row — status, key information, quick actions — shown WITHOUT leaving
14
+ * the listing.
15
+ *
16
+ * ─────────────────────────────────────────────────────────────────────────────
17
+ * WHY THIS BELONGS IN THE LIBRARY (capability gap G-40)
18
+ *
19
+ * §Row Interaction and §Preview Drawer are both MUST, on EVERY listing page of
20
+ * the platform: rows must be clickable, and clicking one must open a preview
21
+ * carrying summary, status, main information and quick actions. That is not a
22
+ * per-module feature, it is the platform's listing contract — and the library
23
+ * shipped only `Drawer`, the empty shell.
24
+ *
25
+ * So each module assembled the same body by hand, and the copies drifted where
26
+ * it is least visible: `ms-ti-fe` renders its label/value block with
27
+ * `KVGrid` + `KV`, while `refonte-frontend` had built a local `<dl>` with its
28
+ * own two-column grid — the same concept, two renderings, which is precisely
29
+ * what R-2.1 forbids. That module's Area 3 pass had to correct it before this
30
+ * promotion could even be considered.
31
+ *
32
+ * >>> AND THE SHELL WITHOUT THE BODY IS WHAT MADE THE UNSAFE VERSION LOOK
33
+ * >>> REASONABLE. The promoted implementation had carried an
34
+ * >>> `as unknown as DemandeRow` assertion, because a single component was
35
+ * >>> generic over the row type while computing its DEFAULTS from one specific
36
+ * >>> type's fields. Its own comment recorded the consequence: without those
37
+ * >>> defaults "the drawer does not fail — it shows dashes and an Unknown
38
+ * >>> status, which is worse than an error because it is noticed late". The
39
+ * >>> split below is what removes the cast rather than hiding it: THIS
40
+ * >>> component reads NO field of `row`. It renders what it is given and hands
41
+ * >>> the row back to the host's callbacks. A business default therefore lives
42
+ * >>> in a host wrapper whose `row` is a concrete type, and neither half has to
43
+ * >>> assert anything. <<<
44
+ * ─────────────────────────────────────────────────────────────────────────────
45
+ *
46
+ * VALUES, NOT ACCESSORS, AND THE REASON IS THE CLOSING ANIMATION.
47
+ * `title` / `status` / `items` are optional VALUES rather than
48
+ * `(row: T) => …` functions. Hosts pass them through a conditional spread
49
+ * (`{...(row ? { title: …, items: … } : {})}`), which requiring them would
50
+ * make invalid — the compiler cannot see that the spread always supplies the
51
+ * keys. The natural workaround, mounting the drawer only when a row exists,
52
+ * would UNMOUNT it on close and destroy `Drawer`'s 220 ms exit animation
53
+ * (Charter §08).
54
+ *
55
+ * Consequence accepted: a missing `title` is not a compile error, it falls back
56
+ * to `labels.fallbackTitle`. The gain is that the drawer can no longer PRETEND
57
+ * an arbitrary row is a particular business object.
58
+ *
59
+ * Renders nothing when `row` is null, so hosts can mount it unconditionally.
60
+ *
61
+ * Usage:
62
+ *
63
+ * <PreviewDrawer<DemandeRow>
64
+ * open={apercuOuvert}
65
+ * onClose={fermer}
66
+ * row={ligneApercu}
67
+ * subtitle="Déclaration d'importation"
68
+ * onOpenItem={consulter}
69
+ * labels={{ open: "Consulter la demande" }}
70
+ * {...(ligneApercu ? { title: ligneApercu.identifiant, items: fiche } : {})}
71
+ * />
72
+ */
73
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
74
+ const DEFAULT_LABELS = Object.freeze({
75
+ /** Generic on purpose: the business verb+object belongs to the host (§9.2). */
76
+ open: "Consulter",
77
+ fallbackTitle: "Détail"
78
+ });
79
+
80
+ /** One label/value line of the summary sheet. */
81
+
82
+ function PreviewDrawer({
83
+ open,
84
+ onClose,
85
+ row,
86
+ subtitle,
87
+ title,
88
+ status,
89
+ items,
90
+ minColumnWidth,
91
+ onOpenItem,
92
+ canOpenItem,
93
+ actions,
94
+ onPrev,
95
+ onNext,
96
+ hasPrev,
97
+ hasNext,
98
+ children,
99
+ labels
100
+ }) {
101
+ const L = mergeLabels(DEFAULT_LABELS, labels);
102
+ if (!row) return null;
103
+ const canOpen = canOpenItem ? canOpenItem(row) : true;
104
+ const lines = items ?? [];
105
+ return /*#__PURE__*/_jsxs(Drawer, {
106
+ open: open,
107
+ onClose: onClose,
108
+ title: title ?? L.fallbackTitle,
109
+ ...(subtitle !== undefined ? {
110
+ subtitle
111
+ } : {}),
112
+ ...(status !== undefined ? {
113
+ status
114
+ } : {}),
115
+ ...(onPrev ? {
116
+ onPrev
117
+ } : {}),
118
+ ...(onNext ? {
119
+ onNext
120
+ } : {}),
121
+ ...(hasPrev !== undefined ? {
122
+ hasPrev
123
+ } : {}),
124
+ ...(hasNext !== undefined ? {
125
+ hasNext
126
+ } : {}),
127
+ actions: actions ?? (canOpen && onOpenItem ? /*#__PURE__*/_jsx(Button, {
128
+ icon: /*#__PURE__*/_jsx(VisibilityIcon, {}),
129
+ onClick: () => onOpenItem(row),
130
+ children: L.open
131
+ }) : null),
132
+ children: [lines.length > 0 && /*#__PURE__*/_jsx(KVGrid, {
133
+ ...(minColumnWidth !== undefined ? {
134
+ minColumnWidth
135
+ } : {}),
136
+ children: lines.map((line, index) => /*#__PURE__*/_jsx(KV
137
+ // Index-based key on purpose: `label` is a ReactNode, so it is
138
+ // not always a usable key, and this list is not reorderable —
139
+ // it is rebuilt whole per row (R-R.3's exception).
140
+ , {
141
+ label: line.label,
142
+ ...(line.value !== undefined ? {
143
+ value: line.value
144
+ } : {}),
145
+ ...(line.mono !== undefined ? {
146
+ mono: line.mono
147
+ } : {})
148
+ }, index))
149
+ }), children]
150
+ });
151
+ }
152
+ export default PreviewDrawer;
153
+ //# sourceMappingURL=PreviewDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewDrawer.js","names":["React","VisibilityIcon","Button","Drawer","KV","KVGrid","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","open","fallbackTitle","PreviewDrawer","onClose","row","subtitle","title","status","items","minColumnWidth","onOpenItem","canOpenItem","actions","onPrev","onNext","hasPrev","hasNext","children","labels","L","canOpen","lines","undefined","icon","onClick","length","map","line","index","label","value","mono"],"sources":["../../../../src/lib/v2/patterns/PreviewDrawer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport Button from \"../components/Button\";\r\nimport Drawer from \"../components/Drawer\";\r\nimport KV from \"../components/KV\";\r\nimport KVGrid from \"../components/KVGrid\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * PreviewDrawer — Portnet UI v2 (pattern)\r\n *\r\n * §Preview Drawer of the Platform Mandatory UX Patterns: the summary of a\r\n * listing row — status, key information, quick actions — shown WITHOUT leaving\r\n * the listing.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-40)\r\n *\r\n * §Row Interaction and §Preview Drawer are both MUST, on EVERY listing page of\r\n * the platform: rows must be clickable, and clicking one must open a preview\r\n * carrying summary, status, main information and quick actions. That is not a\r\n * per-module feature, it is the platform's listing contract — and the library\r\n * shipped only `Drawer`, the empty shell.\r\n *\r\n * So each module assembled the same body by hand, and the copies drifted where\r\n * it is least visible: `ms-ti-fe` renders its label/value block with\r\n * `KVGrid` + `KV`, while `refonte-frontend` had built a local `<dl>` with its\r\n * own two-column grid — the same concept, two renderings, which is precisely\r\n * what R-2.1 forbids. That module's Area 3 pass had to correct it before this\r\n * promotion could even be considered.\r\n *\r\n * >>> AND THE SHELL WITHOUT THE BODY IS WHAT MADE THE UNSAFE VERSION LOOK\r\n * >>> REASONABLE. The promoted implementation had carried an\r\n * >>> `as unknown as DemandeRow` assertion, because a single component was\r\n * >>> generic over the row type while computing its DEFAULTS from one specific\r\n * >>> type's fields. Its own comment recorded the consequence: without those\r\n * >>> defaults \"the drawer does not fail — it shows dashes and an Unknown\r\n * >>> status, which is worse than an error because it is noticed late\". The\r\n * >>> split below is what removes the cast rather than hiding it: THIS\r\n * >>> component reads NO field of `row`. It renders what it is given and hands\r\n * >>> the row back to the host's callbacks. A business default therefore lives\r\n * >>> in a host wrapper whose `row` is a concrete type, and neither half has to\r\n * >>> assert anything. <<<\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * VALUES, NOT ACCESSORS, AND THE REASON IS THE CLOSING ANIMATION.\r\n * `title` / `status` / `items` are optional VALUES rather than\r\n * `(row: T) => …` functions. Hosts pass them through a conditional spread\r\n * (`{...(row ? { title: …, items: … } : {})}`), which requiring them would\r\n * make invalid — the compiler cannot see that the spread always supplies the\r\n * keys. The natural workaround, mounting the drawer only when a row exists,\r\n * would UNMOUNT it on close and destroy `Drawer`'s 220 ms exit animation\r\n * (Charter §08).\r\n *\r\n * Consequence accepted: a missing `title` is not a compile error, it falls back\r\n * to `labels.fallbackTitle`. The gain is that the drawer can no longer PRETEND\r\n * an arbitrary row is a particular business object.\r\n *\r\n * Renders nothing when `row` is null, so hosts can mount it unconditionally.\r\n *\r\n * Usage:\r\n *\r\n * <PreviewDrawer<DemandeRow>\r\n * open={apercuOuvert}\r\n * onClose={fermer}\r\n * row={ligneApercu}\r\n * subtitle=\"Déclaration d'importation\"\r\n * onOpenItem={consulter}\r\n * labels={{ open: \"Consulter la demande\" }}\r\n * {...(ligneApercu ? { title: ligneApercu.identifiant, items: fiche } : {})}\r\n * />\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n /** Generic on purpose: the business verb+object belongs to the host (§9.2). */\r\n open: \"Consulter\",\r\n fallbackTitle: \"Détail\",\r\n});\r\n\r\nexport interface PreviewDrawerLabels {\r\n open?: string | undefined;\r\n fallbackTitle?: string | undefined;\r\n}\r\n\r\n/** One label/value line of the summary sheet. */\r\nexport interface PreviewDrawerItem {\r\n label: React.ReactNode;\r\n value?: React.ReactNode | undefined;\r\n /** Renders the value in the mono face — IDs, references, amounts (§2.2). */\r\n mono?: boolean | undefined;\r\n}\r\n\r\nexport interface PreviewDrawerProps<T> {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n /** The previewed row. `null` renders nothing. */\r\n row: T | null;\r\n /** What kind of thing this is. Host vocabulary (§9.4). */\r\n subtitle?: React.ReactNode | undefined;\r\n /** Falls back to `labels.fallbackTitle` — see the note on values vs accessors. */\r\n title?: React.ReactNode | undefined;\r\n /** Status chip. Build it from `Status` so it stays on the `--status-*` palette (R-2.2). */\r\n status?: React.ReactNode | undefined;\r\n /** The summary sheet. Rendered as `KVGrid` + `KV`. */\r\n items?: readonly PreviewDrawerItem[] | undefined;\r\n /** Track minimum of the summary grid, in px. Defaults to `KVGrid`'s own. */\r\n minColumnWidth?: number | undefined;\r\n /** Opens the full record. Without it, no default action is rendered. */\r\n onOpenItem?: ((row: T) => void) | undefined;\r\n /**\r\n * Whether the open action applies to this row.\r\n *\r\n * Defaults to ALLOWED. This component knows no business status, so it cannot\r\n * derive a masking rule — and inventing one would be worse than having none.\r\n */\r\n canOpenItem?: ((row: T) => boolean) | undefined;\r\n /** Replaces the default action entirely. */\r\n actions?: React.ReactNode | undefined;\r\n onPrev?: (() => void) | undefined;\r\n onNext?: (() => void) | undefined;\r\n hasPrev?: boolean | undefined;\r\n hasNext?: boolean | undefined;\r\n /** Rendered under the summary sheet — tabs, documents, a nested grid. */\r\n children?: React.ReactNode | undefined;\r\n labels?: PreviewDrawerLabels | undefined;\r\n}\r\n\r\nfunction PreviewDrawer<T>({\r\n open,\r\n onClose,\r\n row,\r\n subtitle,\r\n title,\r\n status,\r\n items,\r\n minColumnWidth,\r\n onOpenItem,\r\n canOpenItem,\r\n actions,\r\n onPrev,\r\n onNext,\r\n hasPrev,\r\n hasNext,\r\n children,\r\n labels,\r\n}: PreviewDrawerProps<T>) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n if (!row) return null;\r\n\r\n const canOpen = canOpenItem ? canOpenItem(row) : true;\r\n const lines: readonly PreviewDrawerItem[] = items ?? [];\r\n\r\n return (\r\n <Drawer\r\n open={open}\r\n onClose={onClose}\r\n title={title ?? L.fallbackTitle}\r\n {...(subtitle !== undefined ? { subtitle } : {})}\r\n {...(status !== undefined ? { status } : {})}\r\n {...(onPrev ? { onPrev } : {})}\r\n {...(onNext ? { onNext } : {})}\r\n {...(hasPrev !== undefined ? { hasPrev } : {})}\r\n {...(hasNext !== undefined ? { hasNext } : {})}\r\n actions={\r\n actions ??\r\n (canOpen && onOpenItem ? (\r\n <Button icon={<VisibilityIcon />} onClick={() => onOpenItem(row)}>\r\n {L.open}\r\n </Button>\r\n ) : null)\r\n }\r\n >\r\n {lines.length > 0 && (\r\n <KVGrid {...(minColumnWidth !== undefined ? { minColumnWidth } : {})}>\r\n {lines.map((line, index) => (\r\n <KV\r\n // Index-based key on purpose: `label` is a ReactNode, so it is\r\n // not always a usable key, and this list is not reorderable —\r\n // it is rebuilt whole per row (R-R.3's exception).\r\n key={index}\r\n label={line.label}\r\n {...(line.value !== undefined ? { value: line.value } : {})}\r\n {...(line.mono !== undefined ? { mono: line.mono } : {})}\r\n />\r\n ))}\r\n </KVGrid>\r\n )}\r\n {children}\r\n </Drawer>\r\n );\r\n}\r\n\r\nexport default PreviewDrawer;\r\n"],"mappings":"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","ignoreList":[]}