@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":"OverflowMenu.js","names":["React","IconButton","Menu","MenuItem","Divider","MoreHorizIcon","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DEFAULT_LABELS","Object","freeze","trigger","shortcut","s","concat","MENU_SLOT_PROPS","paper","sx","minWidth","boxShadow","border","borderRadius","list","role","dense","OverflowMenu","_ref","_ref$actions","actions","ariaLabel","_ref$align","align","labels","L","triggerAria","_React$useState","useState","_React$useState2","_slicedToArray","anchor","setAnchor","open","Boolean","process","env","length","console","warn","handleOpen","e","currentTarget","handleClose","triggerNode","cloneElement","onClick","event","_onClick","_ref2","props","call","size","color","children","fontSize","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","map","a","i","divider","borderColor","disabled","_a$onClick","danger","background","undefined","gap","icon","display","flex","label","component","padding","fontFamily"],"sources":["../../../../src/lib/v2/components/OverflowMenu.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Menu from \"@mui/material/Menu\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport MoreHorizIcon from \"@mui/icons-material/MoreHoriz\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * OverflowMenu - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"OverflowMenu\". ARIA menu for ancillary row actions.\r\n *\r\n * Max 7 items · separator before danger · kbd shortcut visible right.\r\n *\r\n * <OverflowMenu actions={[\r\n * { label: \"Voir le détail\", icon: <Visibility />, onClick: open, shortcut: \"↵\" },\r\n * { label: \"Modifier\", icon: <Edit />, onClick: edit },\r\n * { divider: true },\r\n * { label: \"Supprimer\", icon: <Delete />, onClick: remove, danger: true, shortcut: \"⌫\" },\r\n * ]} />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <OverflowMenu labels={{\r\n * trigger: \"More actions\",\r\n * shortcut: (s) => `Shortcut ${s}`,\r\n * }} />\r\n *\r\n * The legacy `ariaLabel` prop still wins over labels.trigger when\r\n * both are passed, for back-compat.\r\n */\r\n\r\nexport interface OverflowMenuAction {\r\n label?: React.ReactNode | undefined;\r\n /** Rendered directly (no cloneElement) — any renderable node. */\r\n icon?: React.ReactNode | undefined;\r\n onClick?: (() => void) | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n danger?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n divider?: boolean | undefined;\r\n}\r\n\r\nexport interface OverflowMenuLabels {\r\n trigger?: string | undefined;\r\n shortcut?: string | ((shortcut: React.ReactNode) => string) | undefined;\r\n}\r\n\r\nexport interface OverflowMenuProps {\r\n /** Row actions. Charter recommends ≤ 7. @default [] */\r\n actions?: OverflowMenuAction[] | undefined;\r\n /**\r\n * Custom trigger element. Cloned via React.cloneElement to inject the\r\n * open handler + aria-haspopup/aria-expanded (must be a single element).\r\n */\r\n trigger?: React.ReactElement | undefined;\r\n /** Legacy accessible name for the default trigger (wins over labels.trigger). */\r\n ariaLabel?: string | undefined;\r\n /** Menu alignment. @default \"right\" */\r\n align?: \"left\" | \"right\" | undefined;\r\n labels?: OverflowMenuLabels | undefined;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n trigger: \"Plus d'actions\",\r\n shortcut: (s: React.ReactNode) => `Raccourci ${s}`,\r\n});\r\n\r\n// MUI v9: slot bag for the Menu. The component already used slotProps.paper\r\n// for the paper slot; this commit moves MenuListProps onto the same path\r\n// via the `list` slot key. Hoisted so the reference is stable across\r\n// renders. `role: \"menu\" as const` keeps the AriaRole literal.\r\nconst MENU_SLOT_PROPS = Object.freeze({\r\n paper: {\r\n sx: {\r\n minWidth: 200,\r\n boxShadow: \"var(--shadow-md)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n },\r\n },\r\n list: { role: \"menu\" as const, dense: true },\r\n});\r\n\r\nfunction OverflowMenu({\r\n actions = [],\r\n trigger,\r\n ariaLabel,\r\n align = \"right\",\r\n labels,\r\n}: OverflowMenuProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n // Legacy ariaLabel prop wins over labels.trigger.\r\n const triggerAria = ariaLabel ?? L.trigger;\r\n\r\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\r\n const open = Boolean(anchor);\r\n\r\n if (process.env[\"NODE_ENV\"] !== \"production\" && actions.length > 7) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\"[@portnet/ui v2] <OverflowMenu> over 7 items - charter recommends ≤ 7.\");\r\n }\r\n\r\n const handleOpen = (e: React.MouseEvent<HTMLElement>) => setAnchor(e.currentTarget);\r\n const handleClose = () => setAnchor(null);\r\n\r\n // R-2.1 - when a host passes a custom trigger, preserve its existing\r\n // onClick (analytics, focus capture, optimistic UI etc.) by chaining\r\n // it before our handleOpen. Without this, cloneElement silently\r\n // overwrites the host's handler.\r\n const triggerNode = trigger\r\n ? React.cloneElement(trigger as React.ReactElement<Record<string, unknown>>, {\r\n onClick: (event: React.MouseEvent<HTMLElement>) => {\r\n (trigger.props as { onClick?: (e: React.MouseEvent<HTMLElement>) => void }).onClick?.(event);\r\n handleOpen(event);\r\n },\r\n \"aria-haspopup\": \"menu\",\r\n \"aria-expanded\": open,\r\n })\r\n : (\r\n <IconButton\r\n onClick={handleOpen}\r\n aria-label={triggerAria}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={open}\r\n size=\"small\"\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <MoreHorizIcon fontSize=\"small\" />\r\n </IconButton>\r\n );\r\n\r\n return (\r\n <>\r\n {triggerNode}\r\n <Menu\r\n anchorEl={anchor}\r\n open={open}\r\n onClose={handleClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: align === \"right\" ? \"right\" : \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: align === \"right\" ? \"right\" : \"left\" }}\r\n slotProps={MENU_SLOT_PROPS}\r\n >\r\n {actions.map((a, i) => {\r\n if (a.divider) return <Divider key={`d-${i}`} sx={{ borderColor: \"var(--border)\" }} />;\r\n return (\r\n <MenuItem\r\n key={i}\r\n role=\"menuitem\"\r\n disabled={a.disabled}\r\n onClick={() => { handleClose(); a.onClick?.(); }}\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n color: a.danger ? \"var(--danger)\" : \"var(--fg)\",\r\n \"&:hover\": a.danger ? { background: \"var(--danger-soft)\" } : undefined,\r\n gap: 1.5,\r\n }}\r\n >\r\n {a.icon && <Box sx={{ display: \"inline-flex\", color: a.danger ? \"var(--danger)\" : \"var(--fg-muted)\" }}>{a.icon}</Box>}\r\n <Box sx={{ flex: 1 }}>{a.label}</Box>\r\n {a.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-label={typeof L.shortcut === \"function\" ? L.shortcut(a.shortcut) : `${L.shortcut} ${a.shortcut}`}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {a.shortcut}\r\n </Box>\r\n )}\r\n </MenuItem>\r\n );\r\n })}\r\n </Menu>\r\n </>\r\n );\r\n}\r\n\r\nexport default OverflowMenu;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"OverflowMenu.js","names":["React","IconButton","Menu","MenuItem","Divider","MoreHorizIcon","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DEFAULT_LABELS","Object","freeze","trigger","shortcut","s","MENU_SLOT_PROPS","paper","sx","minWidth","boxShadow","border","borderRadius","list","role","dense","OverflowMenu","actions","ariaLabel","align","labels","L","triggerAria","anchor","setAnchor","useState","open","Boolean","process","env","length","console","warn","handleOpen","e","currentTarget","handleClose","triggerNode","cloneElement","onClick","event","props","size","color","children","fontSize","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","map","a","i","divider","borderColor","disabled","danger","background","undefined","gap","icon","display","flex","label","component","padding","fontFamily"],"sources":["../../../../src/lib/v2/components/OverflowMenu.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Menu from \"@mui/material/Menu\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport MoreHorizIcon from \"@mui/icons-material/MoreHoriz\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * OverflowMenu - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"OverflowMenu\". ARIA menu for ancillary row actions.\r\n *\r\n * Max 7 items · separator before danger · kbd shortcut visible right.\r\n *\r\n * <OverflowMenu actions={[\r\n * { label: \"Voir le détail\", icon: <Visibility />, onClick: open, shortcut: \"↵\" },\r\n * { label: \"Modifier\", icon: <Edit />, onClick: edit },\r\n * { divider: true },\r\n * { label: \"Supprimer\", icon: <Delete />, onClick: remove, danger: true, shortcut: \"⌫\" },\r\n * ]} />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <OverflowMenu labels={{\r\n * trigger: \"More actions\",\r\n * shortcut: (s) => `Shortcut ${s}`,\r\n * }} />\r\n *\r\n * The legacy `ariaLabel` prop still wins over labels.trigger when\r\n * both are passed, for back-compat.\r\n */\r\n\r\nexport interface OverflowMenuAction {\r\n label?: React.ReactNode | undefined;\r\n /** Rendered directly (no cloneElement) — any renderable node. */\r\n icon?: React.ReactNode | undefined;\r\n onClick?: (() => void) | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n danger?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n divider?: boolean | undefined;\r\n}\r\n\r\nexport interface OverflowMenuLabels {\r\n trigger?: string | undefined;\r\n shortcut?: string | ((shortcut: React.ReactNode) => string) | undefined;\r\n}\r\n\r\nexport interface OverflowMenuProps {\r\n /** Row actions. Charter recommends ≤ 7. @default [] */\r\n actions?: OverflowMenuAction[] | undefined;\r\n /**\r\n * Custom trigger element. Cloned via React.cloneElement to inject the\r\n * open handler + aria-haspopup/aria-expanded (must be a single element).\r\n */\r\n trigger?: React.ReactElement | undefined;\r\n /** Legacy accessible name for the default trigger (wins over labels.trigger). */\r\n ariaLabel?: string | undefined;\r\n /** Menu alignment. @default \"right\" */\r\n align?: \"left\" | \"right\" | undefined;\r\n labels?: OverflowMenuLabels | undefined;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n trigger: \"Plus d'actions\",\r\n shortcut: (s: React.ReactNode) => `Raccourci ${s}`,\r\n});\r\n\r\n// MUI v9: slot bag for the Menu. The component already used slotProps.paper\r\n// for the paper slot; this commit moves MenuListProps onto the same path\r\n// via the `list` slot key. Hoisted so the reference is stable across\r\n// renders. `role: \"menu\" as const` keeps the AriaRole literal.\r\nconst MENU_SLOT_PROPS = Object.freeze({\r\n paper: {\r\n sx: {\r\n minWidth: 200,\r\n boxShadow: \"var(--shadow-md)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n },\r\n },\r\n list: { role: \"menu\" as const, dense: true },\r\n});\r\n\r\nfunction OverflowMenu({\r\n actions = [],\r\n trigger,\r\n ariaLabel,\r\n align = \"right\",\r\n labels,\r\n}: OverflowMenuProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n // Legacy ariaLabel prop wins over labels.trigger.\r\n const triggerAria = ariaLabel ?? L.trigger;\r\n\r\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\r\n const open = Boolean(anchor);\r\n\r\n if (process.env[\"NODE_ENV\"] !== \"production\" && actions.length > 7) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\"[@portnet/ui v2] <OverflowMenu> over 7 items - charter recommends ≤ 7.\");\r\n }\r\n\r\n const handleOpen = (e: React.MouseEvent<HTMLElement>) => setAnchor(e.currentTarget);\r\n const handleClose = () => setAnchor(null);\r\n\r\n // R-2.1 - when a host passes a custom trigger, preserve its existing\r\n // onClick (analytics, focus capture, optimistic UI etc.) by chaining\r\n // it before our handleOpen. Without this, cloneElement silently\r\n // overwrites the host's handler.\r\n const triggerNode = trigger\r\n ? React.cloneElement(trigger as React.ReactElement<Record<string, unknown>>, {\r\n onClick: (event: React.MouseEvent<HTMLElement>) => {\r\n (trigger.props as { onClick?: (e: React.MouseEvent<HTMLElement>) => void }).onClick?.(event);\r\n handleOpen(event);\r\n },\r\n \"aria-haspopup\": \"menu\",\r\n \"aria-expanded\": open,\r\n })\r\n : (\r\n <IconButton\r\n onClick={handleOpen}\r\n aria-label={triggerAria}\r\n aria-haspopup=\"menu\"\r\n aria-expanded={open}\r\n size=\"small\"\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <MoreHorizIcon fontSize=\"small\" />\r\n </IconButton>\r\n );\r\n\r\n return (\r\n <>\r\n {triggerNode}\r\n <Menu\r\n anchorEl={anchor}\r\n open={open}\r\n onClose={handleClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: align === \"right\" ? \"right\" : \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: align === \"right\" ? \"right\" : \"left\" }}\r\n slotProps={MENU_SLOT_PROPS}\r\n >\r\n {actions.map((a, i) => {\r\n if (a.divider) return <Divider key={`d-${i}`} sx={{ borderColor: \"var(--border)\" }} />;\r\n return (\r\n <MenuItem\r\n key={i}\r\n role=\"menuitem\"\r\n disabled={a.disabled}\r\n onClick={() => { handleClose(); a.onClick?.(); }}\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n color: a.danger ? \"var(--danger)\" : \"var(--fg)\",\r\n \"&:hover\": a.danger ? { background: \"var(--danger-soft)\" } : undefined,\r\n gap: 1.5,\r\n }}\r\n >\r\n {a.icon && <Box sx={{ display: \"inline-flex\", color: a.danger ? \"var(--danger)\" : \"var(--fg-muted)\" }}>{a.icon}</Box>}\r\n <Box sx={{ flex: 1 }}>{a.label}</Box>\r\n {a.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-label={typeof L.shortcut === \"function\" ? L.shortcut(a.shortcut) : `${L.shortcut} ${a.shortcut}`}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {a.shortcut}\r\n </Box>\r\n )}\r\n </MenuItem>\r\n );\r\n })}\r\n </Menu>\r\n </>\r\n );\r\n}\r\n\r\nexport default OverflowMenu;\r\n"],"mappings":"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","ignoreList":[]}
@@ -36,28 +36,21 @@ import "@react-pdf-viewer/default-layout/lib/styles/index.css";
36
36
  * bundle cost for the rest of the platform.
