@portnet/ui 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (980) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/dist/esm/index.js +72 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +81 -86
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +155 -59
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +37 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +2 -3
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -53
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -87
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +152 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  346. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  347. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  348. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  349. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  350. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  351. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  352. package/dist/esm/v2/personalization/index.js +17 -0
  353. package/dist/esm/v2/personalization/index.js.map +1 -1
  354. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  355. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  356. package/dist/esm/v2/personalization/schema.js +8 -9
  357. package/dist/esm/v2/personalization/schema.js.map +1 -1
  358. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  359. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  360. package/dist/esm/v2/referentiel/types.js +2 -0
  361. package/dist/esm/v2/referentiel/types.js.map +1 -0
  362. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  363. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  364. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  365. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  367. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  368. package/dist/esm/v2/theme/_brand.js +8 -24
  369. package/dist/esm/v2/theme/_brand.js.map +1 -1
  370. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  371. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  372. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  373. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  374. package/dist/esm/v2/theme/cssVariables.js +62 -69
  375. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  376. package/dist/esm/v2/theme/index.js +5 -5
  377. package/dist/esm/v2/theme/index.js.map +1 -1
  378. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  379. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  380. package/dist/esm/v2/tokens/chart.js +261 -0
  381. package/dist/esm/v2/tokens/chart.js.map +1 -0
  382. package/dist/esm/v2/tokens/colors.js +22 -22
  383. package/dist/esm/v2/tokens/colors.js.map +1 -1
  384. package/dist/esm/v2/tokens/density.js +62 -7
  385. package/dist/esm/v2/tokens/density.js.map +1 -1
  386. package/dist/esm/v2/tokens/index.js +49 -34
  387. package/dist/esm/v2/tokens/index.js.map +1 -1
  388. package/dist/esm/v2/tokens/motion.js +12 -20
  389. package/dist/esm/v2/tokens/motion.js.map +1 -1
  390. package/dist/esm/v2/tokens/radius.js +1 -1
  391. package/dist/esm/v2/tokens/radius.js.map +1 -1
  392. package/dist/esm/v2/tokens/shadows.js +6 -6
  393. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  394. package/dist/esm/v2/tokens/spacing.js +2 -2
  395. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  396. package/dist/esm/v2/tokens/state.js +1 -1
  397. package/dist/esm/v2/tokens/state.js.map +1 -1
  398. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  399. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  400. package/dist/esm/v2/tokens/tokens.json +6 -1
  401. package/dist/esm/v2/tokens/typography.js +13 -13
  402. package/dist/esm/v2/tokens/typography.js.map +1 -1
  403. package/dist/esm/v2/tokens/zIndex.js +1 -1
  404. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  405. package/dist/esm/v2/types/datagrid.js.map +1 -1
  406. package/dist/esm/v2/utils/apiError.js +16 -37
  407. package/dist/esm/v2/utils/apiError.js.map +1 -1
  408. package/dist/esm/v2/utils/contrast.js +31 -32
  409. package/dist/esm/v2/utils/contrast.js.map +1 -1
  410. package/dist/esm/v2/utils/cx.js +5 -25
  411. package/dist/esm/v2/utils/cx.js.map +1 -1
  412. package/dist/esm/v2/utils/fileDownload.js +23 -26
  413. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  414. package/dist/esm/v2/utils/fileValidation.js +209 -0
  415. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  416. package/dist/esm/v2/utils/fmtDate.js +111 -0
  417. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  419. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  420. package/dist/esm/v2/utils/formikErrors.js +78 -0
  421. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  422. package/dist/esm/v2/utils/index.js +35 -2
  423. package/dist/esm/v2/utils/index.js.map +1 -1
  424. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  425. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  426. package/dist/esm/v2/utils/networkStatus.js +12 -12
  427. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  428. package/dist/index.d.ts +7 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +110 -49
  431. package/dist/index.js.map +1 -1
  432. package/dist/v2/__tests__/AppMain.test.js +133 -0
  433. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  434. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  435. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  436. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  437. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  438. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  439. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  440. package/dist/v2/__tests__/FieldError.test.js +82 -49
  441. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  442. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  443. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  444. package/dist/v2/__tests__/FieldWidth.test.js +23 -25
  445. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
  446. package/dist/v2/__tests__/FileCard.test.js +29 -28
  447. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  448. package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
  449. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
  451. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  452. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  453. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
  455. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  456. package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
  457. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  458. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  459. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  460. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  461. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  462. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  463. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  464. package/dist/v2/__tests__/apiError.test.js +50 -69
  465. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  466. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  467. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  468. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  469. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  470. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  471. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  472. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  473. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  474. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  475. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  476. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  477. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  478. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  479. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  480. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  481. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  482. package/dist/v2/__tests__/labels-merge.test.js +23 -27
  483. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  484. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  485. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  486. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  487. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  488. package/dist/v2/__tests__/rowActions.test.js +186 -0
  489. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  490. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  491. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  493. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  494. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  495. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  496. package/dist/v2/components/Accordion.js +60 -82
  497. package/dist/v2/components/Accordion.js.map +1 -1
  498. package/dist/v2/components/ActionStrip.js +40 -52
  499. package/dist/v2/components/ActionStrip.js.map +1 -1
  500. package/dist/v2/components/Banner.js +42 -41
  501. package/dist/v2/components/Banner.js.map +1 -1
  502. package/dist/v2/components/Busy.js +22 -27
  503. package/dist/v2/components/Busy.js.map +1 -1
  504. package/dist/v2/components/Button.js +39 -50
  505. package/dist/v2/components/Button.js.map +1 -1
  506. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  507. package/dist/v2/components/CategoryTag.js +49 -32
  508. package/dist/v2/components/CategoryTag.js.map +1 -1
  509. package/dist/v2/components/Checkbox.js +39 -45
  510. package/dist/v2/components/Checkbox.js.map +1 -1
  511. package/dist/v2/components/Chip.js +29 -42
  512. package/dist/v2/components/Chip.js.map +1 -1
  513. package/dist/v2/components/Combobox.js +122 -144
  514. package/dist/v2/components/Combobox.js.map +1 -1
  515. package/dist/v2/components/CommandPalette.js +138 -225
  516. package/dist/v2/components/CommandPalette.js.map +1 -1
  517. package/dist/v2/components/ConfirmDialog.js +46 -56
  518. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  519. package/dist/v2/components/DatePicker.js +81 -86
  520. package/dist/v2/components/DatePicker.js.map +1 -1
  521. package/dist/v2/components/DateRangePicker.js +77 -87
  522. package/dist/v2/components/DateRangePicker.js.map +1 -1
  523. package/dist/v2/components/DateTimePicker.js +84 -91
  524. package/dist/v2/components/DateTimePicker.js.map +1 -1
  525. package/dist/v2/components/Drawer.d.ts.map +1 -1
  526. package/dist/v2/components/Drawer.js +93 -88
  527. package/dist/v2/components/Drawer.js.map +1 -1
  528. package/dist/v2/components/Dropzone.js +150 -196
  529. package/dist/v2/components/Dropzone.js.map +1 -1
  530. package/dist/v2/components/EmptyState.js +18 -20
  531. package/dist/v2/components/EmptyState.js.map +1 -1
  532. package/dist/v2/components/FavoriteToggle.js +28 -39
  533. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  534. package/dist/v2/components/Field.d.ts +62 -4
  535. package/dist/v2/components/Field.d.ts.map +1 -1
  536. package/dist/v2/components/Field.js +169 -70
  537. package/dist/v2/components/Field.js.map +1 -1
  538. package/dist/v2/components/FieldError.js +18 -21
  539. package/dist/v2/components/FieldError.js.map +1 -1
  540. package/dist/v2/components/FieldHelp.js +40 -60
  541. package/dist/v2/components/FieldHelp.js.map +1 -1
  542. package/dist/v2/components/FileCard.js +27 -31
  543. package/dist/v2/components/FileCard.js.map +1 -1
  544. package/dist/v2/components/FilterTab.js +30 -38
  545. package/dist/v2/components/FilterTab.js.map +1 -1
  546. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  547. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  548. package/dist/v2/components/ForbiddenPage.js +37 -17
  549. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  550. package/dist/v2/components/FormGrid.js +53 -59
  551. package/dist/v2/components/FormGrid.js.map +1 -1
  552. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  553. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  554. package/dist/v2/components/FormikDisplay.js +108 -33
  555. package/dist/v2/components/FormikDisplay.js.map +1 -1
  556. package/dist/v2/components/Input.d.ts +40 -0
  557. package/dist/v2/components/Input.d.ts.map +1 -1
  558. package/dist/v2/components/Input.js +81 -41
  559. package/dist/v2/components/Input.js.map +1 -1
  560. package/dist/v2/components/KPICard.js +57 -67
  561. package/dist/v2/components/KPICard.js.map +1 -1
  562. package/dist/v2/components/KPIStrip.js +16 -22
  563. package/dist/v2/components/KPIStrip.js.map +1 -1
  564. package/dist/v2/components/KV.js +25 -31
  565. package/dist/v2/components/KV.js.map +1 -1
  566. package/dist/v2/components/KVGrid.js +19 -26
  567. package/dist/v2/components/KVGrid.js.map +1 -1
  568. package/dist/v2/components/Layout.js +91 -120
  569. package/dist/v2/components/Layout.js.map +1 -1
  570. package/dist/v2/components/MobileRowCard.js +79 -91
  571. package/dist/v2/components/MobileRowCard.js.map +1 -1
  572. package/dist/v2/components/Modal.js +61 -69
  573. package/dist/v2/components/Modal.js.map +1 -1
  574. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  575. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  576. package/dist/v2/components/NetworkErrorPage.js +38 -21
  577. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  578. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  579. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  580. package/dist/v2/components/NotFoundPage.js +37 -18
  581. package/dist/v2/components/NotFoundPage.js.map +1 -1
  582. package/dist/v2/components/NumberInput.js +88 -118
  583. package/dist/v2/components/NumberInput.js.map +1 -1
  584. package/dist/v2/components/OverflowMenu.js +38 -56
  585. package/dist/v2/components/OverflowMenu.js.map +1 -1
  586. package/dist/v2/components/PdfViewer.js +34 -45
  587. package/dist/v2/components/PdfViewer.js.map +1 -1
  588. package/dist/v2/components/ProgressBar.js +42 -49
  589. package/dist/v2/components/ProgressBar.js.map +1 -1
  590. package/dist/v2/components/Radio.js +59 -67
  591. package/dist/v2/components/Radio.js.map +1 -1
  592. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  593. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  594. package/dist/v2/components/SectionHeader.js +34 -41
  595. package/dist/v2/components/SectionHeader.js.map +1 -1
  596. package/dist/v2/components/Segmented.js +69 -93
  597. package/dist/v2/components/Segmented.js.map +1 -1
  598. package/dist/v2/components/Select.d.ts +26 -2
  599. package/dist/v2/components/Select.d.ts.map +1 -1
  600. package/dist/v2/components/Select.js +120 -155
  601. package/dist/v2/components/Select.js.map +1 -1
  602. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  603. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  604. package/dist/v2/components/ServerErrorPage.js +37 -20
  605. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  606. package/dist/v2/components/Skeleton.js +86 -100
  607. package/dist/v2/components/Skeleton.js.map +1 -1
  608. package/dist/v2/components/SkipLink.js +9 -12
  609. package/dist/v2/components/SkipLink.js.map +1 -1
  610. package/dist/v2/components/Spinner.js +16 -25
  611. package/dist/v2/components/Spinner.js.map +1 -1
  612. package/dist/v2/components/Status.js +18 -29
  613. package/dist/v2/components/Status.js.map +1 -1
  614. package/dist/v2/components/Stepper.js +80 -82
  615. package/dist/v2/components/Stepper.js.map +1 -1
  616. package/dist/v2/components/Surface.js +34 -49
  617. package/dist/v2/components/Surface.js.map +1 -1
  618. package/dist/v2/components/Switch.js +29 -37
  619. package/dist/v2/components/Switch.js.map +1 -1
  620. package/dist/v2/components/TabPanel.d.ts +17 -0
  621. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  622. package/dist/v2/components/TabPanel.js +90 -0
  623. package/dist/v2/components/TabPanel.js.map +1 -0
  624. package/dist/v2/components/Tabs.d.ts +25 -0
  625. package/dist/v2/components/Tabs.d.ts.map +1 -1
  626. package/dist/v2/components/Tabs.js +53 -29
  627. package/dist/v2/components/Tabs.js.map +1 -1
  628. package/dist/v2/components/TelInput.js +80 -115
  629. package/dist/v2/components/TelInput.js.map +1 -1
  630. package/dist/v2/components/Textarea.js +26 -35
  631. package/dist/v2/components/Textarea.js.map +1 -1
  632. package/dist/v2/components/TimePicker.js +62 -74
  633. package/dist/v2/components/TimePicker.js.map +1 -1
  634. package/dist/v2/components/Toast.js +119 -174
  635. package/dist/v2/components/Toast.js.map +1 -1
  636. package/dist/v2/components/Tooltip.js +23 -38
  637. package/dist/v2/components/Tooltip.js.map +1 -1
  638. package/dist/v2/components/_ErrorPageBody.js +15 -16
  639. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  640. package/dist/v2/components/_pickerShared.js +5 -5
  641. package/dist/v2/components/_pickerShared.js.map +1 -1
  642. package/dist/v2/components/index.d.ts +40 -1
  643. package/dist/v2/components/index.d.ts.map +1 -1
  644. package/dist/v2/components/index.js +153 -136
  645. package/dist/v2/components/index.js.map +1 -1
  646. package/dist/v2/hooks/index.d.ts +65 -0
  647. package/dist/v2/hooks/index.d.ts.map +1 -1
  648. package/dist/v2/hooks/index.js +63 -24
  649. package/dist/v2/hooks/index.js.map +1 -1
  650. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  651. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  652. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  653. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  654. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  655. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  656. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  657. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  658. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  659. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  660. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  661. package/dist/v2/hooks/useDensity.js +14 -18
  662. package/dist/v2/hooks/useDensity.js.map +1 -1
  663. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  664. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  665. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  666. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  667. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  668. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  669. package/dist/v2/hooks/useFocusTrap.js +20 -24
  670. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  671. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  672. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  673. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  674. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  675. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  676. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  677. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  678. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  679. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  680. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  681. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  682. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  683. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  684. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  685. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  687. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  688. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  689. package/dist/v2/hooks/useSortedRows.js +4 -6
  690. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  691. package/dist/v2/hooks/useTabLoading.js +7 -22
  692. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  693. package/dist/v2/index.js +143 -145
  694. package/dist/v2/index.js.map +1 -1
  695. package/dist/v2/modalContext.js +2 -2
  696. package/dist/v2/modalContext.js.map +1 -1
  697. package/dist/v2/models/favorite.d.ts +8 -9
  698. package/dist/v2/models/favorite.d.ts.map +1 -1
  699. package/dist/v2/models/favorite.js.map +1 -1
  700. package/dist/v2/models/index.js +4 -4
  701. package/dist/v2/models/index.js.map +1 -1
  702. package/dist/v2/models/personalization.d.ts +44 -48
  703. package/dist/v2/models/personalization.d.ts.map +1 -1
  704. package/dist/v2/models/personalization.js.map +1 -1
  705. package/dist/v2/models/referentiel.d.ts +32 -50
  706. package/dist/v2/models/referentiel.d.ts.map +1 -1
  707. package/dist/v2/models/referentiel.js.map +1 -1
  708. package/dist/v2/models/savedFilter.d.ts +8 -17
  709. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  710. package/dist/v2/models/savedFilter.js.map +1 -1
  711. package/dist/v2/patterns/ActionBar.js +152 -187
  712. package/dist/v2/patterns/ActionBar.js.map +1 -1
  713. package/dist/v2/patterns/AppMain.d.ts +109 -0
  714. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  715. package/dist/v2/patterns/AppMain.js +115 -0
  716. package/dist/v2/patterns/AppMain.js.map +1 -0
  717. package/dist/v2/patterns/BulkActionBar.js +40 -42
  718. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  719. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  720. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  721. package/dist/v2/patterns/ChartFigure.js +159 -0
  722. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  723. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  724. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  725. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  726. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  727. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  728. package/dist/v2/patterns/DataGrid.js +262 -297
  729. package/dist/v2/patterns/DataGrid.js.map +1 -1
  730. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  731. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  733. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  734. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  735. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  736. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  737. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  738. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  739. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  740. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  741. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  742. package/dist/v2/patterns/DetailSplit.js +116 -0
  743. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  744. package/dist/v2/patterns/FavoriteColumn.js +22 -23
  745. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  746. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  747. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  748. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  749. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  750. package/dist/v2/patterns/FilterTabBar.js +120 -0
  751. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  752. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  753. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  754. package/dist/v2/patterns/FormPageShell.js +53 -50
  755. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  756. package/dist/v2/patterns/FormSection.d.ts +8 -3
  757. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  758. package/dist/v2/patterns/FormSection.js +44 -51
  759. package/dist/v2/patterns/FormSection.js.map +1 -1
  760. package/dist/v2/patterns/FormikCheckbox.js +36 -45
  761. package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
  762. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  763. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  765. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  766. package/dist/v2/patterns/FormikCombobox.js +55 -72
  767. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  768. package/dist/v2/patterns/FormikDatePicker.js +50 -64
  769. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  770. package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
  771. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
  772. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  773. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  774. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  775. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  776. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  777. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  778. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  779. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikFile.js +99 -83
  781. package/dist/v2/patterns/FormikFile.js.map +1 -1
  782. package/dist/v2/patterns/FormikInput.js +45 -58
  783. package/dist/v2/patterns/FormikInput.js.map +1 -1
  784. package/dist/v2/patterns/FormikRadioGroup.js +45 -56
  785. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
  786. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  787. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  788. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  789. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  790. package/dist/v2/patterns/FormikSelect.js +70 -92
  791. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  792. package/dist/v2/patterns/FormikTextarea.js +35 -51
  793. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  794. package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
  795. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  796. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  797. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  798. package/dist/v2/patterns/PageContent.js +17 -20
  799. package/dist/v2/patterns/PageContent.js.map +1 -1
  800. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  801. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  802. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  803. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  804. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  805. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/ReferentielField.js +347 -327
  807. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
  809. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
  810. package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
  811. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
  812. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  813. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  814. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  815. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  816. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  817. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  818. package/dist/v2/patterns/SortableHeader.js +35 -57
  819. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  820. package/dist/v2/patterns/Tour.js +121 -142
  821. package/dist/v2/patterns/Tour.js.map +1 -1
  822. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  823. package/dist/v2/patterns/_dataGridShared.js +131 -147
  824. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  825. package/dist/v2/patterns/_pickerSerialisation.js +9 -10
  826. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
  827. package/dist/v2/patterns/_sort.js +17 -33
  828. package/dist/v2/patterns/_sort.js.map +1 -1
  829. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  830. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  831. package/dist/v2/patterns/_useColumnResize.js +80 -99
  832. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  833. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  834. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  835. package/dist/v2/patterns/filterCriteria.js +110 -0
  836. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  837. package/dist/v2/patterns/index.d.ts +160 -0
  838. package/dist/v2/patterns/index.d.ts.map +1 -1
  839. package/dist/v2/patterns/index.js +157 -79
  840. package/dist/v2/patterns/index.js.map +1 -1
  841. package/dist/v2/patterns/rowActions.d.ts +150 -0
  842. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  843. package/dist/v2/patterns/rowActions.js +232 -0
  844. package/dist/v2/patterns/rowActions.js.map +1 -0
  845. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  846. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  847. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  848. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  849. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  850. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  851. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  852. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  853. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  854. package/dist/v2/personalization/adapters/index.js +5 -5
  855. package/dist/v2/personalization/adapters/index.js.map +1 -1
  856. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  857. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  858. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  859. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  860. package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
  861. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  862. package/dist/v2/personalization/capabilities/index.js +12 -12
  863. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  864. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  865. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  866. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  867. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  868. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  869. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  870. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  871. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  872. package/dist/v2/personalization/index.d.ts +16 -0
  873. package/dist/v2/personalization/index.d.ts.map +1 -1
  874. package/dist/v2/personalization/index.js +30 -23
  875. package/dist/v2/personalization/index.js.map +1 -1
  876. package/dist/v2/personalization/personalizationContext.js +10 -12
  877. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  878. package/dist/v2/personalization/schema.js +8 -9
  879. package/dist/v2/personalization/schema.js.map +1 -1
  880. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  881. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  882. package/dist/v2/referentiel/index.js +11 -13
  883. package/dist/v2/referentiel/index.js.map +1 -1
  884. package/dist/v2/referentiel/types.d.ts +105 -0
  885. package/dist/v2/referentiel/types.d.ts.map +1 -0
  886. package/dist/v2/referentiel/types.js +6 -0
  887. package/dist/v2/referentiel/types.js.map +1 -0
  888. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  889. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  890. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  891. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  892. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  893. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  894. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  895. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  896. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  897. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  898. package/dist/v2/theme/_brand.js +12 -26
  899. package/dist/v2/theme/_brand.js.map +1 -1
  900. package/dist/v2/theme/_brandSecondary.js +12 -26
  901. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  902. package/dist/v2/theme/createPortnetTheme.js +41 -49
  903. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  904. package/dist/v2/theme/cssVariables.d.ts +3 -3
  905. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  906. package/dist/v2/theme/cssVariables.js +65 -70
  907. package/dist/v2/theme/cssVariables.js.map +1 -1
  908. package/dist/v2/theme/index.js +10 -10
  909. package/dist/v2/theme/index.js.map +1 -1
  910. package/dist/v2/tokens/breakpoints.js +16 -16
  911. package/dist/v2/tokens/breakpoints.js.map +1 -1
  912. package/dist/v2/tokens/chart.d.ts +103 -0
  913. package/dist/v2/tokens/chart.d.ts.map +1 -0
  914. package/dist/v2/tokens/chart.js +270 -0
  915. package/dist/v2/tokens/chart.js.map +1 -0
  916. package/dist/v2/tokens/colors.js +24 -24
  917. package/dist/v2/tokens/colors.js.map +1 -1
  918. package/dist/v2/tokens/density.d.ts +104 -0
  919. package/dist/v2/tokens/density.d.ts.map +1 -1
  920. package/dist/v2/tokens/density.js +67 -12
  921. package/dist/v2/tokens/density.js.map +1 -1
  922. package/dist/v2/tokens/index.d.ts +50 -1
  923. package/dist/v2/tokens/index.d.ts.map +1 -1
  924. package/dist/v2/tokens/index.js +116 -68
  925. package/dist/v2/tokens/index.js.map +1 -1
  926. package/dist/v2/tokens/motion.js +16 -22
  927. package/dist/v2/tokens/motion.js.map +1 -1
  928. package/dist/v2/tokens/radius.js +3 -3
  929. package/dist/v2/tokens/radius.js.map +1 -1
  930. package/dist/v2/tokens/shadows.js +8 -8
  931. package/dist/v2/tokens/shadows.js.map +1 -1
  932. package/dist/v2/tokens/spacing.js +4 -4
  933. package/dist/v2/tokens/spacing.js.map +1 -1
  934. package/dist/v2/tokens/state.js +3 -3
  935. package/dist/v2/tokens/state.js.map +1 -1
  936. package/dist/v2/tokens/statusPalette.js +21 -23
  937. package/dist/v2/tokens/statusPalette.js.map +1 -1
  938. package/dist/v2/tokens/tokens.json +6 -1
  939. package/dist/v2/tokens/typography.js +15 -15
  940. package/dist/v2/tokens/typography.js.map +1 -1
  941. package/dist/v2/tokens/zIndex.js +3 -3
  942. package/dist/v2/tokens/zIndex.js.map +1 -1
  943. package/dist/v2/types/datagrid.d.ts +9 -1
  944. package/dist/v2/types/datagrid.d.ts.map +1 -1
  945. package/dist/v2/types/datagrid.js.map +1 -1
  946. package/dist/v2/types/index.js +2 -2
  947. package/dist/v2/types/index.js.map +1 -1
  948. package/dist/v2/utils/apiError.js +16 -37
  949. package/dist/v2/utils/apiError.js.map +1 -1
  950. package/dist/v2/utils/contrast.js +31 -32
  951. package/dist/v2/utils/contrast.js.map +1 -1
  952. package/dist/v2/utils/cx.js +7 -27
  953. package/dist/v2/utils/cx.js.map +1 -1
  954. package/dist/v2/utils/fileDownload.js +25 -28
  955. package/dist/v2/utils/fileDownload.js.map +1 -1
  956. package/dist/v2/utils/fileValidation.d.ts +116 -0
  957. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  958. package/dist/v2/utils/fileValidation.js +220 -0
  959. package/dist/v2/utils/fileValidation.js.map +1 -0
  960. package/dist/v2/utils/fmtDate.d.ts +103 -0
  961. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  962. package/dist/v2/utils/fmtDate.js +119 -0
  963. package/dist/v2/utils/fmtDate.js.map +1 -0
  964. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  965. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  966. package/dist/v2/utils/fmtMoney.js +9 -11
  967. package/dist/v2/utils/fmtMoney.js.map +1 -1
  968. package/dist/v2/utils/formikErrors.d.ts +67 -0
  969. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  970. package/dist/v2/utils/formikErrors.js +85 -0
  971. package/dist/v2/utils/formikErrors.js.map +1 -0
  972. package/dist/v2/utils/index.d.ts +5 -0
  973. package/dist/v2/utils/index.d.ts.map +1 -1
  974. package/dist/v2/utils/index.js +67 -18
  975. package/dist/v2/utils/index.js.map +1 -1
  976. package/dist/v2/utils/mergeLabels.js +9 -14
  977. package/dist/v2/utils/mergeLabels.js.map +1 -1
  978. package/dist/v2/utils/networkStatus.js +14 -14
  979. package/dist/v2/utils/networkStatus.js.map +1 -1
  980. package/package.json +26 -9
