@portnet/ui 6.0.0 → 6.0.1

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 (748) hide show
  1. package/dist/esm/index.js +196 -0
  2. package/dist/esm/index.js.map +1 -0
  3. package/dist/esm/v2/__tests__/FieldError.test.js +160 -0
  4. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -0
  5. package/dist/esm/v2/__tests__/FileCard.test.js +144 -0
  6. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -0
  7. package/dist/esm/v2/__tests__/MobileRowCard.test.js +333 -0
  8. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -0
  9. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +235 -0
  10. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  11. package/dist/esm/v2/__tests__/apiError.test.js +181 -0
  12. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -0
  13. package/dist/esm/v2/__tests__/banned-patterns.test.js +270 -0
  14. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -0
  15. package/dist/esm/v2/__tests__/contrast-palette.test.js +224 -0
  16. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -0
  17. package/dist/esm/v2/__tests__/cssVariables.test.js +157 -0
  18. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -0
  19. package/dist/esm/v2/__tests__/labels-merge.test.js +147 -0
  20. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -0
  21. package/dist/esm/v2/__tests__/locale-fallback.test.js +109 -0
  22. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -0
  23. package/dist/esm/v2/__tests__/useFocusTrap.test.js +514 -0
  24. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -0
  25. package/dist/esm/v2/components/Accordion.js +230 -0
  26. package/dist/esm/v2/components/Accordion.js.map +1 -0
  27. package/dist/esm/v2/components/ActionStrip.js +146 -0
  28. package/dist/esm/v2/components/ActionStrip.js.map +1 -0
  29. package/dist/esm/v2/components/Banner.js +254 -0
  30. package/dist/esm/v2/components/Banner.js.map +1 -0
  31. package/dist/esm/v2/components/Busy.js +97 -0
  32. package/dist/esm/v2/components/Busy.js.map +1 -0
  33. package/dist/esm/v2/components/Button.js +114 -0
  34. package/dist/esm/v2/components/Button.js.map +1 -0
  35. package/dist/esm/v2/components/CategoryTag.js +81 -0
  36. package/dist/esm/v2/components/CategoryTag.js.map +1 -0
  37. package/dist/esm/v2/components/Checkbox.js +124 -0
  38. package/dist/esm/v2/components/Checkbox.js.map +1 -0
  39. package/dist/esm/v2/components/Chip.js +124 -0
  40. package/dist/esm/v2/components/Chip.js.map +1 -0
  41. package/dist/esm/v2/components/Combobox.js +394 -0
  42. package/dist/esm/v2/components/Combobox.js.map +1 -0
  43. package/dist/esm/v2/components/CommandPalette.js +660 -0
  44. package/dist/esm/v2/components/CommandPalette.js.map +1 -0
  45. package/dist/esm/v2/components/ConfirmDialog.js +144 -0
  46. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -0
  47. package/dist/esm/v2/components/DatePicker.js +200 -0
  48. package/dist/esm/v2/components/DatePicker.js.map +1 -0
  49. package/dist/esm/v2/components/DateRangePicker.js +289 -0
  50. package/dist/esm/v2/components/DateRangePicker.js.map +1 -0
  51. package/dist/esm/v2/components/DateTimePicker.js +182 -0
  52. package/dist/esm/v2/components/DateTimePicker.js.map +1 -0
  53. package/dist/esm/v2/components/Drawer.js +333 -0
  54. package/dist/esm/v2/components/Drawer.js.map +1 -0
  55. package/dist/esm/v2/components/Dropzone.js +540 -0
  56. package/dist/esm/v2/components/Dropzone.js.map +1 -0
  57. package/dist/esm/v2/components/EmptyState.js +102 -0
  58. package/dist/esm/v2/components/EmptyState.js.map +1 -0
  59. package/dist/esm/v2/components/FavoriteToggle.js +127 -0
  60. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -0
  61. package/dist/esm/v2/components/Field.js +197 -0
  62. package/dist/esm/v2/components/Field.js.map +1 -0
  63. package/dist/esm/v2/components/FieldError.js +124 -0
  64. package/dist/esm/v2/components/FieldError.js.map +1 -0
  65. package/dist/esm/v2/components/FieldHelp.js +202 -0
  66. package/dist/esm/v2/components/FieldHelp.js.map +1 -0
  67. package/dist/esm/v2/components/FileCard.js +162 -0
  68. package/dist/esm/v2/components/FileCard.js.map +1 -0
  69. package/dist/esm/v2/components/FilterTab.js +138 -0
  70. package/dist/esm/v2/components/FilterTab.js.map +1 -0
  71. package/dist/esm/v2/components/ForbiddenPage.js +74 -0
  72. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -0
  73. package/dist/esm/v2/components/FormGrid.js +179 -0
  74. package/dist/esm/v2/components/FormGrid.js.map +1 -0
  75. package/dist/esm/v2/components/FormikDisplay.js +118 -0
  76. package/dist/esm/v2/components/FormikDisplay.js.map +1 -0
  77. package/dist/esm/v2/components/Input.js +107 -0
  78. package/dist/esm/v2/components/Input.js.map +1 -0
  79. package/dist/esm/v2/components/KPICard.js +237 -0
  80. package/dist/esm/v2/components/KPICard.js.map +1 -0
  81. package/dist/esm/v2/components/KPIStrip.js +84 -0
  82. package/dist/esm/v2/components/KPIStrip.js.map +1 -0
  83. package/dist/esm/v2/components/KV.js +75 -0
  84. package/dist/esm/v2/components/KV.js.map +1 -0
  85. package/dist/esm/v2/components/KVGrid.js +74 -0
  86. package/dist/esm/v2/components/KVGrid.js.map +1 -0
  87. package/dist/esm/v2/components/Layout.js +284 -0
  88. package/dist/esm/v2/components/Layout.js.map +1 -0
  89. package/dist/esm/v2/components/MobileRowCard.js +314 -0
  90. package/dist/esm/v2/components/MobileRowCard.js.map +1 -0
  91. package/dist/esm/v2/components/Modal.js +276 -0
  92. package/dist/esm/v2/components/Modal.js.map +1 -0
  93. package/dist/esm/v2/components/NetworkErrorPage.js +78 -0
  94. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -0
  95. package/dist/esm/v2/components/NotFoundPage.js +58 -0
  96. package/dist/esm/v2/components/NotFoundPage.js.map +1 -0
  97. package/dist/esm/v2/components/NumberInput.js +309 -0
  98. package/dist/esm/v2/components/NumberInput.js.map +1 -0
  99. package/dist/esm/v2/components/OverflowMenu.js +184 -0
  100. package/dist/esm/v2/components/OverflowMenu.js.map +1 -0
  101. package/dist/esm/v2/components/PdfViewer.js +122 -0
  102. package/dist/esm/v2/components/PdfViewer.js.map +1 -0
  103. package/dist/esm/v2/components/ProgressBar.js +202 -0
  104. package/dist/esm/v2/components/ProgressBar.js.map +1 -0
  105. package/dist/esm/v2/components/Radio.js +228 -0
  106. package/dist/esm/v2/components/Radio.js.map +1 -0
  107. package/dist/esm/v2/components/SectionErrorBoundary.js +214 -0
  108. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -0
  109. package/dist/esm/v2/components/SectionHeader.js +132 -0
  110. package/dist/esm/v2/components/SectionHeader.js.map +1 -0
  111. package/dist/esm/v2/components/Segmented.js +254 -0
  112. package/dist/esm/v2/components/Segmented.js.map +1 -0
  113. package/dist/esm/v2/components/Select.js +490 -0
  114. package/dist/esm/v2/components/Select.js.map +1 -0
  115. package/dist/esm/v2/components/ServerErrorPage.js +74 -0
  116. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -0
  117. package/dist/esm/v2/components/Skeleton.js +269 -0
  118. package/dist/esm/v2/components/Skeleton.js.map +1 -0
  119. package/dist/esm/v2/components/SkipLink.js +49 -0
  120. package/dist/esm/v2/components/SkipLink.js.map +1 -0
  121. package/dist/esm/v2/components/Spinner.js +69 -0
  122. package/dist/esm/v2/components/Spinner.js.map +1 -0
  123. package/dist/esm/v2/components/Status.js +64 -0
  124. package/dist/esm/v2/components/Status.js.map +1 -0
  125. package/dist/esm/v2/components/Stepper.js +432 -0
  126. package/dist/esm/v2/components/Stepper.js.map +1 -0
  127. package/dist/esm/v2/components/Surface.js +159 -0
  128. package/dist/esm/v2/components/Surface.js.map +1 -0
  129. package/dist/esm/v2/components/Switch.js +128 -0
  130. package/dist/esm/v2/components/Switch.js.map +1 -0
  131. package/dist/esm/v2/components/Tabs.js +150 -0
  132. package/dist/esm/v2/components/Tabs.js.map +1 -0
  133. package/dist/esm/v2/components/TelInput.js +274 -0
  134. package/dist/esm/v2/components/TelInput.js.map +1 -0
  135. package/dist/esm/v2/components/Textarea.js +72 -0
  136. package/dist/esm/v2/components/Textarea.js.map +1 -0
  137. package/dist/esm/v2/components/TimePicker.js +134 -0
  138. package/dist/esm/v2/components/TimePicker.js.map +1 -0
  139. package/dist/esm/v2/components/Toast.js +376 -0
  140. package/dist/esm/v2/components/Toast.js.map +1 -0
  141. package/dist/esm/v2/components/Tooltip.js +161 -0
  142. package/dist/esm/v2/components/Tooltip.js.map +1 -0
  143. package/dist/esm/v2/components/_ErrorPageBody.js +85 -0
  144. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -0
  145. package/dist/esm/v2/components/_pickerShared.js +60 -0
  146. package/dist/esm/v2/components/_pickerShared.js.map +1 -0
  147. package/dist/esm/v2/components/index.js +244 -0
  148. package/dist/esm/v2/components/index.js.map +1 -0
  149. package/dist/esm/v2/hooks/index.js +10 -0
  150. package/dist/esm/v2/hooks/index.js.map +1 -0
  151. package/dist/esm/v2/hooks/useDelayedFlag.js +55 -0
  152. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -0
  153. package/dist/esm/v2/hooks/useDensity.js +119 -0
  154. package/dist/esm/v2/hooks/useDensity.js.map +1 -0
  155. package/dist/esm/v2/hooks/useFocusFirstError.js +197 -0
  156. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -0
  157. package/dist/esm/v2/hooks/useFocusTrap.js +202 -0
  158. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -0
  159. package/dist/esm/v2/hooks/useFormAutoSave.js +181 -0
  160. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -0
  161. package/dist/esm/v2/hooks/useFormCompletionProgress.js +131 -0
  162. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -0
  163. package/dist/esm/v2/hooks/useResolvedDensity.js +44 -0
  164. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -0
  165. package/dist/esm/v2/hooks/useSortedRows.js +32 -0
  166. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -0
  167. package/dist/esm/v2/hooks/useTabLoading.js +79 -0
  168. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -0
  169. package/dist/esm/v2/index.js +121 -0
  170. package/dist/esm/v2/index.js.map +1 -0
  171. package/dist/esm/v2/modalContext.js +108 -0
  172. package/dist/esm/v2/modalContext.js.map +1 -0
  173. package/dist/esm/v2/models/favorite.js +2 -0
  174. package/dist/esm/v2/models/favorite.js.map +1 -0
  175. package/dist/esm/v2/models/index.js +12 -0
  176. package/dist/esm/v2/models/index.js.map +1 -0
  177. package/dist/esm/v2/models/personalization.js +2 -0
  178. package/dist/esm/v2/models/personalization.js.map +1 -0
  179. package/dist/esm/v2/models/referentiel.js +2 -0
  180. package/dist/esm/v2/models/referentiel.js.map +1 -0
  181. package/dist/esm/v2/models/savedFilter.js +2 -0
  182. package/dist/esm/v2/models/savedFilter.js.map +1 -0
  183. package/dist/esm/v2/patterns/ActionBar.js +603 -0
  184. package/dist/esm/v2/patterns/ActionBar.js.map +1 -0
  185. package/dist/esm/v2/patterns/BulkActionBar.js +147 -0
  186. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -0
  187. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +303 -0
  188. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -0
  189. package/dist/esm/v2/patterns/ColumnsToggle.js +301 -0
  190. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -0
  191. package/dist/esm/v2/patterns/DataGrid.js +820 -0
  192. package/dist/esm/v2/patterns/DataGrid.js.map +1 -0
  193. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +375 -0
  194. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -0
  195. package/dist/esm/v2/patterns/DataGridToolbar.js +249 -0
  196. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -0
  197. package/dist/esm/v2/patterns/DataGridVirtualized.js +523 -0
  198. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -0
  199. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +70 -0
  200. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
  201. package/dist/esm/v2/patterns/FavoriteColumn.js +164 -0
  202. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -0
  203. package/dist/esm/v2/patterns/FavoritesFilter.js +91 -0
  204. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -0
  205. package/dist/esm/v2/patterns/FormErrorSummary.js +101 -0
  206. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -0
  207. package/dist/esm/v2/patterns/FormPageShell.js +126 -0
  208. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -0
  209. package/dist/esm/v2/patterns/FormSection.js +190 -0
  210. package/dist/esm/v2/patterns/FormSection.js.map +1 -0
  211. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +110 -0
  212. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -0
  213. package/dist/esm/v2/patterns/FormikCombobox.js +115 -0
  214. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -0
  215. package/dist/esm/v2/patterns/FormikDatePicker.js +196 -0
  216. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -0
  217. package/dist/esm/v2/patterns/FormikErrorFocus.js +77 -0
  218. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -0
  219. package/dist/esm/v2/patterns/FormikFile.js +148 -0
  220. package/dist/esm/v2/patterns/FormikFile.js.map +1 -0
  221. package/dist/esm/v2/patterns/FormikInput.js +127 -0
  222. package/dist/esm/v2/patterns/FormikInput.js.map +1 -0
  223. package/dist/esm/v2/patterns/FormikReferentielField.js +116 -0
  224. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -0
  225. package/dist/esm/v2/patterns/FormikSelect.js +159 -0
  226. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -0
  227. package/dist/esm/v2/patterns/FormikTextarea.js +76 -0
  228. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -0
  229. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +195 -0
  230. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
  231. package/dist/esm/v2/patterns/NetworkErrorBanner.js +72 -0
  232. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -0
  233. package/dist/esm/v2/patterns/PageContent.js +62 -0
  234. package/dist/esm/v2/patterns/PageContent.js.map +1 -0
  235. package/dist/esm/v2/patterns/ReferentielField.js +615 -0
  236. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -0
  237. package/dist/esm/v2/patterns/SaveFilterDialog.js +197 -0
  238. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -0
  239. package/dist/esm/v2/patterns/SavedFiltersMenu.js +406 -0
  240. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -0
  241. package/dist/esm/v2/patterns/SkeletonPageShell.js +342 -0
  242. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -0
  243. package/dist/esm/v2/patterns/SortableHeader.js +179 -0
  244. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -0
  245. package/dist/esm/v2/patterns/Tour.js +471 -0
  246. package/dist/esm/v2/patterns/Tour.js.map +1 -0
  247. package/dist/esm/v2/patterns/_dataGridShared.js +431 -0
  248. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -0
  249. package/dist/esm/v2/patterns/_sort.js +112 -0
  250. package/dist/esm/v2/patterns/_sort.js.map +1 -0
  251. package/dist/esm/v2/patterns/_useColumnReorder.js +257 -0
  252. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -0
  253. package/dist/esm/v2/patterns/_useColumnResize.js +191 -0
  254. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -0
  255. package/dist/esm/v2/patterns/index.js +95 -0
  256. package/dist/esm/v2/patterns/index.js.map +1 -0
  257. package/dist/esm/v2/personalization/PersonalizationProvider.js +168 -0
  258. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -0
  259. package/dist/esm/v2/personalization/adapters/_storageKey.js +60 -0
  260. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -0
  261. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +124 -0
  262. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
  263. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +70 -0
  264. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
  265. package/dist/esm/v2/personalization/adapters/index.js +11 -0
  266. package/dist/esm/v2/personalization/adapters/index.js.map +1 -0
  267. package/dist/esm/v2/personalization/capabilities/favorites.js +216 -0
  268. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -0
  269. package/dist/esm/v2/personalization/capabilities/favoritesView.js +111 -0
  270. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -0
  271. package/dist/esm/v2/personalization/capabilities/index.js +17 -0
  272. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -0
  273. package/dist/esm/v2/personalization/capabilities/savedFilters.js +291 -0
  274. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -0
  275. package/dist/esm/v2/personalization/createPersonalizationStore.js +472 -0
  276. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -0
  277. package/dist/esm/v2/personalization/index.js +46 -0
  278. package/dist/esm/v2/personalization/index.js.map +1 -0
  279. package/dist/esm/v2/personalization/personalizationContext.js +108 -0
  280. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -0
  281. package/dist/esm/v2/personalization/schema.js +92 -0
  282. package/dist/esm/v2/personalization/schema.js.map +1 -0
  283. package/dist/esm/v2/personalization/types.js +2 -0
  284. package/dist/esm/v2/personalization/types.js.map +1 -0
  285. package/dist/esm/v2/referentiel/ReferentielProvider.js +87 -0
  286. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -0
  287. package/dist/esm/v2/referentiel/index.js +15 -0
  288. package/dist/esm/v2/referentiel/index.js.map +1 -0
  289. package/dist/esm/v2/referentiel/useReferentielClient.js +37 -0
  290. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -0
  291. package/dist/esm/v2/referentiel/useReferentielOptions.js +169 -0
  292. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -0
  293. package/dist/esm/v2/referentiel/useReferentielSearch.js +132 -0
  294. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -0
  295. package/dist/esm/v2/styles/base.css +425 -0
  296. package/dist/esm/v2/styles/css.d.ts +10 -0
  297. package/dist/esm/v2/styles/index.js +12 -0
  298. package/dist/esm/v2/styles/index.js.map +1 -0
  299. package/dist/esm/v2/theme/_brand.js +64 -0
  300. package/dist/esm/v2/theme/_brand.js.map +1 -0
  301. package/dist/esm/v2/theme/_brandSecondary.js +60 -0
  302. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -0
  303. package/dist/esm/v2/theme/createPortnetTheme.js +548 -0
  304. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -0
  305. package/dist/esm/v2/theme/cssVariables.js +198 -0
  306. package/dist/esm/v2/theme/cssVariables.js.map +1 -0
  307. package/dist/esm/v2/theme/index.js +32 -0
  308. package/dist/esm/v2/theme/index.js.map +1 -0
  309. package/dist/esm/v2/tokens/breakpoints.js +106 -0
  310. package/dist/esm/v2/tokens/breakpoints.js.map +1 -0
  311. package/dist/esm/v2/tokens/colors.js +219 -0
  312. package/dist/esm/v2/tokens/colors.js.map +1 -0
  313. package/dist/esm/v2/tokens/density.js +98 -0
  314. package/dist/esm/v2/tokens/density.js.map +1 -0
  315. package/dist/esm/v2/tokens/index.js +80 -0
  316. package/dist/esm/v2/tokens/index.js.map +1 -0
  317. package/dist/esm/v2/tokens/motion.js +88 -0
  318. package/dist/esm/v2/tokens/motion.js.map +1 -0
  319. package/dist/esm/v2/tokens/radius.js +22 -0
  320. package/dist/esm/v2/tokens/radius.js.map +1 -0
  321. package/dist/esm/v2/tokens/shadows.js +40 -0
  322. package/dist/esm/v2/tokens/shadows.js.map +1 -0
  323. package/dist/esm/v2/tokens/spacing.js +51 -0
  324. package/dist/esm/v2/tokens/spacing.js.map +1 -0
  325. package/dist/esm/v2/tokens/state.js +41 -0
  326. package/dist/esm/v2/tokens/state.js.map +1 -0
  327. package/dist/esm/v2/tokens/statusPalette.js +66 -0
  328. package/dist/esm/v2/tokens/statusPalette.js.map +1 -0
  329. package/dist/esm/v2/tokens/tokens.json +153 -0
  330. package/dist/esm/v2/tokens/typography.js +149 -0
  331. package/dist/esm/v2/tokens/typography.js.map +1 -0
  332. package/dist/esm/v2/tokens/zIndex.js +44 -0
  333. package/dist/esm/v2/tokens/zIndex.js.map +1 -0
  334. package/dist/esm/v2/types/common.js +2 -0
  335. package/dist/esm/v2/types/common.js.map +1 -0
  336. package/dist/esm/v2/types/datagrid.js +2 -0
  337. package/dist/esm/v2/types/datagrid.js.map +1 -0
  338. package/dist/esm/v2/types/index.js +12 -0
  339. package/dist/esm/v2/types/index.js.map +1 -0
  340. package/dist/esm/v2/utils/apiError.js +281 -0
  341. package/dist/esm/v2/utils/apiError.js.map +1 -0
  342. package/dist/esm/v2/utils/contrast.js +157 -0
  343. package/dist/esm/v2/utils/contrast.js.map +1 -0
  344. package/dist/esm/v2/utils/cx.js +38 -0
  345. package/dist/esm/v2/utils/cx.js.map +1 -0
  346. package/dist/esm/v2/utils/fileDownload.js +226 -0
  347. package/dist/esm/v2/utils/fileDownload.js.map +1 -0
  348. package/dist/esm/v2/utils/fmtMoney.js +78 -0
  349. package/dist/esm/v2/utils/fmtMoney.js.map +1 -0
  350. package/dist/esm/v2/utils/index.js +43 -0
  351. package/dist/esm/v2/utils/index.js.map +1 -0
  352. package/dist/esm/v2/utils/mergeLabels.js +86 -0
  353. package/dist/esm/v2/utils/mergeLabels.js.map +1 -0
  354. package/dist/esm/v2/utils/networkStatus.js +114 -0
  355. package/dist/esm/v2/utils/networkStatus.js.map +1 -0
  356. package/dist/index.d.ts +3 -2
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js +21 -0
  359. package/dist/index.js.map +1 -1
  360. package/dist/v2/__tests__/FieldError.test.js +164 -0
  361. package/dist/v2/__tests__/FieldError.test.js.map +1 -0
  362. package/dist/v2/__tests__/FileCard.test.js +148 -0
  363. package/dist/v2/__tests__/FileCard.test.js.map +1 -0
  364. package/dist/v2/__tests__/SectionErrorBoundary.test.js +237 -0
  365. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  366. package/dist/v2/components/Accordion.d.ts +6 -6
  367. package/dist/v2/components/Accordion.d.ts.map +1 -1
  368. package/dist/v2/components/Accordion.js.map +1 -1
  369. package/dist/v2/components/ActionStrip.d.ts +12 -12
  370. package/dist/v2/components/ActionStrip.d.ts.map +1 -1
  371. package/dist/v2/components/ActionStrip.js.map +1 -1
  372. package/dist/v2/components/Banner.d.ts +48 -9
  373. package/dist/v2/components/Banner.d.ts.map +1 -1
  374. package/dist/v2/components/Banner.js +116 -35
  375. package/dist/v2/components/Banner.js.map +1 -1
  376. package/dist/v2/components/Busy.d.ts +3 -3
  377. package/dist/v2/components/Busy.d.ts.map +1 -1
  378. package/dist/v2/components/Busy.js.map +1 -1
  379. package/dist/v2/components/Button.d.ts +6 -6
  380. package/dist/v2/components/Button.d.ts.map +1 -1
  381. package/dist/v2/components/Button.js.map +1 -1
  382. package/dist/v2/components/CategoryTag.d.ts +3 -3
  383. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  384. package/dist/v2/components/CategoryTag.js.map +1 -1
  385. package/dist/v2/components/Checkbox.d.ts +11 -11
  386. package/dist/v2/components/Checkbox.d.ts.map +1 -1
  387. package/dist/v2/components/Checkbox.js.map +1 -1
  388. package/dist/v2/components/Chip.d.ts +8 -8
  389. package/dist/v2/components/Chip.d.ts.map +1 -1
  390. package/dist/v2/components/Chip.js +2 -1
  391. package/dist/v2/components/Chip.js.map +1 -1
  392. package/dist/v2/components/Combobox.d.ts +27 -27
  393. package/dist/v2/components/Combobox.d.ts.map +1 -1
  394. package/dist/v2/components/Combobox.js +3 -2
  395. package/dist/v2/components/Combobox.js.map +1 -1
  396. package/dist/v2/components/CommandPalette.d.ts +20 -20
  397. package/dist/v2/components/CommandPalette.d.ts.map +1 -1
  398. package/dist/v2/components/CommandPalette.js +2 -6
  399. package/dist/v2/components/CommandPalette.js.map +1 -1
  400. package/dist/v2/components/ConfirmDialog.d.ts +13 -13
  401. package/dist/v2/components/ConfirmDialog.d.ts.map +1 -1
  402. package/dist/v2/components/ConfirmDialog.js +2 -1
  403. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  404. package/dist/v2/components/DatePicker.d.ts +11 -11
  405. package/dist/v2/components/DatePicker.d.ts.map +1 -1
  406. package/dist/v2/components/DatePicker.js.map +1 -1
  407. package/dist/v2/components/DateRangePicker.d.ts +16 -16
  408. package/dist/v2/components/DateRangePicker.d.ts.map +1 -1
  409. package/dist/v2/components/DateRangePicker.js +2 -1
  410. package/dist/v2/components/DateRangePicker.js.map +1 -1
  411. package/dist/v2/components/DateTimePicker.d.ts +11 -11
  412. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  413. package/dist/v2/components/DateTimePicker.js.map +1 -1
  414. package/dist/v2/components/Drawer.d.ts +18 -18
  415. package/dist/v2/components/Drawer.d.ts.map +1 -1
  416. package/dist/v2/components/Drawer.js +2 -1
  417. package/dist/v2/components/Drawer.js.map +1 -1
  418. package/dist/v2/components/Dropzone.d.ts +34 -34
  419. package/dist/v2/components/Dropzone.d.ts.map +1 -1
  420. package/dist/v2/components/Dropzone.js +11 -3
  421. package/dist/v2/components/Dropzone.js.map +1 -1
  422. package/dist/v2/components/EmptyState.d.ts +7 -7
  423. package/dist/v2/components/EmptyState.d.ts.map +1 -1
  424. package/dist/v2/components/EmptyState.js.map +1 -1
  425. package/dist/v2/components/FavoriteToggle.d.ts +7 -7
  426. package/dist/v2/components/FavoriteToggle.d.ts.map +1 -1
  427. package/dist/v2/components/FavoriteToggle.js +2 -1
  428. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  429. package/dist/v2/components/Field.d.ts +17 -12
  430. package/dist/v2/components/Field.d.ts.map +1 -1
  431. package/dist/v2/components/Field.js +25 -7
  432. package/dist/v2/components/Field.js.map +1 -1
  433. package/dist/v2/components/FieldError.d.ts +78 -0
  434. package/dist/v2/components/FieldError.d.ts.map +1 -0
  435. package/dist/v2/components/FieldError.js +131 -0
  436. package/dist/v2/components/FieldError.js.map +1 -0
  437. package/dist/v2/components/FieldHelp.d.ts +7 -7
  438. package/dist/v2/components/FieldHelp.d.ts.map +1 -1
  439. package/dist/v2/components/FieldHelp.js.map +1 -1
  440. package/dist/v2/components/FileCard.d.ts +75 -0
  441. package/dist/v2/components/FileCard.d.ts.map +1 -0
  442. package/dist/v2/components/FileCard.js +169 -0
  443. package/dist/v2/components/FileCard.js.map +1 -0
  444. package/dist/v2/components/FilterTab.d.ts +9 -9
  445. package/dist/v2/components/FilterTab.d.ts.map +1 -1
  446. package/dist/v2/components/FilterTab.js +2 -1
  447. package/dist/v2/components/FilterTab.js.map +1 -1
  448. package/dist/v2/components/FormGrid.d.ts +9 -4
  449. package/dist/v2/components/FormGrid.d.ts.map +1 -1
  450. package/dist/v2/components/FormGrid.js +11 -1
  451. package/dist/v2/components/FormGrid.js.map +1 -1
  452. package/dist/v2/components/FormikDisplay.d.ts +6 -6
  453. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  454. package/dist/v2/components/FormikDisplay.js.map +1 -1
  455. package/dist/v2/components/Input.d.ts +6 -6
  456. package/dist/v2/components/Input.d.ts.map +1 -1
  457. package/dist/v2/components/Input.js.map +1 -1
  458. package/dist/v2/components/KPICard.d.ts +43 -13
  459. package/dist/v2/components/KPICard.d.ts.map +1 -1
  460. package/dist/v2/components/KPICard.js +53 -14
  461. package/dist/v2/components/KPICard.js.map +1 -1
  462. package/dist/v2/components/KPIStrip.d.ts +68 -0
  463. package/dist/v2/components/KPIStrip.d.ts.map +1 -0
  464. package/dist/v2/components/KPIStrip.js +92 -0
  465. package/dist/v2/components/KPIStrip.js.map +1 -0
  466. package/dist/v2/components/KV.d.ts +3 -3
  467. package/dist/v2/components/KV.d.ts.map +1 -1
  468. package/dist/v2/components/KV.js.map +1 -1
  469. package/dist/v2/components/KVGrid.d.ts +2 -2
  470. package/dist/v2/components/KVGrid.d.ts.map +1 -1
  471. package/dist/v2/components/KVGrid.js +8 -1
  472. package/dist/v2/components/KVGrid.js.map +1 -1
  473. package/dist/v2/components/Layout.d.ts +7 -7
  474. package/dist/v2/components/Layout.d.ts.map +1 -1
  475. package/dist/v2/components/Layout.js.map +1 -1
  476. package/dist/v2/components/MobileRowCard.d.ts +13 -13
  477. package/dist/v2/components/MobileRowCard.d.ts.map +1 -1
  478. package/dist/v2/components/MobileRowCard.js.map +1 -1
  479. package/dist/v2/components/Modal.d.ts +12 -12
  480. package/dist/v2/components/Modal.d.ts.map +1 -1
  481. package/dist/v2/components/Modal.js.map +1 -1
  482. package/dist/v2/components/NetworkErrorPage.d.ts +1 -1
  483. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  484. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  485. package/dist/v2/components/NumberInput.d.ts +14 -14
  486. package/dist/v2/components/NumberInput.d.ts.map +1 -1
  487. package/dist/v2/components/NumberInput.js +7 -6
  488. package/dist/v2/components/NumberInput.js.map +1 -1
  489. package/dist/v2/components/OverflowMenu.d.ts +14 -14
  490. package/dist/v2/components/OverflowMenu.d.ts.map +1 -1
  491. package/dist/v2/components/OverflowMenu.js +4 -8
  492. package/dist/v2/components/OverflowMenu.js.map +1 -1
  493. package/dist/v2/components/PdfViewer.d.ts +9 -9
  494. package/dist/v2/components/PdfViewer.d.ts.map +1 -1
  495. package/dist/v2/components/PdfViewer.js.map +1 -1
  496. package/dist/v2/components/ProgressBar.d.ts +10 -10
  497. package/dist/v2/components/ProgressBar.d.ts.map +1 -1
  498. package/dist/v2/components/ProgressBar.js.map +1 -1
  499. package/dist/v2/components/Radio.d.ts +7 -7
  500. package/dist/v2/components/Radio.d.ts.map +1 -1
  501. package/dist/v2/components/Radio.js.map +1 -1
  502. package/dist/v2/components/SectionErrorBoundary.d.ts +89 -0
  503. package/dist/v2/components/SectionErrorBoundary.d.ts.map +1 -0
  504. package/dist/v2/components/SectionErrorBoundary.js +221 -0
  505. package/dist/v2/components/SectionErrorBoundary.js.map +1 -0
  506. package/dist/v2/components/SectionHeader.d.ts +5 -5
  507. package/dist/v2/components/SectionHeader.d.ts.map +1 -1
  508. package/dist/v2/components/SectionHeader.js.map +1 -1
  509. package/dist/v2/components/Segmented.d.ts +11 -11
  510. package/dist/v2/components/Segmented.d.ts.map +1 -1
  511. package/dist/v2/components/Segmented.js.map +1 -1
  512. package/dist/v2/components/Select.d.ts +33 -15
  513. package/dist/v2/components/Select.d.ts.map +1 -1
  514. package/dist/v2/components/Select.js +147 -30
  515. package/dist/v2/components/Select.js.map +1 -1
  516. package/dist/v2/components/ServerErrorPage.d.ts +1 -1
  517. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  518. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  519. package/dist/v2/components/Skeleton.d.ts +15 -15
  520. package/dist/v2/components/Skeleton.d.ts.map +1 -1
  521. package/dist/v2/components/Skeleton.js.map +1 -1
  522. package/dist/v2/components/SkipLink.d.ts +2 -2
  523. package/dist/v2/components/SkipLink.d.ts.map +1 -1
  524. package/dist/v2/components/SkipLink.js.map +1 -1
  525. package/dist/v2/components/Status.d.ts +3 -3
  526. package/dist/v2/components/Status.d.ts.map +1 -1
  527. package/dist/v2/components/Status.js.map +1 -1
  528. package/dist/v2/components/Stepper.d.ts +28 -22
  529. package/dist/v2/components/Stepper.d.ts.map +1 -1
  530. package/dist/v2/components/Stepper.js +31 -5
  531. package/dist/v2/components/Stepper.js.map +1 -1
  532. package/dist/v2/components/Surface.d.ts +94 -0
  533. package/dist/v2/components/Surface.d.ts.map +1 -0
  534. package/dist/v2/components/Surface.js +163 -0
  535. package/dist/v2/components/Surface.js.map +1 -0
  536. package/dist/v2/components/Switch.d.ts +4 -4
  537. package/dist/v2/components/Switch.d.ts.map +1 -1
  538. package/dist/v2/components/Switch.js.map +1 -1
  539. package/dist/v2/components/Tabs.d.ts +6 -6
  540. package/dist/v2/components/Tabs.d.ts.map +1 -1
  541. package/dist/v2/components/Tabs.js.map +1 -1
  542. package/dist/v2/components/TelInput.d.ts +8 -8
  543. package/dist/v2/components/TelInput.d.ts.map +1 -1
  544. package/dist/v2/components/TelInput.js +18 -18
  545. package/dist/v2/components/TelInput.js.map +1 -1
  546. package/dist/v2/components/Textarea.d.ts +1 -1
  547. package/dist/v2/components/Textarea.d.ts.map +1 -1
  548. package/dist/v2/components/Textarea.js.map +1 -1
  549. package/dist/v2/components/TimePicker.d.ts +11 -11
  550. package/dist/v2/components/TimePicker.d.ts.map +1 -1
  551. package/dist/v2/components/TimePicker.js.map +1 -1
  552. package/dist/v2/components/Toast.d.ts +6 -6
  553. package/dist/v2/components/Toast.d.ts.map +1 -1
  554. package/dist/v2/components/Toast.js +9 -8
  555. package/dist/v2/components/Toast.js.map +1 -1
  556. package/dist/v2/components/Tooltip.d.ts +1 -1
  557. package/dist/v2/components/Tooltip.d.ts.map +1 -1
  558. package/dist/v2/components/Tooltip.js.map +1 -1
  559. package/dist/v2/components/index.d.ts +143 -0
  560. package/dist/v2/components/index.d.ts.map +1 -1
  561. package/dist/v2/components/index.js +35 -0
  562. package/dist/v2/components/index.js.map +1 -1
  563. package/dist/v2/models/favorite.d.ts +1 -1
  564. package/dist/v2/models/favorite.d.ts.map +1 -1
  565. package/dist/v2/models/favorite.js.map +1 -1
  566. package/dist/v2/models/personalization.d.ts +13 -13
  567. package/dist/v2/models/personalization.d.ts.map +1 -1
  568. package/dist/v2/models/personalization.js.map +1 -1
  569. package/dist/v2/models/referentiel.d.ts +11 -11
  570. package/dist/v2/models/referentiel.d.ts.map +1 -1
  571. package/dist/v2/models/referentiel.js.map +1 -1
  572. package/dist/v2/models/savedFilter.d.ts +8 -8
  573. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  574. package/dist/v2/models/savedFilter.js.map +1 -1
  575. package/dist/v2/patterns/ActionBar.d.ts +33 -33
  576. package/dist/v2/patterns/ActionBar.d.ts.map +1 -1
  577. package/dist/v2/patterns/ActionBar.js +2 -1
  578. package/dist/v2/patterns/ActionBar.js.map +1 -1
  579. package/dist/v2/patterns/BulkActionBar.d.ts +12 -12
  580. package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -1
  581. package/dist/v2/patterns/BulkActionBar.js +2 -1
  582. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  583. package/dist/v2/patterns/CollapsibleDataGrid.d.ts +15 -15
  584. package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -1
  585. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  586. package/dist/v2/patterns/ColumnsToggle.d.ts +7 -7
  587. package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -1
  588. package/dist/v2/patterns/ColumnsToggle.js +4 -8
  589. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  590. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -12
  591. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  592. package/dist/v2/patterns/DataGridSettingsMenu.js +9 -8
  593. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  594. package/dist/v2/patterns/DataGridToolbar.d.ts +40 -40
  595. package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -1
  596. package/dist/v2/patterns/DataGridToolbar.js +2 -1
  597. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  598. package/dist/v2/patterns/DataGridVirtualized.d.ts +27 -27
  599. package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -1
  600. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  601. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +5 -5
  602. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -1
  603. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  604. package/dist/v2/patterns/FavoriteColumn.d.ts +6 -6
  605. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  606. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  607. package/dist/v2/patterns/FavoritesFilter.d.ts +10 -10
  608. package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -1
  609. package/dist/v2/patterns/FavoritesFilter.js +2 -1
  610. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  611. package/dist/v2/patterns/FormErrorSummary.d.ts +4 -4
  612. package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -1
  613. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  614. package/dist/v2/patterns/FormPageShell.d.ts +4 -4
  615. package/dist/v2/patterns/FormPageShell.d.ts.map +1 -1
  616. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  617. package/dist/v2/patterns/FormSection.d.ts +19 -8
  618. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  619. package/dist/v2/patterns/FormSection.js +106 -71
  620. package/dist/v2/patterns/FormSection.js.map +1 -1
  621. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +6 -6
  622. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  623. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  624. package/dist/v2/patterns/FormikCombobox.d.ts +11 -11
  625. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  626. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  627. package/dist/v2/patterns/FormikDatePicker.d.ts +36 -8
  628. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  629. package/dist/v2/patterns/FormikDatePicker.js +27 -1
  630. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  631. package/dist/v2/patterns/FormikErrorFocus.d.ts +3 -3
  632. package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -1
  633. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  634. package/dist/v2/patterns/FormikFile.d.ts +8 -8
  635. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  636. package/dist/v2/patterns/FormikFile.js.map +1 -1
  637. package/dist/v2/patterns/FormikInput.d.ts +41 -6
  638. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  639. package/dist/v2/patterns/FormikInput.js +49 -1
  640. package/dist/v2/patterns/FormikInput.js.map +1 -1
  641. package/dist/v2/patterns/FormikReferentielField.d.ts +8 -8
  642. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  643. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  644. package/dist/v2/patterns/FormikSelect.d.ts +33 -12
  645. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  646. package/dist/v2/patterns/FormikSelect.js +28 -2
  647. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  648. package/dist/v2/patterns/FormikTextarea.d.ts +5 -5
  649. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  650. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  651. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +7 -7
  652. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  653. package/dist/v2/patterns/KeyboardShortcutsHelp.js +2 -6
  654. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  655. package/dist/v2/patterns/NetworkErrorBanner.d.ts +4 -4
  656. package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -1
  657. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  658. package/dist/v2/patterns/PageContent.d.ts +3 -3
  659. package/dist/v2/patterns/PageContent.d.ts.map +1 -1
  660. package/dist/v2/patterns/PageContent.js.map +1 -1
  661. package/dist/v2/patterns/ReferentielField.d.ts +49 -49
  662. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  663. package/dist/v2/patterns/ReferentielField.js +2 -1
  664. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  665. package/dist/v2/patterns/SaveFilterDialog.d.ts +10 -10
  666. package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -1
  667. package/dist/v2/patterns/SaveFilterDialog.js +9 -8
  668. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  669. package/dist/v2/patterns/SavedFiltersMenu.d.ts +7 -7
  670. package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -1
  671. package/dist/v2/patterns/SavedFiltersMenu.js +9 -8
  672. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  673. package/dist/v2/patterns/SkeletonPageShell.d.ts +7 -7
  674. package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -1
  675. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  676. package/dist/v2/patterns/SortableHeader.d.ts +1 -1
  677. package/dist/v2/patterns/SortableHeader.d.ts.map +1 -1
  678. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  679. package/dist/v2/patterns/Tour.d.ts +12 -12
  680. package/dist/v2/patterns/Tour.d.ts.map +1 -1
  681. package/dist/v2/patterns/Tour.js +9 -8
  682. package/dist/v2/patterns/Tour.js.map +1 -1
  683. package/dist/v2/patterns/_dataGridShared.d.ts +25 -6
  684. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  685. package/dist/v2/patterns/_dataGridShared.js +37 -3
  686. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  687. package/dist/v2/patterns/_useColumnReorder.d.ts +1 -1
  688. package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -1
  689. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  690. package/dist/v2/patterns/_useColumnResize.d.ts +1 -1
  691. package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -1
  692. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  693. package/dist/v2/patterns/index.d.ts +27 -0
  694. package/dist/v2/patterns/index.d.ts.map +1 -1
  695. package/dist/v2/patterns/index.js.map +1 -1
  696. package/dist/v2/personalization/PersonalizationProvider.d.ts +9 -9
  697. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  698. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  699. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +1 -1
  700. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -1
  701. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  702. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +1 -1
  703. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -1
  704. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  705. package/dist/v2/personalization/capabilities/favoritesView.d.ts +3 -3
  706. package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -1
  707. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  708. package/dist/v2/personalization/capabilities/savedFilters.d.ts +3 -3
  709. package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -1
  710. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  711. package/dist/v2/personalization/createPersonalizationStore.d.ts +8 -8
  712. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  713. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  714. package/dist/v2/personalization/schema.d.ts +2 -2
  715. package/dist/v2/personalization/schema.d.ts.map +1 -1
  716. package/dist/v2/personalization/schema.js.map +1 -1
  717. package/dist/v2/personalization/types.d.ts +19 -19
  718. package/dist/v2/personalization/types.d.ts.map +1 -1
  719. package/dist/v2/personalization/types.js.map +1 -1
  720. package/dist/v2/referentiel/ReferentielProvider.d.ts +4 -4
  721. package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -1
  722. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  723. package/dist/v2/referentiel/useReferentielOptions.d.ts +4 -4
  724. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  725. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  726. package/dist/v2/referentiel/useReferentielSearch.d.ts +3 -3
  727. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  728. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  729. package/dist/v2/theme/createPortnetTheme.d.ts +32 -7
  730. package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -1
  731. package/dist/v2/theme/createPortnetTheme.js +25 -1
  732. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  733. package/dist/v2/types/datagrid.d.ts +59 -59
  734. package/dist/v2/types/datagrid.d.ts.map +1 -1
  735. package/dist/v2/types/datagrid.js.map +1 -1
  736. package/dist/v2/utils/apiError.d.ts +65 -4
  737. package/dist/v2/utils/apiError.d.ts.map +1 -1
  738. package/dist/v2/utils/apiError.js +69 -6
  739. package/dist/v2/utils/apiError.js.map +1 -1
  740. package/dist/v2/utils/index.d.ts +1 -0
  741. package/dist/v2/utils/index.d.ts.map +1 -1
  742. package/dist/v2/utils/index.js +7 -0
  743. package/dist/v2/utils/index.js.map +1 -1
  744. package/dist/v2/utils/mergeLabels.d.ts +59 -0
  745. package/dist/v2/utils/mergeLabels.d.ts.map +1 -0
  746. package/dist/v2/utils/mergeLabels.js +93 -0
  747. package/dist/v2/utils/mergeLabels.js.map +1 -0
  748. package/package.json +23 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["default","ActionBar","BulkActionBar","ColumnsToggle","FormSection","FormPageShell","FormErrorSummary","FormikErrorFocus","PageContent","DataGrid","applySort","DataGridVirtualized","DataGridSettingsMenu","DataGridToolbar","CollapsibleDataGrid","SortableHeader","getAriaSort","NetworkErrorBanner","ReferentielField","Tour","KeyboardShortcutsHelp","DeleteResourceConfirmDialog","SaveFilterDialog","SavedFiltersMenu","makeFavoriteColumn","FavoritesFilter","FormikInput","FormikTextarea","FormikSelect","FormikCombobox","FormikDatePicker","FormikFile","FormikCheckboxGroup","FormikReferentielField","FormikDisplay"],"sources":["../../../../src/lib/v2/patterns/index.ts"],"sourcesContent":["export { default as ActionBar } from \"./ActionBar\";\r\nexport type { ActionBarProps, ActionBarAction, ActionBarLabels, BreadcrumbItem, CrumbEntry } from \"./ActionBar\";\r\nexport { default as BulkActionBar } from \"./BulkActionBar\";\r\nexport { default as ColumnsToggle } from \"./ColumnsToggle\";\r\nexport { default as FormSection } from \"./FormSection\";\r\nexport { default as FormPageShell } from \"./FormPageShell\";\r\nexport { default as FormErrorSummary } from \"./FormErrorSummary\";\r\nexport type { FormErrorSummaryProps, FormErrorSummaryError } from \"./FormErrorSummary\";\r\n// R-FV.3 companion to FormErrorSummary (R-FV.2) — renders nothing, moves\r\n// focus to the first field in error after a failed submit. Adopt both.\r\nexport { default as FormikErrorFocus } from \"./FormikErrorFocus\";\r\nexport type { FormikErrorFocusProps } from \"./FormikErrorFocus\";\r\nexport { default as PageContent } from \"./PageContent\";\r\nexport { default as DataGrid, applySort } from \"./DataGrid\";\r\nexport { default as DataGridVirtualized } from \"./DataGridVirtualized\";\r\nexport { default as DataGridSettingsMenu } from \"./DataGridSettingsMenu\";\r\nexport { default as DataGridToolbar } from \"./DataGridToolbar\";\r\nexport { default as CollapsibleDataGrid } from \"./CollapsibleDataGrid\";\r\nexport { default as SortableHeader, getAriaSort } from \"./SortableHeader\";\r\nexport { default as NetworkErrorBanner } from \"./NetworkErrorBanner\";\r\nexport { default as ReferentielField } from \"./ReferentielField\";\r\n/**\r\n * ReferentielField configuration types — public typed surface.\r\n *\r\n * Same class of gap as Gap-TS-003 (component types), which was fixed for\r\n * `./components` but never extended to `./patterns`: the VALUE above was\r\n * exported while the types describing its own REQUIRED props were not.\r\n * `columns` and `criteria` are mandatory-to-configure, so a consumer had no\r\n * way to type them without either deep-importing\r\n * `@portnet/ui/dist/v2/patterns/…` (fragile, bypasses the `exports` map) or\r\n * declaring a local twin — which the Platform TypeScript Guidelines forbid\r\n * (\"Reusable types belong inside Shared UI Library … Never duplicate\").\r\n *\r\n * `ReferentielSearchResult` and `ReferentielSearchParams` are deliberately\r\n * NOT re-exported here: identically-named types are already surfaced from\r\n * `./referentiel` (useReferentielSearch) and `./v2/models` respectively, and\r\n * `src/lib/index.ts` star-exports all three barrels — a second named export of\r\n * either identifier is a hard TS2308 ambiguity at the library root.\r\n *\r\n * Additive and type-only: no runtime change, no existing export altered.\r\n */\r\nexport type {\r\n ReferentielFieldProps,\r\n ReferentielCriterion,\r\n ReferentielFieldLabels,\r\n} from \"./ReferentielField\";\r\nexport { default as Tour } from \"./Tour\";\r\nexport { default as KeyboardShortcutsHelp } from \"./KeyboardShortcutsHelp\";\r\nexport { default as DeleteResourceConfirmDialog } from \"./DeleteResourceConfirmDialog\";\r\n\r\n// ── Personalization · Saved Filters framework (v2/personalization) ────────────\r\n// SaveFilterDialog is presentational; SavedFiltersMenu is connected to the\r\n// savedFilters capability via useSavedFilters.\r\nexport { default as SaveFilterDialog } from \"./SaveFilterDialog\";\r\nexport { default as SavedFiltersMenu } from \"./SavedFiltersMenu\";\r\n\r\n// ── Personalization · Favorites DataGrid integration (v2/personalization) ─────\r\n// makeFavoriteColumn builds an always-visible favorites column for v2.DataGrid;\r\n// FavoritesFilter is the all/favorites-only segmented control.\r\nexport { default as makeFavoriteColumn } from \"./FavoriteColumn\";\r\nexport { default as FavoritesFilter } from \"./FavoritesFilter\";\r\nexport type { FavoritesFilterProps, FavoritesFilterLabels } from \"./FavoritesFilter\";\r\n\r\n// ── Formik bridges ────────────────────────────────────────────────────────────\r\nexport { default as FormikInput } from \"./FormikInput\";\r\nexport { default as FormikTextarea } from \"./FormikTextarea\";\r\nexport { default as FormikSelect } from \"./FormikSelect\";\r\nexport { default as FormikCombobox } from \"./FormikCombobox\";\r\n/**\r\n * FormikCombobox props — public typed surface.\r\n *\r\n * SAME GAP-TS-003 CLASS as the ReferentielField note above. That fix covered\r\n * `ReferentielField` and `FormikReferentielField` but was not extended to the\r\n * other Formik bridges: the VALUE is exported while the type describing its props\r\n * is not, so a consumer cannot write `Omit<FormikComboboxProps<T>, …>`.\r\n *\r\n * REQUESTED BY bmdav-fe (TypeScript migration, batch 6f). That module stores the\r\n * OPTION OBJECT in Formik rather than a primitive key, because its payload mapper\r\n * reads `values.typeDemande.id` and sends `delegationTraitement` as a whole\r\n * object — so it cannot adopt the primitive-key model without changing the\r\n * request body sent to bmdav-be. It contains the resulting variance in ONE local\r\n * adapter (`ObjectValuedFormikCombobox`) rather than scattering assertions across\r\n * call sites, and that adapter must restate this component's prop contract minus\r\n * `getOptionValue`. The deep-import fallback is unavailable under\r\n * `moduleResolution: \"bundler\"`, since the package `exports` map does not expose\r\n * `dist/v2/patterns/*`.\r\n *\r\n * `ComboboxOptionValue` is deliberately NOT re-exported here — it is already\r\n * surfaced from `./components` (Combobox), and a second named export at the\r\n * library root would be a TS2308 ambiguity, exactly as recorded above for\r\n * `ReferentielSearchResult` / `ReferentielSearchParams`.\r\n *\r\n * Additive and type-only: no runtime change, no existing export altered.\r\n */\r\nexport type { FormikComboboxProps } from \"./FormikCombobox\";\r\nexport { default as FormikDatePicker } from \"./FormikDatePicker\";\r\nexport { default as FormikFile } from \"./FormikFile\";\r\nexport { default as FormikCheckboxGroup } from \"./FormikCheckboxGroup\";\r\nexport { default as FormikReferentielField } from \"./FormikReferentielField\";\r\nexport type { FormikReferentielFieldProps } from \"./FormikReferentielField\";\r\n\r\n/** Affichage valeur système — fond grisé, aucune interaction.\r\n * Utiliser à la place de FormikInput disabled pour les champs\r\n * auto-générés ou non modifiables par l'utilisateur. */\r\nexport { default as FormikDisplay } from \"../components/FormikDisplay\";\r\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,SAAS,QAAmB,aAAa;AAE7D,SAASD,OAAO,IAAIE,aAAa,QAAe,iBAAiB;AACjE,SAASF,OAAO,IAAIG,aAAa,QAAe,iBAAiB;AACjE,SAASH,OAAO,IAAII,WAAW,QAAiB,eAAe;AAC/D,SAASJ,OAAO,IAAIK,aAAa,QAAe,iBAAiB;AACjE,SAASL,OAAO,IAAIM,gBAAgB,QAAY,oBAAoB;AAEpE;AACA;AACA,SAASN,OAAO,IAAIO,gBAAgB,QAAY,oBAAoB;AAEpE,SAASP,OAAO,IAAIQ,WAAW,QAAiB,eAAe;AAC/D,SAASR,OAAO,IAAIS,QAAQ,EAAEC,SAAS,QAAS,YAAY;AAC5D,SAASV,OAAO,IAAIW,mBAAmB,QAAS,uBAAuB;AACvE,SAASX,OAAO,IAAIY,oBAAoB,QAAQ,wBAAwB;AACxE,SAASZ,OAAO,IAAIa,eAAe,QAAa,mBAAmB;AACnE,SAASb,OAAO,IAAIc,mBAAmB,QAAS,uBAAuB;AACvE,SAASd,OAAO,IAAIe,cAAc,EAAEC,WAAW,QAAQ,kBAAkB;AACzE,SAAShB,OAAO,IAAIiB,kBAAkB,QAAU,sBAAsB;AACtE,SAASjB,OAAO,IAAIkB,gBAAgB,QAAY,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,SAASlB,OAAO,IAAImB,IAAI,QAAwB,QAAQ;AACxD,SAASnB,OAAO,IAAIoB,qBAAqB,QAAQ,yBAAyB;AAC1E,SAASpB,OAAO,IAAIqB,2BAA2B,QAAQ,+BAA+B;;AAEtF;AACA;AACA;AACA,SAASrB,OAAO,IAAIsB,gBAAgB,QAAY,oBAAoB;AACpE,SAAStB,OAAO,IAAIuB,gBAAgB,QAAY,oBAAoB;;AAEpE;AACA;AACA;AACA,SAASvB,OAAO,IAAIwB,kBAAkB,QAAU,kBAAkB;AAClE,SAASxB,OAAO,IAAIyB,eAAe,QAAa,mBAAmB;AAGnE;AACA,SAASzB,OAAO,IAAI0B,WAAW,QAAiB,eAAe;AAC/D,SAAS1B,OAAO,IAAI2B,cAAc,QAAc,kBAAkB;AAClE,SAAS3B,OAAO,IAAI4B,YAAY,QAAgB,gBAAgB;AAChE,SAAS5B,OAAO,IAAI6B,cAAc,QAAc,kBAAkB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS7B,OAAO,IAAI8B,gBAAgB,QAAY,oBAAoB;AACpE,SAAS9B,OAAO,IAAI+B,UAAU,QAAkB,cAAc;AAC9D,SAAS/B,OAAO,IAAIgC,mBAAmB,QAAS,uBAAuB;AACvE,SAAShC,OAAO,IAAIiC,sBAAsB,QAAQ,0BAA0B;AAG5E;AACA;AACA;AACA,SAASjC,OAAO,IAAIkC,aAAa,QAAe,6BAA6B","ignoreList":[]}
