@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,7 +1,3 @@
1
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
2
- 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); }
3
- 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; }
4
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5
1
  /**
6
2
  * favorites — Portnet UI v2 · personalization capability
7
3
  *
@@ -31,10 +27,10 @@ import { usePersonalizationStore, useStoreSelector } from "../personalizationCon
31
27
 
32
28
  /** The favorites capability payload: favorites arrays keyed by resourceKey. */
33
29
 
34
- export var FAVORITES_CAPABILITY_ID = "favorites";
35
- var SCHEMA_VERSION = 1;
36
- var EMPTY_LIST = Object.freeze([]);
37
- var EMPTY_MAP = Object.freeze({});
30
+ export const FAVORITES_CAPABILITY_ID = "favorites";
31
+ const SCHEMA_VERSION = 1;
32
+ const EMPTY_LIST = Object.freeze([]);
33
+ const EMPTY_MAP = Object.freeze({});
38
34
 
39
35
  /* Register at import time — the foundation reads this at hydration. */
40
36
  registerCapability({
@@ -44,50 +40,41 @@ registerCapability({
44
40
  // { [resourceKey]: FavoriteRef[] }
45
41
  migrate: function migrateFavorites(_fromVersion, payload) {
46
42
  // v1 is the initial schema. Defensive normalisation only.
47
- return payload && _typeof(payload) === "object" ? payload : {};
43
+ return payload && typeof payload === "object" ? payload : {};
48
44
  }
49
45
  });
50
46
 
51
47
  /* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */
52
48
 
53
49
  function listFor(map, resourceKey) {
54
- var list = map ? map[resourceKey] : undefined;
50
+ const list = map ? map[resourceKey] : undefined;
55
51
  return Array.isArray(list) ? list : EMPTY_LIST;
56
52
  }
57
53
  function hasRef(map, resourceKey, id) {
58
- var list = listFor(map, resourceKey);
59
- var _iterator = _createForOfIteratorHelper(list),
60
- _step;
61
- try {
62
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
63
- var ref = _step.value;
64
- if (ref.id === id) return true;
65
- }
66
- } catch (err) {
67
- _iterator.e(err);
68
- } finally {
69
- _iterator.f();
54
+ const list = listFor(map, resourceKey);
55
+ for (const ref of list) {
56
+ if (ref.id === id) return true;
70
57
  }
71
58
  return false;
72
59
  }
73
60
  function addRef(map, resourceKey, id) {
74
- var base = map || EMPTY_MAP;
61
+ const base = map || EMPTY_MAP;
75
62
  if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits
76
- var nextList = listFor(base, resourceKey).concat([{
63
+ const nextList = listFor(base, resourceKey).concat([{
77
64
  id: id,
78
65
  addedAt: new Date().toISOString()
79
66
  }]);
80
- var next = Object.assign({}, base);
67
+ const next = Object.assign({}, base);
81
68
  next[resourceKey] = nextList;
82
69
  return next;
83
70
  }
84
71
  function removeRef(map, resourceKey, id) {
85
- var base = map || EMPTY_MAP;
72
+ const base = map || EMPTY_MAP;
86
73
  if (!hasRef(base, resourceKey, id)) return base; // no-op
87
- var nextList = listFor(base, resourceKey).filter(function keep(r) {
74
+ const nextList = listFor(base, resourceKey).filter(function keep(r) {
88
75
  return r.id !== id;
89
76
  });
90
- var next = Object.assign({}, base);
77
+ const next = Object.assign({}, base);
91
78
  if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy
92
79
  else next[resourceKey] = nextList;
93
80
  return next;
@@ -96,9 +83,9 @@ function toggleRef(map, resourceKey, id) {
96
83
  return hasRef(map, resourceKey, id) ? removeRef(map, resourceKey, id) : addRef(map, resourceKey, id);
97
84
  }
98
85
  function clearRefs(map, resourceKey) {
99
- var base = map || EMPTY_MAP;
86
+ const base = map || EMPTY_MAP;
100
87
  if (!base[resourceKey]) return base;
101
- var next = Object.assign({}, base);
88
+ const next = Object.assign({}, base);
102
89
  delete next[resourceKey];
103
90
  return next;
104
91
  }
@@ -114,52 +101,41 @@ function useEnsureFavorites(store) {
114
101
  * useFavorites(resourceKey) — list, membership and actions for one resource.
115
102
  */
116
103
  export function useFavorites(resourceKey) {
117
- var store = usePersonalizationStore();
104
+ const store = usePersonalizationStore();
118
105
  useEnsureFavorites(store);
119
- var selectList = React.useCallback(function selectList(snapshot) {
120
- var slice = snapshot[FAVORITES_CAPABILITY_ID];
106
+ const selectList = React.useCallback(function selectList(snapshot) {
107
+ const slice = snapshot[FAVORITES_CAPABILITY_ID];
121
108
  return slice ? listFor(slice, resourceKey) : EMPTY_LIST;
122
109
  }, [resourceKey]);
123
- var items = useStoreSelector(selectList);
110
+ const items = useStoreSelector(selectList);
124
111
 
125
112
  // Stable while `items` is stable (structural sharing) → O(1) membership.
126
- var ids = React.useMemo(function buildIdSet() {
127
- var set = new Set();
128
- var _iterator2 = _createForOfIteratorHelper(items),
129
- _step2;
130
- try {
131
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
132
- var ref = _step2.value;
133
- set.add(ref.id);
134
- }
135
- } catch (err) {
136
- _iterator2.e(err);
137
- } finally {
138
- _iterator2.f();
139
- }
113
+ const ids = React.useMemo(function buildIdSet() {
114
+ const set = new Set();
115
+ for (const ref of items) set.add(ref.id);
140
116
  return set;
141
117
  }, [items]);
142
- var add = React.useCallback(function add(id) {
118
+ const add = React.useCallback(function add(id) {
143
119
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
144
120
  return addRef(prev, resourceKey, id);
145
121
  });
146
122
  }, [store, resourceKey]);
147
- var remove = React.useCallback(function remove(id) {
123
+ const remove = React.useCallback(function remove(id) {
148
124
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
149
125
  return removeRef(prev, resourceKey, id);
150
126
  });
151
127
  }, [store, resourceKey]);
152
- var toggle = React.useCallback(function toggle(id) {
128
+ const toggle = React.useCallback(function toggle(id) {
153
129
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
154
130
  return toggleRef(prev, resourceKey, id);
155
131
  });
156
132
  }, [store, resourceKey]);
157
- var clear = React.useCallback(function clear() {
133
+ const clear = React.useCallback(function clear() {
158
134
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
159
135
  return clearRefs(prev, resourceKey);
160
136
  });
161
137
  }, [store, resourceKey]);
162
- var isFavorite = React.useCallback(function isFavorite(id) {
138
+ const isFavorite = React.useCallback(function isFavorite(id) {
163
139
  return ids.has(id);
164
140
  }, [ids]);
165
141
  return React.useMemo(function value() {
@@ -182,24 +158,24 @@ export function useFavorites(resourceKey) {
182
158
  * favorite column consumes (Batch 5).
183
159
  */
184
160
  export function useIsFavorite(resourceKey, id) {
185
- var store = usePersonalizationStore();
161
+ const store = usePersonalizationStore();
186
162
  useEnsureFavorites(store);
187
- var selectIsFavorite = React.useCallback(function selectIsFavorite(snapshot) {
188
- var slice = snapshot[FAVORITES_CAPABILITY_ID];
163
+ const selectIsFavorite = React.useCallback(function selectIsFavorite(snapshot) {
164
+ const slice = snapshot[FAVORITES_CAPABILITY_ID];
189
165
  return slice ? hasRef(slice, resourceKey, id) : false;
190
166
  }, [resourceKey, id]);
191
- var isFavorite = useStoreSelector(selectIsFavorite);
192
- var toggle = React.useCallback(function toggle() {
167
+ const isFavorite = useStoreSelector(selectIsFavorite);
168
+ const toggle = React.useCallback(function toggle() {
193
169
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
194
170
  return toggleRef(prev, resourceKey, id);
195
171
  });
196
172
  }, [store, resourceKey, id]);
197
- var add = React.useCallback(function add() {
173
+ const add = React.useCallback(function add() {
198
174
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
199
175
  return addRef(prev, resourceKey, id);
200
176
  });
201
177
  }, [store, resourceKey, id]);
202
- var remove = React.useCallback(function remove() {
178
+ const remove = React.useCallback(function remove() {
203
179
  store.write(FAVORITES_CAPABILITY_ID, function (prev) {
204
180
  return removeRef(prev, resourceKey, id);
205
181
  });
@@ -1 +1 @@
1
- {"version":3,"file":"favorites.js","names":["React","registerCapability","usePersonalizationStore","useStoreSelector","FAVORITES_CAPABILITY_ID","SCHEMA_VERSION","EMPTY_LIST","Object","freeze","EMPTY_MAP","id","schemaVersion","defaultState","migrate","migrateFavorites","_fromVersion","payload","_typeof","listFor","map","resourceKey","list","undefined","Array","isArray","hasRef","_iterator","_createForOfIteratorHelper","_step","s","n","done","ref","value","err","e","f","addRef","base","nextList","concat","addedAt","Date","toISOString","next","assign","removeRef","filter","keep","r","length","toggleRef","clearRefs","useEnsureFavorites","store","useEffect","ensure","ensureCapability","useFavorites","selectList","useCallback","snapshot","slice","items","ids","useMemo","buildIdSet","set","Set","_iterator2","_step2","add","write","prev","remove","toggle","clear","isFavorite","has","count","useIsFavorite","selectIsFavorite"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favorites.ts"],"sourcesContent":["/**\r\n * favorites — Portnet UI v2 · personalization capability\r\n *\r\n * The Favorites framework. Self-registers the \"favorites\" capability with\r\n * the schema registry at import time, so the capability-agnostic\r\n * foundation discovers its schemaVersion / defaultState / migrate without\r\n * any hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: FavoriteRef[] } FavoriteRef = { id, addedAt }\r\n *\r\n * `resourceKey` namespaces favorites per list/entity type (e.g.\r\n * \"ti:list\", \"declarations:list\"), so one user's favorites across\r\n * different screens never collide. `id` is the business row id.\r\n *\r\n * Performance: the pure helpers below rebuild only the touched\r\n * resourceKey's array and shallow-copy the map, so the store's structural\r\n * sharing keeps every OTHER resource's list referentially stable —\r\n * toggling a favorite on screen B does not re-render screen A, and a\r\n * boolean per-row selector lets each grid cell re-render only when its own\r\n * membership flips.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"../createPersonalizationStore\";\r\nimport type { FavoriteRef } from \"../types\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\n/** The favorites capability payload: favorites arrays keyed by resourceKey. */\r\ntype FavoritesState = Record<string, FavoriteRef[]>;\r\n\r\nexport const FAVORITES_CAPABILITY_ID = \"favorites\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly FavoriteRef[] = Object.freeze([]);\r\nconst EMPTY_MAP: FavoritesState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: FAVORITES_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: FavoriteRef[] }\r\n migrate: function migrateFavorites(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): readonly FavoriteRef[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\nfunction hasRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): boolean {\r\n const list = listFor(map, resourceKey);\r\n for (const ref of list) {\r\n if (ref.id === id) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction addRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits\r\n const nextList = listFor(base, resourceKey).concat([\r\n { id: id, addedAt: new Date().toISOString() },\r\n ]);\r\n const next: FavoritesState = Object.assign({}, base);\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction removeRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!hasRef(base, resourceKey, id)) return base; // no-op\r\n const nextList = listFor(base, resourceKey).filter(function keep(r) {\r\n return r.id !== id;\r\n });\r\n const next: FavoritesState = Object.assign({}, base);\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction toggleRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n return hasRef(map, resourceKey, id)\r\n ? removeRef(map, resourceKey, id)\r\n : addRef(map, resourceKey, id);\r\n}\r\n\r\nfunction clearRefs(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!base[resourceKey]) return base;\r\n const next: FavoritesState = Object.assign({}, base);\r\n delete next[resourceKey];\r\n return next;\r\n}\r\n\r\n/* ── hooks ──────────────────────────────────────────────────────────── */\r\n\r\nfunction useEnsureFavorites(store: PersonalizationStore): void {\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(FAVORITES_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n}\r\n\r\nexport interface UseFavoritesResult {\r\n items: readonly FavoriteRef[];\r\n ids: Set<RowId>;\r\n count: number;\r\n isFavorite: (id: RowId) => boolean;\r\n add: (id: RowId) => void;\r\n remove: (id: RowId) => void;\r\n toggle: (id: RowId) => void;\r\n clear: () => void;\r\n}\r\n\r\n/**\r\n * useFavorites(resourceKey) — list, membership and actions for one resource.\r\n */\r\nexport function useFavorites(resourceKey: string): UseFavoritesResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly FavoriteRef[] {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const items = useStoreSelector(selectList);\r\n\r\n // Stable while `items` is stable (structural sharing) → O(1) membership.\r\n const ids = React.useMemo(\r\n function buildIdSet(): Set<RowId> {\r\n const set = new Set<RowId>();\r\n for (const ref of items) set.add(ref.id);\r\n return set;\r\n },\r\n [items]\r\n );\r\n\r\n const add = React.useCallback(\r\n function add(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const remove = React.useCallback(\r\n function remove(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const toggle = React.useCallback(\r\n function toggle(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const clear = React.useCallback(\r\n function clear(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return clearRefs(prev, resourceKey);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const isFavorite = React.useCallback(\r\n function isFavorite(id: RowId): boolean {\r\n return ids.has(id);\r\n },\r\n [ids]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesResult {\r\n return {\r\n items: items,\r\n ids: ids,\r\n count: items.length,\r\n isFavorite: isFavorite,\r\n add: add,\r\n remove: remove,\r\n toggle: toggle,\r\n clear: clear,\r\n };\r\n },\r\n [items, ids, isFavorite, add, remove, toggle, clear]\r\n );\r\n}\r\n\r\nexport interface UseIsFavoriteResult {\r\n isFavorite: boolean;\r\n toggle: () => void;\r\n add: () => void;\r\n remove: () => void;\r\n}\r\n\r\n/**\r\n * useIsFavorite(resourceKey, id) — focused per-row hook. Returns a boolean\r\n * (Object.is bail-out: a row re-renders only when ITS membership flips)\r\n * plus a bound toggle/add/remove. This is the cell-level hook the DataGrid\r\n * favorite column consumes (Batch 5).\r\n */\r\nexport function useIsFavorite(\r\n resourceKey: string,\r\n id: RowId\r\n): UseIsFavoriteResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectIsFavorite = React.useCallback(\r\n function selectIsFavorite(snapshot: PersonalizationSnapshot): boolean {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? hasRef(slice, resourceKey, id) : false;\r\n },\r\n [resourceKey, id]\r\n );\r\n const isFavorite = useStoreSelector(selectIsFavorite);\r\n\r\n const toggle = React.useCallback(\r\n function toggle(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const add = React.useCallback(\r\n function add(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const remove = React.useCallback(\r\n function remove(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseIsFavoriteResult {\r\n return {\r\n isFavorite: isFavorite,\r\n toggle: toggle,\r\n add: add,\r\n remove: remove,\r\n };\r\n },\r\n [isFavorite, toggle, add, remove]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"favorites.js","names":["React","registerCapability","usePersonalizationStore","useStoreSelector","FAVORITES_CAPABILITY_ID","SCHEMA_VERSION","EMPTY_LIST","Object","freeze","EMPTY_MAP","id","schemaVersion","defaultState","migrate","migrateFavorites","_fromVersion","payload","listFor","map","resourceKey","list","undefined","Array","isArray","hasRef","ref","addRef","base","nextList","concat","addedAt","Date","toISOString","next","assign","removeRef","filter","keep","r","length","toggleRef","clearRefs","useEnsureFavorites","store","useEffect","ensure","ensureCapability","useFavorites","selectList","useCallback","snapshot","slice","items","ids","useMemo","buildIdSet","set","Set","add","write","prev","remove","toggle","clear","isFavorite","has","value","count","useIsFavorite","selectIsFavorite"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favorites.ts"],"sourcesContent":["/**\r\n * favorites — Portnet UI v2 · personalization capability\r\n *\r\n * The Favorites framework. Self-registers the \"favorites\" capability with\r\n * the schema registry at import time, so the capability-agnostic\r\n * foundation discovers its schemaVersion / defaultState / migrate without\r\n * any hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: FavoriteRef[] } FavoriteRef = { id, addedAt }\r\n *\r\n * `resourceKey` namespaces favorites per list/entity type (e.g.\r\n * \"ti:list\", \"declarations:list\"), so one user's favorites across\r\n * different screens never collide. `id` is the business row id.\r\n *\r\n * Performance: the pure helpers below rebuild only the touched\r\n * resourceKey's array and shallow-copy the map, so the store's structural\r\n * sharing keeps every OTHER resource's list referentially stable —\r\n * toggling a favorite on screen B does not re-render screen A, and a\r\n * boolean per-row selector lets each grid cell re-render only when its own\r\n * membership flips.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"../createPersonalizationStore\";\r\nimport type { FavoriteRef } from \"../types\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\n/** The favorites capability payload: favorites arrays keyed by resourceKey. */\r\ntype FavoritesState = Record<string, FavoriteRef[]>;\r\n\r\nexport const FAVORITES_CAPABILITY_ID = \"favorites\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly FavoriteRef[] = Object.freeze([]);\r\nconst EMPTY_MAP: FavoritesState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: FAVORITES_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: FavoriteRef[] }\r\n migrate: function migrateFavorites(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): readonly FavoriteRef[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\nfunction hasRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): boolean {\r\n const list = listFor(map, resourceKey);\r\n for (const ref of list) {\r\n if (ref.id === id) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction addRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits\r\n const nextList = listFor(base, resourceKey).concat([\r\n { id: id, addedAt: new Date().toISOString() },\r\n ]);\r\n const next: FavoritesState = Object.assign({}, base);\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction removeRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!hasRef(base, resourceKey, id)) return base; // no-op\r\n const nextList = listFor(base, resourceKey).filter(function keep(r) {\r\n return r.id !== id;\r\n });\r\n const next: FavoritesState = Object.assign({}, base);\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction toggleRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n return hasRef(map, resourceKey, id)\r\n ? removeRef(map, resourceKey, id)\r\n : addRef(map, resourceKey, id);\r\n}\r\n\r\nfunction clearRefs(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!base[resourceKey]) return base;\r\n const next: FavoritesState = Object.assign({}, base);\r\n delete next[resourceKey];\r\n return next;\r\n}\r\n\r\n/* ── hooks ──────────────────────────────────────────────────────────── */\r\n\r\nfunction useEnsureFavorites(store: PersonalizationStore): void {\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(FAVORITES_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n}\r\n\r\nexport interface UseFavoritesResult {\r\n items: readonly FavoriteRef[];\r\n ids: Set<RowId>;\r\n count: number;\r\n isFavorite: (id: RowId) => boolean;\r\n add: (id: RowId) => void;\r\n remove: (id: RowId) => void;\r\n toggle: (id: RowId) => void;\r\n clear: () => void;\r\n}\r\n\r\n/**\r\n * useFavorites(resourceKey) — list, membership and actions for one resource.\r\n */\r\nexport function useFavorites(resourceKey: string): UseFavoritesResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly FavoriteRef[] {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const items = useStoreSelector(selectList);\r\n\r\n // Stable while `items` is stable (structural sharing) → O(1) membership.\r\n const ids = React.useMemo(\r\n function buildIdSet(): Set<RowId> {\r\n const set = new Set<RowId>();\r\n for (const ref of items) set.add(ref.id);\r\n return set;\r\n },\r\n [items]\r\n );\r\n\r\n const add = React.useCallback(\r\n function add(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const remove = React.useCallback(\r\n function remove(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const toggle = React.useCallback(\r\n function toggle(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const clear = React.useCallback(\r\n function clear(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return clearRefs(prev, resourceKey);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const isFavorite = React.useCallback(\r\n function isFavorite(id: RowId): boolean {\r\n return ids.has(id);\r\n },\r\n [ids]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesResult {\r\n return {\r\n items: items,\r\n ids: ids,\r\n count: items.length,\r\n isFavorite: isFavorite,\r\n add: add,\r\n remove: remove,\r\n toggle: toggle,\r\n clear: clear,\r\n };\r\n },\r\n [items, ids, isFavorite, add, remove, toggle, clear]\r\n );\r\n}\r\n\r\nexport interface UseIsFavoriteResult {\r\n isFavorite: boolean;\r\n toggle: () => void;\r\n add: () => void;\r\n remove: () => void;\r\n}\r\n\r\n/**\r\n * useIsFavorite(resourceKey, id) — focused per-row hook. Returns a boolean\r\n * (Object.is bail-out: a row re-renders only when ITS membership flips)\r\n * plus a bound toggle/add/remove. This is the cell-level hook the DataGrid\r\n * favorite column consumes (Batch 5).\r\n */\r\nexport function useIsFavorite(\r\n resourceKey: string,\r\n id: RowId\r\n): UseIsFavoriteResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectIsFavorite = React.useCallback(\r\n function selectIsFavorite(snapshot: PersonalizationSnapshot): boolean {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? hasRef(slice, resourceKey, id) : false;\r\n },\r\n [resourceKey, id]\r\n );\r\n const isFavorite = useStoreSelector(selectIsFavorite);\r\n\r\n const toggle = React.useCallback(\r\n function toggle(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const add = React.useCallback(\r\n function add(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const remove = React.useCallback(\r\n function remove(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseIsFavoriteResult {\r\n return {\r\n isFavorite: isFavorite,\r\n toggle: toggle,\r\n add: add,\r\n remove: remove,\r\n };\r\n },\r\n [isFavorite, toggle, add, remove]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,3 @@
1
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
2
- 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); }
3
- 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; }
4
1
  /**
5
2
  * favoritesView — Portnet UI v2 · personalization
6
3
  *
@@ -16,16 +13,16 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
16
13
 
17
14
  import * as React from "react";
18
15
  import { useFavorites } from "./favorites";
19
- export var FAVORITES_FILTER = Object.freeze({
16
+ export const FAVORITES_FILTER = Object.freeze({
20
17
  ALL: "all",
21
18
  ONLY: "only"
22
19
  });
23
- export var FAVORITES_SORT = Object.freeze({
20
+ export const FAVORITES_SORT = Object.freeze({
24
21
  NONE: "none",
25
22
  FIRST: "first",
26
23
  LAST: "last"
27
24
  });
28
- var EMPTY_ROWS = Object.freeze([]);
25
+ const EMPTY_ROWS = Object.freeze([]);
29
26
  function toIdSet(ids) {
30
27
  return ids instanceof Set ? ids : new Set(ids || []);
31
28
  }
@@ -42,9 +39,9 @@ function resolveGetRowId(getRowId) {
42
39
  export function filterRowsByFavorites(rows, favoriteIds, getRowId, mode) {
43
40
  if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;
44
41
  // Array.isArray widened `rows` to any[]; re-establish the element type.
45
- var source = rows;
46
- var ids = toIdSet(favoriteIds);
47
- var getId = resolveGetRowId(getRowId);
42
+ const source = rows;
43
+ const ids = toIdSet(favoriteIds);
44
+ const getId = resolveGetRowId(getRowId);
48
45
  return source.filter(function keepFavorite(r) {
49
46
  return ids.has(getId(r));
50
47
  });
@@ -60,22 +57,13 @@ export function sortRowsByFavorites(rows, favoriteIds, getRowId, placement) {
60
57
  return rows;
61
58
  }
62
59
  // Array.isArray widened `rows` to any[]; re-establish the element type.
63
- var source = rows;
64
- var ids = toIdSet(favoriteIds);
65
- var getId = resolveGetRowId(getRowId);
66
- var fav = [];
67
- var rest = [];
68
- var _iterator = _createForOfIteratorHelper(source),
69
- _step;
70
- try {
71
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
72
- var row = _step.value;
73
- if (ids.has(getId(row))) fav.push(row);else rest.push(row);
74
- }
75
- } catch (err) {
76
- _iterator.e(err);
77
- } finally {
78
- _iterator.f();
60
+ const source = rows;
61
+ const ids = toIdSet(favoriteIds);
62
+ const getId = resolveGetRowId(getRowId);
63
+ const fav = [];
64
+ const rest = [];
65
+ for (const row of source) {
66
+ if (ids.has(getId(row))) fav.push(row);else rest.push(row);
79
67
  }
80
68
  if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder
81
69
  return placement === FAVORITES_SORT.FIRST ? fav.concat(rest) : rest.concat(fav);
@@ -88,15 +76,15 @@ export function sortRowsByFavorites(rows, favoriteIds, getRowId, placement) {
88
76
  * reference is returned unchanged.
89
77
  */
90
78
  export function useFavoritesView(resourceKey, rows, options) {
91
- var opts = options || {};
92
- var getRowId = opts.getRowId;
93
- var filterMode = opts.filterMode || FAVORITES_FILTER.ALL;
94
- var sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;
95
- var fav = useFavorites(resourceKey);
96
- var ids = fav.ids;
97
- var processed = React.useMemo(function compute() {
98
- var base = Array.isArray(rows) ? rows : EMPTY_ROWS;
99
- var filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);
79
+ const opts = options || {};
80
+ const getRowId = opts.getRowId;
81
+ const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;
82
+ const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;
83
+ const fav = useFavorites(resourceKey);
84
+ const ids = fav.ids;
85
+ const processed = React.useMemo(function compute() {
86
+ const base = Array.isArray(rows) ? rows : EMPTY_ROWS;
87
+ const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);
100
88
  return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);
101
89
  }, [rows, ids, getRowId, filterMode, sortPlacement]);
102
90
  return React.useMemo(function value() {
@@ -1 +1 @@
1
- {"version":3,"file":"favoritesView.js","names":["React","useFavorites","FAVORITES_FILTER","Object","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","Array","isArray","source","getId","filter","keepFavorite","has","sortRowsByFavorites","placement","fav","rest","_iterator","_createForOfIteratorHelper","_step","s","n","done","row","value","push","err","e","f","length","concat","useFavoritesView","resourceKey","options","opts","filterMode","sortPlacement","processed","useMemo","compute","base","filtered","favoriteCount","count","isFiltering"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"sourcesContent":["/**\r\n * favoritesView — Portnet UI v2 · personalization\r\n *\r\n * Grid-agnostic favorites VIEW logic: filter (all / favorites-only) and\r\n * sort (favorites-first / favorites-last). Pure helpers usable anywhere,\r\n * plus a useFavoritesView hook that wires them to the favorites capability.\r\n *\r\n * The host owns its row id contract and the toggle UI (use FavoritesFilter\r\n * or any control bound to `filterMode` / `sortPlacement`). These helpers\r\n * only reorder/subset the rows array the host already has — they never\r\n * fetch or mutate.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useFavorites } from \"./favorites\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\nexport const FAVORITES_FILTER = Object.freeze({\r\n ALL: \"all\",\r\n ONLY: \"only\",\r\n} as const);\r\nexport const FAVORITES_SORT = Object.freeze({\r\n NONE: \"none\",\r\n FIRST: \"first\",\r\n LAST: \"last\",\r\n} as const);\r\n\r\nexport type FavoritesFilterMode =\r\n (typeof FAVORITES_FILTER)[keyof typeof FAVORITES_FILTER];\r\nexport type FavoritesSortPlacement =\r\n (typeof FAVORITES_SORT)[keyof typeof FAVORITES_SORT];\r\n\r\nconst EMPTY_ROWS: readonly never[] = Object.freeze([]);\r\n\r\nfunction toIdSet(\r\n ids: Set<RowId> | readonly RowId[] | null | undefined\r\n): Set<RowId> {\r\n return ids instanceof Set ? ids : new Set(ids || []);\r\n}\r\n\r\nfunction resolveGetRowId<T>(getRowId?: (row: T) => RowId): (row: T) => RowId {\r\n return typeof getRowId === \"function\"\r\n ? getRowId\r\n : function defaultGetRowId(r: T): RowId {\r\n return (r as { id: RowId }).id;\r\n };\r\n}\r\n\r\n/**\r\n * Keep only favorited rows when mode === \"only\"; otherwise return `rows`\r\n * unchanged (same reference).\r\n */\r\nexport function filterRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n mode: FavoritesFilterMode\r\n): readonly T[] {\r\n if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n return source.filter(function keepFavorite(r) {\r\n return ids.has(getId(r));\r\n });\r\n}\r\n\r\n/**\r\n * Move favorited rows to the front (\"first\") or back (\"last\"), preserving\r\n * the host's existing order WITHIN each group (stable partition). Returns\r\n * `rows` unchanged when placement is \"none\" or when reordering is a no-op.\r\n */\r\nexport function sortRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n placement: FavoritesSortPlacement\r\n): readonly T[] {\r\n if (\r\n (placement !== FAVORITES_SORT.FIRST && placement !== FAVORITES_SORT.LAST) ||\r\n !Array.isArray(rows)\r\n ) {\r\n return rows;\r\n }\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n const fav: T[] = [];\r\n const rest: T[] = [];\r\n for (const row of source) {\r\n if (ids.has(getId(row))) fav.push(row);\r\n else rest.push(row);\r\n }\r\n if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder\r\n return placement === FAVORITES_SORT.FIRST\r\n ? fav.concat(rest)\r\n : rest.concat(fav);\r\n}\r\n\r\nexport interface UseFavoritesViewOptions<T> {\r\n /** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n /** @default \"all\" */\r\n filterMode?: FavoritesFilterMode | undefined;\r\n /** @default \"none\" */\r\n sortPlacement?: FavoritesSortPlacement | undefined;\r\n}\r\n\r\nexport interface UseFavoritesViewResult<T> {\r\n rows: readonly T[];\r\n favoriteIds: Set<RowId>;\r\n favoriteCount: number;\r\n isFiltering: boolean;\r\n}\r\n\r\n/**\r\n * useFavoritesView(resourceKey, rows, options)\r\n *\r\n * Reads the favorites id Set for `resourceKey` and applies the favorites\r\n * filter + sort to `rows`. In the all/none case the original `rows`\r\n * reference is returned unchanged.\r\n */\r\nexport function useFavoritesView<T>(\r\n resourceKey: string,\r\n rows: readonly T[],\r\n options?: UseFavoritesViewOptions<T>\r\n): UseFavoritesViewResult<T> {\r\n const opts: UseFavoritesViewOptions<T> = options || {};\r\n const getRowId = opts.getRowId;\r\n const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;\r\n const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;\r\n\r\n const fav = useFavorites(resourceKey);\r\n const ids = fav.ids;\r\n\r\n const processed = React.useMemo(\r\n function compute(): readonly T[] {\r\n const base: readonly T[] = Array.isArray(rows) ? rows : EMPTY_ROWS;\r\n const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);\r\n return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);\r\n },\r\n [rows, ids, getRowId, filterMode, sortPlacement]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesViewResult<T> {\r\n return {\r\n rows: processed,\r\n favoriteIds: ids,\r\n favoriteCount: fav.count,\r\n isFiltering: filterMode === FAVORITES_FILTER.ONLY,\r\n };\r\n },\r\n [processed, ids, fav.count, filterMode]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"favoritesView.js","names":["React","useFavorites","FAVORITES_FILTER","Object","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","Array","isArray","source","getId","filter","keepFavorite","has","sortRowsByFavorites","placement","fav","rest","row","push","length","concat","useFavoritesView","resourceKey","options","opts","filterMode","sortPlacement","processed","useMemo","compute","base","filtered","value","favoriteCount","count","isFiltering"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"sourcesContent":["/**\r\n * favoritesView — Portnet UI v2 · personalization\r\n *\r\n * Grid-agnostic favorites VIEW logic: filter (all / favorites-only) and\r\n * sort (favorites-first / favorites-last). Pure helpers usable anywhere,\r\n * plus a useFavoritesView hook that wires them to the favorites capability.\r\n *\r\n * The host owns its row id contract and the toggle UI (use FavoritesFilter\r\n * or any control bound to `filterMode` / `sortPlacement`). These helpers\r\n * only reorder/subset the rows array the host already has — they never\r\n * fetch or mutate.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useFavorites } from \"./favorites\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\nexport const FAVORITES_FILTER = Object.freeze({\r\n ALL: \"all\",\r\n ONLY: \"only\",\r\n} as const);\r\nexport const FAVORITES_SORT = Object.freeze({\r\n NONE: \"none\",\r\n FIRST: \"first\",\r\n LAST: \"last\",\r\n} as const);\r\n\r\nexport type FavoritesFilterMode =\r\n (typeof FAVORITES_FILTER)[keyof typeof FAVORITES_FILTER];\r\nexport type FavoritesSortPlacement =\r\n (typeof FAVORITES_SORT)[keyof typeof FAVORITES_SORT];\r\n\r\nconst EMPTY_ROWS: readonly never[] = Object.freeze([]);\r\n\r\nfunction toIdSet(\r\n ids: Set<RowId> | readonly RowId[] | null | undefined\r\n): Set<RowId> {\r\n return ids instanceof Set ? ids : new Set(ids || []);\r\n}\r\n\r\nfunction resolveGetRowId<T>(getRowId?: (row: T) => RowId): (row: T) => RowId {\r\n return typeof getRowId === \"function\"\r\n ? getRowId\r\n : function defaultGetRowId(r: T): RowId {\r\n return (r as { id: RowId }).id;\r\n };\r\n}\r\n\r\n/**\r\n * Keep only favorited rows when mode === \"only\"; otherwise return `rows`\r\n * unchanged (same reference).\r\n */\r\nexport function filterRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n mode: FavoritesFilterMode\r\n): readonly T[] {\r\n if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n return source.filter(function keepFavorite(r) {\r\n return ids.has(getId(r));\r\n });\r\n}\r\n\r\n/**\r\n * Move favorited rows to the front (\"first\") or back (\"last\"), preserving\r\n * the host's existing order WITHIN each group (stable partition). Returns\r\n * `rows` unchanged when placement is \"none\" or when reordering is a no-op.\r\n */\r\nexport function sortRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n placement: FavoritesSortPlacement\r\n): readonly T[] {\r\n if (\r\n (placement !== FAVORITES_SORT.FIRST && placement !== FAVORITES_SORT.LAST) ||\r\n !Array.isArray(rows)\r\n ) {\r\n return rows;\r\n }\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n const fav: T[] = [];\r\n const rest: T[] = [];\r\n for (const row of source) {\r\n if (ids.has(getId(row))) fav.push(row);\r\n else rest.push(row);\r\n }\r\n if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder\r\n return placement === FAVORITES_SORT.FIRST\r\n ? fav.concat(rest)\r\n : rest.concat(fav);\r\n}\r\n\r\nexport interface UseFavoritesViewOptions<T> {\r\n /** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n /** @default \"all\" */\r\n filterMode?: FavoritesFilterMode | undefined;\r\n /** @default \"none\" */\r\n sortPlacement?: FavoritesSortPlacement | undefined;\r\n}\r\n\r\nexport interface UseFavoritesViewResult<T> {\r\n rows: readonly T[];\r\n favoriteIds: Set<RowId>;\r\n favoriteCount: number;\r\n isFiltering: boolean;\r\n}\r\n\r\n/**\r\n * useFavoritesView(resourceKey, rows, options)\r\n *\r\n * Reads the favorites id Set for `resourceKey` and applies the favorites\r\n * filter + sort to `rows`. In the all/none case the original `rows`\r\n * reference is returned unchanged.\r\n */\r\nexport function useFavoritesView<T>(\r\n resourceKey: string,\r\n rows: readonly T[],\r\n options?: UseFavoritesViewOptions<T>\r\n): UseFavoritesViewResult<T> {\r\n const opts: UseFavoritesViewOptions<T> = options || {};\r\n const getRowId = opts.getRowId;\r\n const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;\r\n const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;\r\n\r\n const fav = useFavorites(resourceKey);\r\n const ids = fav.ids;\r\n\r\n const processed = React.useMemo(\r\n function compute(): readonly T[] {\r\n const base: readonly T[] = Array.isArray(rows) ? rows : EMPTY_ROWS;\r\n const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);\r\n return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);\r\n },\r\n [rows, ids, getRowId, filterMode, sortPlacement]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesViewResult<T> {\r\n return {\r\n rows: processed,\r\n favoriteIds: ids,\r\n favoriteCount: fav.count,\r\n isFiltering: filterMode === FAVORITES_FILTER.ONLY,\r\n };\r\n },\r\n [processed, ids, fav.count, filterMode]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * gridPreferences — Portnet UI v2 · personalization capability
3
+ *
4
+ * Per-user, per-resource DataGrid preferences. Self-registers the
5
+ * "gridPreferences" capability with the schema registry at import time, so the
6
+ * capability-agnostic foundation discovers its schemaVersion / defaultState /
7
+ * migrate without any hardcoding.
8
+ *
9
+ * State model (the capability payload):
10
+ * { [resourceKey]: { hiddenColumns: string[] } }
11
+ *
12
+ * ─────────────────────────────────────────────────────────────────────────────
13
+ * WHY THIS BELONGS IN THE LIBRARY (capability gap G-35)
14
+ *
15
+ * `DataGridToolbar` owns the column-visibility UI (`hiddenColumns` +
16
+ * `onHiddenColumnsChange`) but deliberately holds no state, so PERSISTING the
17
+ * choice is left to the host. Every listing screen therefore reached for raw
18
+ * `localStorage` — observed in onssa-export-fe as
19
+ * `"onssaCertificates:listing:hiddenColumns"`, hand-written JSON.parse
20
+ * included.
21
+ *
22
+ * That is not merely duplication. A bare `localStorage` key is NOT USER-SCOPED,
23
+ * while this foundation's own key scheme is:
24
+ *
25
+ * portnet-ui:perso:v1:{tenantId?}:{userId}:{capabilityId}
26
+ *
27
+ * So on a shared workstation — the norm at a port — user B inherited user A's
28
+ * hidden columns, and a column A had hidden stayed invisible to B with no
29
+ * affordance explaining why. Favorites and saved filters were already immune
30
+ * because they route through this foundation; column visibility was the one
31
+ * grid preference that did not.
32
+ *
33
+ * It could not be fixed in a host, either. `registerCapability` is exported as
34
+ * a "capability registration seam — for custom/host-defined capabilities", but
35
+ * the two primitives every capability hook needs — `usePersonalizationStore`
36
+ * and `useStoreSelector` — are deliberately private ("architecture doc §2.8 —
37
+ * minimum API surface"). A host could register a descriptor and then had no way
38
+ * to read or write its payload. The seam was advertised but not complete, so
39
+ * the slice has to live here, exactly like favorites and savedFilters.
40
+ *
41
+ * DENSITY IS DELIBERATELY NOT PART OF THIS. `useDensity` (v2/hooks) owns the
42
+ * density preference as a GLOBAL, non-resource-scoped value on its own
43
+ * `portnet-ui-density` key, and it applies `data-density` to <html>. Folding it
44
+ * in here would give one preference two owners. Note however that it is
45
+ * unscoped for the same reason this capability exists — tracked separately,
46
+ * since moving it into the foundation changes its storage key and would make it
47
+ * require a provider (a breaking change for current callers).
48
+ * ─────────────────────────────────────────────────────────────────────────────
49
+ *
50
+ * Usage:
51
+ *
52
+ * const { hiddenColumns, setHiddenColumns } = useGridPreferences("ti:list");
53
+ *
54
+ * <DataGridToolbar
55
+ * columns={columns}
56
+ * hiddenColumns={hiddenColumns}
57
+ * onHiddenColumnsChange={setHiddenColumns}
58
+ * … />
59
+ * <DataGrid columns={columns} hiddenColumns={hiddenColumns} … />
60
+ *
61
+ * `resourceKey` namespaces preferences per list (e.g. "ti:list",
62
+ * "declarations:list") so two grids in one app never collide. Requires a
63
+ * <UserPersonalizationProvider> ancestor.
64
+ *
65
+ * Performance: the pure helpers rebuild only the touched resourceKey's entry
66
+ * and shallow-copy the map, so the store's structural sharing keeps every OTHER
67
+ * resource's preferences referentially stable — and the exposed `Set` is
68
+ * memoised on the stored array, so its identity survives re-renders and does
69
+ * not defeat DataGrid's memoisation.
70
+ */
71
+
72
+ import * as React from "react";
73
+ import { registerCapability } from "../schema";
74
+ import { usePersonalizationStore, useStoreSelector } from "../personalizationContext";
75
+
76
+ /** One resource's grid preferences. Optional members so the shape can grow
77
+ * (column order, widths) without a schemaVersion bump. */
78
+
79
+ /** The gridPreferences capability payload: entries keyed by resourceKey. */
80
+
81
+ export const GRID_PREFERENCES_CAPABILITY_ID = "gridPreferences";
82
+ const SCHEMA_VERSION = 1;
83
+ const EMPTY_LIST = Object.freeze([]);
84
+ const EMPTY_MAP = Object.freeze({});
85
+ function isString(value) {
86
+ return typeof value === "string";
87
+ }
88
+
89
+ /* Register at import time — the foundation reads this at hydration. */
90
+ registerCapability({
91
+ id: GRID_PREFERENCES_CAPABILITY_ID,
92
+ schemaVersion: SCHEMA_VERSION,
93
+ defaultState: EMPTY_MAP,
94
+ // { [resourceKey]: { hiddenColumns: string[] } }
95
+ migrate: function migrateGridPreferences(_fromVersion, payload) {
96
+ /* v1 is the initial schema, so there is no version to upgrade FROM — but
97
+ * this is the load-time trust boundary for a payload that came back from
98
+ * storage, and it is the right place to normalise it. A column key is used
99
+ * to hide grid columns; a number or an object arriving from an older build
100
+ * (or from hand-edited devtools storage) must not reach the DataGrid as if
101
+ * it were one. Anything unrecognised is dropped rather than repaired. */
102
+ if (!payload || typeof payload !== "object") return {};
103
+ const source = payload;
104
+ const next = {};
105
+ for (const resourceKey of Object.keys(source)) {
106
+ const entry = source[resourceKey];
107
+ if (!entry || typeof entry !== "object") continue;
108
+ const raw = entry["hiddenColumns"];
109
+ if (!Array.isArray(raw)) continue;
110
+ const keys = raw.filter(isString);
111
+ if (keys.length > 0) next[resourceKey] = {
112
+ hiddenColumns: keys
113
+ };
114
+ }
115
+ return next;
116
+ }
117
+ });
118
+
119
+ /* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */
120
+
121
+ function listFor(map, resourceKey) {
122
+ const entry = map ? map[resourceKey] : undefined;
123
+ const list = entry ? entry.hiddenColumns : undefined;
124
+ return Array.isArray(list) ? list : EMPTY_LIST;
125
+ }
126
+ function sameMembers(a, b) {
127
+ if (a.length !== b.length) return false;
128
+ for (let i = 0; i < a.length; i++) {
129
+ if (a[i] !== b[i]) return false;
130
+ }
131
+ return true;
132
+ }
133
+ function setList(map, resourceKey, keys) {
134
+ const base = map || EMPTY_MAP;
135
+ // No-op when unchanged → the store short-circuits and nothing re-renders.
136
+ if (sameMembers(listFor(base, resourceKey), keys)) return base;
137
+ const next = Object.assign({}, base);
138
+ if (keys.length === 0) {
139
+ // Nothing hidden is the default; drop the entry rather than persist an
140
+ // empty array, so the payload stays tidy and a reset leaves no residue.
141
+ delete next[resourceKey];
142
+ } else {
143
+ // Spread, not Object.assign: `base[resourceKey]` is
144
+ // `GridPreferencesEntry | undefined` under noUncheckedIndexedAccess, and
145
+ // passing undefined as an Object.assign source yields an intersection
146
+ // containing undefined. Spreading undefined is well-defined ({}), and it
147
+ // preserves any sibling preference a future schema adds alongside
148
+ // hiddenColumns.
149
+ next[resourceKey] = {
150
+ ...base[resourceKey],
151
+ hiddenColumns: keys.slice()
152
+ };
153
+ }
154
+ return next;
155
+ }
156
+
157
+ /* ── hook ───────────────────────────────────────────────────────────── */
158
+
159
+ function useEnsureGridPreferences(store) {
160
+ React.useEffect(function ensure() {
161
+ store.ensureCapability(GRID_PREFERENCES_CAPABILITY_ID);
162
+ }, [store]);
163
+ }
164
+ /**
165
+ * useGridPreferences(resourceKey) — persisted, per-user grid preferences for
166
+ * one resource.
167
+ */
168
+ export function useGridPreferences(resourceKey) {
169
+ const store = usePersonalizationStore();
170
+ useEnsureGridPreferences(store);
171
+ const selectList = React.useCallback(function selectList(snapshot) {
172
+ const slice = snapshot[GRID_PREFERENCES_CAPABILITY_ID];
173
+ return slice ? listFor(slice, resourceKey) : EMPTY_LIST;
174
+ }, [resourceKey]);
175
+ const keys = useStoreSelector(selectList);
176
+
177
+ // Stable while `keys` is stable (structural sharing), so the Set identity
178
+ // does not churn on every render and DataGrid's memoisation still holds.
179
+ const hiddenColumns = React.useMemo(function buildSet() {
180
+ return new Set(keys);
181
+ }, [keys]);
182
+ const setHiddenColumns = React.useCallback(function setHiddenColumns(hidden) {
183
+ // Normalise at the write boundary too: the caller is UI code, but the
184
+ // value is about to be persisted and re-read by a later session.
185
+ const nextKeys = Array.from(hidden).filter(isString);
186
+ store.write(GRID_PREFERENCES_CAPABILITY_ID, function (prev) {
187
+ return setList(prev, resourceKey, nextKeys);
188
+ });
189
+ }, [store, resourceKey]);
190
+ const resetHiddenColumns = React.useCallback(function resetHiddenColumns() {
191
+ store.write(GRID_PREFERENCES_CAPABILITY_ID, function (prev) {
192
+ return setList(prev, resourceKey, EMPTY_LIST);
193
+ });
194
+ }, [store, resourceKey]);
195
+ return React.useMemo(function value() {
196
+ return {
197
+ hiddenColumns: hiddenColumns,
198
+ setHiddenColumns: setHiddenColumns,
199
+ resetHiddenColumns: resetHiddenColumns
200
+ };
201
+ }, [hiddenColumns, setHiddenColumns, resetHiddenColumns]);
202
+ }
203
+ //# sourceMappingURL=gridPreferences.js.map