@@ -20,14 +20,14 @@
20
20
  */
21
21
 
22
22
  import { KEY_SCHEME_VERSION } from "../schema";
23
- export var KEY_PREFIX = "portnet-ui:perso";
23
+ export const KEY_PREFIX = "portnet-ui:perso";
24
24
  function enc(value) {
25
25
  return encodeURIComponent(String(value == null ? "" : value));
26
26
  }
27
27
 
28
28
  /** Full storage key for one (scope, capability). */
29
29
  export function buildKey(scope, capabilityId) {
30
- var parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
30
+ const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
31
31
  if (scope && scope.tenantId) parts.push(enc(scope.tenantId));
32
32
  parts.push(enc(scope ? scope.userId : ""));
33
33
  parts.push(capabilityId);
@@ -39,7 +39,7 @@ export function buildKey(scope, capabilityId) {
39
39
  * capability segment follows immediately.
40
40
  */
41
41
  export function buildScopePrefix(scope) {
42
- var parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
42
+ const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
43
43
  if (scope && scope.tenantId) parts.push(enc(scope.tenantId));
44
44
  parts.push(enc(scope ? scope.userId : ""));
45
45
  parts.push(""); // trailing ':' after join
@@ -52,9 +52,9 @@ export function buildScopePrefix(scope) {
52
52
  */
53
53
  export function parseCapabilityFromKey(key, scope) {
54
54
  if (typeof key !== "string") return null;
55
- var prefix = buildScopePrefix(scope);
55
+ const prefix = buildScopePrefix(scope);
56
56
  if (key.indexOf(prefix) !== 0) return null;
57
- var capId = key.slice(prefix.length);
57
+ const capId = key.slice(prefix.length);
58
58
  return capId || null;
59
59
  }
60
60
  //# sourceMappingURL=_storageKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_storageKey.js","names":["KEY_SCHEME_VERSION","KEY_PREFIX","enc","value","encodeURIComponent","String","buildKey","scope","capabilityId","parts","tenantId","push","userId","join","buildScopePrefix","parseCapabilityFromKey","key","prefix","indexOf","capId","slice","length"],"sources":["../../../../../src/lib/v2/personalization/adapters/_storageKey.ts"],"sourcesContent":["/**\r\n * _storageKey — Portnet UI v2 · personalization adapters (private)\r\n *\r\n * Composite key scheme shared by storage adapters:\r\n *\r\n * portnet-ui:perso:v1:{tenantId?}:{userId}:{capabilityId}\r\n *\r\n * Design notes\r\n * - `resourceKey` is NOT in the key — it lives inside the capability\r\n * payload. One storage entry per (scope, capability) → cheap prefix scan\r\n * on load, one removeItem to clear.\r\n * - Scope segments (tenantId, userId) are encodeURIComponent-escaped so\r\n * arbitrary host identifiers — including ones containing ':' — remain\r\n * unambiguous. `capabilityId` is a controlled slug and is left raw so\r\n * `buildScopePrefix` + `slice()` recover it directly.\r\n * - `:v1:` is the KEY-SCHEME version (storage layout), independent of a\r\n * capability payload's `schemaVersion`.\r\n *\r\n * Underscore-prefixed: internal, never re-exported from the public surface.\r\n */\r\n\r\nimport { KEY_SCHEME_VERSION } from \"../schema\";\r\nimport type { Scope } from \"../types\";\r\n\r\nexport const KEY_PREFIX = \"portnet-ui:perso\";\r\n\r\nfunction enc(value: string | undefined): string {\r\n return encodeURIComponent(String(value == null ? \"\" : value));\r\n}\r\n\r\n/** Full storage key for one (scope, capability). */\r\nexport function buildKey(scope: Scope, capabilityId: string): string {\r\n const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];\r\n if (scope && scope.tenantId) parts.push(enc(scope.tenantId));\r\n parts.push(enc(scope ? scope.userId : \"\"));\r\n parts.push(capabilityId);\r\n return parts.join(\":\");\r\n}\r\n\r\n/**\r\n * Prefix shared by every capability key of a scope — terminated by ':' so the\r\n * capability segment follows immediately.\r\n */\r\nexport function buildScopePrefix(scope: Scope): string {\r\n const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];\r\n if (scope && scope.tenantId) parts.push(enc(scope.tenantId));\r\n parts.push(enc(scope ? scope.userId : \"\"));\r\n parts.push(\"\"); // trailing ':' after join\r\n return parts.join(\":\");\r\n}\r\n\r\n/**\r\n * Recover the capabilityId from a storage key for a given scope, or null when\r\n * the key does not belong to this scope.\r\n */\r\nexport function parseCapabilityFromKey(\r\n key: string,\r\n scope: Scope\r\n): string | null {\r\n if (typeof key !== \"string\") return null;\r\n const prefix = buildScopePrefix(scope);\r\n if (key.indexOf(prefix) !== 0) return null;\r\n const capId = key.slice(prefix.length);\r\n return capId || null;\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,kBAAkB,QAAQ,WAAW;AAG9C,OAAO,IAAMC,UAAU,GAAG,kBAAkB;AAE5C,SAASC,GAAGA,CAACC,KAAyB,EAAU;EAC9C,OAAOC,kBAAkB,CAACC,MAAM,CAACF,KAAK,IAAI,IAAI,GAAG,EAAE,GAAGA,KAAK,CAAC,CAAC;AAC/D;;AAEA;AACA,OAAO,SAASG,QAAQA,CAACC,KAAY,EAAEC,YAAoB,EAAU;EACnE,IAAMC,KAAK,GAAG,CAACR,UAAU,EAAED,kBAAkB,CAAC;EAC9C,IAAIO,KAAK,IAAIA,KAAK,CAACG,QAAQ,EAAED,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,CAACG,QAAQ,CAAC,CAAC;EAC5DD,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,GAAGA,KAAK,CAACK,MAAM,GAAG,EAAE,CAAC,CAAC;EAC1CH,KAAK,CAACE,IAAI,CAACH,YAAY,CAAC;EACxB,OAAOC,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACP,KAAY,EAAU;EACrD,IAAME,KAAK,GAAG,CAACR,UAAU,EAAED,kBAAkB,CAAC;EAC9C,IAAIO,KAAK,IAAIA,KAAK,CAACG,QAAQ,EAAED,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,CAACG,QAAQ,CAAC,CAAC;EAC5DD,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,GAAGA,KAAK,CAACK,MAAM,GAAG,EAAE,CAAC,CAAC;EAC1CH,KAAK,CAACE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAChB,OAAOF,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASE,sBAAsBA,CACpCC,GAAW,EACXT,KAAY,EACG;EACf,IAAI,OAAOS,GAAG,KAAK,QAAQ,EAAE,OAAO,IAAI;EACxC,IAAMC,MAAM,GAAGH,gBAAgB,CAACP,KAAK,CAAC;EACtC,IAAIS,GAAG,CAACE,OAAO,CAACD,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;EAC1C,IAAME,KAAK,GAAGH,GAAG,CAACI,KAAK,CAACH,MAAM,CAACI,MAAM,CAAC;EACtC,OAAOF,KAAK,IAAI,IAAI;AACtB","ignoreList":[]}
1
+ {"version":3,"file":"_storageKey.js","names":["KEY_SCHEME_VERSION","KEY_PREFIX","enc","value","encodeURIComponent","String","buildKey","scope","capabilityId","parts","tenantId","push","userId","join","buildScopePrefix","parseCapabilityFromKey","key","prefix","indexOf","capId","slice","length"],"sources":["../../../../../src/lib/v2/personalization/adapters/_storageKey.ts"],"sourcesContent":["/**\r\n * _storageKey — Portnet UI v2 · personalization adapters (private)\r\n *\r\n * Composite key scheme shared by storage adapters:\r\n *\r\n * portnet-ui:perso:v1:{tenantId?}:{userId}:{capabilityId}\r\n *\r\n * Design notes\r\n * - `resourceKey` is NOT in the key — it lives inside the capability\r\n * payload. One storage entry per (scope, capability) → cheap prefix scan\r\n * on load, one removeItem to clear.\r\n * - Scope segments (tenantId, userId) are encodeURIComponent-escaped so\r\n * arbitrary host identifiers — including ones containing ':' — remain\r\n * unambiguous. `capabilityId` is a controlled slug and is left raw so\r\n * `buildScopePrefix` + `slice()` recover it directly.\r\n * - `:v1:` is the KEY-SCHEME version (storage layout), independent of a\r\n * capability payload's `schemaVersion`.\r\n *\r\n * Underscore-prefixed: internal, never re-exported from the public surface.\r\n */\r\n\r\nimport { KEY_SCHEME_VERSION } from \"../schema\";\r\nimport type { Scope } from \"../types\";\r\n\r\nexport const KEY_PREFIX = \"portnet-ui:perso\";\r\n\r\nfunction enc(value: string | undefined): string {\r\n return encodeURIComponent(String(value == null ? \"\" : value));\r\n}\r\n\r\n/** Full storage key for one (scope, capability). */\r\nexport function buildKey(scope: Scope, capabilityId: string): string {\r\n const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];\r\n if (scope && scope.tenantId) parts.push(enc(scope.tenantId));\r\n parts.push(enc(scope ? scope.userId : \"\"));\r\n parts.push(capabilityId);\r\n return parts.join(\":\");\r\n}\r\n\r\n/**\r\n * Prefix shared by every capability key of a scope — terminated by ':' so the\r\n * capability segment follows immediately.\r\n */\r\nexport function buildScopePrefix(scope: Scope): string {\r\n const parts = [KEY_PREFIX, KEY_SCHEME_VERSION];\r\n if (scope && scope.tenantId) parts.push(enc(scope.tenantId));\r\n parts.push(enc(scope ? scope.userId : \"\"));\r\n parts.push(\"\"); // trailing ':' after join\r\n return parts.join(\":\");\r\n}\r\n\r\n/**\r\n * Recover the capabilityId from a storage key for a given scope, or null when\r\n * the key does not belong to this scope.\r\n */\r\nexport function parseCapabilityFromKey(\r\n key: string,\r\n scope: Scope\r\n): string | null {\r\n if (typeof key !== \"string\") return null;\r\n const prefix = buildScopePrefix(scope);\r\n if (key.indexOf(prefix) !== 0) return null;\r\n const capId = key.slice(prefix.length);\r\n return capId || null;\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,kBAAkB,QAAQ,WAAW;AAG9C,OAAO,MAAMC,UAAU,GAAG,kBAAkB;AAE5C,SAASC,GAAGA,CAACC,KAAyB,EAAU;EAC9C,OAAOC,kBAAkB,CAACC,MAAM,CAACF,KAAK,IAAI,IAAI,GAAG,EAAE,GAAGA,KAAK,CAAC,CAAC;AAC/D;;AAEA;AACA,OAAO,SAASG,QAAQA,CAACC,KAAY,EAAEC,YAAoB,EAAU;EACnE,MAAMC,KAAK,GAAG,CAACR,UAAU,EAAED,kBAAkB,CAAC;EAC9C,IAAIO,KAAK,IAAIA,KAAK,CAACG,QAAQ,EAAED,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,CAACG,QAAQ,CAAC,CAAC;EAC5DD,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,GAAGA,KAAK,CAACK,MAAM,GAAG,EAAE,CAAC,CAAC;EAC1CH,KAAK,CAACE,IAAI,CAACH,YAAY,CAAC;EACxB,OAAOC,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACP,KAAY,EAAU;EACrD,MAAME,KAAK,GAAG,CAACR,UAAU,EAAED,kBAAkB,CAAC;EAC9C,IAAIO,KAAK,IAAIA,KAAK,CAACG,QAAQ,EAAED,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,CAACG,QAAQ,CAAC,CAAC;EAC5DD,KAAK,CAACE,IAAI,CAACT,GAAG,CAACK,KAAK,GAAGA,KAAK,CAACK,MAAM,GAAG,EAAE,CAAC,CAAC;EAC1CH,KAAK,CAACE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAChB,OAAOF,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASE,sBAAsBA,CACpCC,GAAW,EACXT,KAAY,EACG;EACf,IAAI,OAAOS,GAAG,KAAK,QAAQ,EAAE,OAAO,IAAI;EACxC,MAAMC,MAAM,GAAGH,gBAAgB,CAACP,KAAK,CAAC;EACtC,IAAIS,GAAG,CAACE,OAAO,CAACD,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;EAC1C,MAAME,KAAK,GAAGH,GAAG,CAACI,KAAK,CAACH,MAAM,CAACI,MAAM,CAAC;EACtC,OAAOF,KAAK,IAAI,IAAI;AACtB","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
1
  /**
3
2
  * createLocalStorageAdapter — Portnet UI v2 · personalization
4
3
  *
@@ -26,18 +25,18 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
26
25
 
27
26
  import { buildKey, buildScopePrefix } from "./_storageKey";
28
27
  /** Object keys that must never be written from external (storage-derived) data. */
29
- var RESERVED_KEYS = new Set(["__proto__", "constructor", "prototype"]);
28
+ const RESERVED_KEYS = new Set(["__proto__", "constructor", "prototype"]);
30
29
  export default function createLocalStorageAdapter(options) {
31
- var opts = options || {};
32
- var storage = opts.storage || (typeof window !== "undefined" && window.localStorage ? window.localStorage : null);
30
+ const opts = options || {};
31
+ const storage = opts.storage || (typeof window !== "undefined" && window.localStorage ? window.localStorage : null);
33
32
  function isValidEnvelope(env) {
34
- return !!env && _typeof(env) === "object" && Object.prototype.hasOwnProperty.call(env, "payload");
33
+ return !!env && typeof env === "object" && Object.prototype.hasOwnProperty.call(env, "payload");
35
34
  }
36
35
  function safeRemove(key) {
37
36
  if (!storage) return;
38
37
  try {
39
38
  storage.removeItem(key);
40
- } catch (_unused) {
39
+ } catch {
41
40
  /* ignore */
42
41
  }
43
42
  }
@@ -45,27 +44,27 @@ export default function createLocalStorageAdapter(options) {
45
44
  /** Synchronous scan of every capability blob for `scope`. */
46
45
  function loadSync(scope) {
47
46
  if (!storage) return {};
48
- var out = {};
47
+ const out = {};
49
48
  try {
50
- var prefix = buildScopePrefix(scope);
51
- for (var i = 0; i < storage.length; i++) {
52
- var key = storage.key(i);
49
+ const prefix = buildScopePrefix(scope);
50
+ for (let i = 0; i < storage.length; i++) {
51
+ const key = storage.key(i);
53
52
  if (!key || key.indexOf(prefix) !== 0) continue;
54
- var capId = key.slice(prefix.length);
53
+ const capId = key.slice(prefix.length);
55
54
  // Skip empty + reserved keys: a same-origin writer could craft a
56
55
  // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit
57
56
  // the __proto__ setter on the accumulator (SEC-LS1).
58
57
  if (!capId || RESERVED_KEYS.has(capId)) continue;
59
- var raw = storage.getItem(key);
58
+ const raw = storage.getItem(key);
60
59
  if (!raw) continue;
61
60
  try {
62
- var env = JSON.parse(raw);
61
+ const env = JSON.parse(raw);
63
62
  if (isValidEnvelope(env)) out[capId] = env;else safeRemove(key);
64
- } catch (_unused2) {
63
+ } catch {
65
64
  safeRemove(key);
66
65
  }
67
66
  }
68
- } catch (_unused3) {
67
+ } catch {
69
68
  /* enumeration blocked (sandboxed) — return what we have */
70
69
  }
71
70
  return out;
@@ -93,13 +92,13 @@ export default function createLocalStorageAdapter(options) {
93
92
  if (typeof window === "undefined" || typeof window.addEventListener !== "function") {
94
93
  return function noop() {};
95
94
  }
96
- var prefix = buildScopePrefix(scope);
97
- var handler = function handleStorage(e) {
95
+ const prefix = buildScopePrefix(scope);
96
+ const handler = function handleStorage(e) {
98
97
  if (!e || e.key == null) return; // e.key === null on storage.clear()
99
98
  // storageArea may be undefined in some environments; only filter when present.
100
99
  if (e.storageArea && e.storageArea !== storage) return;
101
100
  if (e.key.indexOf(prefix) !== 0) return;
102
- var capId = e.key.slice(prefix.length);
101
+ const capId = e.key.slice(prefix.length);
103
102
  if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);
104
103
  };
105
104
  window.addEventListener("storage", handler);
@@ -109,11 +108,11 @@ export default function createLocalStorageAdapter(options) {
109
108
  }
110
109
  return Object.freeze({
111
110
  name: "localStorage",
112
- load: load,
113
- loadSync: loadSync,
114
- save: save,
115
- remove: remove,
116
- subscribe: subscribe,
111
+ load,
112
+ loadSync,
113
+ save,
114
+ remove,
115
+ subscribe,
117
116
  capabilities: Object.freeze({
118
117
  crossTab: true,
119
118
  remote: false,
@@ -1 +1 @@
1
- {"version":3,"file":"createLocalStorageAdapter.js","names":["buildKey","buildScopePrefix","RESERVED_KEYS","Set","createLocalStorageAdapter","options","opts","storage","window","localStorage","isValidEnvelope","env","_typeof","Object","prototype","hasOwnProperty","call","safeRemove","key","removeItem","_unused","loadSync","scope","out","prefix","i","length","indexOf","capId","slice","has","raw","getItem","JSON","parse","_unused2","_unused3","load","Promise","resolve","save","capabilityId","envelope","setItem","stringify","e","reject","remove","subscribe","onChange","addEventListener","noop","handler","handleStorage","storageArea","unsubscribe","removeEventListener","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"sourcesContent":["/**\r\n * createLocalStorageAdapter — Portnet UI v2 · personalization\r\n *\r\n * Default Adapter. Persists each capability as an opaque envelope under a\r\n * scoped key (see adapters/_storageKey.ts). The adapter never interprets\r\n * `envelope.payload`.\r\n *\r\n * Safety:\r\n * - SSR-safe: with no `window`, the adapter is inert (load → {}, save →\r\n * resolved no-op) so it can be constructed anywhere.\r\n * - Every storage access is try/catch-wrapped. `save` REJECTS on quota/\r\n * private-mode failure so the store can keep the optimistic value for the\r\n * session and surface the error via onError.\r\n * - Reads self-heal: malformed entries are removed on sight.\r\n * - Reserved-key hardening: capability ids of `__proto__` / `constructor` /\r\n * `prototype` are skipped while scanning so a crafted same-origin key can't\r\n * reach the `__proto__` setter on the accumulator (SEC-LS1).\r\n * - NOTE: localStorage is readable by any same-origin script. Do NOT persist\r\n * secrets or PII in a capability payload (SEC-LS2).\r\n *\r\n * Cross-tab: `subscribe` listens to the `storage` event, which the spec fires\r\n * in OTHER tabs only — the writing tab is reconciled via the store's in-memory\r\n * path.\r\n */\r\n\r\nimport { buildKey, buildScopePrefix } from \"./_storageKey\";\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface LocalStorageAdapterOptions {\r\n /** Inject a Storage impl (tests / custom). */\r\n storage?: Storage | undefined;\r\n}\r\n\r\n/** Object keys that must never be written from external (storage-derived) data. */\r\nconst RESERVED_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\r\n\r\nexport default function createLocalStorageAdapter(\r\n options?: LocalStorageAdapterOptions\r\n): Adapter {\r\n const opts: LocalStorageAdapterOptions = options || {};\r\n const storage: Storage | null =\r\n opts.storage ||\r\n (typeof window !== \"undefined\" && window.localStorage\r\n ? window.localStorage\r\n : null);\r\n\r\n function isValidEnvelope(env: unknown): env is Envelope {\r\n return (\r\n !!env &&\r\n typeof env === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(env, \"payload\")\r\n );\r\n }\r\n\r\n function safeRemove(key: string): void {\r\n if (!storage) return;\r\n try {\r\n storage.removeItem(key);\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n\r\n /** Synchronous scan of every capability blob for `scope`. */\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n if (!storage) return {};\r\n const out: Record<string, Envelope> = {};\r\n try {\r\n const prefix = buildScopePrefix(scope);\r\n for (let i = 0; i < storage.length; i++) {\r\n const key = storage.key(i);\r\n if (!key || key.indexOf(prefix) !== 0) continue;\r\n const capId = key.slice(prefix.length);\r\n // Skip empty + reserved keys: a same-origin writer could craft a\r\n // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit\r\n // the __proto__ setter on the accumulator (SEC-LS1).\r\n if (!capId || RESERVED_KEYS.has(capId)) continue;\r\n const raw = storage.getItem(key);\r\n if (!raw) continue;\r\n try {\r\n const env: unknown = JSON.parse(raw);\r\n if (isValidEnvelope(env)) out[capId] = env;\r\n else safeRemove(key);\r\n } catch {\r\n safeRemove(key);\r\n }\r\n }\r\n } catch {\r\n /* enumeration blocked (sandboxed) — return what we have */\r\n }\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n try {\r\n storage.setItem(buildKey(scope, capabilityId), JSON.stringify(envelope));\r\n return Promise.resolve();\r\n } catch (e) {\r\n // Quota exceeded / private mode / sandboxed: reject so the store keeps\r\n // the optimistic in-memory value and notifies onError.\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n safeRemove(buildKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n function subscribe(\r\n scope: Scope,\r\n onChange: (capabilityId: string) => void\r\n ): () => void {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof window.addEventListener !== \"function\"\r\n ) {\r\n return function noop() {};\r\n }\r\n const prefix = buildScopePrefix(scope);\r\n const handler = function handleStorage(e: StorageEvent) {\r\n if (!e || e.key == null) return; // e.key === null on storage.clear()\r\n // storageArea may be undefined in some environments; only filter when present.\r\n if (e.storageArea && e.storageArea !== storage) return;\r\n if (e.key.indexOf(prefix) !== 0) return;\r\n const capId = e.key.slice(prefix.length);\r\n if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);\r\n };\r\n window.addEventListener(\"storage\", handler);\r\n return function unsubscribe() {\r\n window.removeEventListener(\"storage\", handler);\r\n };\r\n }\r\n\r\n return Object.freeze({\r\n name: \"localStorage\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n subscribe,\r\n capabilities: Object.freeze({\r\n crossTab: true,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createLocalStorageAdapter.js","names":["buildKey","buildScopePrefix","RESERVED_KEYS","Set","createLocalStorageAdapter","options","opts","storage","window","localStorage","isValidEnvelope","env","Object","prototype","hasOwnProperty","call","safeRemove","key","removeItem","loadSync","scope","out","prefix","i","length","indexOf","capId","slice","has","raw","getItem","JSON","parse","load","Promise","resolve","save","capabilityId","envelope","setItem","stringify","e","reject","remove","subscribe","onChange","addEventListener","noop","handler","handleStorage","storageArea","unsubscribe","removeEventListener","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"sourcesContent":["/**\r\n * createLocalStorageAdapter — Portnet UI v2 · personalization\r\n *\r\n * Default Adapter. Persists each capability as an opaque envelope under a\r\n * scoped key (see adapters/_storageKey.ts). The adapter never interprets\r\n * `envelope.payload`.\r\n *\r\n * Safety:\r\n * - SSR-safe: with no `window`, the adapter is inert (load → {}, save →\r\n * resolved no-op) so it can be constructed anywhere.\r\n * - Every storage access is try/catch-wrapped. `save` REJECTS on quota/\r\n * private-mode failure so the store can keep the optimistic value for the\r\n * session and surface the error via onError.\r\n * - Reads self-heal: malformed entries are removed on sight.\r\n * - Reserved-key hardening: capability ids of `__proto__` / `constructor` /\r\n * `prototype` are skipped while scanning so a crafted same-origin key can't\r\n * reach the `__proto__` setter on the accumulator (SEC-LS1).\r\n * - NOTE: localStorage is readable by any same-origin script. Do NOT persist\r\n * secrets or PII in a capability payload (SEC-LS2).\r\n *\r\n * Cross-tab: `subscribe` listens to the `storage` event, which the spec fires\r\n * in OTHER tabs only — the writing tab is reconciled via the store's in-memory\r\n * path.\r\n */\r\n\r\nimport { buildKey, buildScopePrefix } from \"./_storageKey\";\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface LocalStorageAdapterOptions {\r\n /** Inject a Storage impl (tests / custom). */\r\n storage?: Storage | undefined;\r\n}\r\n\r\n/** Object keys that must never be written from external (storage-derived) data. */\r\nconst RESERVED_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\r\n\r\nexport default function createLocalStorageAdapter(\r\n options?: LocalStorageAdapterOptions\r\n): Adapter {\r\n const opts: LocalStorageAdapterOptions = options || {};\r\n const storage: Storage | null =\r\n opts.storage ||\r\n (typeof window !== \"undefined\" && window.localStorage\r\n ? window.localStorage\r\n : null);\r\n\r\n function isValidEnvelope(env: unknown): env is Envelope {\r\n return (\r\n !!env &&\r\n typeof env === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(env, \"payload\")\r\n );\r\n }\r\n\r\n function safeRemove(key: string): void {\r\n if (!storage) return;\r\n try {\r\n storage.removeItem(key);\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n\r\n /** Synchronous scan of every capability blob for `scope`. */\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n if (!storage) return {};\r\n const out: Record<string, Envelope> = {};\r\n try {\r\n const prefix = buildScopePrefix(scope);\r\n for (let i = 0; i < storage.length; i++) {\r\n const key = storage.key(i);\r\n if (!key || key.indexOf(prefix) !== 0) continue;\r\n const capId = key.slice(prefix.length);\r\n // Skip empty + reserved keys: a same-origin writer could craft a\r\n // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit\r\n // the __proto__ setter on the accumulator (SEC-LS1).\r\n if (!capId || RESERVED_KEYS.has(capId)) continue;\r\n const raw = storage.getItem(key);\r\n if (!raw) continue;\r\n try {\r\n const env: unknown = JSON.parse(raw);\r\n if (isValidEnvelope(env)) out[capId] = env;\r\n else safeRemove(key);\r\n } catch {\r\n safeRemove(key);\r\n }\r\n }\r\n } catch {\r\n /* enumeration blocked (sandboxed) — return what we have */\r\n }\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n try {\r\n storage.setItem(buildKey(scope, capabilityId), JSON.stringify(envelope));\r\n return Promise.resolve();\r\n } catch (e) {\r\n // Quota exceeded / private mode / sandboxed: reject so the store keeps\r\n // the optimistic in-memory value and notifies onError.\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n safeRemove(buildKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n function subscribe(\r\n scope: Scope,\r\n onChange: (capabilityId: string) => void\r\n ): () => void {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof window.addEventListener !== \"function\"\r\n ) {\r\n return function noop() {};\r\n }\r\n const prefix = buildScopePrefix(scope);\r\n const handler = function handleStorage(e: StorageEvent) {\r\n if (!e || e.key == null) return; // e.key === null on storage.clear()\r\n // storageArea may be undefined in some environments; only filter when present.\r\n if (e.storageArea && e.storageArea !== storage) return;\r\n if (e.key.indexOf(prefix) !== 0) return;\r\n const capId = e.key.slice(prefix.length);\r\n if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);\r\n };\r\n window.addEventListener(\"storage\", handler);\r\n return function unsubscribe() {\r\n window.removeEventListener(\"storage\", handler);\r\n };\r\n }\r\n\r\n return Object.freeze({\r\n name: \"localStorage\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n subscribe,\r\n capabilities: Object.freeze({\r\n crossTab: true,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -13,17 +13,17 @@
13
13
  */
14
14
 
15
15
  export default function createMemoryAdapter(options) {
16
- var opts = options || {};
16
+ const opts = options || {};
17
17
  /** composite key -> envelope */
18
- var map = new Map();
18
+ const map = new Map();
19
19
  function compositeKey(scope, capabilityId) {
20
- var tenant = scope && scope.tenantId ? scope.tenantId : "";
21
- var user = scope && scope.userId ? scope.userId : "";
20
+ const tenant = scope && scope.tenantId ? scope.tenantId : "";
21
+ const user = scope && scope.userId ? scope.userId : "";
22
22
  return tenant + "::" + user + "::" + capabilityId;
23
23
  }
24
24
  function scopePrefix(scope) {
25
- var tenant = scope && scope.tenantId ? scope.tenantId : "";
26
- var user = scope && scope.userId ? scope.userId : "";
25
+ const tenant = scope && scope.tenantId ? scope.tenantId : "";
26
+ const user = scope && scope.userId ? scope.userId : "";
27
27
  return tenant + "::" + user + "::";
28
28
  }
29
29
  if (Array.isArray(opts.seed)) {
@@ -34,8 +34,8 @@ export default function createMemoryAdapter(options) {
34
34
  });
35
35
  }
36
36
  function loadSync(scope) {
37
- var out = {};
38
- var prefix = scopePrefix(scope);
37
+ const out = {};
38
+ const prefix = scopePrefix(scope);
39
39
  map.forEach(function collect(envelope, key) {
40
40
  if (key.indexOf(prefix) === 0) {
41
41
  out[key.slice(prefix.length)] = envelope;
@@ -51,15 +51,15 @@ export default function createMemoryAdapter(options) {
51
51
  return Promise.resolve();
52
52
  }
53
53
  function remove(scope, capabilityId) {
54
- map["delete"](compositeKey(scope, capabilityId));
54
+ map.delete(compositeKey(scope, capabilityId));
55
55
  return Promise.resolve();
56
56
  }
57
57
  return Object.freeze({
58
58
  name: "memory",
59
- load: load,
60
- loadSync: loadSync,
61
- save: save,
62
- remove: remove,
59
+ load,
60
+ loadSync,
61
+ save,
62
+ remove,
63
63
  capabilities: Object.freeze({
64
64
  crossTab: false,
65
65
  remote: false,
@@ -1 +1 @@
1
- {"version":3,"file":"createMemoryAdapter.js","names":["createMemoryAdapter","options","opts","map","Map","compositeKey","scope","capabilityId","tenant","tenantId","user","userId","scopePrefix","Array","isArray","seed","forEach","seedEntry","entry","envelope","set","loadSync","out","prefix","collect","key","indexOf","slice","length","load","Promise","resolve","save","remove","Object","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"sourcesContent":["/**\r\n * createMemoryAdapter — Portnet UI v2 · personalization\r\n *\r\n * An Adapter that keeps everything in a Map. Use it for:\r\n * - unit tests (deterministic, no global storage state),\r\n * - SSR / sandboxed environments where localStorage is unavailable,\r\n * - Storybook stories (optionally pre-seeded),\r\n * - an explicit \"do not persist\" opt-out.\r\n *\r\n * Same contract as the localStorage adapter minus `subscribe` (a single\r\n * in-memory context has no cross-tab notion). `remote:false` lets the store\r\n * skip the redundant async re-hydrate after a synchronous seed.\r\n */\r\n\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface MemoryAdapterSeedEntry {\r\n scope: Scope;\r\n capabilityId: string;\r\n envelope: Envelope;\r\n}\r\n\r\nexport interface MemoryAdapterOptions {\r\n /** Optional pre-populated entries for tests/stories. */\r\n seed?: MemoryAdapterSeedEntry[] | undefined;\r\n}\r\n\r\nexport default function createMemoryAdapter(\r\n options?: MemoryAdapterOptions\r\n): Adapter {\r\n const opts: MemoryAdapterOptions = options || {};\r\n /** composite key -> envelope */\r\n const map = new Map<string, Envelope>();\r\n\r\n function compositeKey(scope: Scope, capabilityId: string): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\" + capabilityId;\r\n }\r\n\r\n function scopePrefix(scope: Scope): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\";\r\n }\r\n\r\n if (Array.isArray(opts.seed)) {\r\n opts.seed.forEach(function seedEntry(entry) {\r\n if (entry && entry.scope && entry.capabilityId && entry.envelope) {\r\n map.set(compositeKey(entry.scope, entry.capabilityId), entry.envelope);\r\n }\r\n });\r\n }\r\n\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n const out: Record<string, Envelope> = {};\r\n const prefix = scopePrefix(scope);\r\n map.forEach(function collect(envelope, key) {\r\n if (key.indexOf(prefix) === 0) {\r\n out[key.slice(prefix.length)] = envelope;\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n map.set(compositeKey(scope, capabilityId), envelope);\r\n return Promise.resolve();\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n map.delete(compositeKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n return Object.freeze({\r\n name: \"memory\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n capabilities: Object.freeze({\r\n crossTab: false,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createMemoryAdapter.js","names":["createMemoryAdapter","options","opts","map","Map","compositeKey","scope","capabilityId","tenant","tenantId","user","userId","scopePrefix","Array","isArray","seed","forEach","seedEntry","entry","envelope","set","loadSync","out","prefix","collect","key","indexOf","slice","length","load","Promise","resolve","save","remove","delete","Object","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"sourcesContent":["/**\r\n * createMemoryAdapter — Portnet UI v2 · personalization\r\n *\r\n * An Adapter that keeps everything in a Map. Use it for:\r\n * - unit tests (deterministic, no global storage state),\r\n * - SSR / sandboxed environments where localStorage is unavailable,\r\n * - Storybook stories (optionally pre-seeded),\r\n * - an explicit \"do not persist\" opt-out.\r\n *\r\n * Same contract as the localStorage adapter minus `subscribe` (a single\r\n * in-memory context has no cross-tab notion). `remote:false` lets the store\r\n * skip the redundant async re-hydrate after a synchronous seed.\r\n */\r\n\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface MemoryAdapterSeedEntry {\r\n scope: Scope;\r\n capabilityId: string;\r\n envelope: Envelope;\r\n}\r\n\r\nexport interface MemoryAdapterOptions {\r\n /** Optional pre-populated entries for tests/stories. */\r\n seed?: MemoryAdapterSeedEntry[] | undefined;\r\n}\r\n\r\nexport default function createMemoryAdapter(\r\n options?: MemoryAdapterOptions\r\n): Adapter {\r\n const opts: MemoryAdapterOptions = options || {};\r\n /** composite key -> envelope */\r\n const map = new Map<string, Envelope>();\r\n\r\n function compositeKey(scope: Scope, capabilityId: string): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\" + capabilityId;\r\n }\r\n\r\n function scopePrefix(scope: Scope): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\";\r\n }\r\n\r\n if (Array.isArray(opts.seed)) {\r\n opts.seed.forEach(function seedEntry(entry) {\r\n if (entry && entry.scope && entry.capabilityId && entry.envelope) {\r\n map.set(compositeKey(entry.scope, entry.capabilityId), entry.envelope);\r\n }\r\n });\r\n }\r\n\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n const out: Record<string, Envelope> = {};\r\n const prefix = scopePrefix(scope);\r\n map.forEach(function collect(envelope, key) {\r\n if (key.indexOf(prefix) === 0) {\r\n out[key.slice(prefix.length)] = envelope;\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n map.set(compositeKey(scope, capabilityId), envelope);\r\n return Promise.resolve();\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n map.delete(compositeKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n return Object.freeze({\r\n name: \"memory\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n capabilities: Object.freeze({\r\n crossTab: false,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -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":[]}