@portnet/ui 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (980) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/dist/esm/index.js +72 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +81 -86
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +155 -59
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +37 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +2 -3
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -53
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -87
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +152 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  346. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  347. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  348. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  349. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  350. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  351. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  352. package/dist/esm/v2/personalization/index.js +17 -0
  353. package/dist/esm/v2/personalization/index.js.map +1 -1
  354. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  355. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  356. package/dist/esm/v2/personalization/schema.js +8 -9
  357. package/dist/esm/v2/personalization/schema.js.map +1 -1
  358. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  359. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  360. package/dist/esm/v2/referentiel/types.js +2 -0
  361. package/dist/esm/v2/referentiel/types.js.map +1 -0
  362. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  363. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  364. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  365. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  367. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  368. package/dist/esm/v2/theme/_brand.js +8 -24
  369. package/dist/esm/v2/theme/_brand.js.map +1 -1
  370. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  371. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  372. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  373. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  374. package/dist/esm/v2/theme/cssVariables.js +62 -69
  375. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  376. package/dist/esm/v2/theme/index.js +5 -5
  377. package/dist/esm/v2/theme/index.js.map +1 -1
  378. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  379. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  380. package/dist/esm/v2/tokens/chart.js +261 -0
  381. package/dist/esm/v2/tokens/chart.js.map +1 -0
  382. package/dist/esm/v2/tokens/colors.js +22 -22
  383. package/dist/esm/v2/tokens/colors.js.map +1 -1
  384. package/dist/esm/v2/tokens/density.js +62 -7
  385. package/dist/esm/v2/tokens/density.js.map +1 -1
  386. package/dist/esm/v2/tokens/index.js +49 -34
  387. package/dist/esm/v2/tokens/index.js.map +1 -1
  388. package/dist/esm/v2/tokens/motion.js +12 -20
  389. package/dist/esm/v2/tokens/motion.js.map +1 -1
  390. package/dist/esm/v2/tokens/radius.js +1 -1
  391. package/dist/esm/v2/tokens/radius.js.map +1 -1
  392. package/dist/esm/v2/tokens/shadows.js +6 -6
  393. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  394. package/dist/esm/v2/tokens/spacing.js +2 -2
  395. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  396. package/dist/esm/v2/tokens/state.js +1 -1
  397. package/dist/esm/v2/tokens/state.js.map +1 -1
  398. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  399. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  400. package/dist/esm/v2/tokens/tokens.json +6 -1
  401. package/dist/esm/v2/tokens/typography.js +13 -13
  402. package/dist/esm/v2/tokens/typography.js.map +1 -1
  403. package/dist/esm/v2/tokens/zIndex.js +1 -1
  404. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  405. package/dist/esm/v2/types/datagrid.js.map +1 -1
  406. package/dist/esm/v2/utils/apiError.js +16 -37
  407. package/dist/esm/v2/utils/apiError.js.map +1 -1
  408. package/dist/esm/v2/utils/contrast.js +31 -32
  409. package/dist/esm/v2/utils/contrast.js.map +1 -1
  410. package/dist/esm/v2/utils/cx.js +5 -25
  411. package/dist/esm/v2/utils/cx.js.map +1 -1
  412. package/dist/esm/v2/utils/fileDownload.js +23 -26
  413. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  414. package/dist/esm/v2/utils/fileValidation.js +209 -0
  415. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  416. package/dist/esm/v2/utils/fmtDate.js +111 -0
  417. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  419. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  420. package/dist/esm/v2/utils/formikErrors.js +78 -0
  421. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  422. package/dist/esm/v2/utils/index.js +35 -2
  423. package/dist/esm/v2/utils/index.js.map +1 -1
  424. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  425. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  426. package/dist/esm/v2/utils/networkStatus.js +12 -12
  427. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  428. package/dist/index.d.ts +7 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +110 -49
  431. package/dist/index.js.map +1 -1
  432. package/dist/v2/__tests__/AppMain.test.js +133 -0
  433. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  434. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  435. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  436. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  437. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  438. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  439. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  440. package/dist/v2/__tests__/FieldError.test.js +82 -49
  441. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  442. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  443. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  444. package/dist/v2/__tests__/FieldWidth.test.js +23 -25
  445. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
  446. package/dist/v2/__tests__/FileCard.test.js +29 -28
  447. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  448. package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
  449. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
  451. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  452. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  453. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
  455. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  456. package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
  457. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  458. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  459. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  460. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  461. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  462. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  463. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  464. package/dist/v2/__tests__/apiError.test.js +50 -69
  465. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  466. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  467. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  468. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  469. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  470. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  471. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  472. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  473. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  474. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  475. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  476. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  477. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  478. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  479. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  480. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  481. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  482. package/dist/v2/__tests__/labels-merge.test.js +23 -27
  483. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  484. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  485. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  486. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  487. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  488. package/dist/v2/__tests__/rowActions.test.js +186 -0
  489. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  490. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  491. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  493. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  494. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  495. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  496. package/dist/v2/components/Accordion.js +60 -82
  497. package/dist/v2/components/Accordion.js.map +1 -1
  498. package/dist/v2/components/ActionStrip.js +40 -52
  499. package/dist/v2/components/ActionStrip.js.map +1 -1
  500. package/dist/v2/components/Banner.js +42 -41
  501. package/dist/v2/components/Banner.js.map +1 -1
  502. package/dist/v2/components/Busy.js +22 -27
  503. package/dist/v2/components/Busy.js.map +1 -1
  504. package/dist/v2/components/Button.js +39 -50
  505. package/dist/v2/components/Button.js.map +1 -1
  506. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  507. package/dist/v2/components/CategoryTag.js +49 -32
  508. package/dist/v2/components/CategoryTag.js.map +1 -1
  509. package/dist/v2/components/Checkbox.js +39 -45
  510. package/dist/v2/components/Checkbox.js.map +1 -1
  511. package/dist/v2/components/Chip.js +29 -42
  512. package/dist/v2/components/Chip.js.map +1 -1
  513. package/dist/v2/components/Combobox.js +122 -144
  514. package/dist/v2/components/Combobox.js.map +1 -1
  515. package/dist/v2/components/CommandPalette.js +138 -225
  516. package/dist/v2/components/CommandPalette.js.map +1 -1
  517. package/dist/v2/components/ConfirmDialog.js +46 -56
  518. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  519. package/dist/v2/components/DatePicker.js +81 -86
  520. package/dist/v2/components/DatePicker.js.map +1 -1
  521. package/dist/v2/components/DateRangePicker.js +77 -87
  522. package/dist/v2/components/DateRangePicker.js.map +1 -1
  523. package/dist/v2/components/DateTimePicker.js +84 -91
  524. package/dist/v2/components/DateTimePicker.js.map +1 -1
  525. package/dist/v2/components/Drawer.d.ts.map +1 -1
  526. package/dist/v2/components/Drawer.js +93 -88
  527. package/dist/v2/components/Drawer.js.map +1 -1
  528. package/dist/v2/components/Dropzone.js +150 -196
  529. package/dist/v2/components/Dropzone.js.map +1 -1
  530. package/dist/v2/components/EmptyState.js +18 -20
  531. package/dist/v2/components/EmptyState.js.map +1 -1
  532. package/dist/v2/components/FavoriteToggle.js +28 -39
  533. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  534. package/dist/v2/components/Field.d.ts +62 -4
  535. package/dist/v2/components/Field.d.ts.map +1 -1
  536. package/dist/v2/components/Field.js +169 -70
  537. package/dist/v2/components/Field.js.map +1 -1
  538. package/dist/v2/components/FieldError.js +18 -21
  539. package/dist/v2/components/FieldError.js.map +1 -1
  540. package/dist/v2/components/FieldHelp.js +40 -60
  541. package/dist/v2/components/FieldHelp.js.map +1 -1
  542. package/dist/v2/components/FileCard.js +27 -31
  543. package/dist/v2/components/FileCard.js.map +1 -1
  544. package/dist/v2/components/FilterTab.js +30 -38
  545. package/dist/v2/components/FilterTab.js.map +1 -1
  546. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  547. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  548. package/dist/v2/components/ForbiddenPage.js +37 -17
  549. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  550. package/dist/v2/components/FormGrid.js +53 -59
  551. package/dist/v2/components/FormGrid.js.map +1 -1
  552. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  553. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  554. package/dist/v2/components/FormikDisplay.js +108 -33
  555. package/dist/v2/components/FormikDisplay.js.map +1 -1
  556. package/dist/v2/components/Input.d.ts +40 -0
  557. package/dist/v2/components/Input.d.ts.map +1 -1
  558. package/dist/v2/components/Input.js +81 -41
  559. package/dist/v2/components/Input.js.map +1 -1
  560. package/dist/v2/components/KPICard.js +57 -67
  561. package/dist/v2/components/KPICard.js.map +1 -1
  562. package/dist/v2/components/KPIStrip.js +16 -22
  563. package/dist/v2/components/KPIStrip.js.map +1 -1
  564. package/dist/v2/components/KV.js +25 -31
  565. package/dist/v2/components/KV.js.map +1 -1
  566. package/dist/v2/components/KVGrid.js +19 -26
  567. package/dist/v2/components/KVGrid.js.map +1 -1
  568. package/dist/v2/components/Layout.js +91 -120
  569. package/dist/v2/components/Layout.js.map +1 -1
  570. package/dist/v2/components/MobileRowCard.js +79 -91
  571. package/dist/v2/components/MobileRowCard.js.map +1 -1
  572. package/dist/v2/components/Modal.js +61 -69
  573. package/dist/v2/components/Modal.js.map +1 -1
  574. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  575. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  576. package/dist/v2/components/NetworkErrorPage.js +38 -21
  577. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  578. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  579. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  580. package/dist/v2/components/NotFoundPage.js +37 -18
  581. package/dist/v2/components/NotFoundPage.js.map +1 -1
  582. package/dist/v2/components/NumberInput.js +88 -118
  583. package/dist/v2/components/NumberInput.js.map +1 -1
  584. package/dist/v2/components/OverflowMenu.js +38 -56
  585. package/dist/v2/components/OverflowMenu.js.map +1 -1
  586. package/dist/v2/components/PdfViewer.js +34 -45
  587. package/dist/v2/components/PdfViewer.js.map +1 -1
  588. package/dist/v2/components/ProgressBar.js +42 -49
  589. package/dist/v2/components/ProgressBar.js.map +1 -1
  590. package/dist/v2/components/Radio.js +59 -67
  591. package/dist/v2/components/Radio.js.map +1 -1
  592. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  593. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  594. package/dist/v2/components/SectionHeader.js +34 -41
  595. package/dist/v2/components/SectionHeader.js.map +1 -1
  596. package/dist/v2/components/Segmented.js +69 -93
  597. package/dist/v2/components/Segmented.js.map +1 -1
  598. package/dist/v2/components/Select.d.ts +26 -2
  599. package/dist/v2/components/Select.d.ts.map +1 -1
  600. package/dist/v2/components/Select.js +120 -155
  601. package/dist/v2/components/Select.js.map +1 -1
  602. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  603. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  604. package/dist/v2/components/ServerErrorPage.js +37 -20
  605. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  606. package/dist/v2/components/Skeleton.js +86 -100
  607. package/dist/v2/components/Skeleton.js.map +1 -1
  608. package/dist/v2/components/SkipLink.js +9 -12
  609. package/dist/v2/components/SkipLink.js.map +1 -1
  610. package/dist/v2/components/Spinner.js +16 -25
  611. package/dist/v2/components/Spinner.js.map +1 -1
  612. package/dist/v2/components/Status.js +18 -29
  613. package/dist/v2/components/Status.js.map +1 -1
  614. package/dist/v2/components/Stepper.js +80 -82
  615. package/dist/v2/components/Stepper.js.map +1 -1
  616. package/dist/v2/components/Surface.js +34 -49
  617. package/dist/v2/components/Surface.js.map +1 -1
  618. package/dist/v2/components/Switch.js +29 -37
  619. package/dist/v2/components/Switch.js.map +1 -1
  620. package/dist/v2/components/TabPanel.d.ts +17 -0
  621. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  622. package/dist/v2/components/TabPanel.js +90 -0
  623. package/dist/v2/components/TabPanel.js.map +1 -0
  624. package/dist/v2/components/Tabs.d.ts +25 -0
  625. package/dist/v2/components/Tabs.d.ts.map +1 -1
  626. package/dist/v2/components/Tabs.js +53 -29
  627. package/dist/v2/components/Tabs.js.map +1 -1
  628. package/dist/v2/components/TelInput.js +80 -115
  629. package/dist/v2/components/TelInput.js.map +1 -1
  630. package/dist/v2/components/Textarea.js +26 -35
  631. package/dist/v2/components/Textarea.js.map +1 -1
  632. package/dist/v2/components/TimePicker.js +62 -74
  633. package/dist/v2/components/TimePicker.js.map +1 -1
  634. package/dist/v2/components/Toast.js +119 -174
  635. package/dist/v2/components/Toast.js.map +1 -1
  636. package/dist/v2/components/Tooltip.js +23 -38
  637. package/dist/v2/components/Tooltip.js.map +1 -1
  638. package/dist/v2/components/_ErrorPageBody.js +15 -16
  639. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  640. package/dist/v2/components/_pickerShared.js +5 -5
  641. package/dist/v2/components/_pickerShared.js.map +1 -1
  642. package/dist/v2/components/index.d.ts +40 -1
  643. package/dist/v2/components/index.d.ts.map +1 -1
  644. package/dist/v2/components/index.js +153 -136
  645. package/dist/v2/components/index.js.map +1 -1
  646. package/dist/v2/hooks/index.d.ts +65 -0
  647. package/dist/v2/hooks/index.d.ts.map +1 -1
  648. package/dist/v2/hooks/index.js +63 -24
  649. package/dist/v2/hooks/index.js.map +1 -1
  650. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  651. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  652. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  653. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  654. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  655. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  656. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  657. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  658. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  659. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  660. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  661. package/dist/v2/hooks/useDensity.js +14 -18
  662. package/dist/v2/hooks/useDensity.js.map +1 -1
  663. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  664. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  665. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  666. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  667. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  668. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  669. package/dist/v2/hooks/useFocusTrap.js +20 -24
  670. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  671. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  672. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  673. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  674. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  675. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  676. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  677. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  678. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  679. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  680. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  681. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  682. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  683. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  684. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  685. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  687. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  688. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  689. package/dist/v2/hooks/useSortedRows.js +4 -6
  690. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  691. package/dist/v2/hooks/useTabLoading.js +7 -22
  692. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  693. package/dist/v2/index.js +143 -145
  694. package/dist/v2/index.js.map +1 -1
  695. package/dist/v2/modalContext.js +2 -2
  696. package/dist/v2/modalContext.js.map +1 -1
  697. package/dist/v2/models/favorite.d.ts +8 -9
  698. package/dist/v2/models/favorite.d.ts.map +1 -1
  699. package/dist/v2/models/favorite.js.map +1 -1
  700. package/dist/v2/models/index.js +4 -4
  701. package/dist/v2/models/index.js.map +1 -1
  702. package/dist/v2/models/personalization.d.ts +44 -48
  703. package/dist/v2/models/personalization.d.ts.map +1 -1
  704. package/dist/v2/models/personalization.js.map +1 -1
  705. package/dist/v2/models/referentiel.d.ts +32 -50
  706. package/dist/v2/models/referentiel.d.ts.map +1 -1
  707. package/dist/v2/models/referentiel.js.map +1 -1
  708. package/dist/v2/models/savedFilter.d.ts +8 -17
  709. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  710. package/dist/v2/models/savedFilter.js.map +1 -1
  711. package/dist/v2/patterns/ActionBar.js +152 -187
  712. package/dist/v2/patterns/ActionBar.js.map +1 -1
  713. package/dist/v2/patterns/AppMain.d.ts +109 -0
  714. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  715. package/dist/v2/patterns/AppMain.js +115 -0
  716. package/dist/v2/patterns/AppMain.js.map +1 -0
  717. package/dist/v2/patterns/BulkActionBar.js +40 -42
  718. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  719. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  720. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  721. package/dist/v2/patterns/ChartFigure.js +159 -0
  722. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  723. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  724. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  725. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  726. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  727. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  728. package/dist/v2/patterns/DataGrid.js +262 -297
  729. package/dist/v2/patterns/DataGrid.js.map +1 -1
  730. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  731. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  733. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  734. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  735. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  736. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  737. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  738. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  739. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  740. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  741. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  742. package/dist/v2/patterns/DetailSplit.js +116 -0
  743. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  744. package/dist/v2/patterns/FavoriteColumn.js +22 -23
  745. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  746. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  747. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  748. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  749. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  750. package/dist/v2/patterns/FilterTabBar.js +120 -0
  751. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  752. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  753. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  754. package/dist/v2/patterns/FormPageShell.js +53 -50
  755. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  756. package/dist/v2/patterns/FormSection.d.ts +8 -3
  757. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  758. package/dist/v2/patterns/FormSection.js +44 -51
  759. package/dist/v2/patterns/FormSection.js.map +1 -1
  760. package/dist/v2/patterns/FormikCheckbox.js +36 -45
  761. package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
  762. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  763. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  765. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  766. package/dist/v2/patterns/FormikCombobox.js +55 -72
  767. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  768. package/dist/v2/patterns/FormikDatePicker.js +50 -64
  769. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  770. package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
  771. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
  772. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  773. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  774. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  775. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  776. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  777. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  778. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  779. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikFile.js +99 -83
  781. package/dist/v2/patterns/FormikFile.js.map +1 -1
  782. package/dist/v2/patterns/FormikInput.js +45 -58
  783. package/dist/v2/patterns/FormikInput.js.map +1 -1
  784. package/dist/v2/patterns/FormikRadioGroup.js +45 -56
  785. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
  786. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  787. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  788. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  789. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  790. package/dist/v2/patterns/FormikSelect.js +70 -92
  791. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  792. package/dist/v2/patterns/FormikTextarea.js +35 -51
  793. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  794. package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
  795. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  796. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  797. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  798. package/dist/v2/patterns/PageContent.js +17 -20
  799. package/dist/v2/patterns/PageContent.js.map +1 -1
  800. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  801. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  802. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  803. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  804. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  805. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/ReferentielField.js +347 -327
  807. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
  809. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
  810. package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
  811. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
  812. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  813. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  814. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  815. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  816. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  817. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  818. package/dist/v2/patterns/SortableHeader.js +35 -57
  819. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  820. package/dist/v2/patterns/Tour.js +121 -142
  821. package/dist/v2/patterns/Tour.js.map +1 -1
  822. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  823. package/dist/v2/patterns/_dataGridShared.js +131 -147
  824. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  825. package/dist/v2/patterns/_pickerSerialisation.js +9 -10
  826. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
  827. package/dist/v2/patterns/_sort.js +17 -33
  828. package/dist/v2/patterns/_sort.js.map +1 -1
  829. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  830. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  831. package/dist/v2/patterns/_useColumnResize.js +80 -99
  832. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  833. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  834. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  835. package/dist/v2/patterns/filterCriteria.js +110 -0
  836. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  837. package/dist/v2/patterns/index.d.ts +160 -0
  838. package/dist/v2/patterns/index.d.ts.map +1 -1
  839. package/dist/v2/patterns/index.js +157 -79
  840. package/dist/v2/patterns/index.js.map +1 -1
  841. package/dist/v2/patterns/rowActions.d.ts +150 -0
  842. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  843. package/dist/v2/patterns/rowActions.js +232 -0
  844. package/dist/v2/patterns/rowActions.js.map +1 -0
  845. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  846. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  847. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  848. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  849. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  850. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  851. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  852. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  853. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  854. package/dist/v2/personalization/adapters/index.js +5 -5
  855. package/dist/v2/personalization/adapters/index.js.map +1 -1
  856. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  857. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  858. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  859. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  860. package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
  861. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  862. package/dist/v2/personalization/capabilities/index.js +12 -12
  863. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  864. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  865. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  866. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  867. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  868. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  869. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  870. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  871. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  872. package/dist/v2/personalization/index.d.ts +16 -0
  873. package/dist/v2/personalization/index.d.ts.map +1 -1
  874. package/dist/v2/personalization/index.js +30 -23
  875. package/dist/v2/personalization/index.js.map +1 -1
  876. package/dist/v2/personalization/personalizationContext.js +10 -12
  877. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  878. package/dist/v2/personalization/schema.js +8 -9
  879. package/dist/v2/personalization/schema.js.map +1 -1
  880. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  881. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  882. package/dist/v2/referentiel/index.js +11 -13
  883. package/dist/v2/referentiel/index.js.map +1 -1
  884. package/dist/v2/referentiel/types.d.ts +105 -0
  885. package/dist/v2/referentiel/types.d.ts.map +1 -0
  886. package/dist/v2/referentiel/types.js +6 -0
  887. package/dist/v2/referentiel/types.js.map +1 -0
  888. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  889. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  890. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  891. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  892. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  893. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  894. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  895. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  896. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  897. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  898. package/dist/v2/theme/_brand.js +12 -26
  899. package/dist/v2/theme/_brand.js.map +1 -1
  900. package/dist/v2/theme/_brandSecondary.js +12 -26
  901. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  902. package/dist/v2/theme/createPortnetTheme.js +41 -49
  903. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  904. package/dist/v2/theme/cssVariables.d.ts +3 -3
  905. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  906. package/dist/v2/theme/cssVariables.js +65 -70
  907. package/dist/v2/theme/cssVariables.js.map +1 -1
  908. package/dist/v2/theme/index.js +10 -10
  909. package/dist/v2/theme/index.js.map +1 -1
  910. package/dist/v2/tokens/breakpoints.js +16 -16
  911. package/dist/v2/tokens/breakpoints.js.map +1 -1
  912. package/dist/v2/tokens/chart.d.ts +103 -0
  913. package/dist/v2/tokens/chart.d.ts.map +1 -0
  914. package/dist/v2/tokens/chart.js +270 -0
  915. package/dist/v2/tokens/chart.js.map +1 -0
  916. package/dist/v2/tokens/colors.js +24 -24
  917. package/dist/v2/tokens/colors.js.map +1 -1
  918. package/dist/v2/tokens/density.d.ts +104 -0
  919. package/dist/v2/tokens/density.d.ts.map +1 -1
  920. package/dist/v2/tokens/density.js +67 -12
  921. package/dist/v2/tokens/density.js.map +1 -1
  922. package/dist/v2/tokens/index.d.ts +50 -1
  923. package/dist/v2/tokens/index.d.ts.map +1 -1
  924. package/dist/v2/tokens/index.js +116 -68
  925. package/dist/v2/tokens/index.js.map +1 -1
  926. package/dist/v2/tokens/motion.js +16 -22
  927. package/dist/v2/tokens/motion.js.map +1 -1
  928. package/dist/v2/tokens/radius.js +3 -3
  929. package/dist/v2/tokens/radius.js.map +1 -1
  930. package/dist/v2/tokens/shadows.js +8 -8
  931. package/dist/v2/tokens/shadows.js.map +1 -1
  932. package/dist/v2/tokens/spacing.js +4 -4
  933. package/dist/v2/tokens/spacing.js.map +1 -1
  934. package/dist/v2/tokens/state.js +3 -3
  935. package/dist/v2/tokens/state.js.map +1 -1
  936. package/dist/v2/tokens/statusPalette.js +21 -23
  937. package/dist/v2/tokens/statusPalette.js.map +1 -1
  938. package/dist/v2/tokens/tokens.json +6 -1
  939. package/dist/v2/tokens/typography.js +15 -15
  940. package/dist/v2/tokens/typography.js.map +1 -1
  941. package/dist/v2/tokens/zIndex.js +3 -3
  942. package/dist/v2/tokens/zIndex.js.map +1 -1
  943. package/dist/v2/types/datagrid.d.ts +9 -1
  944. package/dist/v2/types/datagrid.d.ts.map +1 -1
  945. package/dist/v2/types/datagrid.js.map +1 -1
  946. package/dist/v2/types/index.js +2 -2
  947. package/dist/v2/types/index.js.map +1 -1
  948. package/dist/v2/utils/apiError.js +16 -37
  949. package/dist/v2/utils/apiError.js.map +1 -1
  950. package/dist/v2/utils/contrast.js +31 -32
  951. package/dist/v2/utils/contrast.js.map +1 -1
  952. package/dist/v2/utils/cx.js +7 -27
  953. package/dist/v2/utils/cx.js.map +1 -1
  954. package/dist/v2/utils/fileDownload.js +25 -28
  955. package/dist/v2/utils/fileDownload.js.map +1 -1
  956. package/dist/v2/utils/fileValidation.d.ts +116 -0
  957. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  958. package/dist/v2/utils/fileValidation.js +220 -0
  959. package/dist/v2/utils/fileValidation.js.map +1 -0
  960. package/dist/v2/utils/fmtDate.d.ts +103 -0
  961. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  962. package/dist/v2/utils/fmtDate.js +119 -0
  963. package/dist/v2/utils/fmtDate.js.map +1 -0
  964. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  965. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  966. package/dist/v2/utils/fmtMoney.js +9 -11
  967. package/dist/v2/utils/fmtMoney.js.map +1 -1
  968. package/dist/v2/utils/formikErrors.d.ts +67 -0
  969. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  970. package/dist/v2/utils/formikErrors.js +85 -0
  971. package/dist/v2/utils/formikErrors.js.map +1 -0
  972. package/dist/v2/utils/index.d.ts +5 -0
  973. package/dist/v2/utils/index.d.ts.map +1 -1
  974. package/dist/v2/utils/index.js +67 -18
  975. package/dist/v2/utils/index.js.map +1 -1
  976. package/dist/v2/utils/mergeLabels.js +9 -14
  977. package/dist/v2/utils/mergeLabels.js.map +1 -1
  978. package/dist/v2/utils/networkStatus.js +14 -14
  979. package/dist/v2/utils/networkStatus.js.map +1 -1
  980. package/package.json +26 -9
