@portnet/ui 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -1 +1 @@
1
- {"version":3,"file":"SaveFilterDialog.js","names":["React","Box","Modal","Field","Input","Switch","Button","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","title","nameLabel","namePlaceholder","nameRequired","duplicateHint","setAsDefault","shareLabel","shareHint","cancel","save","BODY_SX","display","flexDirection","gap","SaveFilterDialog","props","_props$open","open","onClose","onSubmit","_props$initialName","initialName","_props$initialIsDefau","initialIsDefault","_props$initialShared","initialShared","_props$allowDefault","allowDefault","_props$allowShared","allowShared","existingNames","_props$busy","busy","labels","L","_React$useState","useState","_React$useState2","_slicedToArray","name","setName","_React$useState3","_React$useState4","isDefault","setIsDefault","_React$useState5","_React$useState6","shared","setShared","_React$useState7","_React$useState8","touched","setTouched","useEffect","resetOnOpen","trimmed","trim","nameError","undefined","isDuplicate","Array","isArray","some","eq","n","toLowerCase","handleSubmit","handleKeyDown","e","key","preventDefault","footer","children","variant","type","onClick","disabled","size","sx","_objectSpread","label","required","error","hint","value","onChange","target","placeholder","inputProps","autoFocus","maxLength","onKeyDown","checked","description"],"sources":["../../../../src/lib/v2/patterns/SaveFilterDialog.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\nimport Modal from \"../components/Modal\";\r\nimport Field from \"../components/Field\";\r\nimport Input from \"../components/Input\";\r\nimport Switch from \"../components/Switch\";\r\nimport Button from \"../components/Button\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * SaveFilterDialog - Portnet UI v2 (pattern)\r\n *\r\n * \"Save current filter\" dialog for the Saved Filters framework\r\n * (v2/personalization · savedFilters). Built on the v2 Modal, so it\r\n * inherits the focus trap, Esc / backdrop / X close affordances, and the\r\n * aria-labelledby contract (Charter R-M.*).\r\n *\r\n * Presentational and provider-FREE by design: it collects a name and two\r\n * options and emits them via `onSubmit`. The parent (SavedFiltersMenu or\r\n * a host) persists through useSavedFilters().save and closes the dialog.\r\n *\r\n * <SaveFilterDialog\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * existingNames={filters.map(f => f.name)}\r\n * allowDefault\r\n * onSubmit={({ name, isDefault, shared }) => {\r\n * save({ name, criteria: currentCriteria, isDefault, shared });\r\n * setOpen(false);\r\n * }}\r\n * />\r\n *\r\n * Name is required (validated on submit; the error is announced via\r\n * Field's role=\"alert\" binding). A duplicate name is allowed (Odoo-style)\r\n * but surfaced as a non-blocking hint.\r\n */\r\n\r\nexport interface SaveFilterDialogSubmit {\r\n name: string;\r\n isDefault: boolean;\r\n shared: boolean;\r\n}\r\n\r\nexport interface SaveFilterDialogLabels {\r\n title: string;\r\n nameLabel: string;\r\n namePlaceholder: string;\r\n nameRequired: string;\r\n duplicateHint: string;\r\n setAsDefault: string;\r\n shareLabel: string;\r\n shareHint: string;\r\n cancel: string;\r\n save: string;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Enregistrer le filtre\",\r\n nameLabel: \"Nom du filtre\",\r\n namePlaceholder: \"ex. Dossiers en attente\",\r\n nameRequired: \"Le nom est obligatoire.\",\r\n duplicateHint: \"Un filtre porte déjà ce nom.\",\r\n setAsDefault: \"Appliquer par défaut à l'ouverture\",\r\n shareLabel: \"Partager avec mon équipe\",\r\n shareHint: \"Visible par les autres utilisateurs (selon les droits).\",\r\n cancel: \"Annuler\",\r\n save: \"Enregistrer\",\r\n} satisfies SaveFilterDialogLabels);\r\n\r\nconst BODY_SX = Object.freeze({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-4)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nexport interface SaveFilterDialogProps {\r\n open?: boolean | undefined;\r\n /** Required — a dialog must be closable (fed to Modal + both footer buttons). */\r\n onClose: () => void;\r\n /** Emitted on a valid submit: ({ name, isDefault, shared }) => void. */\r\n onSubmit?: ((values: SaveFilterDialogSubmit) => void) | undefined;\r\n initialName?: string | undefined;\r\n initialIsDefault?: boolean | undefined;\r\n initialShared?: boolean | undefined;\r\n /** Show the \"set as default\" switch. */\r\n allowDefault?: boolean | undefined;\r\n /** Show the \"share with team\" switch (modelled, not enforced in Phase 1). */\r\n allowShared?: boolean | undefined;\r\n /** Existing filter names, for a non-blocking duplicate hint. */\r\n existingNames?: readonly string[] | undefined;\r\n /** Disable the submit button while a save is in flight. */\r\n busy?: boolean | undefined;\r\n /** Localised labels (FR default; EN/AR supported). */\r\n labels?: Partial<SaveFilterDialogLabels> | undefined;\r\n}\r\n\r\nfunction SaveFilterDialog(props: SaveFilterDialogProps): React.JSX.Element {\r\n const {\r\n open = false,\r\n onClose,\r\n onSubmit,\r\n initialName = \"\",\r\n initialIsDefault = false,\r\n initialShared = false,\r\n allowDefault = true,\r\n allowShared = false,\r\n existingNames,\r\n busy = false,\r\n labels,\r\n } = props;\r\n const L: SaveFilterDialogLabels = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n const [name, setName] = React.useState(initialName);\r\n const [isDefault, setIsDefault] = React.useState(!!initialIsDefault);\r\n const [shared, setShared] = React.useState(!!initialShared);\r\n const [touched, setTouched] = React.useState(false);\r\n\r\n // Reset the form each time the dialog opens.\r\n React.useEffect(\r\n function resetOnOpen() {\r\n if (open) {\r\n setName(initialName || \"\");\r\n setIsDefault(!!initialIsDefault);\r\n setShared(!!initialShared);\r\n setTouched(false);\r\n }\r\n },\r\n [open, initialName, initialIsDefault, initialShared]\r\n );\r\n\r\n const trimmed = name.trim();\r\n const nameError = touched && !trimmed ? L.nameRequired : undefined;\r\n const isDuplicate =\r\n !!trimmed &&\r\n Array.isArray(existingNames) &&\r\n existingNames.some(function eq(n) {\r\n return (\r\n typeof n === \"string\" &&\r\n n.trim().toLowerCase() === trimmed.toLowerCase()\r\n );\r\n });\r\n\r\n const handleSubmit = function handleSubmit(): void {\r\n if (!trimmed) {\r\n setTouched(true);\r\n return;\r\n }\r\n if (typeof onSubmit === \"function\") {\r\n onSubmit({ name: trimmed, isDefault: isDefault, shared: shared });\r\n }\r\n };\r\n\r\n const handleKeyDown = function handleKeyDown(\r\n e: React.KeyboardEvent<HTMLInputElement>\r\n ): void {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleSubmit();\r\n }\r\n };\r\n\r\n const footer = (\r\n <>\r\n <Button variant=\"ghost\" type=\"button\" onClick={onClose}>\r\n {L.cancel}\r\n </Button>\r\n <Button\r\n variant=\"primary\"\r\n type=\"button\"\r\n onClick={handleSubmit}\r\n disabled={busy}\r\n >\r\n {L.save}\r\n </Button>\r\n </>\r\n );\r\n\r\n return (\r\n <Modal open={open} onClose={onClose} title={L.title} size=\"sm\" footer={footer}>\r\n <Box sx={BODY_SX}>\r\n <Field\r\n label={L.nameLabel}\r\n required\r\n {...(nameError !== undefined ? { error: nameError } : {})}\r\n {...(isDuplicate ? { hint: L.duplicateHint } : {})}\r\n >\r\n <Input\r\n value={name}\r\n onChange={function (e) {\r\n setName(e.target.value);\r\n }}\r\n placeholder={L.namePlaceholder}\r\n inputProps={{ autoFocus: true, maxLength: 80, onKeyDown: handleKeyDown }}\r\n />\r\n </Field>\r\n\r\n {allowDefault && (\r\n <Switch\r\n checked={isDefault}\r\n onChange={function (e) {\r\n setIsDefault(e.target.checked);\r\n }}\r\n label={L.setAsDefault}\r\n />\r\n )}\r\n\r\n {allowShared && (\r\n <Switch\r\n checked={shared}\r\n onChange={function (e) {\r\n setShared(e.target.checked);\r\n }}\r\n label={L.shareLabel}\r\n description={L.shareHint}\r\n />\r\n )}\r\n </Box>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default SaveFilterDialog;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SaveFilterDialog.js","names":["React","Box","Modal","Field","Input","Switch","Button","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","title","nameLabel","namePlaceholder","nameRequired","duplicateHint","setAsDefault","shareLabel","shareHint","cancel","save","BODY_SX","display","flexDirection","gap","SaveFilterDialog","props","open","onClose","onSubmit","initialName","initialIsDefault","initialShared","allowDefault","allowShared","existingNames","busy","labels","L","name","setName","useState","isDefault","setIsDefault","shared","setShared","touched","setTouched","useEffect","resetOnOpen","trimmed","trim","nameError","undefined","isDuplicate","Array","isArray","some","eq","n","toLowerCase","handleSubmit","handleKeyDown","e","key","preventDefault","footer","children","variant","type","onClick","disabled","size","sx","label","required","error","hint","value","onChange","target","placeholder","inputProps","autoFocus","maxLength","onKeyDown","checked","description"],"sources":["../../../../src/lib/v2/patterns/SaveFilterDialog.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\nimport Modal from \"../components/Modal\";\r\nimport Field from \"../components/Field\";\r\nimport Input from \"../components/Input\";\r\nimport Switch from \"../components/Switch\";\r\nimport Button from \"../components/Button\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * SaveFilterDialog - Portnet UI v2 (pattern)\r\n *\r\n * \"Save current filter\" dialog for the Saved Filters framework\r\n * (v2/personalization · savedFilters). Built on the v2 Modal, so it\r\n * inherits the focus trap, Esc / backdrop / X close affordances, and the\r\n * aria-labelledby contract (Charter R-M.*).\r\n *\r\n * Presentational and provider-FREE by design: it collects a name and two\r\n * options and emits them via `onSubmit`. The parent (SavedFiltersMenu or\r\n * a host) persists through useSavedFilters().save and closes the dialog.\r\n *\r\n * <SaveFilterDialog\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * existingNames={filters.map(f => f.name)}\r\n * allowDefault\r\n * onSubmit={({ name, isDefault, shared }) => {\r\n * save({ name, criteria: currentCriteria, isDefault, shared });\r\n * setOpen(false);\r\n * }}\r\n * />\r\n *\r\n * Name is required (validated on submit; the error is announced via\r\n * Field's role=\"alert\" binding). A duplicate name is allowed (Odoo-style)\r\n * but surfaced as a non-blocking hint.\r\n */\r\n\r\nexport interface SaveFilterDialogSubmit {\r\n name: string;\r\n isDefault: boolean;\r\n shared: boolean;\r\n}\r\n\r\nexport interface SaveFilterDialogLabels {\r\n title: string;\r\n nameLabel: string;\r\n namePlaceholder: string;\r\n nameRequired: string;\r\n duplicateHint: string;\r\n setAsDefault: string;\r\n shareLabel: string;\r\n shareHint: string;\r\n cancel: string;\r\n save: string;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Enregistrer le filtre\",\r\n nameLabel: \"Nom du filtre\",\r\n namePlaceholder: \"ex. Dossiers en attente\",\r\n nameRequired: \"Le nom est obligatoire.\",\r\n duplicateHint: \"Un filtre porte déjà ce nom.\",\r\n setAsDefault: \"Appliquer par défaut à l'ouverture\",\r\n shareLabel: \"Partager avec mon équipe\",\r\n shareHint: \"Visible par les autres utilisateurs (selon les droits).\",\r\n cancel: \"Annuler\",\r\n save: \"Enregistrer\",\r\n} satisfies SaveFilterDialogLabels);\r\n\r\nconst BODY_SX = Object.freeze({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-4)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nexport interface SaveFilterDialogProps {\r\n open?: boolean | undefined;\r\n /** Required — a dialog must be closable (fed to Modal + both footer buttons). */\r\n onClose: () => void;\r\n /** Emitted on a valid submit: ({ name, isDefault, shared }) => void. */\r\n onSubmit?: ((values: SaveFilterDialogSubmit) => void) | undefined;\r\n initialName?: string | undefined;\r\n initialIsDefault?: boolean | undefined;\r\n initialShared?: boolean | undefined;\r\n /** Show the \"set as default\" switch. */\r\n allowDefault?: boolean | undefined;\r\n /** Show the \"share with team\" switch (modelled, not enforced in Phase 1). */\r\n allowShared?: boolean | undefined;\r\n /** Existing filter names, for a non-blocking duplicate hint. */\r\n existingNames?: readonly string[] | undefined;\r\n /** Disable the submit button while a save is in flight. */\r\n busy?: boolean | undefined;\r\n /** Localised labels (FR default; EN/AR supported). */\r\n labels?: Partial<SaveFilterDialogLabels> | undefined;\r\n}\r\n\r\nfunction SaveFilterDialog(props: SaveFilterDialogProps): React.JSX.Element {\r\n const {\r\n open = false,\r\n onClose,\r\n onSubmit,\r\n initialName = \"\",\r\n initialIsDefault = false,\r\n initialShared = false,\r\n allowDefault = true,\r\n allowShared = false,\r\n existingNames,\r\n busy = false,\r\n labels,\r\n } = props;\r\n const L: SaveFilterDialogLabels = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n const [name, setName] = React.useState(initialName);\r\n const [isDefault, setIsDefault] = React.useState(!!initialIsDefault);\r\n const [shared, setShared] = React.useState(!!initialShared);\r\n const [touched, setTouched] = React.useState(false);\r\n\r\n // Reset the form each time the dialog opens.\r\n React.useEffect(\r\n function resetOnOpen() {\r\n if (open) {\r\n setName(initialName || \"\");\r\n setIsDefault(!!initialIsDefault);\r\n setShared(!!initialShared);\r\n setTouched(false);\r\n }\r\n },\r\n [open, initialName, initialIsDefault, initialShared]\r\n );\r\n\r\n const trimmed = name.trim();\r\n const nameError = touched && !trimmed ? L.nameRequired : undefined;\r\n const isDuplicate =\r\n !!trimmed &&\r\n Array.isArray(existingNames) &&\r\n existingNames.some(function eq(n) {\r\n return (\r\n typeof n === \"string\" &&\r\n n.trim().toLowerCase() === trimmed.toLowerCase()\r\n );\r\n });\r\n\r\n const handleSubmit = function handleSubmit(): void {\r\n if (!trimmed) {\r\n setTouched(true);\r\n return;\r\n }\r\n if (typeof onSubmit === \"function\") {\r\n onSubmit({ name: trimmed, isDefault: isDefault, shared: shared });\r\n }\r\n };\r\n\r\n const handleKeyDown = function handleKeyDown(\r\n e: React.KeyboardEvent<HTMLInputElement>\r\n ): void {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleSubmit();\r\n }\r\n };\r\n\r\n const footer = (\r\n <>\r\n <Button variant=\"ghost\" type=\"button\" onClick={onClose}>\r\n {L.cancel}\r\n </Button>\r\n <Button\r\n variant=\"primary\"\r\n type=\"button\"\r\n onClick={handleSubmit}\r\n disabled={busy}\r\n >\r\n {L.save}\r\n </Button>\r\n </>\r\n );\r\n\r\n return (\r\n <Modal open={open} onClose={onClose} title={L.title} size=\"sm\" footer={footer}>\r\n <Box sx={BODY_SX}>\r\n <Field\r\n label={L.nameLabel}\r\n required\r\n {...(nameError !== undefined ? { error: nameError } : {})}\r\n {...(isDuplicate ? { hint: L.duplicateHint } : {})}\r\n >\r\n <Input\r\n value={name}\r\n onChange={function (e) {\r\n setName(e.target.value);\r\n }}\r\n placeholder={L.namePlaceholder}\r\n inputProps={{ autoFocus: true, maxLength: 80, onKeyDown: handleKeyDown }}\r\n />\r\n </Field>\r\n\r\n {allowDefault && (\r\n <Switch\r\n checked={isDefault}\r\n onChange={function (e) {\r\n setIsDefault(e.target.checked);\r\n }}\r\n label={L.setAsDefault}\r\n />\r\n )}\r\n\r\n {allowShared && (\r\n <Switch\r\n checked={shared}\r\n onChange={function (e) {\r\n setShared(e.target.checked);\r\n }}\r\n label={L.shareLabel}\r\n description={L.shareHint}\r\n />\r\n )}\r\n </Box>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default SaveFilterDialog;\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,15 +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
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
1
  import * as React from "react";
14
2
  import Box from "@mui/material/Box";
15
3
  import Popover from "@mui/material/Popover";
@@ -55,7 +43,7 @@ import { mergeLabels } from "../utils/mergeLabels";
55
43
  * aria-label and --danger hover colour keep the delete semantics intact.
56
44
  */
57
45
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
58
- var DEFAULT_LABELS = Object.freeze({
46
+ const DEFAULT_LABELS = Object.freeze({
59
47
  button: "Filtres enregistrés",
60
48
  title: "Filtres enregistrés",
61
49
  noSavedFilters: "Aucun filtre enregistré",
@@ -63,9 +51,9 @@ var DEFAULT_LABELS = Object.freeze({
63
51
  apply: "Appliquer le filtre",
64
52
  setDefault: "Définir par défaut",
65
53
  unsetDefault: "Retirer le filtre par défaut",
66
- "delete": "Supprimer le filtre",
54
+ delete: "Supprimer le filtre",
67
55
  defaultBadge: "Par défaut",
68
- countSuffix: function countSuffix(n) {
56
+ countSuffix: function (n) {
69
57
  return n + " enregistré" + (n > 1 ? "s" : "");
70
58
  },
71
59
  // Forwarded to SaveFilterDialog:
@@ -83,19 +71,19 @@ var DEFAULT_LABELS = Object.freeze({
83
71
 
84
72
  /* ── Hoisted sx (D5) ──────────────────────────────────────────────── */
85
73
 
86
- var POPOVER_PAPER_SX = Object.freeze({
74
+ const POPOVER_PAPER_SX = Object.freeze({
87
75
  borderRadius: "var(--r-lg)",
88
76
  boxShadow: "var(--shadow-md)",
89
77
  border: "1px solid var(--border)"
90
78
  });
91
- var POPOVER_BODY_SX = Object.freeze({
79
+ const POPOVER_BODY_SX = Object.freeze({
92
80
  padding: "var(--s-3) var(--s-4)",
93
81
  minWidth: 280,
94
82
  display: "flex",
95
83
  flexDirection: "column",
96
84
  gap: "var(--s-1)"
97
85
  });
98
- var POPOVER_TITLE_SX = Object.freeze({
86
+ const POPOVER_TITLE_SX = Object.freeze({
99
87
  fontSize: "var(--text-xs)",
100
88
  fontWeight: "var(--fw-semibold)",
101
89
  color: "var(--fg-muted)",
@@ -105,19 +93,19 @@ var POPOVER_TITLE_SX = Object.freeze({
105
93
  borderBottom: "1px solid var(--border)",
106
94
  marginBottom: "var(--s-2)"
107
95
  });
108
- var LIST_SX = Object.freeze({
96
+ const LIST_SX = Object.freeze({
109
97
  display: "flex",
110
98
  flexDirection: "column",
111
99
  gap: "var(--s-1)",
112
100
  maxHeight: 320,
113
101
  overflowY: "auto"
114
102
  });
115
- var ROW_SX = Object.freeze({
103
+ const ROW_SX = Object.freeze({
116
104
  display: "flex",
117
105
  alignItems: "center",
118
106
  gap: "var(--s-1)"
119
107
  });
120
- var APPLY_BTN_SX = Object.freeze({
108
+ const APPLY_BTN_SX = Object.freeze({
121
109
  display: "flex",
122
110
  alignItems: "center",
123
111
  gap: "var(--s-2)",
@@ -140,14 +128,14 @@ var APPLY_BTN_SX = Object.freeze({
140
128
  boxShadow: "var(--shadow-focus)"
141
129
  }
142
130
  });
143
- var APPLY_NAME_SX = Object.freeze({
131
+ const APPLY_NAME_SX = Object.freeze({
144
132
  flex: 1,
145
133
  minWidth: 0,
146
134
  overflow: "hidden",
147
135
  textOverflow: "ellipsis",
148
136
  whiteSpace: "nowrap"
149
137
  });
150
- var DEFAULT_BADGE_SX = Object.freeze({
138
+ const DEFAULT_BADGE_SX = Object.freeze({
151
139
  flexShrink: 0,
152
140
  background: "var(--accent)",
153
141
  color: "var(--accent-fg)",
@@ -157,7 +145,7 @@ var DEFAULT_BADGE_SX = Object.freeze({
157
145
  fontWeight: "var(--fw-semibold)",
158
146
  lineHeight: 1.4
159
147
  });
160
- var BADGE_SX = Object.freeze({
148
+ const BADGE_SX = Object.freeze({
161
149
  marginInlineStart: "var(--s-1)",
162
150
  background: "var(--accent)",
163
151
  color: "var(--accent-fg)",
@@ -167,25 +155,25 @@ var BADGE_SX = Object.freeze({
167
155
  fontWeight: "var(--fw-semibold)",
168
156
  lineHeight: 1.4
169
157
  });
170
- var EMPTY_SX = Object.freeze({
158
+ const EMPTY_SX = Object.freeze({
171
159
  fontSize: "var(--text-sm)",
172
160
  color: "var(--fg-subtle)",
173
161
  padding: "var(--s-3) var(--s-2)",
174
162
  textAlign: "center"
175
163
  });
176
- var POPOVER_FOOTER_SX = Object.freeze({
164
+ const POPOVER_FOOTER_SX = Object.freeze({
177
165
  display: "flex",
178
166
  paddingTop: "var(--s-2)",
179
167
  marginTop: "var(--s-2)",
180
168
  borderTop: "1px solid var(--border)"
181
169
  });
182
- var ACTION_BTN_SX = Object.freeze({
170
+ const ACTION_BTN_SX = Object.freeze({
183
171
  color: "var(--fg-subtle)",
184
172
  "&.Mui-focusVisible": {
185
173
  boxShadow: "var(--shadow-focus)"
186
174
  }
187
175
  });
188
- var DELETE_BTN_SX = Object.freeze({
176
+ const DELETE_BTN_SX = Object.freeze({
189
177
  color: "var(--fg-subtle)",
190
178
  "&:hover": {
191
179
  color: "var(--danger)"
@@ -195,66 +183,58 @@ var DELETE_BTN_SX = Object.freeze({
195
183
  }
196
184
  });
197
185
  function SavedFiltersMenu(props) {
198
- var resourceKey = props.resourceKey,
199
- currentCriteria = props.currentCriteria,
200
- onApply = props.onApply,
201
- _props$canSave = props.canSave,
202
- canSave = _props$canSave === void 0 ? true : _props$canSave,
203
- _props$allowDefault = props.allowDefault,
204
- allowDefault = _props$allowDefault === void 0 ? true : _props$allowDefault,
205
- _props$allowShared = props.allowShared,
206
- allowShared = _props$allowShared === void 0 ? false : _props$allowShared,
207
- _props$align = props.align,
208
- align = _props$align === void 0 ? "right" : _props$align,
209
- labels = props.labels;
210
- var L = React.useMemo(function () {
211
- return mergeLabels(DEFAULT_LABELS, labels);
212
- }, [labels]);
213
- var _useSavedFilters = useSavedFilters(resourceKey),
214
- filters = _useSavedFilters.filters,
215
- save = _useSavedFilters.save,
216
- remove = _useSavedFilters.remove,
217
- setDefault = _useSavedFilters.setDefault,
218
- clearDefault = _useSavedFilters.clearDefault;
219
- var _React$useState = React.useState(null),
220
- _React$useState2 = _slicedToArray(_React$useState, 2),
221
- anchor = _React$useState2[0],
222
- setAnchor = _React$useState2[1];
223
- var _React$useState3 = React.useState(false),
224
- _React$useState4 = _slicedToArray(_React$useState3, 2),
225
- dialogOpen = _React$useState4[0],
226
- setDialogOpen = _React$useState4[1];
227
- var open = Boolean(anchor);
228
- var count = filters.length;
229
- var canSaveCurrent = canSave !== false && currentCriteria != null;
230
- var handleOpen = function handleOpen(e) {
186
+ const {
187
+ resourceKey,
188
+ currentCriteria,
189
+ onApply,
190
+ canSave = true,
191
+ allowDefault = true,
192
+ allowShared = false,
193
+ align = "right",
194
+ labels
195
+ } = props;
196
+ const L = React.useMemo(() => mergeLabels(DEFAULT_LABELS, labels), [labels]);
197
+ const {
198
+ filters,
199
+ save,
200
+ remove,
201
+ setDefault,
202
+ clearDefault
203
+ } = useSavedFilters(resourceKey);
204
+ const [anchor, setAnchor] = React.useState(null);
205
+ const [dialogOpen, setDialogOpen] = React.useState(false);
206
+ const open = Boolean(anchor);
207
+ const count = filters.length;
208
+ const canSaveCurrent = canSave !== false && currentCriteria != null;
209
+ const handleOpen = function handleOpen(e) {
231
210
  setAnchor(e.currentTarget);
232
211
  };
233
- var handleClose = function handleClose() {
212
+ const handleClose = function handleClose() {
234
213
  setAnchor(null);
235
214
  };
236
- var applyAndClose = function applyAndClose(filter) {
215
+ const applyAndClose = function applyAndClose(filter) {
237
216
  if (typeof onApply === "function") onApply(filter.criteria, filter);
238
217
  setAnchor(null);
239
218
  };
240
219
 
241
220
  // Opening the dialog closes the popover so the two overlays don't stack.
242
- var openSaveDialog = function openSaveDialog() {
221
+ const openSaveDialog = function openSaveDialog() {
243
222
  setAnchor(null);
244
223
  setDialogOpen(true);
245
224
  };
246
- var handleSubmit = function handleSubmit(input) {
247
- save(_objectSpread({
225
+ const handleSubmit = function handleSubmit(input) {
226
+ save({
248
227
  name: input.name,
249
228
  isDefault: input.isDefault,
250
- shared: input.shared
251
- }, currentCriteria !== undefined ? {
252
- criteria: currentCriteria
253
- } : {}));
229
+ shared: input.shared,
230
+ ...(currentCriteria !== undefined ? {
231
+ criteria: currentCriteria
232
+ } : {})
233
+ });
254
234
  setDialogOpen(false);
255
235
  };
256
- var triggerAria = count > 0 ? L.button + ", " + L.countSuffix(count) : L.button;
257
- var dialogLabels = React.useMemo(function buildDialogLabels() {
236
+ const triggerAria = count > 0 ? L.button + ", " + L.countSuffix(count) : L.button;
237
+ const dialogLabels = React.useMemo(function buildDialogLabels() {
258
238
  return {
259
239
  title: L.dialogTitle,
260
240
  nameLabel: L.nameLabel,
@@ -268,7 +248,7 @@ function SavedFiltersMenu(props) {
268
248
  save: L.save
269
249
  };
270
250
  }, [L]);
271
- var popoverSlotProps = React.useMemo(function buildSlotProps() {
251
+ const popoverSlotProps = React.useMemo(function buildSlotProps() {
272
252
  return {
273
253
  paper: {
274
254
  sx: POPOVER_PAPER_SX,
@@ -277,7 +257,7 @@ function SavedFiltersMenu(props) {
277
257
  }
278
258
  };
279
259
  }, [L.title]);
280
- var existingNames = React.useMemo(function buildExistingNames() {
260
+ const existingNames = React.useMemo(function buildExistingNames() {
281
261
  return filters.map(function (f) {
282
262
  return f.name;
283
263
  }).filter(function isName(n) {
@@ -333,7 +313,7 @@ function SavedFiltersMenu(props) {
333
313
  children: [/*#__PURE__*/_jsxs(Box, {
334
314
  component: "button",
335
315
  type: "button",
336
- onClick: function onClick() {
316
+ onClick: function () {
337
317
  applyAndClose(f);
338
318
  },
339
319
  "aria-label": L.apply + " : " + f.name + (f.isDefault ? " (" + L.defaultBadge + ")" : ""),
@@ -350,12 +330,13 @@ function SavedFiltersMenu(props) {
350
330
  }), /*#__PURE__*/_jsx(IconButton, {
351
331
  size: "small",
352
332
  "aria-label": (f.isDefault ? L.unsetDefault : L.setDefault) + " : " + f.name,
353
- onClick: function onClick() {
333
+ onClick: function () {
354
334
  if (f.isDefault) clearDefault();else setDefault(f.id);
355
335
  },
356
- sx: f.isDefault ? _objectSpread(_objectSpread({}, ACTION_BTN_SX), {}, {
336
+ sx: f.isDefault ? {
337
+ ...ACTION_BTN_SX,
357
338
  color: "var(--accent)"
358
- }) : ACTION_BTN_SX,
339
+ } : ACTION_BTN_SX,
359
340
  children: f.isDefault ? /*#__PURE__*/_jsx(PushPinIcon, {
360
341
  fontSize: "small"
361
342
  }) : /*#__PURE__*/_jsx(PushPinOutlinedIcon, {
@@ -363,8 +344,8 @@ function SavedFiltersMenu(props) {
363
344
  })
364
345
  }), /*#__PURE__*/_jsx(IconButton, {
365
346
  size: "small",
366
- "aria-label": L["delete"] + " : " + f.name,
367
- onClick: function onClick() {
347
+ "aria-label": L.delete + " : " + f.name,
348
+ onClick: function () {
368
349
  remove(f.id);
369
350
  },
370
351
  sx: DELETE_BTN_SX,
@@ -391,7 +372,7 @@ function SavedFiltersMenu(props) {
391
372
  })
392
373
  }), /*#__PURE__*/_jsx(SaveFilterDialog, {
393
374
  open: dialogOpen,
394
- onClose: function onClose() {
375
+ onClose: function () {
395
376
  setDialogOpen(false);
396
377
  },
397
378
  onSubmit: handleSubmit,
@@ -1 +1 @@
1
- {"version":3,"file":"SavedFiltersMenu.js","names":["React","Box","Popover","IconButton","BookmarkBorderIcon","AddIcon","PushPinIcon","PushPinOutlinedIcon","CloseIcon","Button","SaveFilterDialog","useSavedFilters","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DEFAULT_LABELS","Object","freeze","button","title","noSavedFilters","saveCurrentFilter","apply","setDefault","unsetDefault","defaultBadge","countSuffix","n","dialogTitle","nameLabel","namePlaceholder","nameRequired","duplicateHint","setAsDefault","shareLabel","shareHint","cancel","save","POPOVER_PAPER_SX","borderRadius","boxShadow","border","POPOVER_BODY_SX","padding","minWidth","display","flexDirection","gap","POPOVER_TITLE_SX","fontSize","fontWeight","color","textTransform","letterSpacing","paddingBottom","borderBottom","marginBottom","LIST_SX","maxHeight","overflowY","ROW_SX","alignItems","APPLY_BTN_SX","flex","textAlign","background","cursor","font","outline","APPLY_NAME_SX","overflow","textOverflow","whiteSpace","DEFAULT_BADGE_SX","flexShrink","lineHeight","BADGE_SX","marginInlineStart","EMPTY_SX","POPOVER_FOOTER_SX","paddingTop","marginTop","borderTop","ACTION_BTN_SX","DELETE_BTN_SX","SavedFiltersMenu","props","resourceKey","currentCriteria","onApply","_props$canSave","canSave","_props$allowDefault","allowDefault","_props$allowShared","allowShared","_props$align","align","labels","L","useMemo","_useSavedFilters","filters","remove","clearDefault","_React$useState","useState","_React$useState2","_slicedToArray","anchor","setAnchor","_React$useState3","_React$useState4","dialogOpen","setDialogOpen","open","Boolean","count","length","canSaveCurrent","handleOpen","e","currentTarget","handleClose","applyAndClose","filter","criteria","openSaveDialog","handleSubmit","input","_objectSpread","name","isDefault","shared","undefined","triggerAria","dialogLabels","buildDialogLabels","popoverSlotProps","buildSlotProps","paper","sx","role","existingNames","buildExistingNames","map","f","isName","children","variant","size","type","icon","onClick","component","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","id","disabled","onSubmit"],"sources":["../../../../src/lib/v2/patterns/SavedFiltersMenu.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Popover from \"@mui/material/Popover\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport BookmarkBorderIcon from \"@mui/icons-material/BookmarkBorder\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport PushPinIcon from \"@mui/icons-material/PushPin\";\r\nimport PushPinOutlinedIcon from \"@mui/icons-material/PushPinOutlined\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\nimport Button from \"../components/Button\";\r\nimport SaveFilterDialog from \"./SaveFilterDialog\";\r\nimport type {\r\n SaveFilterDialogLabels,\r\n SaveFilterDialogSubmit,\r\n} from \"./SaveFilterDialog\";\r\nimport { useSavedFilters } from \"../personalization/capabilities/savedFilters\";\r\nimport type { SavedFilter } from \"../personalization/types\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * SavedFiltersMenu - Portnet UI v2 (pattern)\r\n *\r\n * Turn-key dropdown for the Saved Filters framework. Connected to the\r\n * savedFilters capability via useSavedFilters(resourceKey); the host only\r\n * supplies the live `currentCriteria` (to save) and an `onApply` callback\r\n * (to apply a recalled filter to its own state).\r\n *\r\n * <SavedFiltersMenu\r\n * resourceKey=\"ti:list\"\r\n * currentCriteria={filters}\r\n * onApply={(criteria) => setFilters(criteria)}\r\n * allowDefault\r\n * />\r\n *\r\n * The component owns the criteria neither in shape nor semantics — it\r\n * stores whatever the host passes and hands it back on apply, which is\r\n * what makes it reusable across every list.\r\n *\r\n * a11y: the Popover carries role=\"dialog\" + aria-label (like\r\n * ColumnsToggle); each filter row is a real <button> (apply), with a pin\r\n * toggle (default) and a delete control, all aria-labelled per filter.\r\n * For a default filter the apply button's accessible name appends the\r\n * visible \"Par défaut\" badge text (WCAG 2.5.3 Label in Name).\r\n *\r\n * Note (icons): the delete control uses CloseIcon (@mui/icons-material/Close)\r\n * rather than a trash glyph because DeleteOutline is absent from the internal\r\n * @mui/icons-material@9 republish used by the consuming apps; the control's\r\n * aria-label and --danger hover colour keep the delete semantics intact.\r\n */\r\n\r\nexport interface SavedFiltersMenuLabels {\r\n button: string;\r\n title: string;\r\n noSavedFilters: string;\r\n saveCurrentFilter: string;\r\n apply: string;\r\n setDefault: string;\r\n unsetDefault: string;\r\n delete: string;\r\n defaultBadge: string;\r\n countSuffix: (n: number) => string;\r\n // Forwarded to SaveFilterDialog:\r\n dialogTitle: string;\r\n nameLabel: string;\r\n namePlaceholder: string;\r\n nameRequired: string;\r\n duplicateHint: string;\r\n setAsDefault: string;\r\n shareLabel: string;\r\n shareHint: string;\r\n cancel: string;\r\n save: string;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n button: \"Filtres enregistrés\",\r\n title: \"Filtres enregistrés\",\r\n noSavedFilters: \"Aucun filtre enregistré\",\r\n saveCurrentFilter: \"Enregistrer le filtre actuel…\",\r\n apply: \"Appliquer le filtre\",\r\n setDefault: \"Définir par défaut\",\r\n unsetDefault: \"Retirer le filtre par défaut\",\r\n delete: \"Supprimer le filtre\",\r\n defaultBadge: \"Par défaut\",\r\n countSuffix: function (n) {\r\n return n + \" enregistré\" + (n > 1 ? \"s\" : \"\");\r\n },\r\n // Forwarded to SaveFilterDialog:\r\n dialogTitle: \"Enregistrer le filtre\",\r\n nameLabel: \"Nom du filtre\",\r\n namePlaceholder: \"ex. Dossiers en attente\",\r\n nameRequired: \"Le nom est obligatoire.\",\r\n duplicateHint: \"Un filtre porte déjà ce nom.\",\r\n setAsDefault: \"Appliquer par défaut à l'ouverture\",\r\n shareLabel: \"Partager avec mon équipe\",\r\n shareHint: \"Visible par les autres utilisateurs (selon les droits).\",\r\n cancel: \"Annuler\",\r\n save: \"Enregistrer\",\r\n} satisfies SavedFiltersMenuLabels);\r\n\r\n/* ── Hoisted sx (D5) ──────────────────────────────────────────────── */\r\n\r\nconst POPOVER_PAPER_SX = Object.freeze({\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-md)\",\r\n border: \"1px solid var(--border)\",\r\n});\r\n\r\nconst POPOVER_BODY_SX = Object.freeze({\r\n padding: \"var(--s-3) var(--s-4)\",\r\n minWidth: 280,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-1)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst POPOVER_TITLE_SX = Object.freeze({\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.04em\",\r\n paddingBottom: \"var(--s-2)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n marginBottom: \"var(--s-2)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst LIST_SX = Object.freeze({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-1)\",\r\n maxHeight: 320,\r\n overflowY: \"auto\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst ROW_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst APPLY_BTN_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flex: 1,\r\n minWidth: 0,\r\n textAlign: \"start\",\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n font: \"inherit\",\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg)\",\r\n padding: \"var(--s-2)\",\r\n borderRadius: \"var(--r-sm)\",\r\n \"&:hover\": { background: \"var(--bg-subtle)\" },\r\n \"&:focus-visible\": { outline: \"none\", boxShadow: \"var(--shadow-focus)\" },\r\n} satisfies SxProps<Theme>);\r\n\r\nconst APPLY_NAME_SX = Object.freeze({\r\n flex: 1,\r\n minWidth: 0,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst DEFAULT_BADGE_SX = Object.freeze({\r\n flexShrink: 0,\r\n background: \"var(--accent)\",\r\n color: \"var(--accent-fg)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"1px 8px\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n lineHeight: 1.4,\r\n});\r\n\r\nconst BADGE_SX = Object.freeze({\r\n marginInlineStart: \"var(--s-1)\",\r\n background: \"var(--accent)\",\r\n color: \"var(--accent-fg)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"1px 6px\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n lineHeight: 1.4,\r\n});\r\n\r\nconst EMPTY_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-subtle)\",\r\n padding: \"var(--s-3) var(--s-2)\",\r\n textAlign: \"center\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst POPOVER_FOOTER_SX = Object.freeze({\r\n display: \"flex\",\r\n paddingTop: \"var(--s-2)\",\r\n marginTop: \"var(--s-2)\",\r\n borderTop: \"1px solid var(--border)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst ACTION_BTN_SX = Object.freeze({\r\n color: \"var(--fg-subtle)\",\r\n \"&.Mui-focusVisible\": { boxShadow: \"var(--shadow-focus)\" },\r\n} satisfies SxProps<Theme>);\r\n\r\nconst DELETE_BTN_SX = Object.freeze({\r\n color: \"var(--fg-subtle)\",\r\n \"&:hover\": { color: \"var(--danger)\" },\r\n \"&.Mui-focusVisible\": { boxShadow: \"var(--shadow-focus)\" },\r\n});\r\n\r\nexport interface SavedFiltersMenuProps {\r\n /** Namespaces saved filters per list/entity type. */\r\n resourceKey: string;\r\n /** The host's live filter payload — stored verbatim when saving. */\r\n currentCriteria?: Record<string, unknown> | undefined;\r\n /** Applied when a saved filter is recalled: (criteria, filter) => void. */\r\n onApply?: ((\r\n criteria: Record<string, unknown> | undefined,\r\n filter: SavedFilter\r\n ) => void) | undefined;\r\n /** Allow saving the current filter (also requires currentCriteria != null). */\r\n canSave?: boolean | undefined;\r\n /** Forwarded to SaveFilterDialog — show the \"set as default\" switch. */\r\n allowDefault?: boolean | undefined;\r\n /** Forwarded to SaveFilterDialog — show the \"share with team\" switch. */\r\n allowShared?: boolean | undefined;\r\n align?: \"left\" | \"right\" | undefined;\r\n /** Localised labels (FR default; EN/AR supported). */\r\n labels?: Partial<SavedFiltersMenuLabels> | undefined;\r\n}\r\n\r\nfunction SavedFiltersMenu(props: SavedFiltersMenuProps): React.JSX.Element {\r\n const {\r\n resourceKey,\r\n currentCriteria,\r\n onApply,\r\n canSave = true,\r\n allowDefault = true,\r\n allowShared = false,\r\n align = \"right\",\r\n labels,\r\n } = props;\r\n const L = React.useMemo<SavedFiltersMenuLabels>(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n const { filters, save, remove, setDefault, clearDefault } =\r\n useSavedFilters(resourceKey);\r\n\r\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const open = Boolean(anchor);\r\n const count = filters.length;\r\n\r\n const canSaveCurrent = canSave !== false && currentCriteria != null;\r\n\r\n const handleOpen = function handleOpen(\r\n e: React.MouseEvent<HTMLElement>\r\n ): void {\r\n setAnchor(e.currentTarget);\r\n };\r\n const handleClose = function handleClose(): void {\r\n setAnchor(null);\r\n };\r\n\r\n const applyAndClose = function applyAndClose(filter: SavedFilter): void {\r\n if (typeof onApply === \"function\") onApply(filter.criteria, filter);\r\n setAnchor(null);\r\n };\r\n\r\n // Opening the dialog closes the popover so the two overlays don't stack.\r\n const openSaveDialog = function openSaveDialog(): void {\r\n setAnchor(null);\r\n setDialogOpen(true);\r\n };\r\n\r\n const handleSubmit = function handleSubmit(\r\n input: SaveFilterDialogSubmit\r\n ): void {\r\n save({\r\n name: input.name,\r\n isDefault: input.isDefault,\r\n shared: input.shared,\r\n ...(currentCriteria !== undefined ? { criteria: currentCriteria } : {}),\r\n });\r\n setDialogOpen(false);\r\n };\r\n\r\n const triggerAria =\r\n count > 0 ? L.button + \", \" + L.countSuffix(count) : L.button;\r\n\r\n const dialogLabels = React.useMemo<SaveFilterDialogLabels>(\r\n function buildDialogLabels() {\r\n return {\r\n title: L.dialogTitle,\r\n nameLabel: L.nameLabel,\r\n namePlaceholder: L.namePlaceholder,\r\n nameRequired: L.nameRequired,\r\n duplicateHint: L.duplicateHint,\r\n setAsDefault: L.setAsDefault,\r\n shareLabel: L.shareLabel,\r\n shareHint: L.shareHint,\r\n cancel: L.cancel,\r\n save: L.save,\r\n };\r\n },\r\n [L]\r\n );\r\n\r\n const popoverSlotProps = React.useMemo<\r\n React.ComponentProps<typeof Popover>[\"slotProps\"]\r\n >(\r\n function buildSlotProps() {\r\n return {\r\n paper: { sx: POPOVER_PAPER_SX, role: \"dialog\", \"aria-label\": L.title },\r\n };\r\n },\r\n [L.title]\r\n );\r\n\r\n const existingNames = React.useMemo<string[]>(\r\n function buildExistingNames() {\r\n return filters\r\n .map(function (f) {\r\n return f.name;\r\n })\r\n .filter(function isName(n): n is string {\r\n return typeof n === \"string\";\r\n });\r\n },\r\n [filters]\r\n );\r\n\r\n return (\r\n <>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n icon={<BookmarkBorderIcon fontSize=\"small\" />}\r\n onClick={handleOpen}\r\n aria-label={triggerAria}\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={open}\r\n >\r\n {L.button}\r\n {count > 0 && (\r\n <Box component=\"span\" sx={BADGE_SX} aria-hidden=\"true\">\r\n {count}\r\n </Box>\r\n )}\r\n </Button>\r\n\r\n <Popover\r\n open={open}\r\n anchorEl={anchor}\r\n onClose={handleClose}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: align === \"right\" ? \"right\" : \"left\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: align === \"right\" ? \"right\" : \"left\",\r\n }}\r\n slotProps={popoverSlotProps}\r\n >\r\n <Box sx={POPOVER_BODY_SX}>\r\n <Box sx={POPOVER_TITLE_SX}>{L.title}</Box>\r\n\r\n {count === 0 ? (\r\n <Box sx={EMPTY_SX}>{L.noSavedFilters}</Box>\r\n ) : (\r\n <Box role=\"list\" sx={LIST_SX}>\r\n {filters.map(function (f) {\r\n return (\r\n <Box key={f.id} role=\"listitem\" sx={ROW_SX}>\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={function () {\r\n applyAndClose(f);\r\n }}\r\n aria-label={\r\n L.apply +\r\n \" : \" +\r\n f.name +\r\n (f.isDefault ? \" (\" + L.defaultBadge + \")\" : \"\")\r\n }\r\n sx={APPLY_BTN_SX}\r\n >\r\n <Box component=\"span\" sx={APPLY_NAME_SX}>\r\n {f.name}\r\n </Box>\r\n {f.isDefault && (\r\n <Box component=\"span\" sx={DEFAULT_BADGE_SX}>\r\n {L.defaultBadge}\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <IconButton\r\n size=\"small\"\r\n aria-label={\r\n (f.isDefault ? L.unsetDefault : L.setDefault) +\r\n \" : \" +\r\n f.name\r\n }\r\n onClick={function () {\r\n if (f.isDefault) clearDefault();\r\n else setDefault(f.id);\r\n }}\r\n sx={\r\n f.isDefault\r\n ? { ...ACTION_BTN_SX, color: \"var(--accent)\" }\r\n : ACTION_BTN_SX\r\n }\r\n >\r\n {f.isDefault ? (\r\n <PushPinIcon fontSize=\"small\" />\r\n ) : (\r\n <PushPinOutlinedIcon fontSize=\"small\" />\r\n )}\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n aria-label={L.delete + \" : \" + f.name}\r\n onClick={function () {\r\n remove(f.id);\r\n }}\r\n sx={DELETE_BTN_SX}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n\r\n <Box sx={POPOVER_FOOTER_SX}>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n icon={<AddIcon fontSize=\"small\" />}\r\n onClick={openSaveDialog}\r\n disabled={!canSaveCurrent}\r\n >\r\n {L.saveCurrentFilter}\r\n </Button>\r\n </Box>\r\n </Box>\r\n </Popover>\r\n\r\n <SaveFilterDialog\r\n open={dialogOpen}\r\n onClose={function () {\r\n setDialogOpen(false);\r\n }}\r\n onSubmit={handleSubmit}\r\n allowDefault={allowDefault}\r\n allowShared={allowShared}\r\n existingNames={existingNames}\r\n labels={dialogLabels}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport default SavedFiltersMenu;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SavedFiltersMenu.js","names":["React","Box","Popover","IconButton","BookmarkBorderIcon","AddIcon","PushPinIcon","PushPinOutlinedIcon","CloseIcon","Button","SaveFilterDialog","useSavedFilters","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DEFAULT_LABELS","Object","freeze","button","title","noSavedFilters","saveCurrentFilter","apply","setDefault","unsetDefault","delete","defaultBadge","countSuffix","n","dialogTitle","nameLabel","namePlaceholder","nameRequired","duplicateHint","setAsDefault","shareLabel","shareHint","cancel","save","POPOVER_PAPER_SX","borderRadius","boxShadow","border","POPOVER_BODY_SX","padding","minWidth","display","flexDirection","gap","POPOVER_TITLE_SX","fontSize","fontWeight","color","textTransform","letterSpacing","paddingBottom","borderBottom","marginBottom","LIST_SX","maxHeight","overflowY","ROW_SX","alignItems","APPLY_BTN_SX","flex","textAlign","background","cursor","font","outline","APPLY_NAME_SX","overflow","textOverflow","whiteSpace","DEFAULT_BADGE_SX","flexShrink","lineHeight","BADGE_SX","marginInlineStart","EMPTY_SX","POPOVER_FOOTER_SX","paddingTop","marginTop","borderTop","ACTION_BTN_SX","DELETE_BTN_SX","SavedFiltersMenu","props","resourceKey","currentCriteria","onApply","canSave","allowDefault","allowShared","align","labels","L","useMemo","filters","remove","clearDefault","anchor","setAnchor","useState","dialogOpen","setDialogOpen","open","Boolean","count","length","canSaveCurrent","handleOpen","e","currentTarget","handleClose","applyAndClose","filter","criteria","openSaveDialog","handleSubmit","input","name","isDefault","shared","undefined","triggerAria","dialogLabels","buildDialogLabels","popoverSlotProps","buildSlotProps","paper","sx","role","existingNames","buildExistingNames","map","f","isName","children","variant","size","type","icon","onClick","component","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","id","disabled","onSubmit"],"sources":["../../../../src/lib/v2/patterns/SavedFiltersMenu.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Popover from \"@mui/material/Popover\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport BookmarkBorderIcon from \"@mui/icons-material/BookmarkBorder\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport PushPinIcon from \"@mui/icons-material/PushPin\";\r\nimport PushPinOutlinedIcon from \"@mui/icons-material/PushPinOutlined\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\nimport Button from \"../components/Button\";\r\nimport SaveFilterDialog from \"./SaveFilterDialog\";\r\nimport type {\r\n SaveFilterDialogLabels,\r\n SaveFilterDialogSubmit,\r\n} from \"./SaveFilterDialog\";\r\nimport { useSavedFilters } from \"../personalization/capabilities/savedFilters\";\r\nimport type { SavedFilter } from \"../personalization/types\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * SavedFiltersMenu - Portnet UI v2 (pattern)\r\n *\r\n * Turn-key dropdown for the Saved Filters framework. Connected to the\r\n * savedFilters capability via useSavedFilters(resourceKey); the host only\r\n * supplies the live `currentCriteria` (to save) and an `onApply` callback\r\n * (to apply a recalled filter to its own state).\r\n *\r\n * <SavedFiltersMenu\r\n * resourceKey=\"ti:list\"\r\n * currentCriteria={filters}\r\n * onApply={(criteria) => setFilters(criteria)}\r\n * allowDefault\r\n * />\r\n *\r\n * The component owns the criteria neither in shape nor semantics — it\r\n * stores whatever the host passes and hands it back on apply, which is\r\n * what makes it reusable across every list.\r\n *\r\n * a11y: the Popover carries role=\"dialog\" + aria-label (like\r\n * ColumnsToggle); each filter row is a real <button> (apply), with a pin\r\n * toggle (default) and a delete control, all aria-labelled per filter.\r\n * For a default filter the apply button's accessible name appends the\r\n * visible \"Par défaut\" badge text (WCAG 2.5.3 Label in Name).\r\n *\r\n * Note (icons): the delete control uses CloseIcon (@mui/icons-material/Close)\r\n * rather than a trash glyph because DeleteOutline is absent from the internal\r\n * @mui/icons-material@9 republish used by the consuming apps; the control's\r\n * aria-label and --danger hover colour keep the delete semantics intact.\r\n */\r\n\r\nexport interface SavedFiltersMenuLabels {\r\n button: string;\r\n title: string;\r\n noSavedFilters: string;\r\n saveCurrentFilter: string;\r\n apply: string;\r\n setDefault: string;\r\n unsetDefault: string;\r\n delete: string;\r\n defaultBadge: string;\r\n countSuffix: (n: number) => string;\r\n // Forwarded to SaveFilterDialog:\r\n dialogTitle: string;\r\n nameLabel: string;\r\n namePlaceholder: string;\r\n nameRequired: string;\r\n duplicateHint: string;\r\n setAsDefault: string;\r\n shareLabel: string;\r\n shareHint: string;\r\n cancel: string;\r\n save: string;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n button: \"Filtres enregistrés\",\r\n title: \"Filtres enregistrés\",\r\n noSavedFilters: \"Aucun filtre enregistré\",\r\n saveCurrentFilter: \"Enregistrer le filtre actuel…\",\r\n apply: \"Appliquer le filtre\",\r\n setDefault: \"Définir par défaut\",\r\n unsetDefault: \"Retirer le filtre par défaut\",\r\n delete: \"Supprimer le filtre\",\r\n defaultBadge: \"Par défaut\",\r\n countSuffix: function (n) {\r\n return n + \" enregistré\" + (n > 1 ? \"s\" : \"\");\r\n },\r\n // Forwarded to SaveFilterDialog:\r\n dialogTitle: \"Enregistrer le filtre\",\r\n nameLabel: \"Nom du filtre\",\r\n namePlaceholder: \"ex. Dossiers en attente\",\r\n nameRequired: \"Le nom est obligatoire.\",\r\n duplicateHint: \"Un filtre porte déjà ce nom.\",\r\n setAsDefault: \"Appliquer par défaut à l'ouverture\",\r\n shareLabel: \"Partager avec mon équipe\",\r\n shareHint: \"Visible par les autres utilisateurs (selon les droits).\",\r\n cancel: \"Annuler\",\r\n save: \"Enregistrer\",\r\n} satisfies SavedFiltersMenuLabels);\r\n\r\n/* ── Hoisted sx (D5) ──────────────────────────────────────────────── */\r\n\r\nconst POPOVER_PAPER_SX = Object.freeze({\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-md)\",\r\n border: \"1px solid var(--border)\",\r\n});\r\n\r\nconst POPOVER_BODY_SX = Object.freeze({\r\n padding: \"var(--s-3) var(--s-4)\",\r\n minWidth: 280,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-1)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst POPOVER_TITLE_SX = Object.freeze({\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.04em\",\r\n paddingBottom: \"var(--s-2)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n marginBottom: \"var(--s-2)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst LIST_SX = Object.freeze({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"var(--s-1)\",\r\n maxHeight: 320,\r\n overflowY: \"auto\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst ROW_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst APPLY_BTN_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flex: 1,\r\n minWidth: 0,\r\n textAlign: \"start\",\r\n background: \"transparent\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n font: \"inherit\",\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg)\",\r\n padding: \"var(--s-2)\",\r\n borderRadius: \"var(--r-sm)\",\r\n \"&:hover\": { background: \"var(--bg-subtle)\" },\r\n \"&:focus-visible\": { outline: \"none\", boxShadow: \"var(--shadow-focus)\" },\r\n} satisfies SxProps<Theme>);\r\n\r\nconst APPLY_NAME_SX = Object.freeze({\r\n flex: 1,\r\n minWidth: 0,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst DEFAULT_BADGE_SX = Object.freeze({\r\n flexShrink: 0,\r\n background: \"var(--accent)\",\r\n color: \"var(--accent-fg)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"1px 8px\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n lineHeight: 1.4,\r\n});\r\n\r\nconst BADGE_SX = Object.freeze({\r\n marginInlineStart: \"var(--s-1)\",\r\n background: \"var(--accent)\",\r\n color: \"var(--accent-fg)\",\r\n borderRadius: \"var(--r-full)\",\r\n padding: \"1px 6px\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n lineHeight: 1.4,\r\n});\r\n\r\nconst EMPTY_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-subtle)\",\r\n padding: \"var(--s-3) var(--s-2)\",\r\n textAlign: \"center\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst POPOVER_FOOTER_SX = Object.freeze({\r\n display: \"flex\",\r\n paddingTop: \"var(--s-2)\",\r\n marginTop: \"var(--s-2)\",\r\n borderTop: \"1px solid var(--border)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst ACTION_BTN_SX = Object.freeze({\r\n color: \"var(--fg-subtle)\",\r\n \"&.Mui-focusVisible\": { boxShadow: \"var(--shadow-focus)\" },\r\n} satisfies SxProps<Theme>);\r\n\r\nconst DELETE_BTN_SX = Object.freeze({\r\n color: \"var(--fg-subtle)\",\r\n \"&:hover\": { color: \"var(--danger)\" },\r\n \"&.Mui-focusVisible\": { boxShadow: \"var(--shadow-focus)\" },\r\n});\r\n\r\nexport interface SavedFiltersMenuProps {\r\n /** Namespaces saved filters per list/entity type. */\r\n resourceKey: string;\r\n /** The host's live filter payload — stored verbatim when saving. */\r\n currentCriteria?: Record<string, unknown> | undefined;\r\n /** Applied when a saved filter is recalled: (criteria, filter) => void. */\r\n onApply?: ((\r\n criteria: Record<string, unknown> | undefined,\r\n filter: SavedFilter\r\n ) => void) | undefined;\r\n /** Allow saving the current filter (also requires currentCriteria != null). */\r\n canSave?: boolean | undefined;\r\n /** Forwarded to SaveFilterDialog — show the \"set as default\" switch. */\r\n allowDefault?: boolean | undefined;\r\n /** Forwarded to SaveFilterDialog — show the \"share with team\" switch. */\r\n allowShared?: boolean | undefined;\r\n align?: \"left\" | \"right\" | undefined;\r\n /** Localised labels (FR default; EN/AR supported). */\r\n labels?: Partial<SavedFiltersMenuLabels> | undefined;\r\n}\r\n\r\nfunction SavedFiltersMenu(props: SavedFiltersMenuProps): React.JSX.Element {\r\n const {\r\n resourceKey,\r\n currentCriteria,\r\n onApply,\r\n canSave = true,\r\n allowDefault = true,\r\n allowShared = false,\r\n align = \"right\",\r\n labels,\r\n } = props;\r\n const L = React.useMemo<SavedFiltersMenuLabels>(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n const { filters, save, remove, setDefault, clearDefault } =\r\n useSavedFilters(resourceKey);\r\n\r\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\r\n const [dialogOpen, setDialogOpen] = React.useState(false);\r\n const open = Boolean(anchor);\r\n const count = filters.length;\r\n\r\n const canSaveCurrent = canSave !== false && currentCriteria != null;\r\n\r\n const handleOpen = function handleOpen(\r\n e: React.MouseEvent<HTMLElement>\r\n ): void {\r\n setAnchor(e.currentTarget);\r\n };\r\n const handleClose = function handleClose(): void {\r\n setAnchor(null);\r\n };\r\n\r\n const applyAndClose = function applyAndClose(filter: SavedFilter): void {\r\n if (typeof onApply === \"function\") onApply(filter.criteria, filter);\r\n setAnchor(null);\r\n };\r\n\r\n // Opening the dialog closes the popover so the two overlays don't stack.\r\n const openSaveDialog = function openSaveDialog(): void {\r\n setAnchor(null);\r\n setDialogOpen(true);\r\n };\r\n\r\n const handleSubmit = function handleSubmit(\r\n input: SaveFilterDialogSubmit\r\n ): void {\r\n save({\r\n name: input.name,\r\n isDefault: input.isDefault,\r\n shared: input.shared,\r\n ...(currentCriteria !== undefined ? { criteria: currentCriteria } : {}),\r\n });\r\n setDialogOpen(false);\r\n };\r\n\r\n const triggerAria =\r\n count > 0 ? L.button + \", \" + L.countSuffix(count) : L.button;\r\n\r\n const dialogLabels = React.useMemo<SaveFilterDialogLabels>(\r\n function buildDialogLabels() {\r\n return {\r\n title: L.dialogTitle,\r\n nameLabel: L.nameLabel,\r\n namePlaceholder: L.namePlaceholder,\r\n nameRequired: L.nameRequired,\r\n duplicateHint: L.duplicateHint,\r\n setAsDefault: L.setAsDefault,\r\n shareLabel: L.shareLabel,\r\n shareHint: L.shareHint,\r\n cancel: L.cancel,\r\n save: L.save,\r\n };\r\n },\r\n [L]\r\n );\r\n\r\n const popoverSlotProps = React.useMemo<\r\n React.ComponentProps<typeof Popover>[\"slotProps\"]\r\n >(\r\n function buildSlotProps() {\r\n return {\r\n paper: { sx: POPOVER_PAPER_SX, role: \"dialog\", \"aria-label\": L.title },\r\n };\r\n },\r\n [L.title]\r\n );\r\n\r\n const existingNames = React.useMemo<string[]>(\r\n function buildExistingNames() {\r\n return filters\r\n .map(function (f) {\r\n return f.name;\r\n })\r\n .filter(function isName(n): n is string {\r\n return typeof n === \"string\";\r\n });\r\n },\r\n [filters]\r\n );\r\n\r\n return (\r\n <>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n icon={<BookmarkBorderIcon fontSize=\"small\" />}\r\n onClick={handleOpen}\r\n aria-label={triggerAria}\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={open}\r\n >\r\n {L.button}\r\n {count > 0 && (\r\n <Box component=\"span\" sx={BADGE_SX} aria-hidden=\"true\">\r\n {count}\r\n </Box>\r\n )}\r\n </Button>\r\n\r\n <Popover\r\n open={open}\r\n anchorEl={anchor}\r\n onClose={handleClose}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: align === \"right\" ? \"right\" : \"left\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: align === \"right\" ? \"right\" : \"left\",\r\n }}\r\n slotProps={popoverSlotProps}\r\n >\r\n <Box sx={POPOVER_BODY_SX}>\r\n <Box sx={POPOVER_TITLE_SX}>{L.title}</Box>\r\n\r\n {count === 0 ? (\r\n <Box sx={EMPTY_SX}>{L.noSavedFilters}</Box>\r\n ) : (\r\n <Box role=\"list\" sx={LIST_SX}>\r\n {filters.map(function (f) {\r\n return (\r\n <Box key={f.id} role=\"listitem\" sx={ROW_SX}>\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={function () {\r\n applyAndClose(f);\r\n }}\r\n aria-label={\r\n L.apply +\r\n \" : \" +\r\n f.name +\r\n (f.isDefault ? \" (\" + L.defaultBadge + \")\" : \"\")\r\n }\r\n sx={APPLY_BTN_SX}\r\n >\r\n <Box component=\"span\" sx={APPLY_NAME_SX}>\r\n {f.name}\r\n </Box>\r\n {f.isDefault && (\r\n <Box component=\"span\" sx={DEFAULT_BADGE_SX}>\r\n {L.defaultBadge}\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <IconButton\r\n size=\"small\"\r\n aria-label={\r\n (f.isDefault ? L.unsetDefault : L.setDefault) +\r\n \" : \" +\r\n f.name\r\n }\r\n onClick={function () {\r\n if (f.isDefault) clearDefault();\r\n else setDefault(f.id);\r\n }}\r\n sx={\r\n f.isDefault\r\n ? { ...ACTION_BTN_SX, color: \"var(--accent)\" }\r\n : ACTION_BTN_SX\r\n }\r\n >\r\n {f.isDefault ? (\r\n <PushPinIcon fontSize=\"small\" />\r\n ) : (\r\n <PushPinOutlinedIcon fontSize=\"small\" />\r\n )}\r\n </IconButton>\r\n\r\n <IconButton\r\n size=\"small\"\r\n aria-label={L.delete + \" : \" + f.name}\r\n onClick={function () {\r\n remove(f.id);\r\n }}\r\n sx={DELETE_BTN_SX}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n\r\n <Box sx={POPOVER_FOOTER_SX}>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n icon={<AddIcon fontSize=\"small\" />}\r\n onClick={openSaveDialog}\r\n disabled={!canSaveCurrent}\r\n >\r\n {L.saveCurrentFilter}\r\n </Button>\r\n </Box>\r\n </Box>\r\n </Popover>\r\n\r\n <SaveFilterDialog\r\n open={dialogOpen}\r\n onClose={function () {\r\n setDialogOpen(false);\r\n }}\r\n onSubmit={handleSubmit}\r\n allowDefault={allowDefault}\r\n allowShared={allowShared}\r\n existingNames={existingNames}\r\n labels={dialogLabels}\r\n />\r\n </>\r\n );\r\n}\r\n\r\nexport default SavedFiltersMenu;\r\n"],"mappings":"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","ignoreList":[]}