37
37
  */
38
38
  import { jsx as _jsx } from "react/jsx-runtime";
39
- function PdfViewer(_ref) {
40
- var fileUrl = _ref.fileUrl,
41
- base64 = _ref.base64,
42
- workerUrl = _ref.workerUrl,
43
- _ref$loading = _ref.loading,
44
- loading = _ref$loading === void 0 ? false : _ref$loading,
45
- error = _ref.error,
46
- _ref$errorTitle = _ref.errorTitle,
47
- errorTitle = _ref$errorTitle === void 0 ? "Échec du chargement du document" : _ref$errorTitle,
48
- _ref$emptyLabel = _ref.emptyLabel,
49
- emptyLabel = _ref$emptyLabel === void 0 ? "Aucun document à afficher." : _ref$emptyLabel,
50
- _ref$height = _ref.height,
51
- height = _ref$height === void 0 ? "75vh" : _ref$height,
52
- _ref$defaultScale = _ref.defaultScale,
53
- defaultScale = _ref$defaultScale === void 0 ? 0.95 : _ref$defaultScale,
54
- _ref$ariaLabel = _ref.ariaLabel,
55
- ariaLabel = _ref$ariaLabel === void 0 ? "Document PDF" : _ref$ariaLabel;
56
- var layoutPlugin = React.useMemo(function () {
57
- return defaultLayoutPlugin();
58
- }, []);
59
- var src = fileUrl !== null && fileUrl !== void 0 ? fileUrl : base64 ? "data:application/pdf;base64,".concat(base64) : undefined;
60
- var body;
39
+ function PdfViewer({
40
+ fileUrl,
41
+ base64,
42
+ workerUrl,
43
+ loading = false,
44
+ error,
45
+ errorTitle = "Échec du chargement du document",
46
+ emptyLabel = "Aucun document à afficher.",
47
+ height = "75vh",
48
+ defaultScale = 0.95,
49
+ ariaLabel = "Document PDF"
50
+ }) {
51
+ const layoutPlugin = React.useMemo(() => defaultLayoutPlugin(), []);
52
+ const src = fileUrl ?? (base64 ? `data:application/pdf;base64,${base64}` : undefined);
53
+ let body;
61
54
  if (loading) {
62
55
  body = /*#__PURE__*/_jsx(Box, {
63
56
  sx: {
@@ -86,23 +79,21 @@ function PdfViewer(_ref) {
86
79
  sx: {
87
80
  border: "1px solid var(--border)",
88
81
  borderRadius: "var(--r-md)",
89
- height: height,
82
+ height,
90
83
  width: "100%"
91
84
  },
92
85
  children: /*#__PURE__*/_jsx(Viewer, {
93
86
  fileUrl: src,
94
87
  plugins: [layoutPlugin],
95
88
  defaultScale: defaultScale,
96
- renderLoader: function renderLoader(percentages) {
97
- return /*#__PURE__*/_jsx(Box, {
98
- sx: {
99
- width: 240
100
- },
101
- children: /*#__PURE__*/_jsx(ProgressBar, {
102
- progress: Math.round(percentages)
103
- })
104
- });
105
- }
89
+ renderLoader: percentages => /*#__PURE__*/_jsx(Box, {
90
+ sx: {
91
+ width: 240
92
+ },
93
+ children: /*#__PURE__*/_jsx(ProgressBar, {
94
+ progress: Math.round(percentages)
95
+ })
96
+ })
106
97
  })
107
98
  })
108
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PdfViewer.js","names":["React","Box","Viewer","Worker","ProgressBar","defaultLayoutPlugin","Spinner","Banner","jsx","_jsx","PdfViewer","_ref","fileUrl","base64","workerUrl","_ref$loading","loading","error","_ref$errorTitle","errorTitle","_ref$emptyLabel","emptyLabel","_ref$height","height","_ref$defaultScale","defaultScale","_ref$ariaLabel","ariaLabel","layoutPlugin","useMemo","src","concat","undefined","body","sx","display","placeItems","minHeight","width","children","variant","title","border","borderRadius","plugins","renderLoader","percentages","progress","Math","round","role","justifyContent"],"sources":["../../../../src/lib/v2/components/PdfViewer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { Viewer, Worker, ProgressBar } from \"@react-pdf-viewer/core\";\r\nimport { defaultLayoutPlugin } from \"@react-pdf-viewer/default-layout\";\r\nimport Spinner from \"./Spinner\";\r\nimport Banner from \"./Banner\";\r\n\r\nimport \"@react-pdf-viewer/core/lib/styles/index.css\";\r\nimport \"@react-pdf-viewer/default-layout/lib/styles/index.css\";\r\n\r\n/**\r\n * PdfViewer — Portnet UI v2\r\n *\r\n * Charter §07 · document viewing / §04.4 · loading & empty states.\r\n *\r\n * Presentational, store- and router-agnostic wrapper over @react-pdf-viewer\r\n * (pdf.js). The HOST owns fetching: pass a ready `fileUrl` (http(s) or `data:`\r\n * URL) OR a raw `base64` payload, plus the externally-controlled `loading` /\r\n * `error` flags and the pdf.js `workerUrl`. No redux, no dispatch, no config\r\n * import — that is exactly what lets it live in the shared library.\r\n *\r\n * <PdfViewer\r\n * base64={pdf}\r\n * loading={isLoading}\r\n * error={failed && \"Le document n'a pas pu être chargé.\"}\r\n * workerUrl={cfg.pdfWorkerUrl}\r\n * />\r\n *\r\n * State precedence: loading → error → (no source) → viewer.\r\n * - loading → v2.Spinner (charter §04.4: no ad-hoc CircularProgress).\r\n * - error → v2.Banner variant=\"error\" (R-A.2 alert semantics).\r\n * - no src → v2.Banner variant=\"info\" (empty).\r\n *\r\n * Dependency note (RFC): pulls @react-pdf-viewer/core,\r\n * @react-pdf-viewer/default-layout and pdfjs-dist. Declared as OPTIONAL peer\r\n * dependencies — only PDF-consuming modules install them, so there is no\r\n * bundle cost for the rest of the platform.\r\n */\r\n\r\nexport interface PdfViewerProps {\r\n /** Full URL or `data:` URL of the PDF. Takes precedence over `base64`. */\r\n fileUrl?: string | undefined;\r\n /** Raw base64 PDF payload (without the `data:application/pdf;base64,` prefix). */\r\n base64?: string | undefined;\r\n /** pdf.js worker URL — host-provided (e.g. from runtime config). */\r\n workerUrl: string;\r\n /** Show the loading spinner instead of the viewer. */\r\n loading?: boolean | undefined;\r\n /** When truthy, shows an error Banner (this node is the message) instead of the viewer. */\r\n error?: React.ReactNode | undefined;\r\n /** Error banner title. Default \"Échec du chargement du document\". */\r\n errorTitle?: React.ReactNode | undefined;\r\n /** Message shown when there is no source and no loading/error. */\r\n emptyLabel?: React.ReactNode | undefined;\r\n /** Viewer container height. Default \"75vh\". */\r\n height?: number | string | undefined;\r\n /** Initial zoom. Default 0.95. */\r\n defaultScale?: number | undefined;\r\n /** Accessible label for the viewer region. Default \"Document PDF\". */\r\n ariaLabel?: string | undefined;\r\n}\r\n\r\nfunction PdfViewer({\r\n fileUrl,\r\n base64,\r\n workerUrl,\r\n loading = false,\r\n error,\r\n errorTitle = \"Échec du chargement du document\",\r\n emptyLabel = \"Aucun document à afficher.\",\r\n height = \"75vh\",\r\n defaultScale = 0.95,\r\n ariaLabel = \"Document PDF\",\r\n}: PdfViewerProps) {\r\n const layoutPlugin = React.useMemo(() => defaultLayoutPlugin(), []);\r\n const src = fileUrl ?? (base64 ? `data:application/pdf;base64,${base64}` : undefined);\r\n\r\n let body: React.ReactNode;\r\n if (loading) {\r\n body = (\r\n <Box sx={{ display: \"grid\", placeItems: \"center\", minHeight: 200, width: \"100%\" }}>\r\n <Spinner />\r\n </Box>\r\n );\r\n } else if (error) {\r\n body = (\r\n <Banner variant=\"error\" title={errorTitle}>\r\n {error}\r\n </Banner>\r\n );\r\n } else if (!src) {\r\n body = <Banner variant=\"info\">{emptyLabel}</Banner>;\r\n } else {\r\n body = (\r\n <Worker workerUrl={workerUrl}>\r\n <Box\r\n sx={{\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n height,\r\n width: \"100%\",\r\n }}\r\n >\r\n <Viewer\r\n fileUrl={src}\r\n plugins={[layoutPlugin]}\r\n defaultScale={defaultScale}\r\n renderLoader={(percentages: number) => (\r\n <Box sx={{ width: 240 }}>\r\n <ProgressBar progress={Math.round(percentages)} />\r\n </Box>\r\n )}\r\n />\r\n </Box>\r\n </Worker>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n role=\"region\"\r\n aria-label={ariaLabel}\r\n sx={{ display: \"flex\", justifyContent: \"center\", width: \"100%\" }}\r\n >\r\n {body}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default PdfViewer;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PdfViewer.js","names":["React","Box","Viewer","Worker","ProgressBar","defaultLayoutPlugin","Spinner","Banner","jsx","_jsx","PdfViewer","fileUrl","base64","workerUrl","loading","error","errorTitle","emptyLabel","height","defaultScale","ariaLabel","layoutPlugin","useMemo","src","undefined","body","sx","display","placeItems","minHeight","width","children","variant","title","border","borderRadius","plugins","renderLoader","percentages","progress","Math","round","role","justifyContent"],"sources":["../../../../src/lib/v2/components/PdfViewer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { Viewer, Worker, ProgressBar } from \"@react-pdf-viewer/core\";\r\nimport { defaultLayoutPlugin } from \"@react-pdf-viewer/default-layout\";\r\nimport Spinner from \"./Spinner\";\r\nimport Banner from \"./Banner\";\r\n\r\nimport \"@react-pdf-viewer/core/lib/styles/index.css\";\r\nimport \"@react-pdf-viewer/default-layout/lib/styles/index.css\";\r\n\r\n/**\r\n * PdfViewer — Portnet UI v2\r\n *\r\n * Charter §07 · document viewing / §04.4 · loading & empty states.\r\n *\r\n * Presentational, store- and router-agnostic wrapper over @react-pdf-viewer\r\n * (pdf.js). The HOST owns fetching: pass a ready `fileUrl` (http(s) or `data:`\r\n * URL) OR a raw `base64` payload, plus the externally-controlled `loading` /\r\n * `error` flags and the pdf.js `workerUrl`. No redux, no dispatch, no config\r\n * import — that is exactly what lets it live in the shared library.\r\n *\r\n * <PdfViewer\r\n * base64={pdf}\r\n * loading={isLoading}\r\n * error={failed && \"Le document n'a pas pu être chargé.\"}\r\n * workerUrl={cfg.pdfWorkerUrl}\r\n * />\r\n *\r\n * State precedence: loading → error → (no source) → viewer.\r\n * - loading → v2.Spinner (charter §04.4: no ad-hoc CircularProgress).\r\n * - error → v2.Banner variant=\"error\" (R-A.2 alert semantics).\r\n * - no src → v2.Banner variant=\"info\" (empty).\r\n *\r\n * Dependency note (RFC): pulls @react-pdf-viewer/core,\r\n * @react-pdf-viewer/default-layout and pdfjs-dist. Declared as OPTIONAL peer\r\n * dependencies — only PDF-consuming modules install them, so there is no\r\n * bundle cost for the rest of the platform.\r\n */\r\n\r\nexport interface PdfViewerProps {\r\n /** Full URL or `data:` URL of the PDF. Takes precedence over `base64`. */\r\n fileUrl?: string | undefined;\r\n /** Raw base64 PDF payload (without the `data:application/pdf;base64,` prefix). */\r\n base64?: string | undefined;\r\n /** pdf.js worker URL — host-provided (e.g. from runtime config). */\r\n workerUrl: string;\r\n /** Show the loading spinner instead of the viewer. */\r\n loading?: boolean | undefined;\r\n /** When truthy, shows an error Banner (this node is the message) instead of the viewer. */\r\n error?: React.ReactNode | undefined;\r\n /** Error banner title. Default \"Échec du chargement du document\". */\r\n errorTitle?: React.ReactNode | undefined;\r\n /** Message shown when there is no source and no loading/error. */\r\n emptyLabel?: React.ReactNode | undefined;\r\n /** Viewer container height. Default \"75vh\". */\r\n height?: number | string | undefined;\r\n /** Initial zoom. Default 0.95. */\r\n defaultScale?: number | undefined;\r\n /** Accessible label for the viewer region. Default \"Document PDF\". */\r\n ariaLabel?: string | undefined;\r\n}\r\n\r\nfunction PdfViewer({\r\n fileUrl,\r\n base64,\r\n workerUrl,\r\n loading = false,\r\n error,\r\n errorTitle = \"Échec du chargement du document\",\r\n emptyLabel = \"Aucun document à afficher.\",\r\n height = \"75vh\",\r\n defaultScale = 0.95,\r\n ariaLabel = \"Document PDF\",\r\n}: PdfViewerProps) {\r\n const layoutPlugin = React.useMemo(() => defaultLayoutPlugin(), []);\r\n const src = fileUrl ?? (base64 ? `data:application/pdf;base64,${base64}` : undefined);\r\n\r\n let body: React.ReactNode;\r\n if (loading) {\r\n body = (\r\n <Box sx={{ display: \"grid\", placeItems: \"center\", minHeight: 200, width: \"100%\" }}>\r\n <Spinner />\r\n </Box>\r\n );\r\n } else if (error) {\r\n body = (\r\n <Banner variant=\"error\" title={errorTitle}>\r\n {error}\r\n </Banner>\r\n );\r\n } else if (!src) {\r\n body = <Banner variant=\"info\">{emptyLabel}</Banner>;\r\n } else {\r\n body = (\r\n <Worker workerUrl={workerUrl}>\r\n <Box\r\n sx={{\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n height,\r\n width: \"100%\",\r\n }}\r\n >\r\n <Viewer\r\n fileUrl={src}\r\n plugins={[layoutPlugin]}\r\n defaultScale={defaultScale}\r\n renderLoader={(percentages: number) => (\r\n <Box sx={{ width: 240 }}>\r\n <ProgressBar progress={Math.round(percentages)} />\r\n </Box>\r\n )}\r\n />\r\n </Box>\r\n </Worker>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n role=\"region\"\r\n aria-label={ariaLabel}\r\n sx={{ display: \"flex\", justifyContent: \"center\", width: \"100%\" }}\r\n >\r\n {body}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default PdfViewer;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,WAAW,QAAQ,wBAAwB;AACpE,SAASC,mBAAmB,QAAQ,kCAAkC;AACtE,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAOC,MAAM,MAAM,UAAU;AAE7B,OAAO,6CAA6C;AACpD,OAAO,uDAAuD;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA,SAAAC,GAAA,IAAAC,IAAA;AAoDA,SAASC,SAASA,CAAC;EACjBC,OAAO;EACPC,MAAM;EACNC,SAAS;EACTC,OAAO,GAAG,KAAK;EACfC,KAAK;EACLC,UAAU,GAAG,iCAAiC;EAC9CC,UAAU,GAAG,4BAA4B;EACzCC,MAAM,GAAG,MAAM;EACfC,YAAY,GAAG,IAAI;EACnBC,SAAS,GAAG;AACE,CAAC,EAAE;EACjB,MAAMC,YAAY,GAAGrB,KAAK,CAACsB,OAAO,CAAC,MAAMjB,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC;EACnE,MAAMkB,GAAG,GAAGZ,OAAO,KAAKC,MAAM,GAAG,+BAA+BA,MAAM,EAAE,GAAGY,SAAS,CAAC;EAErF,IAAIC,IAAqB;EACzB,IAAIX,OAAO,EAAE;IACXW,IAAI,gBACFhB,IAAA,CAACR,GAAG;MAACyB,EAAE,EAAE;QAAEC,OAAO,EAAE,MAAM;QAAEC,UAAU,EAAE,QAAQ;QAAEC,SAAS,EAAE,GAAG;QAAEC,KAAK,EAAE;MAAO,CAAE;MAAAC,QAAA,eAChFtB,IAAA,CAACH,OAAO,IAAE;IAAC,CACR,CACN;EACH,CAAC,MAAM,IAAIS,KAAK,EAAE;IAChBU,IAAI,gBACFhB,IAAA,CAACF,MAAM;MAACyB,OAAO,EAAC,OAAO;MAACC,KAAK,EAAEjB,UAAW;MAAAe,QAAA,EACvChB;IAAK,CACA,CACT;EACH,CAAC,MAAM,IAAI,CAACQ,GAAG,EAAE;IACfE,IAAI,gBAAGhB,IAAA,CAACF,MAAM;MAACyB,OAAO,EAAC,MAAM;MAAAD,QAAA,EAAEd;IAAU,CAAS,CAAC;EACrD,CAAC,MAAM;IACLQ,IAAI,gBACFhB,IAAA,CAACN,MAAM;MAACU,SAAS,EAAEA,SAAU;MAAAkB,QAAA,eAC3BtB,IAAA,CAACR,GAAG;QACFyB,EAAE,EAAE;UACFQ,MAAM,EAAE,yBAAyB;UACjCC,YAAY,EAAE,aAAa;UAC3BjB,MAAM;UACNY,KAAK,EAAE;QACT,CAAE;QAAAC,QAAA,eAEFtB,IAAA,CAACP,MAAM;UACLS,OAAO,EAAEY,GAAI;UACba,OAAO,EAAE,CAACf,YAAY,CAAE;UACxBF,YAAY,EAAEA,YAAa;UAC3BkB,YAAY,EAAGC,WAAmB,iBAChC7B,IAAA,CAACR,GAAG;YAACyB,EAAE,EAAE;cAAEI,KAAK,EAAE;YAAI,CAAE;YAAAC,QAAA,eACtBtB,IAAA,CAACL,WAAW;cAACmC,QAAQ,EAAEC,IAAI,CAACC,KAAK,CAACH,WAAW;YAAE,CAAE;UAAC,CAC/C;QACL,CACH;MAAC,CACC;IAAC,CACA,CACT;EACH;EAEA,oBACE7B,IAAA,CAACR,GAAG;IACFyC,IAAI,EAAC,QAAQ;IACb,cAAYtB,SAAU;IACtBM,EAAE,EAAE;MAAEC,OAAO,EAAE,MAAM;MAAEgB,cAAc,EAAE,QAAQ;MAAEb,KAAK,EAAE;IAAO,CAAE;IAAAC,QAAA,EAEhEN;EAAI,CACF,CAAC;AAEV;AAEA,eAAef,SAAS","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
 
@@ -42,39 +36,36 @@ import Box from "@mui/material/Box";
42
36
  * helper="3 sur 6 fichiers traités" />
43
37
  */
44
38
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
45
- var VARIANT_COLOR = {
39
+ const VARIANT_COLOR = {
46
40
  primary: "var(--accent)",
47
41
  success: "var(--success)",
48
42
  warning: "var(--warning)",
49
43
  danger: "var(--danger)"
50
44
  };
51
- var SIZE_HEIGHT = {
45
+ const SIZE_HEIGHT = {
52
46
  sm: 4,
53
47
  md: 6,
54
48
  lg: 8
55
49
  };
56
- function ProgressBar(_ref) {
57
- var value = _ref.value,
58
- _ref$indeterminate = _ref.indeterminate,
59
- indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
60
- _ref$variant = _ref.variant,
61
- variant = _ref$variant === void 0 ? "primary" : _ref$variant,
62
- _ref$size = _ref.size,
63
- size = _ref$size === void 0 ? "md" : _ref$size,
64
- label = _ref.label,
65
- helper = _ref.helper,
66
- _ref$showLabel = _ref.showLabel,
67
- showLabel = _ref$showLabel === void 0 ? false : _ref$showLabel,
68
- ariaLabel = _ref["aria-label"],
69
- ariaLabelledBy = _ref["aria-labelledby"],
70
- sx = _ref.sx;
50
+ function ProgressBar({
51
+ value,
52
+ indeterminate = false,
53
+ variant = "primary",
54
+ size = "md",
55
+ label,
56
+ helper,
57
+ showLabel = false,
58
+ "aria-label": ariaLabel,
59
+ "aria-labelledby": ariaLabelledBy,
60
+ sx
61
+ }) {
71
62
  // Defensive clamp: callers occasionally pass over-range values (e.g. 102%
72
63
  // from rounding). Charter forbids surprising the user — clamp instead of
73
64
  // overflowing the track visually.
74
- var isDet = !indeterminate && value != null;
75
- var clamped = isDet ? Math.max(0, Math.min(100, Number(value) || 0)) : 0;
76
- var fill = VARIANT_COLOR[variant] || VARIANT_COLOR.primary;
77
- var height = SIZE_HEIGHT[size] || SIZE_HEIGHT.md;
65
+ const isDet = !indeterminate && value != null;
66
+ const clamped = isDet ? Math.max(0, Math.min(100, Number(value) || 0)) : 0;
67
+ const fill = VARIANT_COLOR[variant] || VARIANT_COLOR.primary;
68
+ const height = SIZE_HEIGHT[size] || SIZE_HEIGHT.md;
78
69
  if (process.env["NODE_ENV"] !== "production" && !ariaLabel && !ariaLabelledBy && !label) {
79
70
  // eslint-disable-next-line no-console
80
71
  console.warn("[@portnet/ui v2] <ProgressBar> requires aria-label, aria-labelledby, or a `label` prop for screen readers.");
@@ -84,14 +75,15 @@ function ProgressBar(_ref) {
84
75
  // so the caller doesn't have to manage the id themselves.
85
76
  // If `helper` is rendered, wire it via aria-describedby on the
86
77
  // progressbar so the qualitative context reaches AT. Audit Batch 5.
87
- var reactId = React.useId();
88
- var labelId = label ? "".concat(reactId, "-lbl") : undefined;
89
- var helperId = helper ? "".concat(reactId, "-hlp") : undefined;
90
- var effectiveLabelledBy = ariaLabelledBy || labelId;
78
+ const reactId = React.useId();
79
+ const labelId = label ? `${reactId}-lbl` : undefined;
80
+ const helperId = helper ? `${reactId}-hlp` : undefined;
81
+ const effectiveLabelledBy = ariaLabelledBy || labelId;
91
82
  return /*#__PURE__*/_jsxs(Box, {
92
- sx: _objectSpread({
93
- width: "100%"
94
- }, sx),
83
+ sx: {
84
+ width: "100%",
85
+ ...sx
86
+ },
95
87
  children: [(label || isDet && showLabel) && /*#__PURE__*/_jsxs(Box, {
96
88
  sx: {
97
89
  display: "flex",
@@ -133,7 +125,7 @@ function ProgressBar(_ref) {
133
125
  sx: {
134
126
  position: "relative",
135
127
  width: "100%",
136
- height: height,
128
+ height,
137
129
  borderRadius: "var(--r-full)",
138
130
  background: "var(--bg-subtle)",
139
131
  overflow: "hidden"
@@ -142,7 +134,7 @@ function ProgressBar(_ref) {
142
134
  "aria-hidden": "true",
143
135
  sx: {
144
136
  height: "100%",
145
- width: "".concat(clamped, "%"),
137
+ width: `${clamped}%`,
146
138
  background: fill,
147
139
  borderRadius: "inherit",
148
140
  transition: "width var(--duration-base, 180ms) var(--easing-out, cubic-bezier(.2,.8,.2,1))"
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressBar.js","names":["React","Box","jsx","_jsx","jsxs","_jsxs","VARIANT_COLOR","primary","success","warning","danger","SIZE_HEIGHT","sm","md","lg","ProgressBar","_ref","value","_ref$indeterminate","indeterminate","_ref$variant","variant","_ref$size","size","label","helper","_ref$showLabel","showLabel","ariaLabel","ariaLabelledBy","sx","isDet","clamped","Math","max","min","Number","fill","height","process","env","console","warn","reactId","useId","labelId","concat","undefined","helperId","effectiveLabelledBy","_objectSpread","width","children","display","alignItems","justifyContent","gap","marginBottom","id","component","fontSize","fontWeight","color","lineHeight","fontVariantNumeric","marginLeft","round","role","position","borderRadius","background","overflow","transition","inset","content","top","bottom","left","willChange","animation","transform","marginTop"],"sources":["../../../../src/lib/v2/components/ProgressBar.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * ProgressBar — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"ProgressBar\". Determinate or indeterminate\r\n * progress indicator for chunked operations (uploads, batch jobs,\r\n * long-running form steps) where a Skeleton is not appropriate.\r\n *\r\n * R-Sk usage rule (charter §03 Skeleton): \"Use ProgressBar (not\r\n * skeleton) for operations whose duration is known and where the user\r\n * benefits from a percentage signal — e.g. file uploads, batch\r\n * exports, multi-step ingestion.\"\r\n *\r\n * a11y:\r\n * - role=\"progressbar\"\r\n * - Determinate: aria-valuenow / aria-valuemin / aria-valuemax (charter R-Ar)\r\n * - Indeterminate: aria-valuenow OMITTED (WAI-ARIA convention)\r\n * - aria-label or aria-labelledby (caller responsibility — provide one)\r\n * - aria-describedby wires the `helper` text into the AT tree so SR\r\n * users hear the qualitative context (\"3 sur 6 fichiers traités\")\r\n * alongside the quantitative one (\"42 %\"). Audit Batch 5 / B5-2.\r\n *\r\n * Examples:\r\n *\r\n * <ProgressBar value={42} aria-label=\"Téléversement en cours\" />\r\n *\r\n * <ProgressBar value={87} variant=\"success\" showLabel\r\n * aria-label=\"Indexation des documents\" />\r\n *\r\n * <ProgressBar indeterminate aria-label=\"Connexion au serveur\" />\r\n *\r\n * <ProgressBar value={50} size=\"lg\" variant=\"warning\"\r\n * label=\"Synchronisation BAM\"\r\n * helper=\"3 sur 6 fichiers traités\" />\r\n */\r\n\r\nexport type ProgressBarVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\r\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\r\n\r\nconst VARIANT_COLOR: Record<ProgressBarVariant, string> = {\r\n primary: \"var(--accent)\",\r\n success: \"var(--success)\",\r\n warning: \"var(--warning)\",\r\n danger: \"var(--danger)\",\r\n};\r\n\r\nconst SIZE_HEIGHT: Record<ProgressBarSize, number> = { sm: 4, md: 6, lg: 8 };\r\n\r\nexport interface ProgressBarProps {\r\n value?: number | undefined;\r\n indeterminate?: boolean | undefined;\r\n variant?: ProgressBarVariant | undefined;\r\n size?: ProgressBarSize | undefined;\r\n label?: React.ReactNode | undefined;\r\n helper?: React.ReactNode | undefined;\r\n showLabel?: boolean | undefined;\r\n \"aria-label\"?: string | undefined;\r\n \"aria-labelledby\"?: string | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction ProgressBar({\r\n value,\r\n indeterminate = false,\r\n variant = \"primary\",\r\n size = \"md\",\r\n label,\r\n helper,\r\n showLabel = false,\r\n \"aria-label\": ariaLabel,\r\n \"aria-labelledby\": ariaLabelledBy,\r\n sx,\r\n}: ProgressBarProps) {\r\n // Defensive clamp: callers occasionally pass over-range values (e.g. 102%\r\n // from rounding). Charter forbids surprising the user — clamp instead of\r\n // overflowing the track visually.\r\n const isDet = !indeterminate && value != null;\r\n const clamped = isDet ? Math.max(0, Math.min(100, Number(value) || 0)) : 0;\r\n const fill = VARIANT_COLOR[variant] || VARIANT_COLOR.primary;\r\n const height = SIZE_HEIGHT[size] || SIZE_HEIGHT.md;\r\n\r\n if (process.env[\"NODE_ENV\"] !== \"production\" && !ariaLabel && !ariaLabelledBy && !label) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] <ProgressBar> requires aria-label, aria-labelledby, or a `label` prop for screen readers.\"\r\n );\r\n }\r\n\r\n // If an inline `label` is rendered we wire aria-labelledby internally\r\n // so the caller doesn't have to manage the id themselves.\r\n // If `helper` is rendered, wire it via aria-describedby on the\r\n // progressbar so the qualitative context reaches AT. Audit Batch 5.\r\n const reactId = React.useId();\r\n const labelId = label ? `${reactId}-lbl` : undefined;\r\n const helperId = helper ? `${reactId}-hlp` : undefined;\r\n const effectiveLabelledBy = ariaLabelledBy || labelId;\r\n\r\n return (\r\n <Box sx={{ width: \"100%\", ...sx }}>\r\n {(label || (isDet && showLabel)) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n marginBottom: 0.5,\r\n }}\r\n >\r\n {label && (\r\n <Box\r\n id={labelId}\r\n component=\"span\"\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {label}\r\n </Box>\r\n )}\r\n {isDet && showLabel && (\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n marginLeft: \"auto\",\r\n }}\r\n >\r\n {Math.round(clamped)}%\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Box\r\n role=\"progressbar\"\r\n aria-label={ariaLabel}\r\n aria-labelledby={effectiveLabelledBy}\r\n aria-describedby={helperId}\r\n aria-valuemin={isDet ? 0 : undefined}\r\n aria-valuemax={isDet ? 100 : undefined}\r\n aria-valuenow={isDet ? Math.round(clamped) : undefined}\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height,\r\n borderRadius: \"var(--r-full)\",\r\n background: \"var(--bg-subtle)\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {isDet ? (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n height: \"100%\",\r\n width: `${clamped}%`,\r\n background: fill,\r\n borderRadius: \"inherit\",\r\n transition:\r\n \"width var(--duration-base, 180ms) var(--easing-out, cubic-bezier(.2,.8,.2,1))\",\r\n }}\r\n />\r\n ) : (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n top: 0,\r\n bottom: 0,\r\n // R-Mi.3 / perf — bar parked at left:0 and swept via a\r\n // composited transform instead of animating `left` (which\r\n // reflows every frame). translateX is relative to the bar's\r\n // OWN width (40% of the track), so -100% parks it just off\r\n // the start edge (== old left:-40%) and 250% (= 250% × 40%\r\n // = 100% of the track) drives it off the far end (== old\r\n // left:100%) — same sweep, zero layout.\r\n left: 0,\r\n width: \"40%\",\r\n background: fill,\r\n borderRadius: \"inherit\",\r\n willChange: \"transform\",\r\n animation: \"pui-progressbar-indeterminate 1.4s ease-in-out infinite\",\r\n },\r\n \"@keyframes pui-progressbar-indeterminate\": {\r\n \"0%\": { transform: \"translateX(-100%)\" },\r\n \"60%\": { transform: \"translateX(250%)\" },\r\n \"100%\": { transform: \"translateX(250%)\" },\r\n },\r\n // The global prefers-reduced-motion rule in base.css already\r\n // suppresses animations; nothing extra needed here.\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n {helper && (\r\n <Box\r\n id={helperId}\r\n sx={{\r\n marginTop: 0.5,\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: \"var(--lh-normal)\",\r\n }}\r\n >\r\n {helper}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default ProgressBar;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ProgressBar.js","names":["React","Box","jsx","_jsx","jsxs","_jsxs","VARIANT_COLOR","primary","success","warning","danger","SIZE_HEIGHT","sm","md","lg","ProgressBar","value","indeterminate","variant","size","label","helper","showLabel","ariaLabel","ariaLabelledBy","sx","isDet","clamped","Math","max","min","Number","fill","height","process","env","console","warn","reactId","useId","labelId","undefined","helperId","effectiveLabelledBy","width","children","display","alignItems","justifyContent","gap","marginBottom","id","component","fontSize","fontWeight","color","lineHeight","fontVariantNumeric","marginLeft","round","role","position","borderRadius","background","overflow","transition","inset","content","top","bottom","left","willChange","animation","transform","marginTop"],"sources":["../../../../src/lib/v2/components/ProgressBar.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * ProgressBar — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"ProgressBar\". Determinate or indeterminate\r\n * progress indicator for chunked operations (uploads, batch jobs,\r\n * long-running form steps) where a Skeleton is not appropriate.\r\n *\r\n * R-Sk usage rule (charter §03 Skeleton): \"Use ProgressBar (not\r\n * skeleton) for operations whose duration is known and where the user\r\n * benefits from a percentage signal — e.g. file uploads, batch\r\n * exports, multi-step ingestion.\"\r\n *\r\n * a11y:\r\n * - role=\"progressbar\"\r\n * - Determinate: aria-valuenow / aria-valuemin / aria-valuemax (charter R-Ar)\r\n * - Indeterminate: aria-valuenow OMITTED (WAI-ARIA convention)\r\n * - aria-label or aria-labelledby (caller responsibility — provide one)\r\n * - aria-describedby wires the `helper` text into the AT tree so SR\r\n * users hear the qualitative context (\"3 sur 6 fichiers traités\")\r\n * alongside the quantitative one (\"42 %\"). Audit Batch 5 / B5-2.\r\n *\r\n * Examples:\r\n *\r\n * <ProgressBar value={42} aria-label=\"Téléversement en cours\" />\r\n *\r\n * <ProgressBar value={87} variant=\"success\" showLabel\r\n * aria-label=\"Indexation des documents\" />\r\n *\r\n * <ProgressBar indeterminate aria-label=\"Connexion au serveur\" />\r\n *\r\n * <ProgressBar value={50} size=\"lg\" variant=\"warning\"\r\n * label=\"Synchronisation BAM\"\r\n * helper=\"3 sur 6 fichiers traités\" />\r\n */\r\n\r\nexport type ProgressBarVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\r\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\r\n\r\nconst VARIANT_COLOR: Record<ProgressBarVariant, string> = {\r\n primary: \"var(--accent)\",\r\n success: \"var(--success)\",\r\n warning: \"var(--warning)\",\r\n danger: \"var(--danger)\",\r\n};\r\n\r\nconst SIZE_HEIGHT: Record<ProgressBarSize, number> = { sm: 4, md: 6, lg: 8 };\r\n\r\nexport interface ProgressBarProps {\r\n value?: number | undefined;\r\n indeterminate?: boolean | undefined;\r\n variant?: ProgressBarVariant | undefined;\r\n size?: ProgressBarSize | undefined;\r\n label?: React.ReactNode | undefined;\r\n helper?: React.ReactNode | undefined;\r\n showLabel?: boolean | undefined;\r\n \"aria-label\"?: string | undefined;\r\n \"aria-labelledby\"?: string | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction ProgressBar({\r\n value,\r\n indeterminate = false,\r\n variant = \"primary\",\r\n size = \"md\",\r\n label,\r\n helper,\r\n showLabel = false,\r\n \"aria-label\": ariaLabel,\r\n \"aria-labelledby\": ariaLabelledBy,\r\n sx,\r\n}: ProgressBarProps) {\r\n // Defensive clamp: callers occasionally pass over-range values (e.g. 102%\r\n // from rounding). Charter forbids surprising the user — clamp instead of\r\n // overflowing the track visually.\r\n const isDet = !indeterminate && value != null;\r\n const clamped = isDet ? Math.max(0, Math.min(100, Number(value) || 0)) : 0;\r\n const fill = VARIANT_COLOR[variant] || VARIANT_COLOR.primary;\r\n const height = SIZE_HEIGHT[size] || SIZE_HEIGHT.md;\r\n\r\n if (process.env[\"NODE_ENV\"] !== \"production\" && !ariaLabel && !ariaLabelledBy && !label) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] <ProgressBar> requires aria-label, aria-labelledby, or a `label` prop for screen readers.\"\r\n );\r\n }\r\n\r\n // If an inline `label` is rendered we wire aria-labelledby internally\r\n // so the caller doesn't have to manage the id themselves.\r\n // If `helper` is rendered, wire it via aria-describedby on the\r\n // progressbar so the qualitative context reaches AT. Audit Batch 5.\r\n const reactId = React.useId();\r\n const labelId = label ? `${reactId}-lbl` : undefined;\r\n const helperId = helper ? `${reactId}-hlp` : undefined;\r\n const effectiveLabelledBy = ariaLabelledBy || labelId;\r\n\r\n return (\r\n <Box sx={{ width: \"100%\", ...sx }}>\r\n {(label || (isDet && showLabel)) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"space-between\",\r\n gap: 1,\r\n marginBottom: 0.5,\r\n }}\r\n >\r\n {label && (\r\n <Box\r\n id={labelId}\r\n component=\"span\"\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {label}\r\n </Box>\r\n )}\r\n {isDet && showLabel && (\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n marginLeft: \"auto\",\r\n }}\r\n >\r\n {Math.round(clamped)}%\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Box\r\n role=\"progressbar\"\r\n aria-label={ariaLabel}\r\n aria-labelledby={effectiveLabelledBy}\r\n aria-describedby={helperId}\r\n aria-valuemin={isDet ? 0 : undefined}\r\n aria-valuemax={isDet ? 100 : undefined}\r\n aria-valuenow={isDet ? Math.round(clamped) : undefined}\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height,\r\n borderRadius: \"var(--r-full)\",\r\n background: \"var(--bg-subtle)\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {isDet ? (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n height: \"100%\",\r\n width: `${clamped}%`,\r\n background: fill,\r\n borderRadius: \"inherit\",\r\n transition:\r\n \"width var(--duration-base, 180ms) var(--easing-out, cubic-bezier(.2,.8,.2,1))\",\r\n }}\r\n />\r\n ) : (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n top: 0,\r\n bottom: 0,\r\n // R-Mi.3 / perf — bar parked at left:0 and swept via a\r\n // composited transform instead of animating `left` (which\r\n // reflows every frame). translateX is relative to the bar's\r\n // OWN width (40% of the track), so -100% parks it just off\r\n // the start edge (== old left:-40%) and 250% (= 250% × 40%\r\n // = 100% of the track) drives it off the far end (== old\r\n // left:100%) — same sweep, zero layout.\r\n left: 0,\r\n width: \"40%\",\r\n background: fill,\r\n borderRadius: \"inherit\",\r\n willChange: \"transform\",\r\n animation: \"pui-progressbar-indeterminate 1.4s ease-in-out infinite\",\r\n },\r\n \"@keyframes pui-progressbar-indeterminate\": {\r\n \"0%\": { transform: \"translateX(-100%)\" },\r\n \"60%\": { transform: \"translateX(250%)\" },\r\n \"100%\": { transform: \"translateX(250%)\" },\r\n },\r\n // The global prefers-reduced-motion rule in base.css already\r\n // suppresses animations; nothing extra needed here.\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n {helper && (\r\n <Box\r\n id={helperId}\r\n sx={{\r\n marginTop: 0.5,\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: \"var(--lh-normal)\",\r\n }}\r\n >\r\n {helper}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default ProgressBar;\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,14 +1,3 @@
1
- var _excluded = ["checked", "onChange", "label", "value", "disabled", "inputProps", "sx"],
2
- _excluded2 = ["value", "onChange", "options", "row", "disabled", "name", "id", "sx"],
3
- _excluded3 = ["error", "fullWidth"];
4
- 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); }
5
- 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; }
6
- 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; }
7
- 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; }
8
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
9
- 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); }
10
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
11
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
1
  import * as React from "react";
13
2
  import MuiRadio from "@mui/material/Radio";
14
3
  import MuiRadioGroup from "@mui/material/RadioGroup";
@@ -34,16 +23,17 @@ import Box from "@mui/material/Box";
34
23
  * passing `inputProps={...}` to v2.Radio is unchanged.
35
24
  */
36
25
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
37
- export var Radio = /*#__PURE__*/React.forwardRef(function Radio(_ref, ref) {
38
- var checked = _ref.checked,
39
- onChange = _ref.onChange,
40
- label = _ref.label,
41
- value = _ref.value,
42
- disabled = _ref.disabled,
43
- inputProps = _ref.inputProps,
44
- sx = _ref.sx,
45
- rest = _objectWithoutProperties(_ref, _excluded);
46
- var radio = /*#__PURE__*/_jsx(MuiRadio, _objectSpread({
26
+ export const Radio = /*#__PURE__*/React.forwardRef(function Radio({
27
+ checked,
28
+ onChange,
29
+ label,
30
+ value,
31
+ disabled,
32
+ inputProps,
33
+ sx,
34
+ ...rest
35
+ }, ref) {
36
+ const radio = /*#__PURE__*/_jsx(MuiRadio, {
47
37
  ref: ref,
48
38
  checked: !!checked,
49
39
  onChange: onChange,
@@ -58,14 +48,16 @@ export var Radio = /*#__PURE__*/React.forwardRef(function Radio(_ref, ref) {
58
48
  slotProps: inputProps ? {
59
49
  input: inputProps
60
50
  } : undefined,
61
- sx: _objectSpread({
51
+ sx: {
62
52
  padding: "6px",
63
53
  "&:focus-visible": {
64
54
  outline: "2px solid var(--accent)",
65
55
  outlineOffset: "var(--pui-outline-offset)"
66
- }
67
- }, sx)
68
- }, rest));
56
+ },
57
+ ...sx
58
+ },
59
+ ...rest
60
+ });
69
61
  if (!label) return radio;
70
62
  return /*#__PURE__*/_jsx(FormControlLabel, {
71
63
  control: radio,
@@ -118,24 +110,22 @@ export var Radio = /*#__PURE__*/React.forwardRef(function Radio(_ref, ref) {
118
110
  * valid on the group and are still forwarded.
119
111
  */
120
112
 
121
- export function RadioGroup(_ref2) {
122
- var value = _ref2.value,
123
- onChange = _ref2.onChange,
124
- _ref2$options = _ref2.options,
125
- options = _ref2$options === void 0 ? [] : _ref2$options,
126
- _ref2$row = _ref2.row,
127
- row = _ref2$row === void 0 ? false : _ref2$row,
128
- _ref2$disabled = _ref2.disabled,
129
- disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
130
- name = _ref2.name,
131
- id = _ref2.id,
132
- sx = _ref2.sx,
133
- rest = _objectWithoutProperties(_ref2, _excluded2);
113
+ export function RadioGroup({
114
+ value,
115
+ onChange,
116
+ options = [],
117
+ row = false,
118
+ disabled = false,
119
+ name,
120
+ id,
121
+ sx,
122
+ ...rest
123
+ }) {
134
124
  // R-Ar.1 - stable, SSR-safe, per-instance base for option helper ids.
135
125
  // Each option that exposes a `helper` derives a deterministic id from
136
126
  // this base + its index, so the inner <input type="radio">'s
137
127
  // aria-describedby points at the right <Box> element.
138
- var baseId = React.useId();
128
+ const baseId = React.useId();
139
129
 
140
130
  // RG-1 — Field cloneElement-injects presentational/validation props onto this
141
131
  // child; `error` and `fullWidth` are not valid on the role="radiogroup"
@@ -143,30 +133,32 @@ export function RadioGroup(_ref2) {
143
133
  // those two (object-rest omit); the aria-* / id Field also injects remain in
144
134
  // `domRest` and stay valid on the group. Cast because these injected props
145
135
  // are not part of RadioGroupProps.
146
- var _ref3 = rest,
147
- _fieldError = _ref3.error,
148
- _fieldFullWidth = _ref3.fullWidth,
149
- domRest = _objectWithoutProperties(_ref3, _excluded3);
150
- return /*#__PURE__*/_jsx(MuiRadioGroup, _objectSpread(_objectSpread({
151
- value: value !== null && value !== void 0 ? value : "",
136
+ const {
137
+ error: _fieldError,
138
+ fullWidth: _fieldFullWidth,
139
+ ...domRest
140
+ } = rest;
141
+ return /*#__PURE__*/_jsx(MuiRadioGroup, {
142
+ value: value ?? "",
152
143
  onChange: onChange,
153
144
  row: row,
154
145
  name: name,
155
146
  id: id,
156
- sx: _objectSpread({
157
- gap: row ? 2 : 0.5
158
- }, sx)
159
- }, domRest), {}, {
160
- children: options.map(function (opt, idx) {
161
- var v = typeof opt === "string" ? opt : opt.value;
162
- var lbl = typeof opt === "string" ? opt : opt.label;
163
- var helper = typeof opt === "string" ? null : opt.helper;
164
- var optDisabled = disabled || _typeof(opt) === "object" && opt.disabled;
147
+ sx: {
148
+ gap: row ? 2 : 0.5,
149
+ ...sx
150
+ },
151
+ ...domRest,
152
+ children: options.map((opt, idx) => {
153
+ const v = typeof opt === "string" ? opt : opt.value;
154
+ const lbl = typeof opt === "string" ? opt : opt.label;
155
+ const helper = typeof opt === "string" ? null : opt.helper;
156
+ const optDisabled = disabled || typeof opt === "object" && opt.disabled;
165
157
  // Per-option deterministic id. Uses the loop index so the
166
158
  // value type (string, number, object) doesn't constrain the
167
159
  // shape. Stable across renders for the same option list.
168
- var helperId = helper ? "".concat(baseId, "-h-").concat(idx) : undefined;
169
- var labelNode = helper ? /*#__PURE__*/_jsxs(Box, {
160
+ const helperId = helper ? `${baseId}-h-${idx}` : undefined;
161
+ const labelNode = helper ? /*#__PURE__*/_jsxs(Box, {
170
162
  sx: {
171
163
  display: "flex",
172
164
  flexDirection: "column",
@@ -222,7 +214,7 @@ export function RadioGroup(_ref2) {
222
214
  }
223
215
  }, v);
224
216
  })
225
- }));
217
+ });
226
218
  }
227
219
  export default Radio;
228
220
  //# sourceMappingURL=Radio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","names":["React","MuiRadio","MuiRadioGroup","FormControlLabel","Box","jsx","_jsx","jsxs","_jsxs","Radio","forwardRef","_ref","ref","checked","onChange","label","value","disabled","inputProps","sx","rest","_objectWithoutProperties","_excluded","radio","_objectSpread","size","slotProps","input","undefined","padding","outline","outlineOffset","control","margin","fontSize","RadioGroup","_ref2","_ref2$options","options","_ref2$row","row","_ref2$disabled","name","id","_excluded2","baseId","useId","_ref3","_fieldError","error","_fieldFullWidth","fullWidth","domRest","_excluded3","gap","children","map","opt","idx","v","lbl","helper","optDisabled","_typeof","helperId","concat","labelNode","display","flexDirection","paddingY","component","color","alignItems"],"sources":["../../../../src/lib/v2/components/Radio.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiRadio from \"@mui/material/Radio\";\r\nimport type { RadioProps as MuiRadioProps } from \"@mui/material/Radio\";\r\nimport MuiRadioGroup from \"@mui/material/RadioGroup\";\r\nimport type { RadioGroupProps as MuiRadioGroupProps } from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\n/**\r\n * Radio - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Radio\". Required by R-Sel.2 (2-3 options\r\n * -> Radio or Segmented).\r\n *\r\n * Low-level: a single controlled radio. For typical usage, prefer\r\n * <RadioGroup options={...}> below.\r\n *\r\n * <Radio checked={v === \"a\"} onChange={() => setV(\"a\")} label=\"Option A\" value=\"a\" />\r\n *\r\n * MUI v9 surface notes (audit Batch 2 external):\r\n * The public `inputProps` is routed internally to slotProps.input -\r\n * MUI v9 idiomatic location for native <input type=\"radio\"/> attributes.\r\n * `inputProps` was deprecated in v6 and REMOVED in v9, so it is no longer\r\n * inherited from MuiRadioProps and must be re-declared here. Consumer code\r\n * passing `inputProps={...}` to v2.Radio is unchanged.\r\n */\r\nexport interface RadioProps extends MuiRadioProps {\r\n label?: React.ReactNode | undefined;\r\n /** Native <input> attributes. Routed to slotProps.input (v9). */\r\n inputProps?: React.InputHTMLAttributes<HTMLInputElement> | undefined;\r\n}\r\n\r\nexport const Radio = React.forwardRef<React.ComponentRef<typeof MuiRadio>, RadioProps>(function Radio(\r\n { checked, onChange, label, value, disabled, inputProps, sx, ...rest },\r\n ref,\r\n) {\r\n const radio = (\r\n <MuiRadio\r\n ref={ref}\r\n checked={!!checked}\r\n onChange={onChange}\r\n value={value}\r\n disabled={disabled}\r\n size=\"small\"\r\n // MUI v9: Radio inputProps -> slotProps.input (same migration class\r\n // as Checkbox / Switch / NumberInput). Emitted conditionally so we\r\n // don't pass `slotProps={{ input: undefined }}` when nothing is\r\n // supplied.\r\n slotProps={inputProps ? { input: inputProps } : undefined}\r\n sx={{\r\n padding: \"6px\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n ...sx,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n if (!label) return radio;\r\n return (\r\n <FormControlLabel\r\n control={radio}\r\n label={label}\r\n value={value}\r\n disabled={disabled}\r\n sx={{\r\n margin: 0,\r\n \"& .MuiFormControlLabel-label\": { fontSize: \"var(--text-sm, 13px)\" },\r\n }}\r\n />\r\n );\r\n});\r\n\r\n/**\r\n * RadioGroup - Portnet UI v2\r\n *\r\n * Declarative group of radios taking an `options` array. Use inside\r\n * <Field> for label / hint / error / a11y wiring.\r\n *\r\n * <Field label=\"Type d'opération\" required>\r\n * <RadioGroup\r\n * value={op}\r\n * onChange={e => setOp(e.target.value)}\r\n * options={[\r\n * { value: \"import\", label: \"Importation\" },\r\n * { value: \"export\", label: \"Exportation\" },\r\n * { value: \"transit\", label: \"Transit\", helper: \"Marchandises en transit douanier\" },\r\n * ]}\r\n * />\r\n * </Field>\r\n *\r\n * Layout:\r\n * row={false} (default) -> vertical stack\r\n * row={true} -> horizontal (use only when labels are short)\r\n *\r\n * A11y (audit Batch 5, finding B3-3):\r\n * When an option carries a `helper` text, RadioGroup wires it\r\n * to the inner radio input via aria-describedby - SR users hear\r\n * the helper alongside the label when navigating. Without this\r\n * link the helper is purely visual.\r\n *\r\n * A11y (audit Batch 19, RG-1):\r\n * Used inside <Field>, Field cloneElement-injects presentational /\r\n * validation props onto this group. `error` and `fullWidth` are not valid\r\n * on the role=\"radiogroup\" element (React emits \"non-boolean / unrecognized\r\n * attribute\" warnings), so they are stripped before the spread. The aria-*\r\n * (labelledby / describedby / invalid) and id that Field also injects stay\r\n * valid on the group and are still forwarded.\r\n */\r\nexport interface RadioOption {\r\n value: string | number;\r\n label: React.ReactNode;\r\n helper?: React.ReactNode | undefined;\r\n disabled?: boolean | undefined;\r\n}\r\n\r\nexport type RadioGroupOption = string | RadioOption;\r\n\r\nexport interface RadioGroupProps extends Omit<MuiRadioGroupProps, \"value\" | \"children\"> {\r\n value?: string | number | undefined;\r\n options?: RadioGroupOption[] | undefined;\r\n disabled?: boolean | undefined;\r\n}\r\n\r\nexport function RadioGroup({\r\n value,\r\n onChange,\r\n options = [],\r\n row = false,\r\n disabled = false,\r\n name,\r\n id,\r\n sx,\r\n ...rest\r\n}: RadioGroupProps) {\r\n // R-Ar.1 - stable, SSR-safe, per-instance base for option helper ids.\r\n // Each option that exposes a `helper` derives a deterministic id from\r\n // this base + its index, so the inner <input type=\"radio\">'s\r\n // aria-describedby points at the right <Box> element.\r\n const baseId = React.useId();\r\n\r\n // RG-1 — Field cloneElement-injects presentational/validation props onto this\r\n // child; `error` and `fullWidth` are not valid on the role=\"radiogroup\"\r\n // element and would trigger React attribute warnings if forwarded. Strip just\r\n // those two (object-rest omit); the aria-* / id Field also injects remain in\r\n // `domRest` and stay valid on the group. Cast because these injected props\r\n // are not part of RadioGroupProps.\r\n const { error: _fieldError, fullWidth: _fieldFullWidth, ...domRest } =\r\n rest as typeof rest & { error?: unknown; fullWidth?: unknown };\r\n\r\n return (\r\n <MuiRadioGroup\r\n value={value ?? \"\"}\r\n onChange={onChange}\r\n row={row}\r\n name={name}\r\n id={id}\r\n sx={{ gap: row ? 2 : 0.5, ...sx }}\r\n {...domRest}\r\n >\r\n {options.map((opt, idx) => {\r\n const v = typeof opt === \"string\" ? opt : opt.value;\r\n const lbl = typeof opt === \"string\" ? opt : opt.label;\r\n const helper = typeof opt === \"string\" ? null : opt.helper;\r\n const optDisabled = disabled || (typeof opt === \"object\" && opt.disabled);\r\n // Per-option deterministic id. Uses the loop index so the\r\n // value type (string, number, object) doesn't constrain the\r\n // shape. Stable across renders for the same option list.\r\n const helperId = helper ? `${baseId}-h-${idx}` : undefined;\r\n const labelNode = helper ? (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", paddingY: 0.25 }}>\r\n <Box component=\"span\" sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg)\" }}>\r\n {lbl}\r\n </Box>\r\n <Box\r\n id={helperId}\r\n component=\"span\"\r\n sx={{ fontSize: \"var(--text-xs)\", color: \"var(--fg-subtle)\" }}\r\n >\r\n {helper}\r\n </Box>\r\n </Box>\r\n ) : lbl;\r\n return (\r\n <FormControlLabel\r\n key={v}\r\n value={v}\r\n disabled={optDisabled}\r\n control={\r\n <MuiRadio\r\n size=\"small\"\r\n // MUI v9: aria-describedby routed through slotProps.input\r\n // to land on the inner <input type=\"radio\">, not on the\r\n // root span. SR users hear the helper as a description\r\n // when focusing the radio.\r\n slotProps={helperId ? { input: { \"aria-describedby\": helperId } } : undefined}\r\n sx={{\r\n padding: \"6px\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n />\r\n }\r\n label={labelNode}\r\n sx={{\r\n margin: 0,\r\n alignItems: helper ? \"flex-start\" : \"center\",\r\n \"& .MuiFormControlLabel-label\": { fontSize: \"var(--text-sm)\" },\r\n }}\r\n />\r\n );\r\n })}\r\n </MuiRadioGroup>\r\n );\r\n}\r\n\r\nexport default Radio;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Radio.js","names":["React","MuiRadio","MuiRadioGroup","FormControlLabel","Box","jsx","_jsx","jsxs","_jsxs","Radio","forwardRef","checked","onChange","label","value","disabled","inputProps","sx","rest","ref","radio","size","slotProps","input","undefined","padding","outline","outlineOffset","control","margin","fontSize","RadioGroup","options","row","name","id","baseId","useId","error","_fieldError","fullWidth","_fieldFullWidth","domRest","gap","children","map","opt","idx","v","lbl","helper","optDisabled","helperId","labelNode","display","flexDirection","paddingY","component","color","alignItems"],"sources":["../../../../src/lib/v2/components/Radio.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiRadio from \"@mui/material/Radio\";\r\nimport type { RadioProps as MuiRadioProps } from \"@mui/material/Radio\";\r\nimport MuiRadioGroup from \"@mui/material/RadioGroup\";\r\nimport type { RadioGroupProps as MuiRadioGroupProps } from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\n/**\r\n * Radio - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Radio\". Required by R-Sel.2 (2-3 options\r\n * -> Radio or Segmented).\r\n *\r\n * Low-level: a single controlled radio. For typical usage, prefer\r\n * <RadioGroup options={...}> below.\r\n *\r\n * <Radio checked={v === \"a\"} onChange={() => setV(\"a\")} label=\"Option A\" value=\"a\" />\r\n *\r\n * MUI v9 surface notes (audit Batch 2 external):\r\n * The public `inputProps` is routed internally to slotProps.input -\r\n * MUI v9 idiomatic location for native <input type=\"radio\"/> attributes.\r\n * `inputProps` was deprecated in v6 and REMOVED in v9, so it is no longer\r\n * inherited from MuiRadioProps and must be re-declared here. Consumer code\r\n * passing `inputProps={...}` to v2.Radio is unchanged.\r\n */\r\nexport interface RadioProps extends MuiRadioProps {\r\n label?: React.ReactNode | undefined;\r\n /** Native <input> attributes. Routed to slotProps.input (v9). */\r\n inputProps?: React.InputHTMLAttributes<HTMLInputElement> | undefined;\r\n}\r\n\r\nexport const Radio = React.forwardRef<React.ComponentRef<typeof MuiRadio>, RadioProps>(function Radio(\r\n { checked, onChange, label, value, disabled, inputProps, sx, ...rest },\r\n ref,\r\n) {\r\n const radio = (\r\n <MuiRadio\r\n ref={ref}\r\n checked={!!checked}\r\n onChange={onChange}\r\n value={value}\r\n disabled={disabled}\r\n size=\"small\"\r\n // MUI v9: Radio inputProps -> slotProps.input (same migration class\r\n // as Checkbox / Switch / NumberInput). Emitted conditionally so we\r\n // don't pass `slotProps={{ input: undefined }}` when nothing is\r\n // supplied.\r\n slotProps={inputProps ? { input: inputProps } : undefined}\r\n sx={{\r\n padding: \"6px\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n ...sx,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n if (!label) return radio;\r\n return (\r\n <FormControlLabel\r\n control={radio}\r\n label={label}\r\n value={value}\r\n disabled={disabled}\r\n sx={{\r\n margin: 0,\r\n \"& .MuiFormControlLabel-label\": { fontSize: \"var(--text-sm, 13px)\" },\r\n }}\r\n />\r\n );\r\n});\r\n\r\n/**\r\n * RadioGroup - Portnet UI v2\r\n *\r\n * Declarative group of radios taking an `options` array. Use inside\r\n * <Field> for label / hint / error / a11y wiring.\r\n *\r\n * <Field label=\"Type d'opération\" required>\r\n * <RadioGroup\r\n * value={op}\r\n * onChange={e => setOp(e.target.value)}\r\n * options={[\r\n * { value: \"import\", label: \"Importation\" },\r\n * { value: \"export\", label: \"Exportation\" },\r\n * { value: \"transit\", label: \"Transit\", helper: \"Marchandises en transit douanier\" },\r\n * ]}\r\n * />\r\n * </Field>\r\n *\r\n * Layout:\r\n * row={false} (default) -> vertical stack\r\n * row={true} -> horizontal (use only when labels are short)\r\n *\r\n * A11y (audit Batch 5, finding B3-3):\r\n * When an option carries a `helper` text, RadioGroup wires it\r\n * to the inner radio input via aria-describedby - SR users hear\r\n * the helper alongside the label when navigating. Without this\r\n * link the helper is purely visual.\r\n *\r\n * A11y (audit Batch 19, RG-1):\r\n * Used inside <Field>, Field cloneElement-injects presentational /\r\n * validation props onto this group. `error` and `fullWidth` are not valid\r\n * on the role=\"radiogroup\" element (React emits \"non-boolean / unrecognized\r\n * attribute\" warnings), so they are stripped before the spread. The aria-*\r\n * (labelledby / describedby / invalid) and id that Field also injects stay\r\n * valid on the group and are still forwarded.\r\n */\r\nexport interface RadioOption {\r\n value: string | number;\r\n label: React.ReactNode;\r\n helper?: React.ReactNode | undefined;\r\n disabled?: boolean | undefined;\r\n}\r\n\r\nexport type RadioGroupOption = string | RadioOption;\r\n\r\nexport interface RadioGroupProps extends Omit<MuiRadioGroupProps, \"value\" | \"children\"> {\r\n value?: string | number | undefined;\r\n options?: RadioGroupOption[] | undefined;\r\n disabled?: boolean | undefined;\r\n}\r\n\r\nexport function RadioGroup({\r\n value,\r\n onChange,\r\n options = [],\r\n row = false,\r\n disabled = false,\r\n name,\r\n id,\r\n sx,\r\n ...rest\r\n}: RadioGroupProps) {\r\n // R-Ar.1 - stable, SSR-safe, per-instance base for option helper ids.\r\n // Each option that exposes a `helper` derives a deterministic id from\r\n // this base + its index, so the inner <input type=\"radio\">'s\r\n // aria-describedby points at the right <Box> element.\r\n const baseId = React.useId();\r\n\r\n // RG-1 — Field cloneElement-injects presentational/validation props onto this\r\n // child; `error` and `fullWidth` are not valid on the role=\"radiogroup\"\r\n // element and would trigger React attribute warnings if forwarded. Strip just\r\n // those two (object-rest omit); the aria-* / id Field also injects remain in\r\n // `domRest` and stay valid on the group. Cast because these injected props\r\n // are not part of RadioGroupProps.\r\n const { error: _fieldError, fullWidth: _fieldFullWidth, ...domRest } =\r\n rest as typeof rest & { error?: unknown; fullWidth?: unknown };\r\n\r\n return (\r\n <MuiRadioGroup\r\n value={value ?? \"\"}\r\n onChange={onChange}\r\n row={row}\r\n name={name}\r\n id={id}\r\n sx={{ gap: row ? 2 : 0.5, ...sx }}\r\n {...domRest}\r\n >\r\n {options.map((opt, idx) => {\r\n const v = typeof opt === \"string\" ? opt : opt.value;\r\n const lbl = typeof opt === \"string\" ? opt : opt.label;\r\n const helper = typeof opt === \"string\" ? null : opt.helper;\r\n const optDisabled = disabled || (typeof opt === \"object\" && opt.disabled);\r\n // Per-option deterministic id. Uses the loop index so the\r\n // value type (string, number, object) doesn't constrain the\r\n // shape. Stable across renders for the same option list.\r\n const helperId = helper ? `${baseId}-h-${idx}` : undefined;\r\n const labelNode = helper ? (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", paddingY: 0.25 }}>\r\n <Box component=\"span\" sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg)\" }}>\r\n {lbl}\r\n </Box>\r\n <Box\r\n id={helperId}\r\n component=\"span\"\r\n sx={{ fontSize: \"var(--text-xs)\", color: \"var(--fg-subtle)\" }}\r\n >\r\n {helper}\r\n </Box>\r\n </Box>\r\n ) : lbl;\r\n return (\r\n <FormControlLabel\r\n key={v}\r\n value={v}\r\n disabled={optDisabled}\r\n control={\r\n <MuiRadio\r\n size=\"small\"\r\n // MUI v9: aria-describedby routed through slotProps.input\r\n // to land on the inner <input type=\"radio\">, not on the\r\n // root span. SR users hear the helper as a description\r\n // when focusing the radio.\r\n slotProps={helperId ? { input: { \"aria-describedby\": helperId } } : undefined}\r\n sx={{\r\n padding: \"6px\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n />\r\n }\r\n label={labelNode}\r\n sx={{\r\n margin: 0,\r\n alignItems: helper ? \"flex-start\" : \"center\",\r\n \"& .MuiFormControlLabel-label\": { fontSize: \"var(--text-sm)\" },\r\n }}\r\n />\r\n );\r\n })}\r\n </MuiRadioGroup>\r\n );\r\n}\r\n\r\nexport default Radio;\r\n"],"mappings":"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","ignoreList":[]}