@@ -1,13 +1,3 @@
1
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
9
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
10
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
1
  /**
12
2
  * CSS Variables emitter — Portnet UI v2
13
3
  *
@@ -35,13 +25,13 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
25
  * same resolvers (./_brand, ./_brandSecondary) so mismatches are
36
26
  * structurally impossible.
37
27
  */
38
- import { ink, surface, border, semantic, status, dark, fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, spacing, radius, shadows, duration, easing, zIndex, density, layout, breakpoints, state } from "../tokens";
28
+ import { ink, surface, border, semantic, status, dark, fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, spacing, radius, shadows, duration, easing, zIndex, density, layout, breakpoints, state, chartCategorical } from "../tokens";
39
29
  import { resolveBrand } from "./_brand";
40
30
  import { resolveBrandSecondary } from "./_brandSecondary";
41
31
 
42
32
  /** Options for the CSS-variable emitter / injector. */
43
33
 
44
- var STYLE_TAG_ID = "portnet-ui-v2-tokens";
34
+ const STYLE_TAG_ID = "portnet-ui-v2-tokens";
45
35
 
46
36
  /**
47
37
  * Spacing partition: numeric grid keys (s1..s10) vs semantic aliases
@@ -51,30 +41,21 @@ var STYLE_TAG_ID = "portnet-ui-v2-tokens";
51
41
  *
52
42
  * Uses Object.entries at module-load time — pure / no side-effects.
53
43
  */
54
- var NUMERIC_GRID_RE = /^s\d+$/;
55
- var SPACING_ENTRIES = Object.entries(spacing);
56
- var NUMERIC_ENTRIES = SPACING_ENTRIES.filter(function (_ref) {
57
- var _ref2 = _slicedToArray(_ref, 1),
58
- k = _ref2[0];
59
- return NUMERIC_GRID_RE.test(k);
60
- });
61
- var ALIAS_ENTRIES = SPACING_ENTRIES.filter(function (_ref3) {
62
- var _ref4 = _slicedToArray(_ref3, 1),
63
- k = _ref4[0];
64
- return !NUMERIC_GRID_RE.test(k);
65
- });
44
+ const NUMERIC_GRID_RE = /^s\d+$/;
45
+ const SPACING_ENTRIES = Object.entries(spacing);
46
+ const NUMERIC_ENTRIES = SPACING_ENTRIES.filter(([k]) => NUMERIC_GRID_RE.test(k));
47
+ const ALIAS_ENTRIES = SPACING_ENTRIES.filter(([k]) => !NUMERIC_GRID_RE.test(k));
66
48
 
67
49
  /**
68
50
  * Emits the canonical :root block + sidebar / density / dark-mode overrides.
69
51
  * Pass a partial `brand` / `brandSecondary` to mirror a host theme override
70
52
  * (use the SAME object you pass to createPortnetTheme so the two layers agree).
71
53
  */