@@ -0,0 +1,168 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ /**
8
+ * UserPersonalizationProvider — Portnet UI v2 · personalization
9
+ *
10
+ * The single configuration point for per-user personalization. Mount it
11
+ * once near the app root; every capability (favorites, saved filters, and
12
+ * future slices) reads through the one store it establishes.
13
+ *
14
+ * import {
15
+ * UserPersonalizationProvider,
16
+ * createLocalStorageAdapter,
17
+ * } from "@portnet/ui/v2/personalization";
18
+ *
19
+ * <UserPersonalizationProvider userId={user.id} tenantId={tenant.id}>
20
+ * <App />
21
+ * </UserPersonalizationProvider>
22
+ *
23
+ * Store lifecycle
24
+ * - Exactly one store per scope. Memoised on (scope, adapter) ONLY;
25
+ * onError / hydrateStrategy are pushed in live via store.setRuntime so
26
+ * inline handlers never recreate the store.
27
+ * - The default localStorage adapter is created once (ref). A PROVIDED
28
+ * adapter must be stable (useMemo/module singleton) — a dev guard warns
29
+ * if its identity changes between renders.
30
+ * - A lifecycle effect runs hydrate() + connect() and dispose()s the old
31
+ * store on scope change / unmount (cross-tab listener torn down).
32
+ *
33
+ * React 18/19 compatible: no 19-only API is required.
34
+ */
35
+
36
+ import * as React from "react";
37
+ import { PersonalizationConfigContext, PersonalizationStoreContext } from "./personalizationContext";
38
+ import createPersonalizationStore from "./createPersonalizationStore";
39
+ import createLocalStorageAdapter from "./adapters/createLocalStorageAdapter";
40
+ import { jsx as _jsx } from "react/jsx-runtime";
41
+ var isDev = typeof process !== "undefined" && process.env && process.env["NODE_ENV"] !== "production";
42
+
43
+ /**
44
+ * Default labels for the whole foundation (FR — charter default). Hosts
45
+ * override any subset via the `labels` prop; EN/AR overrides supported.
46
+ * Front-loaded here so the favorites (Batch 3) and saved-filters (Batch 4)
47
+ * components read consistent copy from one place.
48
+ */
49
+ export var DEFAULT_PERSONALIZATION_LABELS = Object.freeze({
50
+ // Follow / "suivis" (Batch 3)
51
+ addFavorite: "Suivre",
52
+ removeFavorite: "Ne plus suivre",
53
+ favoritesOnly: "Suivis uniquement",
54
+ showAll: "Tout afficher",
55
+ favoriteColumnHeader: "Suivis",
56
+ // Saved filters (Batch 4)
57
+ savedFilters: "Filtres enregistrés",
58
+ saveCurrentFilter: "Enregistrer le filtre actuel…",
59
+ filterNameLabel: "Nom du filtre",
60
+ filterNamePlaceholder: "ex. Dossiers en attente",
61
+ saveFilter: "Enregistrer",
62
+ updateFilter: "Mettre à jour",
63
+ deleteFilter: "Supprimer",
64
+ deleteFilterConfirm: "Supprimer ce filtre enregistré ?",
65
+ setAsDefault: "Définir par défaut",
66
+ defaultBadge: "Par défaut",
67
+ manageFilters: "Gérer les filtres",
68
+ noSavedFilters: "Aucun filtre enregistré",
69
+ cancel: "Annuler"
70
+ });
71
+ export function UserPersonalizationProvider(props) {
72
+ var children = props.children,
73
+ userId = props.userId,
74
+ tenantId = props.tenantId,
75
+ appId = props.appId,
76
+ adapter = props.adapter,
77
+ defaults = props.defaults,
78
+ labels = props.labels,
79
+ onError = props.onError,
80
+ _props$hydrateStrateg = props.hydrateStrategy,
81
+ hydrateStrategy = _props$hydrateStrateg === void 0 ? "remote-wins" : _props$hydrateStrateg;
82
+ if (isDev && !userId && typeof console !== "undefined" && console.warn) {
83
+ // eslint-disable-next-line no-console
84
+ console.warn("[@portnet/ui v2] UserPersonalizationProvider: `userId` is required to scope personalization. " + "Falling back to 'anonymous' — persisted preferences will be shared across unauthenticated sessions.");
85
+ }
86
+ var resolvedUserId = userId || "anonymous";
87
+ var scope = React.useMemo(function buildScope() {
88
+ return _objectSpread(_objectSpread({
89
+ userId: resolvedUserId
90
+ }, tenantId !== undefined ? {
91
+ tenantId: tenantId
92
+ } : {}), appId !== undefined ? {
93
+ appId: appId
94
+ } : {});
95
+ }, [resolvedUserId, tenantId, appId]);
96
+
97
+ // Default adapter created once; a provided adapter is trusted to be stable.
98
+ var defaultAdapterRef = React.useRef(null);
99
+ if (!adapter && !defaultAdapterRef.current) {
100
+ defaultAdapterRef.current = createLocalStorageAdapter();
101
+ }
102
+ var resolvedAdapter = adapter || defaultAdapterRef.current;
103
+
104
+ // One store per (scope, adapter). Intentionally NOT keyed on
105
+ // defaults/onError/hydrateStrategy: those are fed live below.
106
+ var store = React.useMemo(function buildStore() {
107
+ return createPersonalizationStore(_objectSpread(_objectSpread(_objectSpread({
108
+ scope: scope,
109
+ adapter: resolvedAdapter
110
+ }, defaults !== undefined ? {
111
+ defaults: defaults
112
+ } : {}), onError !== undefined ? {
113
+ onError: onError
114
+ } : {}), {}, {
115
+ hydrateStrategy: hydrateStrategy
116
+ }));
117
+ },
118
+ // eslint-disable-next-line react-hooks/exhaustive-deps
119
+ [scope, resolvedAdapter]);
120
+
121
+ // Hydrate + cross-tab connect; dispose on store change / unmount.
122
+ React.useEffect(function lifecycle() {
123
+ store.hydrate();
124
+ var off = store.connect();
125
+ return function teardown() {
126
+ if (typeof off === "function") off();
127
+ store.dispose();
128
+ };
129
+ }, [store]);
130
+
131
+ // Push live runtime options without recreating the store.
132
+ React.useEffect(function syncRuntime() {
133
+ store.setRuntime(_objectSpread(_objectSpread({}, onError !== undefined ? {
134
+ onError: onError
135
+ } : {}), {}, {
136
+ hydrateStrategy: hydrateStrategy
137
+ }));
138
+ }, [store, onError, hydrateStrategy]);
139
+
140
+ // Dev guard: a non-memoised adapter prop would recreate the store each
141
+ // render and wipe in-memory state. Warn so it's caught early.
142
+ var prevAdapterRef = React.useRef(resolvedAdapter);
143
+ React.useEffect(function guardAdapterIdentity() {
144
+ if (isDev && prevAdapterRef.current !== resolvedAdapter && typeof console !== "undefined" && console.warn) {
145
+ // eslint-disable-next-line no-console
146
+ console.warn("[@portnet/ui v2] UserPersonalizationProvider: the `adapter` prop changed identity between " + "renders. Memoise it (useMemo or a module singleton) to avoid re-creating the personalization store.");
147
+ }
148
+ prevAdapterRef.current = resolvedAdapter;
149
+ }, [resolvedAdapter]);
150
+ var mergedLabels = React.useMemo(function mergeLabels() {
151
+ return labels ? Object.assign({}, DEFAULT_PERSONALIZATION_LABELS, labels) : DEFAULT_PERSONALIZATION_LABELS;
152
+ }, [labels]);
153
+ var configValue = React.useMemo(function buildConfig() {
154
+ return {
155
+ scope: scope,
156
+ labels: mergedLabels
157
+ };
158
+ }, [scope, mergedLabels]);
159
+ return /*#__PURE__*/_jsx(PersonalizationConfigContext.Provider, {
160
+ value: configValue,
161
+ children: /*#__PURE__*/_jsx(PersonalizationStoreContext.Provider, {
162
+ value: store,
163
+ children: children
164
+ })
165
+ });
166
+ }
167
+ export default UserPersonalizationProvider;
168
+ //# sourceMappingURL=PersonalizationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersonalizationProvider.js","names":["React","PersonalizationConfigContext","PersonalizationStoreContext","createPersonalizationStore","createLocalStorageAdapter","jsx","_jsx","isDev","process","env","DEFAULT_PERSONALIZATION_LABELS","Object","freeze","addFavorite","removeFavorite","favoritesOnly","showAll","favoriteColumnHeader","savedFilters","saveCurrentFilter","filterNameLabel","filterNamePlaceholder","saveFilter","updateFilter","deleteFilter","deleteFilterConfirm","setAsDefault","defaultBadge","manageFilters","noSavedFilters","cancel","UserPersonalizationProvider","props","children","userId","tenantId","appId","adapter","defaults","labels","onError","_props$hydrateStrateg","hydrateStrategy","console","warn","resolvedUserId","scope","useMemo","buildScope","_objectSpread","undefined","defaultAdapterRef","useRef","current","resolvedAdapter","store","buildStore","useEffect","lifecycle","hydrate","off","connect","teardown","dispose","syncRuntime","setRuntime","prevAdapterRef","guardAdapterIdentity","mergedLabels","mergeLabels","assign","configValue","buildConfig","Provider","value"],"sources":["../../../../src/lib/v2/personalization/PersonalizationProvider.tsx"],"sourcesContent":["/**\r\n * UserPersonalizationProvider — Portnet UI v2 · personalization\r\n *\r\n * The single configuration point for per-user personalization. Mount it\r\n * once near the app root; every capability (favorites, saved filters, and\r\n * future slices) reads through the one store it establishes.\r\n *\r\n * import {\r\n * UserPersonalizationProvider,\r\n * createLocalStorageAdapter,\r\n * } from \"@portnet/ui/v2/personalization\";\r\n *\r\n * <UserPersonalizationProvider userId={user.id} tenantId={tenant.id}>\r\n * <App />\r\n * </UserPersonalizationProvider>\r\n *\r\n * Store lifecycle\r\n * - Exactly one store per scope. Memoised on (scope, adapter) ONLY;\r\n * onError / hydrateStrategy are pushed in live via store.setRuntime so\r\n * inline handlers never recreate the store.\r\n * - The default localStorage adapter is created once (ref). A PROVIDED\r\n * adapter must be stable (useMemo/module singleton) — a dev guard warns\r\n * if its identity changes between renders.\r\n * - A lifecycle effect runs hydrate() + connect() and dispose()s the old\r\n * store on scope change / unmount (cross-tab listener torn down).\r\n *\r\n * React 18/19 compatible: no 19-only API is required.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {\r\n PersonalizationConfigContext,\r\n PersonalizationStoreContext,\r\n} from \"./personalizationContext\";\r\nimport type {\r\n PersonalizationConfig,\r\n PersonalizationLabels,\r\n} from \"./personalizationContext\";\r\nimport createPersonalizationStore from \"./createPersonalizationStore\";\r\nimport type { PersonalizationErrorHandler } from \"./createPersonalizationStore\";\r\nimport createLocalStorageAdapter from \"./adapters/createLocalStorageAdapter\";\r\nimport type { Adapter, HydrateStrategy, Scope } from \"./types\";\r\n\r\nconst isDev =\r\n typeof process !== \"undefined\" &&\r\n process.env &&\r\n process.env[\"NODE_ENV\"] !== \"production\";\r\n\r\n/**\r\n * Default labels for the whole foundation (FR — charter default). Hosts\r\n * override any subset via the `labels` prop; EN/AR overrides supported.\r\n * Front-loaded here so the favorites (Batch 3) and saved-filters (Batch 4)\r\n * components read consistent copy from one place.\r\n */\r\nexport const DEFAULT_PERSONALIZATION_LABELS = Object.freeze({\r\n // Follow / \"suivis\" (Batch 3)\r\n addFavorite: \"Suivre\",\r\n removeFavorite: \"Ne plus suivre\",\r\n favoritesOnly: \"Suivis uniquement\",\r\n showAll: \"Tout afficher\",\r\n favoriteColumnHeader: \"Suivis\",\r\n // Saved filters (Batch 4)\r\n savedFilters: \"Filtres enregistrés\",\r\n saveCurrentFilter: \"Enregistrer le filtre actuel…\",\r\n filterNameLabel: \"Nom du filtre\",\r\n filterNamePlaceholder: \"ex. Dossiers en attente\",\r\n saveFilter: \"Enregistrer\",\r\n updateFilter: \"Mettre à jour\",\r\n deleteFilter: \"Supprimer\",\r\n deleteFilterConfirm: \"Supprimer ce filtre enregistré ?\",\r\n setAsDefault: \"Définir par défaut\",\r\n defaultBadge: \"Par défaut\",\r\n manageFilters: \"Gérer les filtres\",\r\n noSavedFilters: \"Aucun filtre enregistré\",\r\n cancel: \"Annuler\",\r\n} satisfies PersonalizationLabels);\r\n\r\nexport interface UserPersonalizationProviderProps {\r\n children?: React.ReactNode | undefined;\r\n /** Required (in practice) — scopes all persisted preferences to this user. */\r\n userId?: string | undefined;\r\n /** Optional multi-tenant partition. */\r\n tenantId?: string | undefined;\r\n /** Optional per-app partition. */\r\n appId?: string | undefined;\r\n /** Persistence boundary. Defaults to createLocalStorageAdapter(). Must be stable. */\r\n adapter?: Adapter | undefined;\r\n /** Per-capability seed overrides, e.g. { favorites: {}, savedFilters: {} }. */\r\n defaults?: Record<string, unknown> | undefined;\r\n /** Label overrides (FR default; EN/AR supported). */\r\n labels?: Partial<PersonalizationLabels> | undefined;\r\n /** Central persistence-error hook: (error, { scope, capabilityId }) => void. */\r\n onError?: PersonalizationErrorHandler | undefined;\r\n /** Reconciliation policy between optimistic local state and adapter truth. @default \"remote-wins\" */\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\nexport function UserPersonalizationProvider(\r\n props: UserPersonalizationProviderProps\r\n): React.JSX.Element {\r\n const {\r\n children,\r\n userId,\r\n tenantId,\r\n appId,\r\n adapter,\r\n defaults,\r\n labels,\r\n onError,\r\n hydrateStrategy = \"remote-wins\",\r\n } = props;\r\n\r\n if (isDev && !userId && typeof console !== \"undefined\" && console.warn) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: `userId` is required to scope personalization. \" +\r\n \"Falling back to 'anonymous' — persisted preferences will be shared across unauthenticated sessions.\"\r\n );\r\n }\r\n const resolvedUserId = userId || \"anonymous\";\r\n\r\n const scope = React.useMemo<Scope>(\r\n function buildScope() {\r\n return {\r\n userId: resolvedUserId,\r\n ...(tenantId !== undefined ? { tenantId } : {}),\r\n ...(appId !== undefined ? { appId } : {}),\r\n };\r\n },\r\n [resolvedUserId, tenantId, appId]\r\n );\r\n\r\n // Default adapter created once; a provided adapter is trusted to be stable.\r\n const defaultAdapterRef = React.useRef<Adapter | null>(null);\r\n if (!adapter && !defaultAdapterRef.current) {\r\n defaultAdapterRef.current = createLocalStorageAdapter();\r\n }\r\n const resolvedAdapter = adapter || defaultAdapterRef.current;\r\n\r\n // One store per (scope, adapter). Intentionally NOT keyed on\r\n // defaults/onError/hydrateStrategy: those are fed live below.\r\n const store = React.useMemo(\r\n function buildStore() {\r\n return createPersonalizationStore({\r\n scope: scope,\r\n adapter: resolvedAdapter,\r\n ...(defaults !== undefined ? { defaults } : {}),\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [scope, resolvedAdapter]\r\n );\r\n\r\n // Hydrate + cross-tab connect; dispose on store change / unmount.\r\n React.useEffect(\r\n function lifecycle() {\r\n store.hydrate();\r\n const off = store.connect();\r\n return function teardown() {\r\n if (typeof off === \"function\") off();\r\n store.dispose();\r\n };\r\n },\r\n [store]\r\n );\r\n\r\n // Push live runtime options without recreating the store.\r\n React.useEffect(\r\n function syncRuntime() {\r\n store.setRuntime({\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n [store, onError, hydrateStrategy]\r\n );\r\n\r\n // Dev guard: a non-memoised adapter prop would recreate the store each\r\n // render and wipe in-memory state. Warn so it's caught early.\r\n const prevAdapterRef = React.useRef<Adapter | null>(resolvedAdapter);\r\n React.useEffect(\r\n function guardAdapterIdentity() {\r\n if (\r\n isDev &&\r\n prevAdapterRef.current !== resolvedAdapter &&\r\n typeof console !== \"undefined\" &&\r\n console.warn\r\n ) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: the `adapter` prop changed identity between \" +\r\n \"renders. Memoise it (useMemo or a module singleton) to avoid re-creating the personalization store.\"\r\n );\r\n }\r\n prevAdapterRef.current = resolvedAdapter;\r\n },\r\n [resolvedAdapter]\r\n );\r\n\r\n const mergedLabels = React.useMemo<PersonalizationLabels>(\r\n function mergeLabels() {\r\n return labels\r\n ? Object.assign({}, DEFAULT_PERSONALIZATION_LABELS, labels)\r\n : DEFAULT_PERSONALIZATION_LABELS;\r\n },\r\n [labels]\r\n );\r\n\r\n const configValue = React.useMemo<PersonalizationConfig>(\r\n function buildConfig() {\r\n return { scope: scope, labels: mergedLabels };\r\n },\r\n [scope, mergedLabels]\r\n );\r\n\r\n return (\r\n <PersonalizationConfigContext.Provider value={configValue}>\r\n <PersonalizationStoreContext.Provider value={store}>\r\n {children}\r\n </PersonalizationStoreContext.Provider>\r\n </PersonalizationConfigContext.Provider>\r\n );\r\n}\r\n\r\nexport default UserPersonalizationProvider;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * _storageKey — Portnet UI v2 · personalization adapters (private)
3
+ *
4
+ * Composite key scheme shared by storage adapters:
5
+ *
6
+ * portnet-ui:perso:v1:{tenantId?}:{userId}:{capabilityId}
7
+ *
8
+ * Design notes
9
+ * - `resourceKey` is NOT in the key — it lives inside the capability
10
+ * payload. One storage entry per (scope, capability) → cheap prefix scan
11
+ * on load, one removeItem to clear.
12
+ * - Scope segments (tenantId, userId) are encodeURIComponent-escaped so
13
+ * arbitrary host identifiers — including ones containing ':' — remain
14
+ * unambiguous. `capabilityId` is a controlled slug and is left raw so
15
+ * `buildScopePrefix` + `slice()` recover it directly.
16
+ * - `:v1:` is the KEY-SCHEME version (storage layout), independent of a
17
+ * capability payload's `schemaVersion`.
18
+ *
19
+ * Underscore-prefixed: internal, never re-exported from the public surface.
20
+ */
21
+
22
+ import { KEY_SCHEME_VERSION } from "../schema";
23
+ export var KEY_PREFIX = "portnet-ui:perso";
24
+ function enc(value) {
25
+ return encodeURIComponent(String(value == null ? "" : value));
26
+ }
27
+
28
+ /** Full storage key for one (scope, capability). */
29
+ export function buildKey(scope, capabilityId) {
30
+ var parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
31
+ if (scope && scope.tenantId) parts.push(enc(scope.tenantId));
32
+ parts.push(enc(scope ? scope.userId : ""));
33
+ parts.push(capabilityId);
34
+ return parts.join(":");
35
+ }
36
+
37
+ /**
38
+ * Prefix shared by every capability key of a scope — terminated by ':' so the
39
+ * capability segment follows immediately.
40
+ */
41
+ export function buildScopePrefix(scope) {
42
+ var parts = [KEY_PREFIX, KEY_SCHEME_VERSION];
43
+ if (scope && scope.tenantId) parts.push(enc(scope.tenantId));
44
+ parts.push(enc(scope ? scope.userId : ""));
45
+ parts.push(""); // trailing ':' after join
46
+ return parts.join(":");
47
+ }
48
+
49
+ /**
50
+ * Recover the capabilityId from a storage key for a given scope, or null when
51
+ * the key does not belong to this scope.
52
+ */
53
+ export function parseCapabilityFromKey(key, scope) {
54
+ if (typeof key !== "string") return null;
55
+ var prefix = buildScopePrefix(scope);
56
+ if (key.indexOf(prefix) !== 0) return null;
57
+ var capId = key.slice(prefix.length);
58
+ return capId || null;
59
+ }
60
+ //# sourceMappingURL=_storageKey.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,124 @@
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
+ /**
3
+ * createLocalStorageAdapter — Portnet UI v2 · personalization
4
+ *
5
+ * Default Adapter. Persists each capability as an opaque envelope under a
6
+ * scoped key (see adapters/_storageKey.ts). The adapter never interprets
7
+ * `envelope.payload`.
8
+ *
9
+ * Safety:
10
+ * - SSR-safe: with no `window`, the adapter is inert (load → {}, save →
11
+ * resolved no-op) so it can be constructed anywhere.
12
+ * - Every storage access is try/catch-wrapped. `save` REJECTS on quota/
13
+ * private-mode failure so the store can keep the optimistic value for the
14
+ * session and surface the error via onError.
15
+ * - Reads self-heal: malformed entries are removed on sight.
16
+ * - Reserved-key hardening: capability ids of `__proto__` / `constructor` /
17
+ * `prototype` are skipped while scanning so a crafted same-origin key can't
18
+ * reach the `__proto__` setter on the accumulator (SEC-LS1).
19
+ * - NOTE: localStorage is readable by any same-origin script. Do NOT persist
20
+ * secrets or PII in a capability payload (SEC-LS2).
21
+ *
22
+ * Cross-tab: `subscribe` listens to the `storage` event, which the spec fires
23
+ * in OTHER tabs only — the writing tab is reconciled via the store's in-memory
24
+ * path.
25
+ */
26
+
27
+ import { buildKey, buildScopePrefix } from "./_storageKey";
28
+ /** Object keys that must never be written from external (storage-derived) data. */
29
+ var RESERVED_KEYS = new Set(["__proto__", "constructor", "prototype"]);
30
+ export default function createLocalStorageAdapter(options) {
31
+ var opts = options || {};
32
+ var storage = opts.storage || (typeof window !== "undefined" && window.localStorage ? window.localStorage : null);
33
+ function isValidEnvelope(env) {
34
+ return !!env && _typeof(env) === "object" && Object.prototype.hasOwnProperty.call(env, "payload");
35
+ }
36
+ function safeRemove(key) {
37
+ if (!storage) return;
38
+ try {
39
+ storage.removeItem(key);
40
+ } catch (_unused) {
41
+ /* ignore */
42
+ }
43
+ }
44
+
45
+ /** Synchronous scan of every capability blob for `scope`. */
46
+ function loadSync(scope) {
47
+ if (!storage) return {};
48
+ var out = {};
49
+ try {
50
+ var prefix = buildScopePrefix(scope);
51
+ for (var i = 0; i < storage.length; i++) {
52
+ var key = storage.key(i);
53
+ if (!key || key.indexOf(prefix) !== 0) continue;
54
+ var capId = key.slice(prefix.length);
55
+ // Skip empty + reserved keys: a same-origin writer could craft a
56
+ // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit
57
+ // the __proto__ setter on the accumulator (SEC-LS1).
58
+ if (!capId || RESERVED_KEYS.has(capId)) continue;
59
+ var raw = storage.getItem(key);
60
+ if (!raw) continue;
61
+ try {
62
+ var env = JSON.parse(raw);
63
+ if (isValidEnvelope(env)) out[capId] = env;else safeRemove(key);
64
+ } catch (_unused2) {
65
+ safeRemove(key);
66
+ }
67
+ }
68
+ } catch (_unused3) {
69
+ /* enumeration blocked (sandboxed) — return what we have */
70
+ }
71
+ return out;
72
+ }
73
+ function load(scope) {
74
+ return Promise.resolve(loadSync(scope));
75
+ }
76
+ function save(scope, capabilityId, envelope) {
77
+ if (!storage) return Promise.resolve();
78
+ try {
79
+ storage.setItem(buildKey(scope, capabilityId), JSON.stringify(envelope));
80
+ return Promise.resolve();
81
+ } catch (e) {
82
+ // Quota exceeded / private mode / sandboxed: reject so the store keeps
83
+ // the optimistic in-memory value and notifies onError.
84
+ return Promise.reject(e);
85
+ }
86
+ }
87
+ function remove(scope, capabilityId) {
88
+ if (!storage) return Promise.resolve();
89
+ safeRemove(buildKey(scope, capabilityId));
90
+ return Promise.resolve();
91
+ }
92
+ function subscribe(scope, onChange) {
93
+ if (typeof window === "undefined" || typeof window.addEventListener !== "function") {
94
+ return function noop() {};
95
+ }
96
+ var prefix = buildScopePrefix(scope);
97
+ var handler = function handleStorage(e) {
98
+ if (!e || e.key == null) return; // e.key === null on storage.clear()
99
+ // storageArea may be undefined in some environments; only filter when present.
100
+ if (e.storageArea && e.storageArea !== storage) return;
101
+ if (e.key.indexOf(prefix) !== 0) return;
102
+ var capId = e.key.slice(prefix.length);
103
+ if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);
104
+ };
105
+ window.addEventListener("storage", handler);
106
+ return function unsubscribe() {
107
+ window.removeEventListener("storage", handler);
108
+ };
109
+ }
110
+ return Object.freeze({
111
+ name: "localStorage",
112
+ load: load,
113
+ loadSync: loadSync,
114
+ save: save,
115
+ remove: remove,
116
+ subscribe: subscribe,
117
+ capabilities: Object.freeze({
118
+ crossTab: true,
119
+ remote: false,
120
+ shared: false
121
+ })
122
+ });
123
+ }
124
+ //# sourceMappingURL=createLocalStorageAdapter.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * createMemoryAdapter — Portnet UI v2 · personalization
3
+ *
4
+ * An Adapter that keeps everything in a Map. Use it for:
5
+ * - unit tests (deterministic, no global storage state),
6
+ * - SSR / sandboxed environments where localStorage is unavailable,
7
+ * - Storybook stories (optionally pre-seeded),
8
+ * - an explicit "do not persist" opt-out.
9
+ *
10
+ * Same contract as the localStorage adapter minus `subscribe` (a single
11
+ * in-memory context has no cross-tab notion). `remote:false` lets the store
12
+ * skip the redundant async re-hydrate after a synchronous seed.
13
+ */
14
+
15
+ export default function createMemoryAdapter(options) {
16
+ var opts = options || {};
17
+ /** composite key -> envelope */
18
+ var map = new Map();
19
+ function compositeKey(scope, capabilityId) {
20
+ var tenant = scope && scope.tenantId ? scope.tenantId : "";
21
+ var user = scope && scope.userId ? scope.userId : "";
22
+ return tenant + "::" + user + "::" + capabilityId;
23
+ }
24
+ function scopePrefix(scope) {
25
+ var tenant = scope && scope.tenantId ? scope.tenantId : "";
26
+ var user = scope && scope.userId ? scope.userId : "";
27
+ return tenant + "::" + user + "::";
28
+ }
29
+ if (Array.isArray(opts.seed)) {
30
+ opts.seed.forEach(function seedEntry(entry) {
31
+ if (entry && entry.scope && entry.capabilityId && entry.envelope) {
32
+ map.set(compositeKey(entry.scope, entry.capabilityId), entry.envelope);
33
+ }
34
+ });
35
+ }
36
+ function loadSync(scope) {
37
+ var out = {};
38
+ var prefix = scopePrefix(scope);
39
+ map.forEach(function collect(envelope, key) {
40
+ if (key.indexOf(prefix) === 0) {
41
+ out[key.slice(prefix.length)] = envelope;
42
+ }
43
+ });
44
+ return out;
45
+ }
46
+ function load(scope) {
47
+ return Promise.resolve(loadSync(scope));
48
+ }
49
+ function save(scope, capabilityId, envelope) {
50
+ map.set(compositeKey(scope, capabilityId), envelope);
51
+ return Promise.resolve();
52
+ }
53
+ function remove(scope, capabilityId) {
54
+ map["delete"](compositeKey(scope, capabilityId));
55
+ return Promise.resolve();
56
+ }
57
+ return Object.freeze({
58
+ name: "memory",
59
+ load: load,
60
+ loadSync: loadSync,
61
+ save: save,
62
+ remove: remove,
63
+ capabilities: Object.freeze({
64
+ crossTab: false,
65
+ remote: false,
66
+ shared: false
67
+ })
68
+ });
69
+ }
70
+ //# sourceMappingURL=createMemoryAdapter.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * adapters — Portnet UI v2 · personalization
3
+ *
4
+ * Built-in storage adapters. A future remote adapter
5
+ * (createRestPersonalizationAdapter) drops in here and is swappable with
6
+ * zero changes to the store, the slices, the hooks, or the components.
7
+ */
8
+
9
+ export { default as createLocalStorageAdapter } from "./createLocalStorageAdapter";
10
+ export { default as createMemoryAdapter } from "./createMemoryAdapter";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["default","createLocalStorageAdapter","createMemoryAdapter"],"sources":["../../../../../src/lib/v2/personalization/adapters/index.ts"],"sourcesContent":["/**\r\n * adapters — Portnet UI v2 · personalization\r\n *\r\n * Built-in storage adapters. A future remote adapter\r\n * (createRestPersonalizationAdapter) drops in here and is swappable with\r\n * zero changes to the store, the slices, the hooks, or the components.\r\n */\r\n\r\nexport { default as createLocalStorageAdapter } from \"./createLocalStorageAdapter\";\r\nexport { default as createMemoryAdapter } from \"./createMemoryAdapter\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,IAAIC,yBAAyB,QAAQ,6BAA6B;AAClF,SAASD,OAAO,IAAIE,mBAAmB,QAAQ,uBAAuB","ignoreList":[]}