72
- export function getCssVariables() {
73
- var _radius$none;
74
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
75
- var brand = resolveBrand(options.brand);
76
- var brandSecondary = resolveBrandSecondary(options.brandSecondary);
77
- var lightVars = ["/* \u2500\u2500 Brand \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--accent: ".concat(brand.accent, ";"), "--accent-hover: ".concat(brand.accentHover, ";"), "--accent-soft: ".concat(brand.accentSoft, ";"), "--accent-fg: ".concat(brand.accentFg, ";"), "", "/* \u2500\u2500 Brand secondary \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--secondary: ".concat(brandSecondary.secondary, ";"), "--secondary-fg: ".concat(brandSecondary.secondaryFg, ";"), "", "/* \u2500\u2500 Ink \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--fg: ".concat(ink.fg, ";"), "--fg-muted: ".concat(ink.fgMuted, ";"), "--fg-subtle: ".concat(ink.fgSubtle, ";"), "--fg-inverse: ".concat(ink.fgInverse, ";"), "", "/* \u2500\u2500 Surface \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--bg: ".concat(surface.bg, ";"), "--bg-elev: ".concat(surface.bgElev, ";"), "--bg-subtle: ".concat(surface.bgSubtle, ";"), "--bg-hover: ".concat(surface.bgHover, ";"), "--surface: ".concat(surface.surface, ";"), "", "/* \u2500\u2500 Border \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--border: ".concat(border.border, ";"), "--border-strong: ".concat(border.borderStrong, ";"), "", "/* \u2500\u2500 Semantic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "/* Each concept has a saturated fill (--<name>) and a darker text */", "/* foreground (--<name>-fg). Pair fills with text on the same surface. */", "--success: ".concat(semantic.success, ";"), "--success-soft: ".concat(semantic.successSoft, ";"), "--success-fg: ".concat(semantic.successFg, ";"), "--warning: ".concat(semantic.warning, ";"), "--warning-soft: ".concat(semantic.warningSoft, ";"), "--warning-fg: ".concat(semantic.warningFg, ";"), "--danger: ".concat(semantic.danger, ";"), "--danger-soft: ".concat(semantic.dangerSoft, ";"), "--danger-fg: ".concat(semantic.dangerFg, ";"), "--info: ".concat(semantic.info, ";"), "--info-soft: ".concat(semantic.infoSoft, ";"), "--info-fg: ".concat(semantic.infoFg, ";"), "", "/* \u2500\u2500 Status palette \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--status-new-soft: ".concat(status["new"].soft, ";"), "--status-new-fg: ".concat(status["new"].fg, ";"), "--status-sent-soft: ".concat(status.sent.soft, ";"), "--status-sent-fg: ".concat(status.sent.fg, ";"), "--status-pending-soft: ".concat(status.pending.soft, ";"), "--status-pending-fg: ".concat(status.pending.fg, ";"), "--status-approved-soft: ".concat(status.approved.soft, ";"), "--status-approved-fg: ".concat(status.approved.fg, ";"), "--status-rejected-soft: ".concat(status.rejected.soft, ";"), "--status-rejected-fg: ".concat(status.rejected.fg, ";"), "--status-neutral-soft: ".concat(status.neutral.soft, ";"), "--status-neutral-fg: ".concat(status.neutral.fg, ";"), "", "/* \u2500\u2500 State overlays (B2 \u2014 currentColor-based) \u2500\u2500\u2500 */", "--state-hover-overlay: ".concat(state.hoverOverlay, ";"), "--state-pressed-overlay: ".concat(state.pressedOverlay, ";"), "--state-selected-overlay: ".concat(state.selectedOverlay, ";"), "", "/* \u2500\u2500 Typography \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--font-sans: ".concat(fontFamily.sans, ";"), "--font-mono: ".concat(fontFamily.mono, ";"), "--text-display: ".concat(fontSize.display, "px;"), "--text-h2: ".concat(fontSize.h2, "px;"), "--text-h3: ".concat(fontSize.h3, "px;"), "--text-h4: ".concat(fontSize.h4, "px;"), "--text-body: ".concat(fontSize.body, "px;"), "--text-sm: ".concat(fontSize.sm, "px;"), "--text-xs: ".concat(fontSize.xs, "px;"), "--fw-regular: ".concat(fontWeight.regular, ";"), "--fw-medium: ".concat(fontWeight.medium, ";"), "--fw-semibold: ".concat(fontWeight.semibold, ";"), "--fw-bold: ".concat(fontWeight.bold, ";"), // NOTE: there is deliberately no heavier weight than bold (700). Batch 1
54
+ export function getCssVariables(options = {}) {
55
+ const brand = resolveBrand(options.brand);
56
+ const brandSecondary = resolveBrandSecondary(options.brandSecondary);
57
+ const lightVars = [`/* ── Brand ─────────────────────────────────────── */`, `--accent: ${brand.accent};`, `--accent-hover: ${brand.accentHover};`, `--accent-soft: ${brand.accentSoft};`, `--accent-fg: ${brand.accentFg};`, ``, `/* ── Brand secondary ───────────────────────────── */`, `--secondary: ${brandSecondary.secondary};`, `--secondary-fg: ${brandSecondary.secondaryFg};`, ``, `/* ── Ink ───────────────────────────────────────── */`, `--fg: ${ink.fg};`, `--fg-muted: ${ink.fgMuted};`, `--fg-subtle: ${ink.fgSubtle};`, `--fg-inverse: ${ink.fgInverse};`, ``, `/* ── Surface ───────────────────────────────────── */`, `--bg: ${surface.bg};`, `--bg-elev: ${surface.bgElev};`, `--bg-subtle: ${surface.bgSubtle};`, `--bg-hover: ${surface.bgHover};`, `--surface: ${surface.surface};`, ``, `/* ── Border ────────────────────────────────────── */`, `--border: ${border.border};`, `--border-strong: ${border.borderStrong};`, ``, `/* ── Semantic ──────────────────────────────────── */`, `/* Each concept has a saturated fill (--<name>) and a darker text */`, `/* foreground (--<name>-fg). Pair fills with text on the same surface. */`, `--success: ${semantic.success};`, `--success-soft: ${semantic.successSoft};`, `--success-fg: ${semantic.successFg};`, `--warning: ${semantic.warning};`, `--warning-soft: ${semantic.warningSoft};`, `--warning-fg: ${semantic.warningFg};`, `--danger: ${semantic.danger};`, `--danger-soft: ${semantic.dangerSoft};`, `--danger-fg: ${semantic.dangerFg};`, `--info: ${semantic.info};`, `--info-soft: ${semantic.infoSoft};`, `--info-fg: ${semantic.infoFg};`, ``, `/* ── Status palette ────────────────────────────── */`, `--status-new-soft: ${status.new.soft};`, `--status-new-fg: ${status.new.fg};`, `--status-sent-soft: ${status.sent.soft};`, `--status-sent-fg: ${status.sent.fg};`, `--status-pending-soft: ${status.pending.soft};`, `--status-pending-fg: ${status.pending.fg};`, `--status-approved-soft: ${status.approved.soft};`, `--status-approved-fg: ${status.approved.fg};`, `--status-rejected-soft: ${status.rejected.soft};`, `--status-rejected-fg: ${status.rejected.fg};`, `--status-neutral-soft: ${status.neutral.soft};`, `--status-neutral-fg: ${status.neutral.fg};`, ``, `/* ── Chart categorical palette (gap G-37) ────── */`, `/* Category fills, NOT workflow state — see tokens/chart. Emitted */`, `/* for CSS and sx; chart libraries should take the JS token, since */`, `/* an SVG presentation attribute given a var() is not resolved by */`, `/* every renderer. NO DARK OVERRIDE IS NEEDED, deliberately: every */`, `/* entry clears the 3:1 non-text floor on the light AND the dark */`, `/* surface, which is the constraint the values were solved for. */`, ...chartCategorical.map((c, i) => `--chart-${i + 1}: ${c};`), ``, `/* ── State overlays (B2 — currentColor-based) ─── */`, `--state-hover-overlay: ${state.hoverOverlay};`, `--state-pressed-overlay: ${state.pressedOverlay};`, `--state-selected-overlay: ${state.selectedOverlay};`, ``, `/* ── Typography ────────────────────────────────── */`, `--font-sans: ${fontFamily.sans};`, `--font-mono: ${fontFamily.mono};`, `--text-display: ${fontSize.display}px;`, `--text-h2: ${fontSize.h2}px;`, `--text-h3: ${fontSize.h3}px;`, `--text-h4: ${fontSize.h4}px;`, `--text-body: ${fontSize.body}px;`, `--text-sm: ${fontSize.sm}px;`, `--text-xs: ${fontSize.xs}px;`, `--fw-regular: ${fontWeight.regular};`, `--fw-medium: ${fontWeight.medium};`, `--fw-semibold: ${fontWeight.semibold};`, `--fw-bold: ${fontWeight.bold};`,
58
+ // NOTE: there is deliberately no heavier weight than bold (700). Batch 1
78
59
  // dropped the black weight from the typography tokens, and this file kept
79
60
  // emitting the matching variable for a while — resolving to the literal
80
61
  // string "undefined" in :root, which silently flattened every consumer that
@@ -84,43 +65,59 @@ export function getCssVariables() {
84
65
  // The old variable name is deliberately not written out: banned-patterns
85
66
  // scans raw file text with no comment awareness, so naming it here — even to
86
67
  // record its removal — trips the rule that protects this block.
87
- "--lh-tight: ".concat(lineHeight.tight, ";"), "--lh-snug: ".concat(lineHeight.snug, ";"), "--lh-normal: ".concat(lineHeight.normal, ";"), "--lh-loose: ".concat(lineHeight.loose, ";"), // A7-02 — letter-spacing scale. Six token names were referenced fleet-wide
68
+ `--lh-tight: ${lineHeight.tight};`, `--lh-snug: ${lineHeight.snug};`, `--lh-normal: ${lineHeight.normal};`, `--lh-loose: ${lineHeight.loose};`,
69
+ // A7-02 — letter-spacing scale. Six token names were referenced fleet-wide
88
70
  // that this emitter never emitted, so their var() fallbacks were the only
89
71
  // thing that ever rendered (R-2.3 / R-AI.1 magic values wearing a token's
90
72
  // name). These two had a real platform basis — -0.01em was hardcoded twice
91
73
  // in tokens/typography.ts itself, 0.04em inside KV and ConfirmDialog — so
92
74
  // they are promoted. `--border-subtle`, `--r-xs`, `--icon-sm`, `--icon-xl`
93
75
  // were local inventions and are fixed at their call sites instead.
94
- "--ls-tight: ".concat(letterSpacing.tight, ";"), "--ls-normal: ".concat(letterSpacing.normal, ";"), "--ls-wide: ".concat(letterSpacing.wide, ";"), "", "/* \u2500\u2500 Spacing \u2014 numeric grid (8 px base) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */"].concat(_toConsumableArray(NUMERIC_ENTRIES.map(function (_ref5) {
95
- var _ref6 = _slicedToArray(_ref5, 2),
96
- k = _ref6[0],
97
- v = _ref6[1];
98
- return "--s-".concat(k.slice(1), ": ").concat(v, "px;");
99
- })), ["", "/* \u2500\u2500 Spacing \u2014 semantic aliases \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */"], _toConsumableArray(ALIAS_ENTRIES.map(function (_ref7) {
100
- var _ref8 = _slicedToArray(_ref7, 2),
101
- k = _ref8[0],
102
- v = _ref8[1];
103
- return "--space-".concat(k, ": ").concat(v, "px;");
104
- })), ["", "/* \u2500\u2500 Radius \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--r-none: ".concat((_radius$none = radius.none) !== null && _radius$none !== void 0 ? _radius$none : 0, "px;"), "--r-sm: ".concat(radius.sm, "px;"), "--r-md: ".concat(radius.md, "px;"), "--r-lg: ".concat(radius.lg, "px;"), "--r-xl: ".concat(radius.xl, "px;"), "--r-full: ".concat(radius.full, "px;"), "", "/* \u2500\u2500 Shadows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--shadow-xs: ".concat(shadows.xs, ";"), "--shadow-sm: ".concat(shadows.sm, ";"), "--shadow-md: ".concat(shadows.md, ";"), "--shadow-lg: ".concat(shadows.lg, ";"), "--shadow-focus: ".concat(shadows.focus, ";")], _toConsumableArray(shadows.focusFallback ? ["--shadow-focus-fallback: ".concat(shadows.focusFallback, ";")] : []), ["", "/* \u2500\u2500 Motion (temporal vocabulary) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--duration-fast: ".concat(duration.fast, "ms;"), "--duration-base: ".concat(duration.base, "ms;"), "--duration-slow: ".concat(duration.slow, "ms;"), "", "/* \u2500\u2500 Motion (semantic aliases \u2014 B6) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", // Same numeric values as fast/base/slow; intent-readable at the
76
+ `--ls-tight: ${letterSpacing.tight};`, `--ls-normal: ${letterSpacing.normal};`, `--ls-wide: ${letterSpacing.wide};`, ``, `/* ── Spacing numeric grid (8 px base) ─────────── */`,
77
+ // s1..s10 --s-1 .. --s-10 (preserves all existing consumers).
78
+ ...NUMERIC_ENTRIES.map(([k, v]) => `--s-${k.slice(1)}: ${v}px;`), ``, `/* ── Spacing — semantic aliases ────────────────── */`,
79
+ // xs/sm/md/lg/xl/xxl → --space-xs .. --space-xxl. The "space-"
80
+ // prefix is mandatory: emitting them as raw --xs/--md/--lg
81
+ // would pollute the global CSS variable namespace.
82
+ ...ALIAS_ENTRIES.map(([k, v]) => `--space-${k}: ${v}px;`), ``, `/* ── Radius ────────────────────────────────────── */`, `--r-none: ${radius.none ?? 0}px;`, `--r-sm: ${radius.sm}px;`, `--r-md: ${radius.md}px;`, `--r-lg: ${radius.lg}px;`, `--r-xl: ${radius.xl}px;`, `--r-full: ${radius.full}px;`, ``, `/* ── Shadows ───────────────────────────────────── */`, `--shadow-xs: ${shadows.xs};`, `--shadow-sm: ${shadows.sm};`, `--shadow-md: ${shadows.md};`, `--shadow-lg: ${shadows.lg};`, `--shadow-focus: ${shadows.focus};`,
83
+ // Static rgba fallback for non-CSS-vars contexts (SSR strings,
84
+ // raw inline `style={{ boxShadow: ... }}` props that bypass CSS).
85
+ ...(shadows.focusFallback ? [`--shadow-focus-fallback: ${shadows.focusFallback};`] : []), ``, `/* ── Motion (temporal vocabulary) ──────────────── */`, `--duration-fast: ${duration.fast}ms;`, `--duration-base: ${duration.base}ms;`, `--duration-slow: ${duration.slow}ms;`, ``, `/* ── Motion (semantic aliases — B6) ────────────── */`,
86
+ // Same numeric values as fast/base/slow; intent-readable at the
105
87
  // call site. transition() helper recognises both vocabularies.
106
- "--duration-microinteraction: ".concat(duration.microinteraction, "ms;"), "--duration-state-change: ".concat(duration.stateChange, "ms;"), "--duration-page-transition: ".concat(duration.pageTransition, "ms;"), "", "/* \u2500\u2500 Easing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--easing-out: ".concat(easing.out, ";"), "--easing-in: ".concat(easing["in"], ";"), "--easing-soft: ".concat(easing.soft, ";"), "", "/* \u2500\u2500 Z-index \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */"], _toConsumableArray(Object.entries(zIndex).map(function (_ref9) {
107
- var _ref0 = _slicedToArray(_ref9, 2),
108
- k = _ref0[0],
109
- v = _ref0[1];
110
- return "--z-".concat(k, ": ").concat(v, ";");
111
- })), ["", "/* \u2500\u2500 Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--sidebar-w: ".concat(layout.sidebar, "px;"), "--topbar-h: ".concat(layout.topbar, "px;"), "--content-max: ".concat(layout.contentMax, "px;"), "--form-max: ".concat(layout.formMax, "px;"), "--tactile-min: ".concat(layout.tactileMin, "px;"), "", "/* \u2500\u2500 Breakpoints (R-RS.1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", // The single breakpoint scale, also wired into the MUI theme and the
88
+ `--duration-microinteraction: ${duration.microinteraction}ms;`, `--duration-state-change: ${duration.stateChange}ms;`, `--duration-page-transition: ${duration.pageTransition}ms;`, ``, `/* ── Easing ────────────────────────────────────── */`, `--easing-out: ${easing.out};`, `--easing-in: ${easing.in};`, `--easing-soft: ${easing.soft};`, ``, `/* ── Z-index ───────────────────────────────────── */`,
89
+ // Iterates the full zIndex object — picks up popover/snackbar/
90
+ // tooltip slots added in Batch 1 and skipLink (Batch 11 / B3)
91
+ // without code changes here.
92
+ ...Object.entries(zIndex).map(([k, v]) => `--z-${k}: ${v};`), ``, `/* ── Layout ────────────────────────────────────── */`, `--sidebar-w: ${layout.sidebar}px;`, `--topbar-h: ${layout.topbar}px;`, `--content-max: ${layout.contentMax}px;`, `--form-max: ${layout.formMax}px;`, `--tactile-min: ${layout.tactileMin}px;`, ``, `/* ── Form field widths (G-H) ───────────────── */`,
93
+ // A7-02 CLASS, SEVENTH INSTANCE. `Field.FIELD_MAX_WIDTH` consumes these
94
+ // as `var(--field-w-s, 200px)`, and Field's docblock states the five
95
+ // values are "exposees en variables CSS pour etre revues sans toucher au
96
+ // code" — the stated escape hatch for a decision that same docblock flags
97
+ // as needing design confirmation.
98
+ //
99
+ // This emitter never emitted them, so only the fallbacks ever rendered:
100
+ // the widths were unrevisable without a code change and the promise was
101
+ // false. Exactly what the A7-02 note above records for the letter-spacing
102
+ // scale — a var() fallback wearing a token's name.
103
+ //
104
+ // Emitted from `layout.fieldWidth` so there is ONE source. The component
105
+ // keeps its fallbacks, so a host that never calls injectCssVariables still
106
+ // renders correct widths; where the variables exist, they win.
107
+ `--field-w-xs: ${layout.fieldWidth.xs}px;`, `--field-w-s: ${layout.fieldWidth.s}px;`, `--field-w-m: ${layout.fieldWidth.m}px;`, `--field-w-l: ${layout.fieldWidth.l}px;`, ``, `/* ── Breakpoints (R-RS.1) ──────────────────────── */`,
108
+ // The single breakpoint scale, also wired into the MUI theme and the
112
109
  // mq() string helpers. Media queries can't read var(), so these are
113
110
  // for @container queries, clamp() and JS (getComputedStyle) — they
114
111
  // exist so no consumer hardcodes a raw px breakpoint anywhere.
115
- "--bp-xs: ".concat(breakpoints.xs, "px;"), "--bp-sm: ".concat(breakpoints.sm, "px;"), "--bp-md: ".concat(breakpoints.md, "px;"), "--bp-lg: ".concat(breakpoints.lg, "px;"), "--bp-xl: ".concat(breakpoints.xl, "px;"), "", "/* \u2500\u2500 Density (default = comfortable) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */", "--row-h: ".concat(density.comfortable.row, "px;"), "--input-h: ".concat(density.comfortable.input, "px;"), "--btn-h: ".concat(density.comfortable.btn, "px;"), "--text-fs: ".concat(density.comfortable.fontSize, "px;")]);
116
- var collapsedSidebar = "[data-nav-collapsed=\"true\"] { --sidebar-w: ".concat(layout.sidebarMin, "px; }");
112
+ `--bp-xs: ${breakpoints.xs}px;`, `--bp-sm: ${breakpoints.sm}px;`, `--bp-md: ${breakpoints.md}px;`, `--bp-lg: ${breakpoints.lg}px;`, `--bp-xl: ${breakpoints.xl}px;`, ``, `/* ── Density (default = comfortable) ───────────── */`, `--row-h: ${density.comfortable.row}px;`, `--input-h: ${density.comfortable.input}px;`, `--btn-h: ${density.comfortable.btn}px;`, `--text-fs: ${density.comfortable.fontSize}px;`];
113
+ const collapsedSidebar = `[data-nav-collapsed="true"] { --sidebar-w: ${layout.sidebarMin}px; }`;
117
114
 
118
115
  /* Density tier overrides — emitted in order of granularity so a
119
116
  * cascading selector like `[data-density][data-density="compact"]`
120
117
  * (host-side specificity hack) resolves predictably. */
121
- var spaciousDensity = ["[data-density=\"spacious\"] {", " --row-h: ".concat(density.spacious.row, "px;"), " --input-h: ".concat(density.spacious.input, "px;"), " --btn-h: ".concat(density.spacious.btn, "px;"), " --text-fs: ".concat(density.spacious.fontSize, "px;"), "}"].join("\n");
122
- var compactDensity = ["[data-density=\"compact\"] {", " --row-h: ".concat(density.compact.row, "px;"), " --input-h: ".concat(density.compact.input, "px;"), " --btn-h: ".concat(density.compact.btn, "px;"), " --text-fs: ".concat(density.compact.fontSize, "px;"), "}"].join("\n");
123
- var ultraCompactDensity = ["[data-density=\"ultra-compact\"] {", " --row-h: ".concat(density.ultraCompact.row, "px;"), " --input-h: ".concat(density.ultraCompact.input, "px;"), " --btn-h: ".concat(density.ultraCompact.btn, "px;"), " --text-fs: ".concat(density.ultraCompact.fontSize, "px;"), "}"].join("\n");
118
+ const spaciousDensity = [`[data-density="spacious"] {`, ` --row-h: ${density.spacious.row}px;`, ` --input-h: ${density.spacious.input}px;`, ` --btn-h: ${density.spacious.btn}px;`, ` --text-fs: ${density.spacious.fontSize}px;`, `}`].join("\n");
119
+ const compactDensity = [`[data-density="compact"] {`, ` --row-h: ${density.compact.row}px;`, ` --input-h: ${density.compact.input}px;`, ` --btn-h: ${density.compact.btn}px;`, ` --text-fs: ${density.compact.fontSize}px;`, `}`].join("\n");
120
+ const ultraCompactDensity = [`[data-density="ultra-compact"] {`, ` --row-h: ${density.ultraCompact.row}px;`, ` --input-h: ${density.ultraCompact.input}px;`, ` --btn-h: ${density.ultraCompact.btn}px;`, ` --text-fs: ${density.ultraCompact.fontSize}px;`, `}`].join("\n");
124
121
 
125
122
  /* ── Dark mode overrides ────────────────────────────────────
126
123
  * Soft variants (semantic + status) are DERIVED via color-mix
@@ -130,24 +127,20 @@ export function getCssVariables() {
130
127
  * The 22-24% mix produces a tinted overlay that adapts to host
131
128
  * brand overrides automatically.
132
129
  * ───────────────────────────────────────────────────────── */
133
- var darkVars = ["[data-theme=\"dark\"] {", " --bg: ".concat(dark.bg, ";"), " --bg-elev: ".concat(dark.bgElev, ";"), " --bg-subtle: ".concat(dark.bgSubtle, ";"), " --bg-hover: ".concat(dark.bgHover, ";"), " --surface: ".concat(dark.surface, ";"), " --border: ".concat(dark.border, ";"), " --border-strong: ".concat(dark.borderStrong, ";"), " --fg: ".concat(dark.fg, ";"), " --fg-muted: ".concat(dark.fgMuted, ";"), " --fg-subtle: ".concat(dark.fgSubtle, ";"), " --fg-inverse: ".concat(dark.fgInverse, ";"), " --accent-soft: ".concat(dark.accentSoft, ";"), "", " /* Soft semantic fills \u2014 derived from the saturated colour */", " --success-soft: color-mix(in srgb, var(--success) 24%, transparent);", " --warning-soft: color-mix(in srgb, var(--warning) 24%, transparent);", " --danger-soft: color-mix(in srgb, var(--danger) 24%, transparent);", " --info-soft: color-mix(in srgb, var(--info) 24%, transparent);", "", " /* Status FG \u2014 overridden for dark-mode visibility */", " --status-new-fg: ".concat(dark.status["new"].fg, ";"), " --status-sent-fg: ".concat(dark.status.sent.fg, ";"), " --status-pending-fg: ".concat(dark.status.pending.fg, ";"), " --status-approved-fg: ".concat(dark.status.approved.fg, ";"), " --status-rejected-fg: ".concat(dark.status.rejected.fg, ";"), " --status-neutral-fg: ".concat(dark.status.neutral.fg, ";"), "", " /* Status soft \u2014 derived from the dark-mode FG */", " --status-new-soft: color-mix(in srgb, var(--status-new-fg) 22%, transparent);", " --status-sent-soft: color-mix(in srgb, var(--status-sent-fg) 22%, transparent);", " --status-pending-soft: color-mix(in srgb, var(--status-pending-fg) 22%, transparent);", " --status-approved-soft: color-mix(in srgb, var(--status-approved-fg) 22%, transparent);", " --status-rejected-soft: color-mix(in srgb, var(--status-rejected-fg) 22%, transparent);", " --status-neutral-soft: color-mix(in srgb, var(--status-neutral-fg) 22%, transparent);", "}"].join("\n");
130
+ const darkVars = [`[data-theme="dark"] {`, ` --bg: ${dark.bg};`, ` --bg-elev: ${dark.bgElev};`, ` --bg-subtle: ${dark.bgSubtle};`, ` --bg-hover: ${dark.bgHover};`, ` --surface: ${dark.surface};`, ` --border: ${dark.border};`, ` --border-strong: ${dark.borderStrong};`, ` --fg: ${dark.fg};`, ` --fg-muted: ${dark.fgMuted};`, ` --fg-subtle: ${dark.fgSubtle};`, ` --fg-inverse: ${dark.fgInverse};`, ` --accent-soft: ${dark.accentSoft};`, ``, ` /* Soft semantic fills derived from the saturated colour */`, ` --success-soft: color-mix(in srgb, var(--success) 24%, transparent);`, ` --warning-soft: color-mix(in srgb, var(--warning) 24%, transparent);`, ` --danger-soft: color-mix(in srgb, var(--danger) 24%, transparent);`, ` --info-soft: color-mix(in srgb, var(--info) 24%, transparent);`, ``, ` /* Status FG overridden for dark-mode visibility */`, ` --status-new-fg: ${dark.status.new.fg};`, ` --status-sent-fg: ${dark.status.sent.fg};`, ` --status-pending-fg: ${dark.status.pending.fg};`, ` --status-approved-fg: ${dark.status.approved.fg};`, ` --status-rejected-fg: ${dark.status.rejected.fg};`, ` --status-neutral-fg: ${dark.status.neutral.fg};`, ``, ` /* Status soft derived from the dark-mode FG */`, ` --status-new-soft: color-mix(in srgb, var(--status-new-fg) 22%, transparent);`, ` --status-sent-soft: color-mix(in srgb, var(--status-sent-fg) 22%, transparent);`, ` --status-pending-soft: color-mix(in srgb, var(--status-pending-fg) 22%, transparent);`, ` --status-approved-soft: color-mix(in srgb, var(--status-approved-fg) 22%, transparent);`, ` --status-rejected-soft: color-mix(in srgb, var(--status-rejected-fg) 22%, transparent);`, ` --status-neutral-soft: color-mix(in srgb, var(--status-neutral-fg) 22%, transparent);`, `}`].join("\n");
134
131
 
135
132
  /* Dev-only validation — catches the regression class that motivated it: a
136
133
  * token removed from ../tokens while this emitter still references it, which
137
134
  * puts the literal "undefined" into :root instead of failing loudly. See the
138
135
  * note beside --fw-bold above. */
139
136
  if (typeof console !== "undefined") {
140
- var offenders = lightVars.filter(function (l) {
141
- return /:\s*undefined\b/.test(l);
142
- });
137
+ const offenders = lightVars.filter(l => /:\s*undefined\b/.test(l));
143
138
  if (offenders.length) {
144
139
  // eslint-disable-next-line no-console
145
140
  console.warn("[@portnet/ui v2] cssVariables emitted undefined values — check token imports:", offenders);
146
141
  }
147
142
  }
148
- return [":root {"].concat(_toConsumableArray(lightVars.map(function (line) {
149
- return line ? " ".concat(line) : "";
150
- })), ["}", "", collapsedSidebar, "", spaciousDensity, "", compactDensity, "", ultraCompactDensity, "", darkVars]).join("\n");
143
+ return [`:root {`, ...lightVars.map(line => line ? ` ${line}` : ""), `}`, ``, collapsedSidebar, ``, spaciousDensity, ``, compactDensity, ``, ultraCompactDensity, ``, darkVars].join("\n");
151
144
  }
152
145
 
153
146
  /**
@@ -161,11 +154,11 @@ export function getCssVariables() {
161
154
  */
162
155
  export function injectCssVariables(arg) {
163
156
  if (typeof document === "undefined") return;
164
- var opts = typeof arg === "string" ? {
157
+ const opts = typeof arg === "string" ? {
165
158
  id: arg
166
159
  } : arg || {};
167
- var id = opts.id || STYLE_TAG_ID;
168
- var tag = document.getElementById(id);
160
+ const id = opts.id || STYLE_TAG_ID;
161
+ let tag = document.getElementById(id);
169
162
  if (!tag) {
170
163
  tag = document.createElement("style");
171
164
  tag.id = id;
@@ -185,14 +178,14 @@ export function injectCssVariables(arg) {
185
178
  */
186
179
  export function removeCssVariables(arg) {
187
180
  if (typeof document === "undefined") return;
188
- var id = typeof arg === "string" ? arg : arg && arg.id || STYLE_TAG_ID;
189
- var tag = document.getElementById(id);
181
+ const id = typeof arg === "string" ? arg : arg && arg.id || STYLE_TAG_ID;
182
+ const tag = document.getElementById(id);
190
183
  if (tag) tag.remove();
191
184
  }
192
- var cssVariablesApi = {
193
- getCssVariables: getCssVariables,
194
- injectCssVariables: injectCssVariables,
195
- removeCssVariables: removeCssVariables
185
+ const cssVariablesApi = {
186
+ getCssVariables,
187
+ injectCssVariables,
188
+ removeCssVariables
196
189
  };
197
190
  export default cssVariablesApi;
198
191
  //# sourceMappingURL=cssVariables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cssVariables.js","names":["ink","surface","border","semantic","status","dark","fontFamily","fontSize","fontWeight","lineHeight","letterSpacing","spacing","radius","shadows","duration","easing","zIndex","density","layout","breakpoints","state","resolveBrand","resolveBrandSecondary","STYLE_TAG_ID","NUMERIC_GRID_RE","SPACING_ENTRIES","Object","entries","NUMERIC_ENTRIES","filter","_ref","_ref2","_slicedToArray","k","test","ALIAS_ENTRIES","_ref3","_ref4","getCssVariables","_radius$none","options","arguments","length","undefined","brand","brandSecondary","lightVars","concat","accent","accentHover","accentSoft","accentFg","secondary","secondaryFg","fg","fgMuted","fgSubtle","fgInverse","bg","bgElev","bgSubtle","bgHover","borderStrong","success","successSoft","successFg","warning","warningSoft","warningFg","danger","dangerSoft","dangerFg","info","infoSoft","infoFg","soft","sent","pending","approved","rejected","neutral","hoverOverlay","pressedOverlay","selectedOverlay","sans","mono","display","h2","h3","h4","body","sm","xs","regular","medium","semibold","bold","tight","snug","normal","loose","wide","_toConsumableArray","map","_ref5","_ref6","v","slice","_ref7","_ref8","none","md","lg","xl","full","focus","focusFallback","fast","base","slow","microinteraction","stateChange","pageTransition","out","_ref9","_ref0","sidebar","topbar","contentMax","formMax","tactileMin","comfortable","row","input","btn","collapsedSidebar","sidebarMin","spaciousDensity","spacious","join","compactDensity","compact","ultraCompactDensity","ultraCompact","darkVars","console","offenders","l","warn","line","injectCssVariables","arg","document","opts","id","tag","getElementById","createElement","head","appendChild","textContent","removeCssVariables","remove","cssVariablesApi"],"sources":["../../../../src/lib/v2/theme/cssVariables.ts"],"sourcesContent":["/**\r\n * CSS Variables emitter — Portnet UI v2\r\n *\r\n * Generates a CSS string declaring all tokens as :root variables.\r\n * Mount once at app boot via:\r\n *\r\n * import { injectCssVariables } from \"@portnet/ui/v2/theme\";\r\n * injectCssVariables();\r\n *\r\n * Or render `getCssVariables()` inside a `<style>` tag if SSR'd.\r\n *\r\n * Brand override (host-level theming):\r\n *\r\n * injectCssVariables({\r\n * brand: { accent: \"#2962FF\" },\r\n * brandSecondary: { secondary: \"#4FB8CF\" },\r\n * });\r\n * // Or via the unified theme factory (see createPortnetTheme):\r\n * // createPortnetTheme({ brand: {...}, brandSecondary: {...} })\r\n *\r\n * Override is deep-merged onto the default brand / brandSecondary:\r\n * any field you omit falls back to the token default. Use the SAME\r\n * override objects when calling createPortnetTheme so the MUI\r\n * palette and CSS variables stay in sync — both layers consume the\r\n * same resolvers (./_brand, ./_brandSecondary) so mismatches are\r\n * structurally impossible.\r\n */\r\nimport {\r\n ink, surface, border, semantic, status, dark,\r\n fontFamily, fontSize, fontWeight, lineHeight, letterSpacing,\r\n spacing, radius, shadows, duration, easing, zIndex,\r\n density, layout, breakpoints,\r\n state,\r\n} from \"../tokens\";\r\nimport { resolveBrand, type BrandTokens } from \"./_brand\";\r\nimport { resolveBrandSecondary, type BrandSecondaryTokens } from \"./_brandSecondary\";\r\n\r\n/** Options for the CSS-variable emitter / injector. */\r\ntype CssVariablesOptions = {\r\n id?: string;\r\n brand?: Partial<BrandTokens>;\r\n brandSecondary?: Partial<BrandSecondaryTokens>;\r\n};\r\n\r\nconst STYLE_TAG_ID = \"portnet-ui-v2-tokens\";\r\n\r\n/**\r\n * Spacing partition: numeric grid keys (s1..s10) vs semantic aliases\r\n * (xs/sm/md/lg/xl/xxl). Two output namespaces so the alias names\r\n * cannot collide with the grid (s-N) and cannot pollute the global\r\n * variable namespace by emitting unprefixed --md / --lg / --xl.\r\n *\r\n * Uses Object.entries at module-load time — pure / no side-effects.\r\n */\r\nconst NUMERIC_GRID_RE = /^s\\d+$/;\r\nconst SPACING_ENTRIES = Object.entries(spacing);\r\nconst NUMERIC_ENTRIES = SPACING_ENTRIES.filter(([k]) => NUMERIC_GRID_RE.test(k));\r\nconst ALIAS_ENTRIES = SPACING_ENTRIES.filter(([k]) => !NUMERIC_GRID_RE.test(k));\r\n\r\n/**\r\n * Emits the canonical :root block + sidebar / density / dark-mode overrides.\r\n * Pass a partial `brand` / `brandSecondary` to mirror a host theme override\r\n * (use the SAME object you pass to createPortnetTheme so the two layers agree).\r\n */\r\nexport function getCssVariables(options: CssVariablesOptions = {}): string {\r\n const brand = resolveBrand(options.brand);\r\n const brandSecondary = resolveBrandSecondary(options.brandSecondary);\r\n\r\n const lightVars = [\r\n `/* ── Brand ─────────────────────────────────────── */`,\r\n `--accent: ${brand.accent};`,\r\n `--accent-hover: ${brand.accentHover};`,\r\n `--accent-soft: ${brand.accentSoft};`,\r\n `--accent-fg: ${brand.accentFg};`,\r\n ``,\r\n `/* ── Brand secondary ───────────────────────────── */`,\r\n `--secondary: ${brandSecondary.secondary};`,\r\n `--secondary-fg: ${brandSecondary.secondaryFg};`,\r\n ``,\r\n `/* ── Ink ───────────────────────────────────────── */`,\r\n `--fg: ${ink.fg};`,\r\n `--fg-muted: ${ink.fgMuted};`,\r\n `--fg-subtle: ${ink.fgSubtle};`,\r\n `--fg-inverse: ${ink.fgInverse};`,\r\n ``,\r\n `/* ── Surface ───────────────────────────────────── */`,\r\n `--bg: ${surface.bg};`,\r\n `--bg-elev: ${surface.bgElev};`,\r\n `--bg-subtle: ${surface.bgSubtle};`,\r\n `--bg-hover: ${surface.bgHover};`,\r\n `--surface: ${surface.surface};`,\r\n ``,\r\n `/* ── Border ────────────────────────────────────── */`,\r\n `--border: ${border.border};`,\r\n `--border-strong: ${border.borderStrong};`,\r\n ``,\r\n `/* ── Semantic ──────────────────────────────────── */`,\r\n `/* Each concept has a saturated fill (--<name>) and a darker text */`,\r\n `/* foreground (--<name>-fg). Pair fills with text on the same surface. */`,\r\n `--success: ${semantic.success};`,\r\n `--success-soft: ${semantic.successSoft};`,\r\n `--success-fg: ${semantic.successFg};`,\r\n `--warning: ${semantic.warning};`,\r\n `--warning-soft: ${semantic.warningSoft};`,\r\n `--warning-fg: ${semantic.warningFg};`,\r\n `--danger: ${semantic.danger};`,\r\n `--danger-soft: ${semantic.dangerSoft};`,\r\n `--danger-fg: ${semantic.dangerFg};`,\r\n `--info: ${semantic.info};`,\r\n `--info-soft: ${semantic.infoSoft};`,\r\n `--info-fg: ${semantic.infoFg};`,\r\n ``,\r\n `/* ── Status palette ────────────────────────────── */`,\r\n `--status-new-soft: ${status.new.soft};`,\r\n `--status-new-fg: ${status.new.fg};`,\r\n `--status-sent-soft: ${status.sent.soft};`,\r\n `--status-sent-fg: ${status.sent.fg};`,\r\n `--status-pending-soft: ${status.pending.soft};`,\r\n `--status-pending-fg: ${status.pending.fg};`,\r\n `--status-approved-soft: ${status.approved.soft};`,\r\n `--status-approved-fg: ${status.approved.fg};`,\r\n `--status-rejected-soft: ${status.rejected.soft};`,\r\n `--status-rejected-fg: ${status.rejected.fg};`,\r\n `--status-neutral-soft: ${status.neutral.soft};`,\r\n `--status-neutral-fg: ${status.neutral.fg};`,\r\n ``,\r\n `/* ── State overlays (B2 — currentColor-based) ─── */`,\r\n `--state-hover-overlay: ${state.hoverOverlay};`,\r\n `--state-pressed-overlay: ${state.pressedOverlay};`,\r\n `--state-selected-overlay: ${state.selectedOverlay};`,\r\n ``,\r\n `/* ── Typography ────────────────────────────────── */`,\r\n `--font-sans: ${fontFamily.sans};`,\r\n `--font-mono: ${fontFamily.mono};`,\r\n `--text-display: ${fontSize.display}px;`,\r\n `--text-h2: ${fontSize.h2}px;`,\r\n `--text-h3: ${fontSize.h3}px;`,\r\n `--text-h4: ${fontSize.h4}px;`,\r\n `--text-body: ${fontSize.body}px;`,\r\n `--text-sm: ${fontSize.sm}px;`,\r\n `--text-xs: ${fontSize.xs}px;`,\r\n `--fw-regular: ${fontWeight.regular};`,\r\n `--fw-medium: ${fontWeight.medium};`,\r\n `--fw-semibold: ${fontWeight.semibold};`,\r\n `--fw-bold: ${fontWeight.bold};`,\r\n // NOTE: there is deliberately no heavier weight than bold (700). Batch 1\r\n // dropped the black weight from the typography tokens, and this file kept\r\n // emitting the matching variable for a while — resolving to the literal\r\n // string \"undefined\" in :root, which silently flattened every consumer that\r\n // referenced it. The dev-only check at the end of this function exists\r\n // because of that incident.\r\n //\r\n // The old variable name is deliberately not written out: banned-patterns\r\n // scans raw file text with no comment awareness, so naming it here — even to\r\n // record its removal — trips the rule that protects this block.\r\n `--lh-tight: ${lineHeight.tight};`,\r\n `--lh-snug: ${lineHeight.snug};`,\r\n `--lh-normal: ${lineHeight.normal};`,\r\n `--lh-loose: ${lineHeight.loose};`,\r\n // A7-02 — letter-spacing scale. Six token names were referenced fleet-wide\r\n // that this emitter never emitted, so their var() fallbacks were the only\r\n // thing that ever rendered (R-2.3 / R-AI.1 magic values wearing a token's\r\n // name). These two had a real platform basis — -0.01em was hardcoded twice\r\n // in tokens/typography.ts itself, 0.04em inside KV and ConfirmDialog — so\r\n // they are promoted. `--border-subtle`, `--r-xs`, `--icon-sm`, `--icon-xl`\r\n // were local inventions and are fixed at their call sites instead.\r\n `--ls-tight: ${letterSpacing.tight};`,\r\n `--ls-normal: ${letterSpacing.normal};`,\r\n `--ls-wide: ${letterSpacing.wide};`,\r\n ``,\r\n `/* ── Spacing — numeric grid (8 px base) ─────────── */`,\r\n // s1..s10 → --s-1 .. --s-10 (preserves all existing consumers).\r\n ...NUMERIC_ENTRIES.map(([k, v]) => `--s-${k.slice(1)}: ${v}px;`),\r\n ``,\r\n `/* ── Spacing — semantic aliases ────────────────── */`,\r\n // xs/sm/md/lg/xl/xxl → --space-xs .. --space-xxl. The \"space-\"\r\n // prefix is mandatory: emitting them as raw --xs/--md/--lg\r\n // would pollute the global CSS variable namespace.\r\n ...ALIAS_ENTRIES.map(([k, v]) => `--space-${k}: ${v}px;`),\r\n ``,\r\n `/* ── Radius ────────────────────────────────────── */`,\r\n `--r-none: ${radius.none ?? 0}px;`,\r\n `--r-sm: ${radius.sm}px;`,\r\n `--r-md: ${radius.md}px;`,\r\n `--r-lg: ${radius.lg}px;`,\r\n `--r-xl: ${radius.xl}px;`,\r\n `--r-full: ${radius.full}px;`,\r\n ``,\r\n `/* ── Shadows ───────────────────────────────────── */`,\r\n `--shadow-xs: ${shadows.xs};`,\r\n `--shadow-sm: ${shadows.sm};`,\r\n `--shadow-md: ${shadows.md};`,\r\n `--shadow-lg: ${shadows.lg};`,\r\n `--shadow-focus: ${shadows.focus};`,\r\n // Static rgba fallback for non-CSS-vars contexts (SSR strings,\r\n // raw inline `style={{ boxShadow: ... }}` props that bypass CSS).\r\n ...(shadows.focusFallback\r\n ? [`--shadow-focus-fallback: ${shadows.focusFallback};`]\r\n : []),\r\n ``,\r\n `/* ── Motion (temporal vocabulary) ──────────────── */`,\r\n `--duration-fast: ${duration.fast}ms;`,\r\n `--duration-base: ${duration.base}ms;`,\r\n `--duration-slow: ${duration.slow}ms;`,\r\n ``,\r\n `/* ── Motion (semantic aliases — B6) ────────────── */`,\r\n // Same numeric values as fast/base/slow; intent-readable at the\r\n // call site. transition() helper recognises both vocabularies.\r\n `--duration-microinteraction: ${duration.microinteraction}ms;`,\r\n `--duration-state-change: ${duration.stateChange}ms;`,\r\n `--duration-page-transition: ${duration.pageTransition}ms;`,\r\n ``,\r\n `/* ── Easing ────────────────────────────────────── */`,\r\n `--easing-out: ${easing.out};`,\r\n `--easing-in: ${easing.in};`,\r\n `--easing-soft: ${easing.soft};`,\r\n ``,\r\n `/* ── Z-index ───────────────────────────────────── */`,\r\n // Iterates the full zIndex object — picks up popover/snackbar/\r\n // tooltip slots added in Batch 1 and skipLink (Batch 11 / B3)\r\n // without code changes here.\r\n ...Object.entries(zIndex).map(([k, v]) => `--z-${k}: ${v};`),\r\n ``,\r\n `/* ── Layout ────────────────────────────────────── */`,\r\n `--sidebar-w: ${layout.sidebar}px;`,\r\n `--topbar-h: ${layout.topbar}px;`,\r\n `--content-max: ${layout.contentMax}px;`,\r\n `--form-max: ${layout.formMax}px;`,\r\n `--tactile-min: ${layout.tactileMin}px;`,\r\n ``,\r\n `/* ── Breakpoints (R-RS.1) ──────────────────────── */`,\r\n // The single breakpoint scale, also wired into the MUI theme and the\r\n // mq() string helpers. Media queries can't read var(), so these are\r\n // for @container queries, clamp() and JS (getComputedStyle) — they\r\n // exist so no consumer hardcodes a raw px breakpoint anywhere.\r\n `--bp-xs: ${breakpoints.xs}px;`,\r\n `--bp-sm: ${breakpoints.sm}px;`,\r\n `--bp-md: ${breakpoints.md}px;`,\r\n `--bp-lg: ${breakpoints.lg}px;`,\r\n `--bp-xl: ${breakpoints.xl}px;`,\r\n ``,\r\n `/* ── Density (default = comfortable) ───────────── */`,\r\n `--row-h: ${density.comfortable.row}px;`,\r\n `--input-h: ${density.comfortable.input}px;`,\r\n `--btn-h: ${density.comfortable.btn}px;`,\r\n `--text-fs: ${density.comfortable.fontSize}px;`,\r\n ];\r\n\r\n const collapsedSidebar = `[data-nav-collapsed=\"true\"] { --sidebar-w: ${layout.sidebarMin}px; }`;\r\n\r\n /* Density tier overrides — emitted in order of granularity so a\r\n * cascading selector like `[data-density][data-density=\"compact\"]`\r\n * (host-side specificity hack) resolves predictably. */\r\n const spaciousDensity = [\r\n `[data-density=\"spacious\"] {`,\r\n ` --row-h: ${density.spacious.row}px;`,\r\n ` --input-h: ${density.spacious.input}px;`,\r\n ` --btn-h: ${density.spacious.btn}px;`,\r\n ` --text-fs: ${density.spacious.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n const compactDensity = [\r\n `[data-density=\"compact\"] {`,\r\n ` --row-h: ${density.compact.row}px;`,\r\n ` --input-h: ${density.compact.input}px;`,\r\n ` --btn-h: ${density.compact.btn}px;`,\r\n ` --text-fs: ${density.compact.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n const ultraCompactDensity = [\r\n `[data-density=\"ultra-compact\"] {`,\r\n ` --row-h: ${density.ultraCompact.row}px;`,\r\n ` --input-h: ${density.ultraCompact.input}px;`,\r\n ` --btn-h: ${density.ultraCompact.btn}px;`,\r\n ` --text-fs: ${density.ultraCompact.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n /* ── Dark mode overrides ────────────────────────────────────\r\n * Soft variants (semantic + status) are DERIVED via color-mix\r\n * from the saturated colour or the dark-mode status FG. The\r\n * static light-mode soft hex codes are too pale on dark\r\n * surfaces and fail WCAG 1.4.11 non-text contrast.\r\n * The 22-24% mix produces a tinted overlay that adapts to host\r\n * brand overrides automatically.\r\n * ───────────────────────────────────────────────────────── */\r\n const darkVars = [\r\n `[data-theme=\"dark\"] {`,\r\n ` --bg: ${dark.bg};`,\r\n ` --bg-elev: ${dark.bgElev};`,\r\n ` --bg-subtle: ${dark.bgSubtle};`,\r\n ` --bg-hover: ${dark.bgHover};`,\r\n ` --surface: ${dark.surface};`,\r\n ` --border: ${dark.border};`,\r\n ` --border-strong: ${dark.borderStrong};`,\r\n ` --fg: ${dark.fg};`,\r\n ` --fg-muted: ${dark.fgMuted};`,\r\n ` --fg-subtle: ${dark.fgSubtle};`,\r\n ` --fg-inverse: ${dark.fgInverse};`,\r\n ` --accent-soft: ${dark.accentSoft};`,\r\n ``,\r\n ` /* Soft semantic fills — derived from the saturated colour */`,\r\n ` --success-soft: color-mix(in srgb, var(--success) 24%, transparent);`,\r\n ` --warning-soft: color-mix(in srgb, var(--warning) 24%, transparent);`,\r\n ` --danger-soft: color-mix(in srgb, var(--danger) 24%, transparent);`,\r\n ` --info-soft: color-mix(in srgb, var(--info) 24%, transparent);`,\r\n ``,\r\n ` /* Status FG — overridden for dark-mode visibility */`,\r\n ` --status-new-fg: ${dark.status.new.fg};`,\r\n ` --status-sent-fg: ${dark.status.sent.fg};`,\r\n ` --status-pending-fg: ${dark.status.pending.fg};`,\r\n ` --status-approved-fg: ${dark.status.approved.fg};`,\r\n ` --status-rejected-fg: ${dark.status.rejected.fg};`,\r\n ` --status-neutral-fg: ${dark.status.neutral.fg};`,\r\n ``,\r\n ` /* Status soft — derived from the dark-mode FG */`,\r\n ` --status-new-soft: color-mix(in srgb, var(--status-new-fg) 22%, transparent);`,\r\n ` --status-sent-soft: color-mix(in srgb, var(--status-sent-fg) 22%, transparent);`,\r\n ` --status-pending-soft: color-mix(in srgb, var(--status-pending-fg) 22%, transparent);`,\r\n ` --status-approved-soft: color-mix(in srgb, var(--status-approved-fg) 22%, transparent);`,\r\n ` --status-rejected-soft: color-mix(in srgb, var(--status-rejected-fg) 22%, transparent);`,\r\n ` --status-neutral-soft: color-mix(in srgb, var(--status-neutral-fg) 22%, transparent);`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n /* Dev-only validation — catches the regression class that motivated it: a\r\n * token removed from ../tokens while this emitter still references it, which\r\n * puts the literal \"undefined\" into :root instead of failing loudly. See the\r\n * note beside --fw-bold above. */\r\n if (typeof console !== \"undefined\") {\r\n const offenders = lightVars.filter((l) => /:\\s*undefined\\b/.test(l));\r\n if (offenders.length) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] cssVariables emitted undefined values — check token imports:\",\r\n offenders,\r\n );\r\n }\r\n }\r\n\r\n return [\r\n `:root {`,\r\n ...lightVars.map((line) => (line ? ` ${line}` : \"\")),\r\n `}`,\r\n ``,\r\n collapsedSidebar,\r\n ``,\r\n spaciousDensity,\r\n ``,\r\n compactDensity,\r\n ``,\r\n ultraCompactDensity,\r\n ``,\r\n darkVars,\r\n ].join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Inject the variables into <head> at runtime.\r\n * Idempotent: replaces a previous tag if present.\r\n *\r\n * Backward-compatible signatures:\r\n * injectCssVariables(); // default id, no override\r\n * injectCssVariables(\"my-style-id\"); // legacy string id\r\n * injectCssVariables({ id, brand, brandSecondary }); // options form\r\n */\r\nexport function injectCssVariables(arg?: string | CssVariablesOptions): void {\r\n if (typeof document === \"undefined\") return;\r\n const opts: CssVariablesOptions = typeof arg === \"string\" ? { id: arg } : (arg || {});\r\n const id = opts.id || STYLE_TAG_ID;\r\n\r\n let tag = document.getElementById(id);\r\n if (!tag) {\r\n tag = document.createElement(\"style\");\r\n tag.id = id;\r\n document.head.appendChild(tag);\r\n }\r\n tag.textContent = getCssVariables(opts);\r\n}\r\n\r\n/**\r\n * Remove the injected style tag. Symmetrical with\r\n * injectCssVariables — needed for theme switching, hot-reload\r\n * and test cleanup. No-op when the tag is absent or in SSR.\r\n *\r\n * removeCssVariables(); // default id\r\n * removeCssVariables(\"my-style-id\"); // legacy string id\r\n * removeCssVariables({ id }); // options form\r\n */\r\nexport function removeCssVariables(arg?: string | CssVariablesOptions): void {\r\n if (typeof document === \"undefined\") return;\r\n const id = typeof arg === \"string\"\r\n ? arg\r\n : ((arg && arg.id) || STYLE_TAG_ID);\r\n const tag = document.getElementById(id);\r\n if (tag) tag.remove();\r\n}\r\n\r\nconst cssVariablesApi = { getCssVariables, injectCssVariables, removeCssVariables };\r\nexport default cssVariablesApi;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cssVariables.js","names":["ink","surface","border","semantic","status","dark","fontFamily","fontSize","fontWeight","lineHeight","letterSpacing","spacing","radius","shadows","duration","easing","zIndex","density","layout","breakpoints","state","chartCategorical","resolveBrand","resolveBrandSecondary","STYLE_TAG_ID","NUMERIC_GRID_RE","SPACING_ENTRIES","Object","entries","NUMERIC_ENTRIES","filter","k","test","ALIAS_ENTRIES","getCssVariables","options","brand","brandSecondary","lightVars","accent","accentHover","accentSoft","accentFg","secondary","secondaryFg","fg","fgMuted","fgSubtle","fgInverse","bg","bgElev","bgSubtle","bgHover","borderStrong","success","successSoft","successFg","warning","warningSoft","warningFg","danger","dangerSoft","dangerFg","info","infoSoft","infoFg","new","soft","sent","pending","approved","rejected","neutral","map","c","i","hoverOverlay","pressedOverlay","selectedOverlay","sans","mono","display","h2","h3","h4","body","sm","xs","regular","medium","semibold","bold","tight","snug","normal","loose","wide","v","slice","none","md","lg","xl","full","focus","focusFallback","fast","base","slow","microinteraction","stateChange","pageTransition","out","in","sidebar","topbar","contentMax","formMax","tactileMin","fieldWidth","s","m","l","comfortable","row","input","btn","collapsedSidebar","sidebarMin","spaciousDensity","spacious","join","compactDensity","compact","ultraCompactDensity","ultraCompact","darkVars","console","offenders","length","warn","line","injectCssVariables","arg","document","opts","id","tag","getElementById","createElement","head","appendChild","textContent","removeCssVariables","remove","cssVariablesApi"],"sources":["../../../../src/lib/v2/theme/cssVariables.ts"],"sourcesContent":["/**\r\n * CSS Variables emitter — Portnet UI v2\r\n *\r\n * Generates a CSS string declaring all tokens as :root variables.\r\n * Mount once at app boot via:\r\n *\r\n * import { injectCssVariables } from \"@portnet/ui/v2/theme\";\r\n * injectCssVariables();\r\n *\r\n * Or render `getCssVariables()` inside a `<style>` tag if SSR'd.\r\n *\r\n * Brand override (host-level theming):\r\n *\r\n * injectCssVariables({\r\n * brand: { accent: \"#2962FF\" },\r\n * brandSecondary: { secondary: \"#4FB8CF\" },\r\n * });\r\n * // Or via the unified theme factory (see createPortnetTheme):\r\n * // createPortnetTheme({ brand: {...}, brandSecondary: {...} })\r\n *\r\n * Override is deep-merged onto the default brand / brandSecondary:\r\n * any field you omit falls back to the token default. Use the SAME\r\n * override objects when calling createPortnetTheme so the MUI\r\n * palette and CSS variables stay in sync — both layers consume the\r\n * same resolvers (./_brand, ./_brandSecondary) so mismatches are\r\n * structurally impossible.\r\n */\r\nimport {\r\n ink, surface, border, semantic, status, dark,\r\n fontFamily, fontSize, fontWeight, lineHeight, letterSpacing,\r\n spacing, radius, shadows, duration, easing, zIndex,\r\n density, layout, breakpoints,\r\n state,\r\n chartCategorical,\r\n} from \"../tokens\";\r\nimport { resolveBrand, type BrandTokens } from \"./_brand\";\r\nimport { resolveBrandSecondary, type BrandSecondaryTokens } from \"./_brandSecondary\";\r\n\r\n/** Options for the CSS-variable emitter / injector. */\r\ntype CssVariablesOptions = {\r\n id?: string | undefined;\r\n brand?: Partial<BrandTokens> | undefined;\r\n brandSecondary?: Partial<BrandSecondaryTokens> | undefined;\r\n};\r\n\r\nconst STYLE_TAG_ID = \"portnet-ui-v2-tokens\";\r\n\r\n/**\r\n * Spacing partition: numeric grid keys (s1..s10) vs semantic aliases\r\n * (xs/sm/md/lg/xl/xxl). Two output namespaces so the alias names\r\n * cannot collide with the grid (s-N) and cannot pollute the global\r\n * variable namespace by emitting unprefixed --md / --lg / --xl.\r\n *\r\n * Uses Object.entries at module-load time — pure / no side-effects.\r\n */\r\nconst NUMERIC_GRID_RE = /^s\\d+$/;\r\nconst SPACING_ENTRIES = Object.entries(spacing);\r\nconst NUMERIC_ENTRIES = SPACING_ENTRIES.filter(([k]) => NUMERIC_GRID_RE.test(k));\r\nconst ALIAS_ENTRIES = SPACING_ENTRIES.filter(([k]) => !NUMERIC_GRID_RE.test(k));\r\n\r\n/**\r\n * Emits the canonical :root block + sidebar / density / dark-mode overrides.\r\n * Pass a partial `brand` / `brandSecondary` to mirror a host theme override\r\n * (use the SAME object you pass to createPortnetTheme so the two layers agree).\r\n */\r\nexport function getCssVariables(options: CssVariablesOptions = {}): string {\r\n const brand = resolveBrand(options.brand);\r\n const brandSecondary = resolveBrandSecondary(options.brandSecondary);\r\n\r\n const lightVars = [\r\n `/* ── Brand ─────────────────────────────────────── */`,\r\n `--accent: ${brand.accent};`,\r\n `--accent-hover: ${brand.accentHover};`,\r\n `--accent-soft: ${brand.accentSoft};`,\r\n `--accent-fg: ${brand.accentFg};`,\r\n ``,\r\n `/* ── Brand secondary ───────────────────────────── */`,\r\n `--secondary: ${brandSecondary.secondary};`,\r\n `--secondary-fg: ${brandSecondary.secondaryFg};`,\r\n ``,\r\n `/* ── Ink ───────────────────────────────────────── */`,\r\n `--fg: ${ink.fg};`,\r\n `--fg-muted: ${ink.fgMuted};`,\r\n `--fg-subtle: ${ink.fgSubtle};`,\r\n `--fg-inverse: ${ink.fgInverse};`,\r\n ``,\r\n `/* ── Surface ───────────────────────────────────── */`,\r\n `--bg: ${surface.bg};`,\r\n `--bg-elev: ${surface.bgElev};`,\r\n `--bg-subtle: ${surface.bgSubtle};`,\r\n `--bg-hover: ${surface.bgHover};`,\r\n `--surface: ${surface.surface};`,\r\n ``,\r\n `/* ── Border ────────────────────────────────────── */`,\r\n `--border: ${border.border};`,\r\n `--border-strong: ${border.borderStrong};`,\r\n ``,\r\n `/* ── Semantic ──────────────────────────────────── */`,\r\n `/* Each concept has a saturated fill (--<name>) and a darker text */`,\r\n `/* foreground (--<name>-fg). Pair fills with text on the same surface. */`,\r\n `--success: ${semantic.success};`,\r\n `--success-soft: ${semantic.successSoft};`,\r\n `--success-fg: ${semantic.successFg};`,\r\n `--warning: ${semantic.warning};`,\r\n `--warning-soft: ${semantic.warningSoft};`,\r\n `--warning-fg: ${semantic.warningFg};`,\r\n `--danger: ${semantic.danger};`,\r\n `--danger-soft: ${semantic.dangerSoft};`,\r\n `--danger-fg: ${semantic.dangerFg};`,\r\n `--info: ${semantic.info};`,\r\n `--info-soft: ${semantic.infoSoft};`,\r\n `--info-fg: ${semantic.infoFg};`,\r\n ``,\r\n `/* ── Status palette ────────────────────────────── */`,\r\n `--status-new-soft: ${status.new.soft};`,\r\n `--status-new-fg: ${status.new.fg};`,\r\n `--status-sent-soft: ${status.sent.soft};`,\r\n `--status-sent-fg: ${status.sent.fg};`,\r\n `--status-pending-soft: ${status.pending.soft};`,\r\n `--status-pending-fg: ${status.pending.fg};`,\r\n `--status-approved-soft: ${status.approved.soft};`,\r\n `--status-approved-fg: ${status.approved.fg};`,\r\n `--status-rejected-soft: ${status.rejected.soft};`,\r\n `--status-rejected-fg: ${status.rejected.fg};`,\r\n `--status-neutral-soft: ${status.neutral.soft};`,\r\n `--status-neutral-fg: ${status.neutral.fg};`,\r\n ``,\r\n `/* ── Chart categorical palette (gap G-37) ────── */`,\r\n `/* Category fills, NOT workflow state — see tokens/chart. Emitted */`,\r\n `/* for CSS and sx; chart libraries should take the JS token, since */`,\r\n `/* an SVG presentation attribute given a var() is not resolved by */`,\r\n `/* every renderer. NO DARK OVERRIDE IS NEEDED, deliberately: every */`,\r\n `/* entry clears the 3:1 non-text floor on the light AND the dark */`,\r\n `/* surface, which is the constraint the values were solved for. */`,\r\n ...chartCategorical.map((c, i) => `--chart-${i + 1}: ${c};`),\r\n ``,\r\n `/* ── State overlays (B2 — currentColor-based) ─── */`,\r\n `--state-hover-overlay: ${state.hoverOverlay};`,\r\n `--state-pressed-overlay: ${state.pressedOverlay};`,\r\n `--state-selected-overlay: ${state.selectedOverlay};`,\r\n ``,\r\n `/* ── Typography ────────────────────────────────── */`,\r\n `--font-sans: ${fontFamily.sans};`,\r\n `--font-mono: ${fontFamily.mono};`,\r\n `--text-display: ${fontSize.display}px;`,\r\n `--text-h2: ${fontSize.h2}px;`,\r\n `--text-h3: ${fontSize.h3}px;`,\r\n `--text-h4: ${fontSize.h4}px;`,\r\n `--text-body: ${fontSize.body}px;`,\r\n `--text-sm: ${fontSize.sm}px;`,\r\n `--text-xs: ${fontSize.xs}px;`,\r\n `--fw-regular: ${fontWeight.regular};`,\r\n `--fw-medium: ${fontWeight.medium};`,\r\n `--fw-semibold: ${fontWeight.semibold};`,\r\n `--fw-bold: ${fontWeight.bold};`,\r\n // NOTE: there is deliberately no heavier weight than bold (700). Batch 1\r\n // dropped the black weight from the typography tokens, and this file kept\r\n // emitting the matching variable for a while — resolving to the literal\r\n // string \"undefined\" in :root, which silently flattened every consumer that\r\n // referenced it. The dev-only check at the end of this function exists\r\n // because of that incident.\r\n //\r\n // The old variable name is deliberately not written out: banned-patterns\r\n // scans raw file text with no comment awareness, so naming it here — even to\r\n // record its removal — trips the rule that protects this block.\r\n `--lh-tight: ${lineHeight.tight};`,\r\n `--lh-snug: ${lineHeight.snug};`,\r\n `--lh-normal: ${lineHeight.normal};`,\r\n `--lh-loose: ${lineHeight.loose};`,\r\n // A7-02 — letter-spacing scale. Six token names were referenced fleet-wide\r\n // that this emitter never emitted, so their var() fallbacks were the only\r\n // thing that ever rendered (R-2.3 / R-AI.1 magic values wearing a token's\r\n // name). These two had a real platform basis — -0.01em was hardcoded twice\r\n // in tokens/typography.ts itself, 0.04em inside KV and ConfirmDialog — so\r\n // they are promoted. `--border-subtle`, `--r-xs`, `--icon-sm`, `--icon-xl`\r\n // were local inventions and are fixed at their call sites instead.\r\n `--ls-tight: ${letterSpacing.tight};`,\r\n `--ls-normal: ${letterSpacing.normal};`,\r\n `--ls-wide: ${letterSpacing.wide};`,\r\n ``,\r\n `/* ── Spacing — numeric grid (8 px base) ─────────── */`,\r\n // s1..s10 → --s-1 .. --s-10 (preserves all existing consumers).\r\n ...NUMERIC_ENTRIES.map(([k, v]) => `--s-${k.slice(1)}: ${v}px;`),\r\n ``,\r\n `/* ── Spacing — semantic aliases ────────────────── */`,\r\n // xs/sm/md/lg/xl/xxl → --space-xs .. --space-xxl. The \"space-\"\r\n // prefix is mandatory: emitting them as raw --xs/--md/--lg\r\n // would pollute the global CSS variable namespace.\r\n ...ALIAS_ENTRIES.map(([k, v]) => `--space-${k}: ${v}px;`),\r\n ``,\r\n `/* ── Radius ────────────────────────────────────── */`,\r\n `--r-none: ${radius.none ?? 0}px;`,\r\n `--r-sm: ${radius.sm}px;`,\r\n `--r-md: ${radius.md}px;`,\r\n `--r-lg: ${radius.lg}px;`,\r\n `--r-xl: ${radius.xl}px;`,\r\n `--r-full: ${radius.full}px;`,\r\n ``,\r\n `/* ── Shadows ───────────────────────────────────── */`,\r\n `--shadow-xs: ${shadows.xs};`,\r\n `--shadow-sm: ${shadows.sm};`,\r\n `--shadow-md: ${shadows.md};`,\r\n `--shadow-lg: ${shadows.lg};`,\r\n `--shadow-focus: ${shadows.focus};`,\r\n // Static rgba fallback for non-CSS-vars contexts (SSR strings,\r\n // raw inline `style={{ boxShadow: ... }}` props that bypass CSS).\r\n ...(shadows.focusFallback\r\n ? [`--shadow-focus-fallback: ${shadows.focusFallback};`]\r\n : []),\r\n ``,\r\n `/* ── Motion (temporal vocabulary) ──────────────── */`,\r\n `--duration-fast: ${duration.fast}ms;`,\r\n `--duration-base: ${duration.base}ms;`,\r\n `--duration-slow: ${duration.slow}ms;`,\r\n ``,\r\n `/* ── Motion (semantic aliases — B6) ────────────── */`,\r\n // Same numeric values as fast/base/slow; intent-readable at the\r\n // call site. transition() helper recognises both vocabularies.\r\n `--duration-microinteraction: ${duration.microinteraction}ms;`,\r\n `--duration-state-change: ${duration.stateChange}ms;`,\r\n `--duration-page-transition: ${duration.pageTransition}ms;`,\r\n ``,\r\n `/* ── Easing ────────────────────────────────────── */`,\r\n `--easing-out: ${easing.out};`,\r\n `--easing-in: ${easing.in};`,\r\n `--easing-soft: ${easing.soft};`,\r\n ``,\r\n `/* ── Z-index ───────────────────────────────────── */`,\r\n // Iterates the full zIndex object — picks up popover/snackbar/\r\n // tooltip slots added in Batch 1 and skipLink (Batch 11 / B3)\r\n // without code changes here.\r\n ...Object.entries(zIndex).map(([k, v]) => `--z-${k}: ${v};`),\r\n ``,\r\n `/* ── Layout ────────────────────────────────────── */`,\r\n `--sidebar-w: ${layout.sidebar}px;`,\r\n `--topbar-h: ${layout.topbar}px;`,\r\n `--content-max: ${layout.contentMax}px;`,\r\n `--form-max: ${layout.formMax}px;`,\r\n `--tactile-min: ${layout.tactileMin}px;`,\r\n ``,\r\n `/* ── Form field widths (G-H) ───────────────── */`,\r\n // A7-02 CLASS, SEVENTH INSTANCE. `Field.FIELD_MAX_WIDTH` consumes these\r\n // as `var(--field-w-s, 200px)`, and Field's docblock states the five\r\n // values are \"exposees en variables CSS pour etre revues sans toucher au\r\n // code\" — the stated escape hatch for a decision that same docblock flags\r\n // as needing design confirmation.\r\n //\r\n // This emitter never emitted them, so only the fallbacks ever rendered:\r\n // the widths were unrevisable without a code change and the promise was\r\n // false. Exactly what the A7-02 note above records for the letter-spacing\r\n // scale — a var() fallback wearing a token's name.\r\n //\r\n // Emitted from `layout.fieldWidth` so there is ONE source. The component\r\n // keeps its fallbacks, so a host that never calls injectCssVariables still\r\n // renders correct widths; where the variables exist, they win.\r\n `--field-w-xs: ${layout.fieldWidth.xs}px;`,\r\n `--field-w-s: ${layout.fieldWidth.s}px;`,\r\n `--field-w-m: ${layout.fieldWidth.m}px;`,\r\n `--field-w-l: ${layout.fieldWidth.l}px;`,\r\n ``,\r\n `/* ── Breakpoints (R-RS.1) ──────────────────────── */`,\r\n // The single breakpoint scale, also wired into the MUI theme and the\r\n // mq() string helpers. Media queries can't read var(), so these are\r\n // for @container queries, clamp() and JS (getComputedStyle) — they\r\n // exist so no consumer hardcodes a raw px breakpoint anywhere.\r\n `--bp-xs: ${breakpoints.xs}px;`,\r\n `--bp-sm: ${breakpoints.sm}px;`,\r\n `--bp-md: ${breakpoints.md}px;`,\r\n `--bp-lg: ${breakpoints.lg}px;`,\r\n `--bp-xl: ${breakpoints.xl}px;`,\r\n ``,\r\n `/* ── Density (default = comfortable) ───────────── */`,\r\n `--row-h: ${density.comfortable.row}px;`,\r\n `--input-h: ${density.comfortable.input}px;`,\r\n `--btn-h: ${density.comfortable.btn}px;`,\r\n `--text-fs: ${density.comfortable.fontSize}px;`,\r\n ];\r\n\r\n const collapsedSidebar = `[data-nav-collapsed=\"true\"] { --sidebar-w: ${layout.sidebarMin}px; }`;\r\n\r\n /* Density tier overrides — emitted in order of granularity so a\r\n * cascading selector like `[data-density][data-density=\"compact\"]`\r\n * (host-side specificity hack) resolves predictably. */\r\n const spaciousDensity = [\r\n `[data-density=\"spacious\"] {`,\r\n ` --row-h: ${density.spacious.row}px;`,\r\n ` --input-h: ${density.spacious.input}px;`,\r\n ` --btn-h: ${density.spacious.btn}px;`,\r\n ` --text-fs: ${density.spacious.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n const compactDensity = [\r\n `[data-density=\"compact\"] {`,\r\n ` --row-h: ${density.compact.row}px;`,\r\n ` --input-h: ${density.compact.input}px;`,\r\n ` --btn-h: ${density.compact.btn}px;`,\r\n ` --text-fs: ${density.compact.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n const ultraCompactDensity = [\r\n `[data-density=\"ultra-compact\"] {`,\r\n ` --row-h: ${density.ultraCompact.row}px;`,\r\n ` --input-h: ${density.ultraCompact.input}px;`,\r\n ` --btn-h: ${density.ultraCompact.btn}px;`,\r\n ` --text-fs: ${density.ultraCompact.fontSize}px;`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n /* ── Dark mode overrides ────────────────────────────────────\r\n * Soft variants (semantic + status) are DERIVED via color-mix\r\n * from the saturated colour or the dark-mode status FG. The\r\n * static light-mode soft hex codes are too pale on dark\r\n * surfaces and fail WCAG 1.4.11 non-text contrast.\r\n * The 22-24% mix produces a tinted overlay that adapts to host\r\n * brand overrides automatically.\r\n * ───────────────────────────────────────────────────────── */\r\n const darkVars = [\r\n `[data-theme=\"dark\"] {`,\r\n ` --bg: ${dark.bg};`,\r\n ` --bg-elev: ${dark.bgElev};`,\r\n ` --bg-subtle: ${dark.bgSubtle};`,\r\n ` --bg-hover: ${dark.bgHover};`,\r\n ` --surface: ${dark.surface};`,\r\n ` --border: ${dark.border};`,\r\n ` --border-strong: ${dark.borderStrong};`,\r\n ` --fg: ${dark.fg};`,\r\n ` --fg-muted: ${dark.fgMuted};`,\r\n ` --fg-subtle: ${dark.fgSubtle};`,\r\n ` --fg-inverse: ${dark.fgInverse};`,\r\n ` --accent-soft: ${dark.accentSoft};`,\r\n ``,\r\n ` /* Soft semantic fills — derived from the saturated colour */`,\r\n ` --success-soft: color-mix(in srgb, var(--success) 24%, transparent);`,\r\n ` --warning-soft: color-mix(in srgb, var(--warning) 24%, transparent);`,\r\n ` --danger-soft: color-mix(in srgb, var(--danger) 24%, transparent);`,\r\n ` --info-soft: color-mix(in srgb, var(--info) 24%, transparent);`,\r\n ``,\r\n ` /* Status FG — overridden for dark-mode visibility */`,\r\n ` --status-new-fg: ${dark.status.new.fg};`,\r\n ` --status-sent-fg: ${dark.status.sent.fg};`,\r\n ` --status-pending-fg: ${dark.status.pending.fg};`,\r\n ` --status-approved-fg: ${dark.status.approved.fg};`,\r\n ` --status-rejected-fg: ${dark.status.rejected.fg};`,\r\n ` --status-neutral-fg: ${dark.status.neutral.fg};`,\r\n ``,\r\n ` /* Status soft — derived from the dark-mode FG */`,\r\n ` --status-new-soft: color-mix(in srgb, var(--status-new-fg) 22%, transparent);`,\r\n ` --status-sent-soft: color-mix(in srgb, var(--status-sent-fg) 22%, transparent);`,\r\n ` --status-pending-soft: color-mix(in srgb, var(--status-pending-fg) 22%, transparent);`,\r\n ` --status-approved-soft: color-mix(in srgb, var(--status-approved-fg) 22%, transparent);`,\r\n ` --status-rejected-soft: color-mix(in srgb, var(--status-rejected-fg) 22%, transparent);`,\r\n ` --status-neutral-soft: color-mix(in srgb, var(--status-neutral-fg) 22%, transparent);`,\r\n `}`,\r\n ].join(\"\\n\");\r\n\r\n /* Dev-only validation — catches the regression class that motivated it: a\r\n * token removed from ../tokens while this emitter still references it, which\r\n * puts the literal \"undefined\" into :root instead of failing loudly. See the\r\n * note beside --fw-bold above. */\r\n if (typeof console !== \"undefined\") {\r\n const offenders = lightVars.filter((l) => /:\\s*undefined\\b/.test(l));\r\n if (offenders.length) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] cssVariables emitted undefined values — check token imports:\",\r\n offenders,\r\n );\r\n }\r\n }\r\n\r\n return [\r\n `:root {`,\r\n ...lightVars.map((line) => (line ? ` ${line}` : \"\")),\r\n `}`,\r\n ``,\r\n collapsedSidebar,\r\n ``,\r\n spaciousDensity,\r\n ``,\r\n compactDensity,\r\n ``,\r\n ultraCompactDensity,\r\n ``,\r\n darkVars,\r\n ].join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Inject the variables into <head> at runtime.\r\n * Idempotent: replaces a previous tag if present.\r\n *\r\n * Backward-compatible signatures:\r\n * injectCssVariables(); // default id, no override\r\n * injectCssVariables(\"my-style-id\"); // legacy string id\r\n * injectCssVariables({ id, brand, brandSecondary }); // options form\r\n */\r\nexport function injectCssVariables(arg?: string | CssVariablesOptions): void {\r\n if (typeof document === \"undefined\") return;\r\n const opts: CssVariablesOptions = typeof arg === \"string\" ? { id: arg } : (arg || {});\r\n const id = opts.id || STYLE_TAG_ID;\r\n\r\n let tag = document.getElementById(id);\r\n if (!tag) {\r\n tag = document.createElement(\"style\");\r\n tag.id = id;\r\n document.head.appendChild(tag);\r\n }\r\n tag.textContent = getCssVariables(opts);\r\n}\r\n\r\n/**\r\n * Remove the injected style tag. Symmetrical with\r\n * injectCssVariables — needed for theme switching, hot-reload\r\n * and test cleanup. No-op when the tag is absent or in SSR.\r\n *\r\n * removeCssVariables(); // default id\r\n * removeCssVariables(\"my-style-id\"); // legacy string id\r\n * removeCssVariables({ id }); // options form\r\n */\r\nexport function removeCssVariables(arg?: string | CssVariablesOptions): void {\r\n if (typeof document === \"undefined\") return;\r\n const id = typeof arg === \"string\"\r\n ? arg\r\n : ((arg && arg.id) || STYLE_TAG_ID);\r\n const tag = document.getElementById(id);\r\n if (tag) tag.remove();\r\n}\r\n\r\nconst cssVariablesApi = { getCssVariables, injectCssVariables, removeCssVariables };\r\nexport default cssVariablesApi;\r\n"],"mappings":"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","ignoreList":[]}
@@ -22,11 +22,11 @@ export { getCssVariables, injectCssVariables, removeCssVariables } from "./cssVa
22
22
  * Additive, non-breaking: type-only re-exports, no runtime change.
23
23
  */
24
24
 
25
- var themeApi = {
26
- createPortnetTheme: createPortnetTheme,
27
- getCssVariables: getCssVariables,
28
- injectCssVariables: injectCssVariables,
29
- removeCssVariables: removeCssVariables
25
+ const themeApi = {
26
+ createPortnetTheme,
27
+ getCssVariables,
28
+ injectCssVariables,
29
+ removeCssVariables
30
30
  };
31
31
  export default themeApi;
32
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createPortnetTheme","getCssVariables","injectCssVariables","removeCssVariables","default","themeApi"],"sources":["../../../../src/lib/v2/theme/index.ts"],"sourcesContent":["import createPortnetTheme from \"./createPortnetTheme\";\r\nimport {\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n} from \"./cssVariables\";\r\n\r\nexport { default as createPortnetTheme } from \"./createPortnetTheme\";\r\nexport {\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n} from \"./cssVariables\";\r\n\r\n/**\r\n * Public typed contract of the theme factory.\r\n *\r\n * Every host module wraps `createPortnetTheme` in a local `build<Module>Theme`\r\n * helper (see the GU modules' `utils/appearance`), and those wrappers need to\r\n * declare their own option surface without redefining it. Before this export\r\n * the options type was module-private, which forced consumers into either\r\n * `brand?: object` or an `as Parameters<typeof createPortnetTheme>[0]`\r\n * assertion — both of which the Platform TypeScript Guidelines forbid\r\n * (\"Never use object\", \"Avoid unsafe assertions\").\r\n *\r\n * `BrandTokens` / `BrandSecondaryTokens` are surfaced for the same reason: a\r\n * host that receives a partial brand payload from the shell (themeReceived)\r\n * must be able to type that payload against the shared token group instead of\r\n * inventing a local twin.\r\n *\r\n * Additive, non-breaking: type-only re-exports, no runtime change.\r\n */\r\nexport type { CreatePortnetThemeOptions } from \"./createPortnetTheme\";\r\nexport type { BrandTokens } from \"./_brand\";\r\nexport type { BrandSecondaryTokens } from \"./_brandSecondary\";\r\n\r\nconst themeApi = {\r\n createPortnetTheme,\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n};\r\nexport default themeApi;\r\n"],"mappings":"AAAA,OAAOA,kBAAkB,MAAM,sBAAsB;AACrD,SACEC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,QACb,gBAAgB;AAEvB,SAASC,OAAO,IAAIJ,kBAAkB,QAAQ,sBAAsB;AACpE,SACEC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,QACb,gBAAgB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,IAAME,QAAQ,GAAG;EACfL,kBAAkB,EAAlBA,kBAAkB;EAClBC,eAAe,EAAfA,eAAe;EACfC,kBAAkB,EAAlBA,kBAAkB;EAClBC,kBAAkB,EAAlBA;AACF,CAAC;AACD,eAAeE,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["createPortnetTheme","getCssVariables","injectCssVariables","removeCssVariables","default","themeApi"],"sources":["../../../../src/lib/v2/theme/index.ts"],"sourcesContent":["import createPortnetTheme from \"./createPortnetTheme\";\r\nimport {\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n} from \"./cssVariables\";\r\n\r\nexport { default as createPortnetTheme } from \"./createPortnetTheme\";\r\nexport {\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n} from \"./cssVariables\";\r\n\r\n/**\r\n * Public typed contract of the theme factory.\r\n *\r\n * Every host module wraps `createPortnetTheme` in a local `build<Module>Theme`\r\n * helper (see the GU modules' `utils/appearance`), and those wrappers need to\r\n * declare their own option surface without redefining it. Before this export\r\n * the options type was module-private, which forced consumers into either\r\n * `brand?: object` or an `as Parameters<typeof createPortnetTheme>[0]`\r\n * assertion — both of which the Platform TypeScript Guidelines forbid\r\n * (\"Never use object\", \"Avoid unsafe assertions\").\r\n *\r\n * `BrandTokens` / `BrandSecondaryTokens` are surfaced for the same reason: a\r\n * host that receives a partial brand payload from the shell (themeReceived)\r\n * must be able to type that payload against the shared token group instead of\r\n * inventing a local twin.\r\n *\r\n * Additive, non-breaking: type-only re-exports, no runtime change.\r\n */\r\nexport type { CreatePortnetThemeOptions } from \"./createPortnetTheme\";\r\nexport type { BrandTokens } from \"./_brand\";\r\nexport type { BrandSecondaryTokens } from \"./_brandSecondary\";\r\n\r\nconst themeApi = {\r\n createPortnetTheme,\r\n getCssVariables,\r\n injectCssVariables,\r\n removeCssVariables,\r\n};\r\nexport default themeApi;\r\n"],"mappings":"AAAA,OAAOA,kBAAkB,MAAM,sBAAsB;AACrD,SACEC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,QACb,gBAAgB;AAEvB,SAASC,OAAO,IAAIJ,kBAAkB,QAAQ,sBAAsB;AACpE,SACEC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,QACb,gBAAgB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,MAAME,QAAQ,GAAG;EACfL,kBAAkB;EAClBC,eAAe;EACfC,kBAAkB;EAClBC;AACF,CAAC;AACD,eAAeE,QAAQ","ignoreList":[]}
@@ -36,7 +36,7 @@
36
36
  */
37
37
 
38
38
  /* Ascending, mobile-first. xs = 0 is the base band (phones 320-480). */
39
- export var breakpoints = Object.freeze({
39
+ export const breakpoints = Object.freeze({
40
40
  xs: 0,
41
41
  sm: 481,
42
42
  md: 768,
@@ -49,12 +49,12 @@ export var breakpoints = Object.freeze({
49
49
 
50
50
  /* Ordered key list — the canonical iteration order for any mobile-first
51
51
  * cascade (base -> up). Re-used by Layout.js so the order can't drift. */
52
- export var BREAKPOINT_KEYS = Object.freeze(["xs", "sm", "md", "lg", "xl"]);
52
+ export const BREAKPOINT_KEYS = Object.freeze(["xs", "sm", "md", "lg", "xl"]);
53
53
 
54
54
  /* MUI parity: down()/between() subtract this from the upper bound so a
55
55
  * `down(key)` query and the matching `up(key)` query never overlap at
56
56
  * the exact pixel. Mirrors MUI's default step (5/100 = 0.05px). */
57
- var STEP = 0.05;
57
+ const STEP = 0.05;
58
58
 
59
59
  /**
60
60
  * Resolve a key to its numeric min-width, falling back to 0 for an
@@ -62,13 +62,13 @@ var STEP = 0.05;
62
62
  * emitting a NaN width (which silently disables the whole query).
63
63
  */
64
64
  export function bpValue(key) {
65
- var v = breakpoints[key];
65
+ const v = breakpoints[key];
66
66
  return typeof v === "number" ? v : 0;
67
67
  }
68
68
 
69
69
  /* Next key up the scale, or null when `key` is the largest. */
70
70
  function nextKey(key) {
71
- var i = BREAKPOINT_KEYS.indexOf(key);
71
+ const i = BREAKPOINT_KEYS.indexOf(key);
72
72
  return i >= 0 && i < BREAKPOINT_KEYS.length - 1 ? BREAKPOINT_KEYS[i + 1] : null;
73
73
  }
74
74
 
@@ -87,18 +87,18 @@ function nextKey(key) {
87
87
  * Usage (sx object key):
88
88
  * sx={{ [mq.up("md")]: { flexDirection: "row" } }}
89
89
  */
90
- export var mq = Object.freeze({
91
- up: function up(key) {
92
- return "@media (min-width:".concat(bpValue(key), "px)");
90
+ export const mq = Object.freeze({
91
+ up(key) {
92
+ return `@media (min-width:${bpValue(key)}px)`;
93
93
  },
94
- down: function down(key) {
95
- return "@media (max-width:".concat(bpValue(key) - STEP, "px)");
94
+ down(key) {
95
+ return `@media (max-width:${bpValue(key) - STEP}px)`;
96
96
  },
97
- between: function between(start, end) {
98
- return "@media (min-width:".concat(bpValue(start), "px) and (max-width:").concat(bpValue(end) - STEP, "px)");
97
+ between(start, end) {
98
+ return `@media (min-width:${bpValue(start)}px) and (max-width:${bpValue(end) - STEP}px)`;
99
99
  },
100
- only: function only(key) {
101
- var next = nextKey(key);
100
+ only(key) {
101
+ const next = nextKey(key);
102
102
  return next ? mq.between(key, next) : mq.up(key);
103
103
  }
104
104
  });
@@ -1 +1 @@
1
- {"version":3,"file":"breakpoints.js","names":["breakpoints","Object","freeze","xs","sm","md","lg","xl","BREAKPOINT_KEYS","STEP","bpValue","key","v","nextKey","i","indexOf","length","mq","up","concat","down","between","start","end","only","next"],"sources":["../../../../src/lib/v2/tokens/breakpoints.ts"],"sourcesContent":["/**\r\n * Breakpoint tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §07 (Responsive) + R-RS.1.\r\n *\r\n * SINGLE SOURCE OF TRUTH for the responsive breakpoint scale.\r\n * Previously these lived inside tokens/density.js, conflating two\r\n * unrelated concerns (row/control density vs. viewport breakpoints).\r\n * They now live here; density.js re-exports `breakpoints` so every\r\n * existing `import { breakpoints } from \"@portnet/ui/v2/tokens\"`\r\n * (and the `densityLayout` shape) keeps working unchanged.\r\n *\r\n * Two layers consume this scale and MUST stay in lockstep:\r\n * 1. The MUI theme — createPortnetTheme wires `breakpoints` into\r\n * createTheme's `breakpoints.values`, so `theme.breakpoints.up()`\r\n * and every `sx={{ prop: { xs, md } }}` on a MUI component resolve\r\n * against THESE values.\r\n * 2. The CSS layer — the `mq` helpers below emit the SAME media\r\n * queries as strings, for:\r\n * - the theme-free v2 Box/Stack responsive sx engine (Layout.js),\r\n * - raw `.css` / container styles,\r\n * - any `sx={{ [mq.up(\"md\")]: {...} }}`,\r\n * and the `--bp-*` CSS variables emitted by cssVariables.js for\r\n * pure-CSS / container-query consumers.\r\n *\r\n * IMPORTANT — keep `breakpoints` a PURE value map ({ key: number }).\r\n * MUI's createTheme iterates `breakpoints.values` to build its own\r\n * up/down/between; a non-numeric key (e.g. a helper function) would be\r\n * mis-read as a breakpoint named \"up\". Helpers therefore live on the\r\n * SEPARATE `mq` export, never on `breakpoints` itself.\r\n *\r\n * Charter viewport targets covered:\r\n * - xs band : 320 / 360 / 375 / 390 / 414 (phones, base, no query)\r\n * - md : 768 / 820 (tablet)\r\n * - lg : 1024 (small desktop / landscape tablet)\r\n * - xl band : 1280 / 1440 / 1920 (desktop)\r\n */\r\n\r\n/* Ascending, mobile-first. xs = 0 is the base band (phones 320-480). */\r\nexport const breakpoints = Object.freeze({\r\n xs: 0,\r\n sm: 481,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n});\r\n\r\n/* Local key type — canonical union of breakpoint keys. Not exported;\r\n * the public token surface is unchanged. */\r\ntype BreakpointKey = keyof typeof breakpoints;\r\n\r\n/* Ordered key list — the canonical iteration order for any mobile-first\r\n * cascade (base -> up). Re-used by Layout.js so the order can't drift. */\r\nexport const BREAKPOINT_KEYS = Object.freeze([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const);\r\n\r\n/* MUI parity: down()/between() subtract this from the upper bound so a\r\n * `down(key)` query and the matching `up(key)` query never overlap at\r\n * the exact pixel. Mirrors MUI's default step (5/100 = 0.05px). */\r\nconst STEP = 0.05;\r\n\r\n/**\r\n * Resolve a key to its numeric min-width, falling back to 0 for an\r\n * unknown key so a typo degrades to \"always matches\" rather than\r\n * emitting a NaN width (which silently disables the whole query).\r\n */\r\nexport function bpValue(key: BreakpointKey): number {\r\n const v = breakpoints[key];\r\n return typeof v === \"number\" ? v : 0;\r\n}\r\n\r\n/* Next key up the scale, or null when `key` is the largest. */\r\nfunction nextKey(key: BreakpointKey) {\r\n const i = BREAKPOINT_KEYS.indexOf(key);\r\n return i >= 0 && i < BREAKPOINT_KEYS.length - 1\r\n ? BREAKPOINT_KEYS[i + 1]\r\n : null;\r\n}\r\n\r\n/**\r\n * Token-derived media-query string helpers. Output is identical in\r\n * intent to MUI's `theme.breakpoints.*` so the CSS layer and the\r\n * JS/MUI layer can never diverge.\r\n *\r\n * mq.up(\"md\") -> \"@media (min-width:<md>px)\"\r\n * mq.down(\"md\") -> \"@media (max-width:<md - 0.05>px)\"\r\n * mq.between(\"sm\",\"lg\") -> \"@media (min-width:<sm>px) and (max-width:<lg - 0.05>px)\"\r\n * mq.only(\"md\") -> mq.between(\"md\",\"lg\")\r\n *\r\n * Usage (theme-free CSS layer / raw stylesheet):\r\n * `${mq.up(\"md\")}{ .x{ gap:24px } }`\r\n * Usage (sx object key):\r\n * sx={{ [mq.up(\"md\")]: { flexDirection: \"row\" } }}\r\n */\r\nexport const mq = Object.freeze({\r\n up(key: BreakpointKey): string {\r\n return `@media (min-width:${bpValue(key)}px)`;\r\n },\r\n down(key: BreakpointKey): string {\r\n return `@media (max-width:${bpValue(key) - STEP}px)`;\r\n },\r\n between(start: BreakpointKey, end: BreakpointKey): string {\r\n return `@media (min-width:${bpValue(start)}px) and (max-width:${bpValue(end) - STEP}px)`;\r\n },\r\n only(key: BreakpointKey): string {\r\n const next = nextKey(key);\r\n return next ? mq.between(key, next) : mq.up(key);\r\n },\r\n});\r\n\r\nexport default breakpoints;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,IAAMA,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,EAAE,EAAK,CAAC;EACRC,EAAE,EAAG,GAAG;EACRC,EAAE,EAAG,GAAG;EACRC,EAAE,EAAE,IAAI;EACRC,EAAE,EAAE;AACN,CAAC,CAAC;;AAEF;AACA;;AAGA;AACA;AACA,OAAO,IAAMC,eAAe,GAAGP,MAAM,CAACC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;;AAErF;AACA;AACA;AACA,IAAMO,IAAI,GAAG,IAAI;;AAEjB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAACC,GAAkB,EAAU;EAClD,IAAMC,CAAC,GAAGZ,WAAW,CAACW,GAAG,CAAC;EAC1B,OAAO,OAAOC,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAG,CAAC;AACtC;;AAEA;AACA,SAASC,OAAOA,CAACF,GAAkB,EAAE;EACnC,IAAMG,CAAC,GAAGN,eAAe,CAACO,OAAO,CAACJ,GAAG,CAAC;EACtC,OAAOG,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGN,eAAe,CAACQ,MAAM,GAAG,CAAC,GAC3CR,eAAe,CAACM,CAAC,GAAG,CAAC,CAAC,GACtB,IAAI;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,EAAE,GAAGhB,MAAM,CAACC,MAAM,CAAC;EAC9BgB,EAAE,WAAAA,GAACP,GAAkB,EAAU;IAC7B,4BAAAQ,MAAA,CAA4BT,OAAO,CAACC,GAAG,CAAC;EAC1C,CAAC;EACDS,IAAI,WAAAA,KAACT,GAAkB,EAAU;IAC/B,4BAAAQ,MAAA,CAA4BT,OAAO,CAACC,GAAG,CAAC,GAAGF,IAAI;EACjD,CAAC;EACDY,OAAO,WAAAA,QAACC,KAAoB,EAAEC,GAAkB,EAAU;IACxD,4BAAAJ,MAAA,CAA4BT,OAAO,CAACY,KAAK,CAAC,yBAAAH,MAAA,CAAsBT,OAAO,CAACa,GAAG,CAAC,GAAGd,IAAI;EACrF,CAAC;EACDe,IAAI,WAAAA,KAACb,GAAkB,EAAU;IAC/B,IAAMc,IAAI,GAAGZ,OAAO,CAACF,GAAG,CAAC;IACzB,OAAOc,IAAI,GAAGR,EAAE,CAACI,OAAO,CAACV,GAAG,EAAEc,IAAI,CAAC,GAAGR,EAAE,CAACC,EAAE,CAACP,GAAG,CAAC;EAClD;AACF,CAAC,CAAC;AAEF,eAAeX,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"breakpoints.js","names":["breakpoints","Object","freeze","xs","sm","md","lg","xl","BREAKPOINT_KEYS","STEP","bpValue","key","v","nextKey","i","indexOf","length","mq","up","down","between","start","end","only","next"],"sources":["../../../../src/lib/v2/tokens/breakpoints.ts"],"sourcesContent":["/**\r\n * Breakpoint tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §07 (Responsive) + R-RS.1.\r\n *\r\n * SINGLE SOURCE OF TRUTH for the responsive breakpoint scale.\r\n * Previously these lived inside tokens/density.js, conflating two\r\n * unrelated concerns (row/control density vs. viewport breakpoints).\r\n * They now live here; density.js re-exports `breakpoints` so every\r\n * existing `import { breakpoints } from \"@portnet/ui/v2/tokens\"`\r\n * (and the `densityLayout` shape) keeps working unchanged.\r\n *\r\n * Two layers consume this scale and MUST stay in lockstep:\r\n * 1. The MUI theme — createPortnetTheme wires `breakpoints` into\r\n * createTheme's `breakpoints.values`, so `theme.breakpoints.up()`\r\n * and every `sx={{ prop: { xs, md } }}` on a MUI component resolve\r\n * against THESE values.\r\n * 2. The CSS layer — the `mq` helpers below emit the SAME media\r\n * queries as strings, for:\r\n * - the theme-free v2 Box/Stack responsive sx engine (Layout.js),\r\n * - raw `.css` / container styles,\r\n * - any `sx={{ [mq.up(\"md\")]: {...} }}`,\r\n * and the `--bp-*` CSS variables emitted by cssVariables.js for\r\n * pure-CSS / container-query consumers.\r\n *\r\n * IMPORTANT — keep `breakpoints` a PURE value map ({ key: number }).\r\n * MUI's createTheme iterates `breakpoints.values` to build its own\r\n * up/down/between; a non-numeric key (e.g. a helper function) would be\r\n * mis-read as a breakpoint named \"up\". Helpers therefore live on the\r\n * SEPARATE `mq` export, never on `breakpoints` itself.\r\n *\r\n * Charter viewport targets covered:\r\n * - xs band : 320 / 360 / 375 / 390 / 414 (phones, base, no query)\r\n * - md : 768 / 820 (tablet)\r\n * - lg : 1024 (small desktop / landscape tablet)\r\n * - xl band : 1280 / 1440 / 1920 (desktop)\r\n */\r\n\r\n/* Ascending, mobile-first. xs = 0 is the base band (phones 320-480). */\r\nexport const breakpoints = Object.freeze({\r\n xs: 0,\r\n sm: 481,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n});\r\n\r\n/* Local key type — canonical union of breakpoint keys. Not exported;\r\n * the public token surface is unchanged. */\r\ntype BreakpointKey = keyof typeof breakpoints;\r\n\r\n/* Ordered key list — the canonical iteration order for any mobile-first\r\n * cascade (base -> up). Re-used by Layout.js so the order can't drift. */\r\nexport const BREAKPOINT_KEYS = Object.freeze([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const);\r\n\r\n/* MUI parity: down()/between() subtract this from the upper bound so a\r\n * `down(key)` query and the matching `up(key)` query never overlap at\r\n * the exact pixel. Mirrors MUI's default step (5/100 = 0.05px). */\r\nconst STEP = 0.05;\r\n\r\n/**\r\n * Resolve a key to its numeric min-width, falling back to 0 for an\r\n * unknown key so a typo degrades to \"always matches\" rather than\r\n * emitting a NaN width (which silently disables the whole query).\r\n */\r\nexport function bpValue(key: BreakpointKey): number {\r\n const v = breakpoints[key];\r\n return typeof v === \"number\" ? v : 0;\r\n}\r\n\r\n/* Next key up the scale, or null when `key` is the largest. */\r\nfunction nextKey(key: BreakpointKey) {\r\n const i = BREAKPOINT_KEYS.indexOf(key);\r\n return i >= 0 && i < BREAKPOINT_KEYS.length - 1\r\n ? BREAKPOINT_KEYS[i + 1]\r\n : null;\r\n}\r\n\r\n/**\r\n * Token-derived media-query string helpers. Output is identical in\r\n * intent to MUI's `theme.breakpoints.*` so the CSS layer and the\r\n * JS/MUI layer can never diverge.\r\n *\r\n * mq.up(\"md\") -> \"@media (min-width:<md>px)\"\r\n * mq.down(\"md\") -> \"@media (max-width:<md - 0.05>px)\"\r\n * mq.between(\"sm\",\"lg\") -> \"@media (min-width:<sm>px) and (max-width:<lg - 0.05>px)\"\r\n * mq.only(\"md\") -> mq.between(\"md\",\"lg\")\r\n *\r\n * Usage (theme-free CSS layer / raw stylesheet):\r\n * `${mq.up(\"md\")}{ .x{ gap:24px } }`\r\n * Usage (sx object key):\r\n * sx={{ [mq.up(\"md\")]: { flexDirection: \"row\" } }}\r\n */\r\nexport const mq = Object.freeze({\r\n up(key: BreakpointKey): string {\r\n return `@media (min-width:${bpValue(key)}px)`;\r\n },\r\n down(key: BreakpointKey): string {\r\n return `@media (max-width:${bpValue(key) - STEP}px)`;\r\n },\r\n between(start: BreakpointKey, end: BreakpointKey): string {\r\n return `@media (min-width:${bpValue(start)}px) and (max-width:${bpValue(end) - STEP}px)`;\r\n },\r\n only(key: BreakpointKey): string {\r\n const next = nextKey(key);\r\n return next ? mq.between(key, next) : mq.up(key);\r\n },\r\n});\r\n\r\nexport default breakpoints;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,EAAE,EAAK,CAAC;EACRC,EAAE,EAAG,GAAG;EACRC,EAAE,EAAG,GAAG;EACRC,EAAE,EAAE,IAAI;EACRC,EAAE,EAAE;AACN,CAAC,CAAC;;AAEF;AACA;;AAGA;AACA;AACA,OAAO,MAAMC,eAAe,GAAGP,MAAM,CAACC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;;AAErF;AACA;AACA;AACA,MAAMO,IAAI,GAAG,IAAI;;AAEjB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAACC,GAAkB,EAAU;EAClD,MAAMC,CAAC,GAAGZ,WAAW,CAACW,GAAG,CAAC;EAC1B,OAAO,OAAOC,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAG,CAAC;AACtC;;AAEA;AACA,SAASC,OAAOA,CAACF,GAAkB,EAAE;EACnC,MAAMG,CAAC,GAAGN,eAAe,CAACO,OAAO,CAACJ,GAAG,CAAC;EACtC,OAAOG,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGN,eAAe,CAACQ,MAAM,GAAG,CAAC,GAC3CR,eAAe,CAACM,CAAC,GAAG,CAAC,CAAC,GACtB,IAAI;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,EAAE,GAAGhB,MAAM,CAACC,MAAM,CAAC;EAC9BgB,EAAEA,CAACP,GAAkB,EAAU;IAC7B,OAAO,qBAAqBD,OAAO,CAACC,GAAG,CAAC,KAAK;EAC/C,CAAC;EACDQ,IAAIA,CAACR,GAAkB,EAAU;IAC/B,OAAO,qBAAqBD,OAAO,CAACC,GAAG,CAAC,GAAGF,IAAI,KAAK;EACtD,CAAC;EACDW,OAAOA,CAACC,KAAoB,EAAEC,GAAkB,EAAU;IACxD,OAAO,qBAAqBZ,OAAO,CAACW,KAAK,CAAC,sBAAsBX,OAAO,CAACY,GAAG,CAAC,GAAGb,IAAI,KAAK;EAC1F,CAAC;EACDc,IAAIA,CAACZ,GAAkB,EAAU;IAC/B,MAAMa,IAAI,GAAGX,OAAO,CAACF,GAAG,CAAC;IACzB,OAAOa,IAAI,GAAGP,EAAE,CAACG,OAAO,CAACT,GAAG,EAAEa,IAAI,CAAC,GAAGP,EAAE,CAACC,EAAE,CAACP,GAAG,CAAC;EAClD;AACF,CAAC,CAAC;AAEF,eAAeX,WAAW","ignoreList":[]}