@portnet/ui 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-palette.test.js","names":["_contrast","require","_chart","_tokens","WHITE","surface","DARK_SURFACE","dark","MIN_DELTA_E","parseHex","hex","h","replace","parseInt","slice","toLinear","channel","c","Math","pow","toLab","rgb","r","g","b","x","y","z","f","t","cbrt","fx","fy","fz","deltaE","a","la","lb","hypot","RGB_TO_LMS","LMS_TO_RGB","DEUTERANOPIA","PROTANOPIA","apply","m","v","simulate","deficiency","linear","seen","encode","clamped","min","max","srgb","round","worstCaseSeparation","ra","rb","describe","test","expect","chartCategorical","toHaveLength","CHART_CATEGORICAL_CORE","toBe","every","forEach","colour","index","passesContrast","contrastRatio","tooClose","i","length","j","separation","push","toFixed","toEqual","toBeGreaterThan","toBeLessThan","fill","chartColorOn","chartCategoricalOn","failures","filter","Number","NaN","chartColor","statusColours","Set","Object","values","status","flatMap","s","soft","toUpperCase","fg","overlap","has"],"sources":["../../../src/lib/v2/__tests__/chart-palette.test.ts"],"sourcesContent":["import { contrastRatio, passesContrast } from \"../utils/contrast\";\r\nimport {\r\n chartCategorical,\r\n chartCategoricalOn,\r\n chartColor,\r\n chartColorOn,\r\n CHART_CATEGORICAL_CORE,\r\n} from \"../tokens/chart\";\r\nimport { surface, dark, status } from \"../tokens\";\r\n\r\n/**\r\n * Categorical chart palette certification (gap G-37).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * `tokens/chart.ts` makes three claims that a consumer cannot check and that a\r\n * comment cannot keep true:\r\n *\r\n * 1. every fill clears the 3:1 non-text floor (WCAG 1.4.11 / R-C.3) on the\r\n * LIGHT surface;\r\n * 2. and on the DARK surface — which is what allows ONE array to serve both\r\n * themes, where `status` needs a `dark.status` override;\r\n * 3. the entries stay distinguishable from each other, INCLUDING under\r\n * colour-vision deficiency.\r\n *\r\n * The third is the one that matters most and is the least obvious. A pie chart\r\n * encodes its data in hue alone: two slices that collapse to the same colour\r\n * under deuteranopia do not merely look similar, they merge, and the reader\r\n * loses the datum. Roughly 8% of men have a red-green deficiency, so a palette\r\n * verified only under normal vision is verified for the easy case.\r\n *\r\n * Same discipline as contrast-palette.test.ts: ratios are COMPUTED here, never\r\n * copied from a comment. The palette this replaced — 32 hex literals across two\r\n * files in `refonte-frontend` — had none of the three properties verified, and\r\n * two of its entries (#0088FE / #2196f3) were a ~9 ΔE pair that merged under\r\n * both simulated dichromacies.\r\n */\r\n\r\nconst WHITE = surface.surface;\r\nconst DARK_SURFACE = dark.surface;\r\n\r\n/** Minimum separation demanded of any pair, in CIE76 ΔE units. */\r\nconst MIN_DELTA_E = 12;\r\n\r\ntype Rgb = readonly [number, number, number];\r\n\r\nfunction parseHex(hex: string): Rgb {\r\n const h = hex.replace(\"#\", \"\");\r\n return [\r\n parseInt(h.slice(0, 2), 16),\r\n parseInt(h.slice(2, 4), 16),\r\n parseInt(h.slice(4, 6), 16),\r\n ] as const;\r\n}\r\n\r\nfunction toLinear(channel: number): number {\r\n const c = channel / 255;\r\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n}\r\n\r\n/* ── CIE L*a*b* + CIE76 ─────────────────────────────────────────────────────\r\n * CIE76 rather than CIEDE2000: it is a weaker metric, so a threshold that\r\n * passes under CIE76 is the more conservative claim, and it is short enough to\r\n * read in one sitting. */\r\nfunction toLab(rgb: Rgb): readonly [number, number, number] {\r\n const [r, g, b] = [toLinear(rgb[0]), toLinear(rgb[1]), toLinear(rgb[2])];\r\n const x = (0.4124 * r + 0.3576 * g + 0.1805 * b) / 0.95047;\r\n const y = 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n const z = (0.0193 * r + 0.1192 * g + 0.9505 * b) / 1.08883;\r\n const f = (t: number): number =>\r\n t > 216 / 24389 ? Math.cbrt(t) : (841 / 108) * t + 4 / 29;\r\n const [fx, fy, fz] = [f(x), f(y), f(z)];\r\n return [116 * fy - 16, 500 * (fx - fy), 200 * (fy - fz)] as const;\r\n}\r\n\r\nfunction deltaE(a: Rgb, b: Rgb): number {\r\n const la = toLab(a);\r\n const lb = toLab(b);\r\n return Math.hypot(la[0] - lb[0], la[1] - lb[1], la[2] - lb[2]);\r\n}\r\n\r\n/* ── Dichromacy simulation (Viénot, Brettel & Mollon 1999) ──────────────────\r\n * Linear RGB → LMS, collapse the missing cone response, back to sRGB. */\r\ntype Matrix = readonly [Rgb, Rgb, Rgb];\r\n\r\nconst RGB_TO_LMS: Matrix = [\r\n [17.8824, 43.5161, 4.11935],\r\n [3.45565, 27.1554, 3.86714],\r\n [0.0299566, 0.184309, 1.46709],\r\n] as const;\r\n\r\nconst LMS_TO_RGB: Matrix = [\r\n [0.080944, -0.130504, 0.116721],\r\n [-0.0102485, 0.0540194, -0.113615],\r\n [-0.000365294, -0.00412163, 0.693513],\r\n] as const;\r\n\r\n/** Green-cone deficiency. */\r\nconst DEUTERANOPIA: Matrix = [\r\n [1, 0, 0],\r\n [0.494207, 0, 1.24827],\r\n [0, 0, 1],\r\n] as const;\r\n\r\n/** Red-cone deficiency. */\r\nconst PROTANOPIA: Matrix = [\r\n [0, 2.02344, -2.52581],\r\n [0, 1, 0],\r\n [0, 0, 1],\r\n] as const;\r\n\r\nfunction apply(m: Matrix, v: Rgb): Rgb {\r\n return [\r\n m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2],\r\n m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2],\r\n m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2],\r\n ] as const;\r\n}\r\n\r\nfunction simulate(rgb: Rgb, deficiency: Matrix): Rgb {\r\n const linear: Rgb = [toLinear(rgb[0]), toLinear(rgb[1]), toLinear(rgb[2])] as const;\r\n const seen = apply(LMS_TO_RGB, apply(deficiency, apply(RGB_TO_LMS, linear)));\r\n const encode = (c: number): number => {\r\n const clamped = Math.min(1, Math.max(0, c));\r\n const srgb =\r\n clamped <= 0.0031308\r\n ? 12.92 * clamped\r\n : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;\r\n return Math.round(Math.min(1, Math.max(0, srgb)) * 255);\r\n };\r\n return [encode(seen[0]), encode(seen[1]), encode(seen[2])] as const;\r\n}\r\n\r\n/** Worst-case separation: normal vision, deuteranopia, protanopia. */\r\nfunction worstCaseSeparation(a: string, b: string): number {\r\n const ra = parseHex(a);\r\n const rb = parseHex(b);\r\n return Math.min(\r\n deltaE(ra, rb),\r\n deltaE(simulate(ra, DEUTERANOPIA), simulate(rb, DEUTERANOPIA)),\r\n deltaE(simulate(ra, PROTANOPIA), simulate(rb, PROTANOPIA))\r\n );\r\n}\r\n\r\ndescribe(\"Categorical chart palette (tokens/chart)\", () => {\r\n test(\"shape is pinned — 12 entries, 8 of them the hue-balanced core\", () => {\r\n expect(chartCategorical).toHaveLength(12);\r\n expect(CHART_CATEGORICAL_CORE).toBe(8);\r\n expect(chartCategorical.every((c) => /^#[0-9A-F]{6}$/.test(c))).toBe(true);\r\n });\r\n\r\n describe(\"non-text contrast ≥ 3:1 (WCAG 1.4.11 / R-C.3)\", () => {\r\n chartCategorical.forEach((colour, index) => {\r\n test(`--chart-${index + 1} (${colour}) on the light surface`, () => {\r\n expect(passesContrast(contrastRatio(colour, WHITE), \"ui\")).toBe(true);\r\n });\r\n\r\n /**\r\n * The dark-surface half is what earns this palette a single array. If a\r\n * future hue is nudged out of the luminance window, THIS is the test that\r\n * fails, and the remedy is to re-solve the lightness — not to add a\r\n * `dark.chart` override, which would double the surface to maintain.\r\n */\r\n test(`--chart-${index + 1} (${colour}) on the dark surface`, () => {\r\n expect(passesContrast(contrastRatio(colour, DARK_SURFACE), \"ui\")).toBe(true);\r\n });\r\n });\r\n });\r\n\r\n describe(\"mutual distinguishability, normal vision and dichromacy\", () => {\r\n test(`every pair is ≥ ${MIN_DELTA_E} ΔE in the worst of three vision models`, () => {\r\n const tooClose: string[] = [];\r\n for (let i = 0; i < chartCategorical.length; i += 1) {\r\n for (let j = i + 1; j < chartCategorical.length; j += 1) {\r\n const a = chartCategorical[i] as string;\r\n const b = chartCategorical[j] as string;\r\n const separation = worstCaseSeparation(a, b);\r\n if (separation < MIN_DELTA_E) {\r\n tooClose.push(\r\n `${a} (${i + 1}) vs ${b} (${j + 1}) — ${separation.toFixed(1)} ΔE`\r\n );\r\n }\r\n }\r\n }\r\n expect(tooClose).toEqual([]);\r\n });\r\n\r\n /**\r\n * The tightest pair, asserted at its MEASURED value rather than at the\r\n * threshold — the convention this repository already uses in\r\n * contrast-palette.test.ts, so that drift shows up as a diff instead of as\r\n * a pass that quietly got worse.\r\n */\r\n test(\"the closest pair is red vs olive, at ~12.4 ΔE\", () => {\r\n const separation = worstCaseSeparation(\"#C92E1D\", \"#3B7911\");\r\n expect(separation).toBeGreaterThan(12);\r\n expect(separation).toBeLessThan(13);\r\n });\r\n });\r\n\r\n describe(\"chartColorOn() — text drawn ON a slice is AA (WCAG 1.4.3)\", () => {\r\n chartCategorical.forEach((fill, index) => {\r\n test(`label on --chart-${index + 1} (${fill})`, () => {\r\n expect(passesContrast(contrastRatio(chartColorOn(index), fill), \"normal\")).toBe(\r\n true\r\n );\r\n });\r\n });\r\n\r\n test(\"the label array is index-aligned with the palette\", () => {\r\n expect(chartCategoricalOn).toHaveLength(chartCategorical.length);\r\n });\r\n\r\n /**\r\n * The regression this closes: `refonte-frontend` printed `fill=\"white\"` on\r\n * every pie label. Asserted here so the two-tier palette can never be\r\n * paired with a single label colour again — white FAILS on the light tier.\r\n */\r\n test(\"a single white label colour would NOT satisfy AA on every entry\", () => {\r\n const failures = chartCategorical.filter(\r\n (fill) => !passesContrast(contrastRatio(\"#FFFFFF\", fill), \"normal\")\r\n );\r\n expect(failures.length).toBeGreaterThan(0);\r\n });\r\n\r\n test(\"bad input resolves to the first label colour\", () => {\r\n expect(chartColorOn(-1)).toBe(chartCategoricalOn[0]);\r\n expect(chartColorOn(Number.NaN)).toBe(chartCategoricalOn[0]);\r\n expect(chartColorOn(12)).toBe(chartCategoricalOn[0]);\r\n });\r\n });\r\n\r\n describe(\"chartColor()\", () => {\r\n test(\"returns the palette in order\", () => {\r\n chartCategorical.forEach((colour, index) => {\r\n expect(chartColor(index)).toBe(colour);\r\n });\r\n });\r\n\r\n test(\"cycles past the end\", () => {\r\n expect(chartColor(12)).toBe(chartCategorical[0]);\r\n expect(chartColor(13)).toBe(chartCategorical[1]);\r\n });\r\n\r\n test(\"bad input resolves to the first entry instead of throwing\", () => {\r\n expect(chartColor(-1)).toBe(chartCategorical[0]);\r\n expect(chartColor(Number.NaN)).toBe(chartCategorical[0]);\r\n });\r\n\r\n test(\"fractional indices floor rather than producing undefined\", () => {\r\n expect(chartColor(2.7)).toBe(chartCategorical[2]);\r\n });\r\n });\r\n\r\n /**\r\n * A categorical palette must not be mistaken for the workflow palette. These\r\n * are different vocabularies (R-2.2 reserves `status` for canonical workflow\r\n * states), and a value shared between them would invite exactly the confusion\r\n * the split exists to prevent.\r\n */\r\n test(\"no entry duplicates a workflow status colour\", () => {\r\n const statusColours = new Set(\r\n Object.values(status).flatMap((s) => [\r\n s.soft.toUpperCase(),\r\n s.fg.toUpperCase(),\r\n ])\r\n );\r\n const overlap = chartCategorical.filter((c) => statusColours.has(c.toUpperCase()));\r\n expect(overlap).toEqual([]);\r\n });\r\n});\r\n"],"mappings":";;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAOA,IAAAE,OAAA,GAAAF,OAAA;AAEA;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,MAAMG,KAAK,GAAGC,eAAO,CAACA,OAAO;AAC7B,MAAMC,YAAY,GAAGC,YAAI,CAACF,OAAO;;AAEjC;AACA,MAAMG,WAAW,GAAG,EAAE;AAItB,SAASC,QAAQA,CAACC,GAAW,EAAO;EAClC,MAAMC,CAAC,GAAGD,GAAG,CAACE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;EAC9B,OAAO,CACLC,QAAQ,CAACF,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAC3BD,QAAQ,CAACF,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAC3BD,QAAQ,CAACF,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5B;AACH;AAEA,SAASC,QAAQA,CAACC,OAAe,EAAU;EACzC,MAAMC,CAAC,GAAGD,OAAO,GAAG,GAAG;EACvB,OAAOC,CAAC,IAAI,OAAO,GAAGA,CAAC,GAAG,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAACF,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA,SAASG,KAAKA,CAACC,GAAQ,EAAqC;EAC1D,MAAM,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,GAAG,CAACT,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAEN,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAEN,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACxE,MAAMI,CAAC,GAAG,CAAC,MAAM,GAAGH,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC,IAAI,OAAO;EAC1D,MAAME,CAAC,GAAG,MAAM,GAAGJ,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC;EAC9C,MAAMG,CAAC,GAAG,CAAC,MAAM,GAAGL,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC,IAAI,OAAO;EAC1D,MAAMI,CAAC,GAAIC,CAAS,IAClBA,CAAC,GAAG,GAAG,GAAG,KAAK,GAAGX,IAAI,CAACY,IAAI,CAACD,CAAC,CAAC,GAAI,GAAG,GAAG,GAAG,GAAIA,CAAC,GAAG,CAAC,GAAG,EAAE;EAC3D,MAAM,CAACE,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAG,CAACL,CAAC,CAACH,CAAC,CAAC,EAAEG,CAAC,CAACF,CAAC,CAAC,EAAEE,CAAC,CAACD,CAAC,CAAC,CAAC;EACvC,OAAO,CAAC,GAAG,GAAGK,EAAE,GAAG,EAAE,EAAE,GAAG,IAAID,EAAE,GAAGC,EAAE,CAAC,EAAE,GAAG,IAAIA,EAAE,GAAGC,EAAE,CAAC,CAAC;AAC1D;AAEA,SAASC,MAAMA,CAACC,CAAM,EAAEX,CAAM,EAAU;EACtC,MAAMY,EAAE,GAAGhB,KAAK,CAACe,CAAC,CAAC;EACnB,MAAME,EAAE,GAAGjB,KAAK,CAACI,CAAC,CAAC;EACnB,OAAON,IAAI,CAACoB,KAAK,CAACF,EAAE,CAAC,CAAC,CAAC,GAAGC,EAAE,CAAC,CAAC,CAAC,EAAED,EAAE,CAAC,CAAC,CAAC,GAAGC,EAAE,CAAC,CAAC,CAAC,EAAED,EAAE,CAAC,CAAC,CAAC,GAAGC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE;;AAEA;AACA;;AAGA,MAAME,UAAkB,GAAG,CACzB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAC3B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAC3B,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CACtB;AAEV,MAAMC,UAAkB,GAAG,CACzB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC/B,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAClC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC7B;;AAEV;AACA,MAAMC,YAAoB,GAAG,CAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACT,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,EACtB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACD;;AAEV;AACA,MAAMC,UAAkB,GAAG,CACzB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EACtB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACD;AAEV,SAASC,KAAKA,CAACC,CAAS,EAAEC,CAAM,EAAO;EACrC,OAAO,CACLD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAChDD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAChDD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CACjD;AACH;AAEA,SAASC,QAAQA,CAACzB,GAAQ,EAAE0B,UAAkB,EAAO;EACnD,MAAMC,MAAW,GAAG,CAACjC,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAEN,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAEN,QAAQ,CAACM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAU;EACnF,MAAM4B,IAAI,GAAGN,KAAK,CAACH,UAAU,EAAEG,KAAK,CAACI,UAAU,EAAEJ,KAAK,CAACJ,UAAU,EAAES,MAAM,CAAC,CAAC,CAAC;EAC5E,MAAME,MAAM,GAAIjC,CAAS,IAAa;IACpC,MAAMkC,OAAO,GAAGjC,IAAI,CAACkC,GAAG,CAAC,CAAC,EAAElC,IAAI,CAACmC,GAAG,CAAC,CAAC,EAAEpC,CAAC,CAAC,CAAC;IAC3C,MAAMqC,IAAI,GACRH,OAAO,IAAI,SAAS,GAChB,KAAK,GAAGA,OAAO,GACf,KAAK,GAAGjC,IAAI,CAACC,GAAG,CAACgC,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK;IAChD,OAAOjC,IAAI,CAACqC,KAAK,CAACrC,IAAI,CAACkC,GAAG,CAAC,CAAC,EAAElC,IAAI,CAACmC,GAAG,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;EACzD,CAAC;EACD,OAAO,CAACJ,MAAM,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEC,MAAM,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEC,MAAM,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D;;AAEA;AACA,SAASO,mBAAmBA,CAACrB,CAAS,EAAEX,CAAS,EAAU;EACzD,MAAMiC,EAAE,GAAGhD,QAAQ,CAAC0B,CAAC,CAAC;EACtB,MAAMuB,EAAE,GAAGjD,QAAQ,CAACe,CAAC,CAAC;EACtB,OAAON,IAAI,CAACkC,GAAG,CACblB,MAAM,CAACuB,EAAE,EAAEC,EAAE,CAAC,EACdxB,MAAM,CAACY,QAAQ,CAACW,EAAE,EAAEhB,YAAY,CAAC,EAAEK,QAAQ,CAACY,EAAE,EAAEjB,YAAY,CAAC,CAAC,EAC9DP,MAAM,CAACY,QAAQ,CAACW,EAAE,EAAEf,UAAU,CAAC,EAAEI,QAAQ,CAACY,EAAE,EAAEhB,UAAU,CAAC,CAC3D,CAAC;AACH;AAEAiB,QAAQ,CAAC,0CAA0C,EAAE,MAAM;EACzDC,IAAI,CAAC,+DAA+D,EAAE,MAAM;IAC1EC,MAAM,CAACC,uBAAgB,CAAC,CAACC,YAAY,CAAC,EAAE,CAAC;IACzCF,MAAM,CAACG,6BAAsB,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACtCJ,MAAM,CAACC,uBAAgB,CAACI,KAAK,CAAEjD,CAAC,IAAK,gBAAgB,CAAC2C,IAAI,CAAC3C,CAAC,CAAC,CAAC,CAAC,CAACgD,IAAI,CAAC,IAAI,CAAC;EAC5E,CAAC,CAAC;EAEFN,QAAQ,CAAC,+CAA+C,EAAE,MAAM;IAC9DG,uBAAgB,CAACK,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MAC1CT,IAAI,CAAC,WAAWS,KAAK,GAAG,CAAC,KAAKD,MAAM,wBAAwB,EAAE,MAAM;QAClEP,MAAM,CAAC,IAAAS,wBAAc,EAAC,IAAAC,uBAAa,EAACH,MAAM,EAAEhE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC;MACvE,CAAC,CAAC;;MAEF;AACN;AACA;AACA;AACA;AACA;MACML,IAAI,CAAC,WAAWS,KAAK,GAAG,CAAC,KAAKD,MAAM,uBAAuB,EAAE,MAAM;QACjEP,MAAM,CAAC,IAAAS,wBAAc,EAAC,IAAAC,uBAAa,EAACH,MAAM,EAAE9D,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC2D,IAAI,CAAC,IAAI,CAAC;MAC9E,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFN,QAAQ,CAAC,yDAAyD,EAAE,MAAM;IACxEC,IAAI,CAAC,mBAAmBpD,WAAW,yCAAyC,EAAE,MAAM;MAClF,MAAMgE,QAAkB,GAAG,EAAE;MAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,uBAAgB,CAACY,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QACnD,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAGb,uBAAgB,CAACY,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;UACvD,MAAMxC,CAAC,GAAG2B,uBAAgB,CAACW,CAAC,CAAW;UACvC,MAAMjD,CAAC,GAAGsC,uBAAgB,CAACa,CAAC,CAAW;UACvC,MAAMC,UAAU,GAAGpB,mBAAmB,CAACrB,CAAC,EAAEX,CAAC,CAAC;UAC5C,IAAIoD,UAAU,GAAGpE,WAAW,EAAE;YAC5BgE,QAAQ,CAACK,IAAI,CACX,GAAG1C,CAAC,KAAKsC,CAAC,GAAG,CAAC,QAAQjD,CAAC,KAAKmD,CAAC,GAAG,CAAC,OAAOC,UAAU,CAACE,OAAO,CAAC,CAAC,CAAC,KAC/D,CAAC;UACH;QACF;MACF;MACAjB,MAAM,CAACW,QAAQ,CAAC,CAACO,OAAO,CAAC,EAAE,CAAC;IAC9B,CAAC,CAAC;;IAEF;AACJ;AACA;AACA;AACA;AACA;IACInB,IAAI,CAAC,+CAA+C,EAAE,MAAM;MAC1D,MAAMgB,UAAU,GAAGpB,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;MAC5DK,MAAM,CAACe,UAAU,CAAC,CAACI,eAAe,CAAC,EAAE,CAAC;MACtCnB,MAAM,CAACe,UAAU,CAAC,CAACK,YAAY,CAAC,EAAE,CAAC;IACrC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFtB,QAAQ,CAAC,2DAA2D,EAAE,MAAM;IAC1EG,uBAAgB,CAACK,OAAO,CAAC,CAACe,IAAI,EAAEb,KAAK,KAAK;MACxCT,IAAI,CAAC,oBAAoBS,KAAK,GAAG,CAAC,KAAKa,IAAI,GAAG,EAAE,MAAM;QACpDrB,MAAM,CAAC,IAAAS,wBAAc,EAAC,IAAAC,uBAAa,EAAC,IAAAY,mBAAY,EAACd,KAAK,CAAC,EAAEa,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAACjB,IAAI,CAC7E,IACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFL,IAAI,CAAC,mDAAmD,EAAE,MAAM;MAC9DC,MAAM,CAACuB,yBAAkB,CAAC,CAACrB,YAAY,CAACD,uBAAgB,CAACY,MAAM,CAAC;IAClE,CAAC,CAAC;;IAEF;AACJ;AACA;AACA;AACA;IACId,IAAI,CAAC,iEAAiE,EAAE,MAAM;MAC5E,MAAMyB,QAAQ,GAAGvB,uBAAgB,CAACwB,MAAM,CACrCJ,IAAI,IAAK,CAAC,IAAAZ,wBAAc,EAAC,IAAAC,uBAAa,EAAC,SAAS,EAAEW,IAAI,CAAC,EAAE,QAAQ,CACpE,CAAC;MACDrB,MAAM,CAACwB,QAAQ,CAACX,MAAM,CAAC,CAACM,eAAe,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEFpB,IAAI,CAAC,8CAA8C,EAAE,MAAM;MACzDC,MAAM,CAAC,IAAAsB,mBAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAClB,IAAI,CAACmB,yBAAkB,CAAC,CAAC,CAAC,CAAC;MACpDvB,MAAM,CAAC,IAAAsB,mBAAY,EAACI,MAAM,CAACC,GAAG,CAAC,CAAC,CAACvB,IAAI,CAACmB,yBAAkB,CAAC,CAAC,CAAC,CAAC;MAC5DvB,MAAM,CAAC,IAAAsB,mBAAY,EAAC,EAAE,CAAC,CAAC,CAAClB,IAAI,CAACmB,yBAAkB,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFzB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC7BC,IAAI,CAAC,8BAA8B,EAAE,MAAM;MACzCE,uBAAgB,CAACK,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;QAC1CR,MAAM,CAAC,IAAA4B,iBAAU,EAACpB,KAAK,CAAC,CAAC,CAACJ,IAAI,CAACG,MAAM,CAAC;MACxC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFR,IAAI,CAAC,qBAAqB,EAAE,MAAM;MAChCC,MAAM,CAAC,IAAA4B,iBAAU,EAAC,EAAE,CAAC,CAAC,CAACxB,IAAI,CAACH,uBAAgB,CAAC,CAAC,CAAC,CAAC;MAChDD,MAAM,CAAC,IAAA4B,iBAAU,EAAC,EAAE,CAAC,CAAC,CAACxB,IAAI,CAACH,uBAAgB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IAEFF,IAAI,CAAC,2DAA2D,EAAE,MAAM;MACtEC,MAAM,CAAC,IAAA4B,iBAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAACxB,IAAI,CAACH,uBAAgB,CAAC,CAAC,CAAC,CAAC;MAChDD,MAAM,CAAC,IAAA4B,iBAAU,EAACF,MAAM,CAACC,GAAG,CAAC,CAAC,CAACvB,IAAI,CAACH,uBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEFF,IAAI,CAAC,0DAA0D,EAAE,MAAM;MACrEC,MAAM,CAAC,IAAA4B,iBAAU,EAAC,GAAG,CAAC,CAAC,CAACxB,IAAI,CAACH,uBAAgB,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACEF,IAAI,CAAC,8CAA8C,EAAE,MAAM;IACzD,MAAM8B,aAAa,GAAG,IAAIC,GAAG,CAC3BC,MAAM,CAACC,MAAM,CAACC,cAAM,CAAC,CAACC,OAAO,CAAEC,CAAC,IAAK,CACnCA,CAAC,CAACC,IAAI,CAACC,WAAW,CAAC,CAAC,EACpBF,CAAC,CAACG,EAAE,CAACD,WAAW,CAAC,CAAC,CACnB,CACH,CAAC;IACD,MAAME,OAAO,GAAGtC,uBAAgB,CAACwB,MAAM,CAAErE,CAAC,IAAKyE,aAAa,CAACW,GAAG,CAACpF,CAAC,CAACiF,WAAW,CAAC,CAAC,CAAC,CAAC;IAClFrC,MAAM,CAACuC,OAAO,CAAC,CAACrB,OAAO,CAAC,EAAE,CAAC;EAC7B,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -2,12 +2,6 @@
2
2
 
3
3
  var _contrast = require("../utils/contrast");
4
4
  var _tokens = require("../tokens");
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
5
  /**
12
6
  * Token-palette contrast certification (Charter §05.1 / WCAG 2.1 AA).
13
7
  *
@@ -28,43 +22,30 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
28
22
  */
29
23
 
30
24
  /** Every light-mode surface that body text can land on. */
31
- var LIGHT_SURFACES = [["surface", _tokens.surface.surface], ["bgElev", _tokens.surface.bgElev], ["bg", _tokens.surface.bg], ["bgSubtle", _tokens.surface.bgSubtle]];
32
- describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function () {
33
- describe("ink on light surfaces — normal text ≥ 4.5:1", function () {
34
- var _loop = function _loop() {
35
- var _LIGHT_SURFACES$_i = _slicedToArray(_LIGHT_SURFACES[_i], 2),
36
- name = _LIGHT_SURFACES$_i[0],
37
- bg = _LIGHT_SURFACES$_i[1];
38
- test("fg on ".concat(name), function () {
25
+ const LIGHT_SURFACES = [["surface", _tokens.surface.surface], ["bgElev", _tokens.surface.bgElev], ["bg", _tokens.surface.bg], ["bgSubtle", _tokens.surface.bgSubtle]];
26
+ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", () => {
27
+ describe("ink on light surfaces — normal text ≥ 4.5:1", () => {
28
+ for (const [name, bg] of LIGHT_SURFACES) {
29
+ test(`fg on ${name}`, () => {
39
30
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fg, bg), "normal")).toBe(true);
40
31
  });
41
- test("fgMuted on ".concat(name), function () {
32
+ test(`fgMuted on ${name}`, () => {
42
33
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fgMuted, bg), "normal")).toBe(true);
43
34
  });
44
- };
45
- for (var _i = 0, _LIGHT_SURFACES = LIGHT_SURFACES; _i < _LIGHT_SURFACES.length; _i++) {
46
- _loop();
47
35
  }
48
- test("fgInverse on the darkest dark surface", function () {
36
+ test("fgInverse on the darkest dark surface", () => {
49
37
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fgInverse, _tokens.dark.bg), "normal")).toBe(true);
50
38
  });
51
39
  });
52
- describe("semantic fg — readable on white AND on its own soft fill", function () {
53
- var pairs = [["success", _tokens.semantic.successFg, _tokens.semantic.successSoft], ["warning", _tokens.semantic.warningFg, _tokens.semantic.warningSoft], ["danger", _tokens.semantic.dangerFg, _tokens.semantic.dangerSoft], ["info", _tokens.semantic.infoFg, _tokens.semantic.infoSoft]];
54
- var _loop2 = function _loop2() {
55
- var _pairs$_i = _slicedToArray(_pairs[_i2], 3),
56
- name = _pairs$_i[0],
57
- fg = _pairs$_i[1],
58
- soft = _pairs$_i[2];
59
- test("".concat(name, "Fg on white"), function () {
40
+ describe("semantic fg — readable on white AND on its own soft fill", () => {
41
+ const pairs = [["success", _tokens.semantic.successFg, _tokens.semantic.successSoft], ["warning", _tokens.semantic.warningFg, _tokens.semantic.warningSoft], ["danger", _tokens.semantic.dangerFg, _tokens.semantic.dangerSoft], ["info", _tokens.semantic.infoFg, _tokens.semantic.infoSoft]];
42
+ for (const [name, fg, soft] of pairs) {
43
+ test(`${name}Fg on white`, () => {
60
44
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, "#FFFFFF"), "normal")).toBe(true);
61
45
  });
62
- test("".concat(name, "Fg on ").concat(name, "Soft"), function () {
46
+ test(`${name}Fg on ${name}Soft`, () => {
63
47
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, soft), "normal")).toBe(true);
64
48
  });
65
- };
66
- for (var _i2 = 0, _pairs = pairs; _i2 < _pairs.length; _i2++) {
67
- _loop2();
68
49
  }
69
50
  });
70
51
 
@@ -72,63 +53,50 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
72
53
  * The Charter's promise in §02.1: "Combinaison background -soft +
73
54
  * foreground -fg = AA garanti." This is that promise, enforced.
74
55
  */
75
- describe("status palette — every -fg on its own -soft is AA (§02.1)", function () {
76
- var _loop3 = function _loop3() {
77
- var key = _arr2[_i3];
78
- test("status.".concat(key), function () {
79
- var _status$key = _tokens.status[key],
80
- soft = _status$key.soft,
81
- fg = _status$key.fg;
56
+ describe("status palette — every -fg on its own -soft is AA (§02.1)", () => {
57
+ for (const key of Object.keys(_tokens.status)) {
58
+ test(`status.${key}`, () => {
59
+ const {
60
+ soft,
61
+ fg
62
+ } = _tokens.status[key];
82
63
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, soft), "normal")).toBe(true);
83
64
  });
84
- test("status.".concat(key, " fg on white"), function () {
65
+ test(`status.${key} fg on white`, () => {
85
66
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.status[key].fg, "#FFFFFF"), "normal")).toBe(true);
86
67
  });
87
- };
88
- for (var _i3 = 0, _arr2 = Object.keys(_tokens.status); _i3 < _arr2.length; _i3++) {
89
- _loop3();
90
68
  }
91
69
  });
92
- describe("non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)", function () {
93
- var saturated = [["success", _tokens.semantic.success], ["warning", _tokens.semantic.warning], ["danger", _tokens.semantic.danger], ["info", _tokens.semantic.info]];
94
- var _loop4 = function _loop4() {
95
- var _saturated$_i = _slicedToArray(_saturated[_i4], 2),
96
- name = _saturated$_i[0],
97
- colour = _saturated$_i[1];
98
- test("".concat(name, " (icon / border grade) on white"), function () {
70
+ describe("non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)", () => {
71
+ const saturated = [["success", _tokens.semantic.success], ["warning", _tokens.semantic.warning], ["danger", _tokens.semantic.danger], ["info", _tokens.semantic.info]];
72
+ for (const [name, colour] of saturated) {
73
+ test(`${name} (icon / border grade) on white`, () => {
99
74
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(colour, "#FFFFFF"), "ui")).toBe(true);
100
75
  });
101
- };
102
- for (var _i4 = 0, _saturated = saturated; _i4 < _saturated.length; _i4++) {
103
- _loop4();
104
76
  }
105
77
  });
106
- describe("brand", function () {
107
- test("accent on white is AA for normal text", function () {
78
+ describe("brand", () => {
79
+ test("accent on white is AA for normal text", () => {
108
80
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accent, "#FFFFFF"), "normal")).toBe(true);
109
81
  });
110
- test("accentFg on accent — the primary-button pair", function () {
82
+ test("accentFg on accent — the primary-button pair", () => {
111
83
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accentFg, _tokens.brand.accent), "normal")).toBe(true);
112
84
  });
113
- test("accentHover keeps AA against accentFg (pressed state stays readable)", function () {
85
+ test("accentHover keeps AA against accentFg (pressed state stays readable)", () => {
114
86
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accentFg, _tokens.brand.accentHover), "normal")).toBe(true);
115
87
  });
116
88
  });
117
- describe("dark mode", function () {
118
- test("dark.fg on dark.surface", function () {
89
+ describe("dark mode", () => {
90
+ test("dark.fg on dark.surface", () => {
119
91
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.fg, _tokens.dark.surface), "normal")).toBe(true);
120
92
  });
121
- test("dark.fgMuted on dark.surface", function () {
93
+ test("dark.fgMuted on dark.surface", () => {
122
94
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.fgMuted, _tokens.dark.surface), "normal")).toBe(true);
123
95
  });
124
- var _loop5 = function _loop5() {
125
- var key = _arr3[_i5];
126
- test("dark status.".concat(key, ".fg on dark.surface"), function () {
96
+ for (const key of Object.keys(_tokens.dark.status)) {
97
+ test(`dark status.${key}.fg on dark.surface`, () => {
127
98
  expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.status[key].fg, _tokens.dark.surface), "normal")).toBe(true);
128
99
  });
129
- };
130
- for (var _i5 = 0, _arr3 = Object.keys(_tokens.dark.status); _i5 < _arr3.length; _i5++) {
131
- _loop5();
132
100
  }
133
101
  });
134
102
 
@@ -138,7 +106,7 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
138
106
  * any drift shows up as a diff. Both need a palette decision, not a
139
107
  * test change.
140
108
  * ══════════════════════════════════════════════════════════════════ */
141
- describe("KNOWN AA FAILURES (documented, pending decision)", function () {
109
+ describe("KNOWN AA FAILURES (documented, pending decision)", () => {
142
110
  /**
143
111
  * A9-01 — `fgSubtle` on `bgSubtle` ≈ 4.32:1, below the 4.5 floor.
144
112
  *
@@ -158,8 +126,8 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
158
126
  * fleet-wide), or switch those labels to `--fg-muted` (AAA, 7.5:1 on
159
127
  * bgSubtle) which is what every other label surface already uses.
160
128
  */
161
- test("fgSubtle on bgSubtle is BELOW AA — ~4.32:1", function () {
162
- var ratio = (0, _contrast.contrastRatio)(_tokens.ink.fgSubtle, _tokens.surface.bgSubtle);
129
+ test("fgSubtle on bgSubtle is BELOW AA — ~4.32:1", () => {
130
+ const ratio = (0, _contrast.contrastRatio)(_tokens.ink.fgSubtle, _tokens.surface.bgSubtle);
163
131
  expect(ratio).not.toBeNull();
164
132
  expect(ratio).toBeLessThan(_contrast.WCAG_AA_NORMAL);
165
133
  expect(ratio).toBeGreaterThan(4.2);
@@ -185,8 +153,8 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
185
153
  * #868FA3 / #8A92A5; change the token and this assertion flips to the
186
154
  * `passesContrast(..., "ui")` form.
187
155
  */
188
- test("borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)", function () {
189
- var ratio = (0, _contrast.contrastRatio)(_tokens.border.borderStrong, "#FFFFFF");
156
+ test("borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)", () => {
157
+ const ratio = (0, _contrast.contrastRatio)(_tokens.border.borderStrong, "#FFFFFF");
190
158
  expect(ratio).not.toBeNull();
191
159
  expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
192
160
  expect(ratio).toBeGreaterThan(2.8);
@@ -201,8 +169,8 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
201
169
  * consuming modules (neither sets `[data-theme="dark"]` on <html>), which
202
170
  * is why nobody has seen it — see the RGESN R-9.5 note in the handover.
203
171
  */
204
- test("dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1", function () {
205
- var ratio = (0, _contrast.contrastRatio)(_tokens.dark.borderStrong, _tokens.dark.surface);
172
+ test("dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1", () => {
173
+ const ratio = (0, _contrast.contrastRatio)(_tokens.dark.borderStrong, _tokens.dark.surface);
206
174
  expect(ratio).not.toBeNull();
207
175
  expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
208
176
  expect(ratio).toBeGreaterThan(2.2);
@@ -215,8 +183,8 @@ describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function
215
183
  * restriction is machine-checked rather than comment-only: it fails BOTH
216
184
  * the text floor and the 3:1 non-text floor.
217
185
  */
218
- test("brandSecondary text pair is BELOW AA and below 3:1 — fills only", function () {
219
- var ratio = (0, _contrast.contrastRatio)(_tokens.brandSecondary.secondaryFg, _tokens.brandSecondary.secondary);
186
+ test("brandSecondary text pair is BELOW AA and below 3:1 — fills only", () => {
187
+ const ratio = (0, _contrast.contrastRatio)(_tokens.brandSecondary.secondaryFg, _tokens.brandSecondary.secondary);
220
188
  expect(ratio).not.toBeNull();
221
189
  expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
222
190
  });
@@ -1 +1 @@
1
- {"version":3,"file":"contrast-palette.test.js","names":["_contrast","require","_tokens","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","len","length","arr2","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","isArray","LIGHT_SURFACES","surface","bgElev","bg","bgSubtle","describe","_loop","_LIGHT_SURFACES$_i","_LIGHT_SURFACES","concat","expect","passesContrast","contrastRatio","ink","fg","toBe","fgMuted","fgInverse","dark","pairs","semantic","successFg","successSoft","warningFg","warningSoft","dangerFg","dangerSoft","infoFg","infoSoft","_loop2","_pairs$_i","_pairs","_i2","soft","_loop3","key","_arr2","_i3","_status$key","status","keys","saturated","success","warning","danger","info","_loop4","_saturated$_i","_saturated","_i4","colour","brand","accent","accentFg","accentHover","_loop5","_arr3","_i5","ratio","fgSubtle","not","toBeNull","toBeLessThan","WCAG_AA_NORMAL","toBeGreaterThan","border","borderStrong","WCAG_AA_UI_NON_TEXT","brandSecondary","secondaryFg","secondary"],"sources":["../../../src/lib/v2/__tests__/contrast-palette.test.ts"],"sourcesContent":["import {\r\n contrastRatio,\r\n passesContrast,\r\n WCAG_AA_NORMAL,\r\n WCAG_AA_UI_NON_TEXT,\r\n} from \"../utils/contrast\";\r\nimport { ink, surface, border, semantic, status, brand, brandSecondary, dark } from \"../tokens\";\r\n\r\n/**\r\n * Token-palette contrast certification (Charter §05.1 / WCAG 2.1 AA).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * R-C.1 / R-C.2 / R-C.3 are MUST rules, and until now nothing verified them.\r\n * `utils/contrast.ts` shipped a correct WCAG ratio implementation and had no\r\n * test asserting the palette it exists to check; the ratios in `colors.ts` were\r\n * hand-written COMMENTS, unenforced — exactly the class of claim that drifts\r\n * silently when a hue is nudged.\r\n *\r\n * Contrast is one of the few a11y rules that is fully computable without a\r\n * browser, so it belongs in CI rather than in a manual audit pass.\r\n *\r\n * Found by writing it: `fgSubtle` on `bgSubtle` is ~4.32:1 — BELOW AA. See the\r\n * documented-failure block at the bottom; that is a real finding, not a test\r\n * artefact.\r\n */\r\n\r\n/** Every light-mode surface that body text can land on. */\r\nconst LIGHT_SURFACES: Array<[string, string]> = [\r\n [\"surface\", surface.surface],\r\n [\"bgElev\", surface.bgElev],\r\n [\"bg\", surface.bg],\r\n [\"bgSubtle\", surface.bgSubtle],\r\n];\r\n\r\ndescribe(\"Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)\", () => {\r\n describe(\"ink on light surfaces — normal text ≥ 4.5:1\", () => {\r\n for (const [name, bg] of LIGHT_SURFACES) {\r\n test(`fg on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fg, bg), \"normal\")).toBe(true);\r\n });\r\n test(`fgMuted on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fgMuted, bg), \"normal\")).toBe(true);\r\n });\r\n }\r\n\r\n test(\"fgInverse on the darkest dark surface\", () => {\r\n expect(passesContrast(contrastRatio(ink.fgInverse, dark.bg), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"semantic fg — readable on white AND on its own soft fill\", () => {\r\n const pairs: Array<[string, string, string]> = [\r\n [\"success\", semantic.successFg, semantic.successSoft],\r\n [\"warning\", semantic.warningFg, semantic.warningSoft],\r\n [\"danger\", semantic.dangerFg, semantic.dangerSoft],\r\n [\"info\", semantic.infoFg, semantic.infoSoft],\r\n ];\r\n for (const [name, fg, soft] of pairs) {\r\n test(`${name}Fg on white`, () => {\r\n expect(passesContrast(contrastRatio(fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(`${name}Fg on ${name}Soft`, () => {\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /**\r\n * The Charter's promise in §02.1: \"Combinaison background -soft +\r\n * foreground -fg = AA garanti.\" This is that promise, enforced.\r\n */\r\n describe(\"status palette — every -fg on its own -soft is AA (§02.1)\", () => {\r\n for (const key of Object.keys(status) as Array<keyof typeof status>) {\r\n test(`status.${key}`, () => {\r\n const { soft, fg } = status[key];\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n test(`status.${key} fg on white`, () => {\r\n expect(passesContrast(contrastRatio(status[key].fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)\", () => {\r\n const saturated: Array<[string, string]> = [\r\n [\"success\", semantic.success],\r\n [\"warning\", semantic.warning],\r\n [\"danger\", semantic.danger],\r\n [\"info\", semantic.info],\r\n ];\r\n for (const [name, colour] of saturated) {\r\n test(`${name} (icon / border grade) on white`, () => {\r\n expect(passesContrast(contrastRatio(colour, \"#FFFFFF\"), \"ui\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"brand\", () => {\r\n test(\"accent on white is AA for normal text\", () => {\r\n expect(passesContrast(contrastRatio(brand.accent, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(\"accentFg on accent — the primary-button pair\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accent), \"normal\")).toBe(true);\r\n });\r\n test(\"accentHover keeps AA against accentFg (pressed state stays readable)\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accentHover), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"dark mode\", () => {\r\n test(\"dark.fg on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fg, dark.surface), \"normal\")).toBe(true);\r\n });\r\n test(\"dark.fgMuted on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fgMuted, dark.surface), \"normal\")).toBe(true);\r\n });\r\n for (const key of Object.keys(dark.status) as Array<keyof typeof dark.status>) {\r\n test(`dark status.${key}.fg on dark.surface`, () => {\r\n expect(\r\n passesContrast(contrastRatio(dark.status[key].fg, dark.surface), \"normal\")\r\n ).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /* ══════════════════════════════════════════════════════════════════\r\n * DOCUMENTED FAILURES — asserted at their MEASURED value, not at the\r\n * threshold, so the suite stays green while the breach stays visible and\r\n * any drift shows up as a diff. Both need a palette decision, not a\r\n * test change.\r\n * ══════════════════════════════════════════════════════════════════ */\r\n describe(\"KNOWN AA FAILURES (documented, pending decision)\", () => {\r\n /**\r\n * A9-01 — `fgSubtle` on `bgSubtle` ≈ 4.32:1, below the 4.5 floor.\r\n *\r\n * `colors.ts` documents fgSubtle as \"AA · 4.81:1 on white — incidental\r\n * text only (WCAG 1.4.6)\". On white that holds. On `bgSubtle` it does not,\r\n * and the exemption does not rescue it, because fgSubtle is NOT used only\r\n * for incidental text — it colours KV eyebrow labels, section captions and\r\n * hero stat labels, all of which name the value beside them.\r\n *\r\n * LIVE BREACH: both preview drawers put `--fg-subtle` labels on a\r\n * `--bg-subtle` hero panel (dfd `GestionDFDPreviewDrawer` HERO_BOX_STYLE +\r\n * HERO_LABEL_STYLE, ti `GestionTIPreviewDrawer` HERO_STAT_LABEL_STYLE), at\r\n * `--text-xs` (12px) — too small to qualify as large text, so the 4.5\r\n * floor applies.\r\n *\r\n * FIX OPTIONS: darken fgSubtle (affects the muted/subtle hierarchy\r\n * fleet-wide), or switch those labels to `--fg-muted` (AAA, 7.5:1 on\r\n * bgSubtle) which is what every other label surface already uses.\r\n */\r\n test(\"fgSubtle on bgSubtle is BELOW AA — ~4.32:1\", () => {\r\n const ratio = contrastRatio(ink.fgSubtle, surface.bgSubtle);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_NORMAL);\r\n expect(ratio as number).toBeGreaterThan(4.2);\r\n // It DOES pass on white — the failure is surface-specific.\r\n expect(passesContrast(contrastRatio(ink.fgSubtle, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n\r\n /**\r\n * A9-02 — `borderStrong` ≈ 2.87:1 on white. BELOW the 3:1 non-text floor.\r\n *\r\n * ⚠️ The token's own comment in `colors.ts` reads:\r\n * borderStrong: \"#9099AA\", // WCAG 1.4.11 · ≥ 3:1 against white\r\n * That claim is FALSE. This is precisely the drift this file exists to\r\n * catch — an unenforced hand-written ratio that nobody re-derived.\r\n *\r\n * IMPACT depends on usage. `--border-strong` currently colours the\r\n * scrollbar thumb (`base.css`) and the `kbd` bottom edge in\r\n * KeyboardShortcutsHelp. If it is ever used for an INPUT border or any\r\n * other control boundary, 1.4.11 applies and the breach is live — audit\r\n * usage before deciding severity.\r\n *\r\n * FIX: darken to relative luminance ≤ 0.30 (currently 0.316). Roughly\r\n * #868FA3 / #8A92A5; change the token and this assertion flips to the\r\n * `passesContrast(..., \"ui\")` form.\r\n */\r\n test(\"borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)\", () => {\r\n const ratio = contrastRatio(border.borderStrong, \"#FFFFFF\");\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.8);\r\n });\r\n\r\n /**\r\n * A9-03 — `dark.borderStrong` ≈ 2.28:1 on `dark.surface`. Worse than the\r\n * light-mode equivalent, and the same 1.4.11 floor applies in dark mode.\r\n *\r\n * FIX: lighten to relative luminance ≥ 0.119 (currently 0.078) — roughly\r\n * #5C6478 or lighter. Note dark mode is currently UNREACHABLE in both\r\n * consuming modules (neither sets `[data-theme=\"dark\"]` on <html>), which\r\n * is why nobody has seen it — see the RGESN R-9.5 note in the handover.\r\n */\r\n test(\"dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1\", () => {\r\n const ratio = contrastRatio(dark.borderStrong, dark.surface);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.2);\r\n });\r\n\r\n /**\r\n * Already flagged in colors.ts itself: secondaryFg (#FFFFFF) on\r\n * secondary (#4FB8CF) ≈ 1.96:1. The token comment restricts it to\r\n * chip/badge surfaces and non-text accent fills. Asserted here so the\r\n * restriction is machine-checked rather than comment-only: it fails BOTH\r\n * the text floor and the 3:1 non-text floor.\r\n */\r\n test(\"brandSecondary text pair is BELOW AA and below 3:1 — fills only\", () => {\r\n const ratio = contrastRatio(brandSecondary.secondaryFg, brandSecondary.secondary);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n });\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"contrast-palette.test.js","names":["_contrast","require","_tokens","LIGHT_SURFACES","surface","bgElev","bg","bgSubtle","describe","name","test","expect","passesContrast","contrastRatio","ink","fg","toBe","fgMuted","fgInverse","dark","pairs","semantic","successFg","successSoft","warningFg","warningSoft","dangerFg","dangerSoft","infoFg","infoSoft","soft","key","Object","keys","status","saturated","success","warning","danger","info","colour","brand","accent","accentFg","accentHover","ratio","fgSubtle","not","toBeNull","toBeLessThan","WCAG_AA_NORMAL","toBeGreaterThan","border","borderStrong","WCAG_AA_UI_NON_TEXT","brandSecondary","secondaryFg","secondary"],"sources":["../../../src/lib/v2/__tests__/contrast-palette.test.ts"],"sourcesContent":["import {\r\n contrastRatio,\r\n passesContrast,\r\n WCAG_AA_NORMAL,\r\n WCAG_AA_UI_NON_TEXT,\r\n} from \"../utils/contrast\";\r\nimport { ink, surface, border, semantic, status, brand, brandSecondary, dark } from \"../tokens\";\r\n\r\n/**\r\n * Token-palette contrast certification (Charter §05.1 / WCAG 2.1 AA).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * R-C.1 / R-C.2 / R-C.3 are MUST rules, and until now nothing verified them.\r\n * `utils/contrast.ts` shipped a correct WCAG ratio implementation and had no\r\n * test asserting the palette it exists to check; the ratios in `colors.ts` were\r\n * hand-written COMMENTS, unenforced — exactly the class of claim that drifts\r\n * silently when a hue is nudged.\r\n *\r\n * Contrast is one of the few a11y rules that is fully computable without a\r\n * browser, so it belongs in CI rather than in a manual audit pass.\r\n *\r\n * Found by writing it: `fgSubtle` on `bgSubtle` is ~4.32:1 — BELOW AA. See the\r\n * documented-failure block at the bottom; that is a real finding, not a test\r\n * artefact.\r\n */\r\n\r\n/** Every light-mode surface that body text can land on. */\r\nconst LIGHT_SURFACES: Array<[string, string]> = [\r\n [\"surface\", surface.surface],\r\n [\"bgElev\", surface.bgElev],\r\n [\"bg\", surface.bg],\r\n [\"bgSubtle\", surface.bgSubtle],\r\n];\r\n\r\ndescribe(\"Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)\", () => {\r\n describe(\"ink on light surfaces — normal text ≥ 4.5:1\", () => {\r\n for (const [name, bg] of LIGHT_SURFACES) {\r\n test(`fg on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fg, bg), \"normal\")).toBe(true);\r\n });\r\n test(`fgMuted on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fgMuted, bg), \"normal\")).toBe(true);\r\n });\r\n }\r\n\r\n test(\"fgInverse on the darkest dark surface\", () => {\r\n expect(passesContrast(contrastRatio(ink.fgInverse, dark.bg), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"semantic fg — readable on white AND on its own soft fill\", () => {\r\n const pairs: Array<[string, string, string]> = [\r\n [\"success\", semantic.successFg, semantic.successSoft],\r\n [\"warning\", semantic.warningFg, semantic.warningSoft],\r\n [\"danger\", semantic.dangerFg, semantic.dangerSoft],\r\n [\"info\", semantic.infoFg, semantic.infoSoft],\r\n ];\r\n for (const [name, fg, soft] of pairs) {\r\n test(`${name}Fg on white`, () => {\r\n expect(passesContrast(contrastRatio(fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(`${name}Fg on ${name}Soft`, () => {\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /**\r\n * The Charter's promise in §02.1: \"Combinaison background -soft +\r\n * foreground -fg = AA garanti.\" This is that promise, enforced.\r\n */\r\n describe(\"status palette — every -fg on its own -soft is AA (§02.1)\", () => {\r\n for (const key of Object.keys(status) as Array<keyof typeof status>) {\r\n test(`status.${key}`, () => {\r\n const { soft, fg } = status[key];\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n test(`status.${key} fg on white`, () => {\r\n expect(passesContrast(contrastRatio(status[key].fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)\", () => {\r\n const saturated: Array<[string, string]> = [\r\n [\"success\", semantic.success],\r\n [\"warning\", semantic.warning],\r\n [\"danger\", semantic.danger],\r\n [\"info\", semantic.info],\r\n ];\r\n for (const [name, colour] of saturated) {\r\n test(`${name} (icon / border grade) on white`, () => {\r\n expect(passesContrast(contrastRatio(colour, \"#FFFFFF\"), \"ui\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"brand\", () => {\r\n test(\"accent on white is AA for normal text\", () => {\r\n expect(passesContrast(contrastRatio(brand.accent, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(\"accentFg on accent — the primary-button pair\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accent), \"normal\")).toBe(true);\r\n });\r\n test(\"accentHover keeps AA against accentFg (pressed state stays readable)\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accentHover), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"dark mode\", () => {\r\n test(\"dark.fg on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fg, dark.surface), \"normal\")).toBe(true);\r\n });\r\n test(\"dark.fgMuted on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fgMuted, dark.surface), \"normal\")).toBe(true);\r\n });\r\n for (const key of Object.keys(dark.status) as Array<keyof typeof dark.status>) {\r\n test(`dark status.${key}.fg on dark.surface`, () => {\r\n expect(\r\n passesContrast(contrastRatio(dark.status[key].fg, dark.surface), \"normal\")\r\n ).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /* ══════════════════════════════════════════════════════════════════\r\n * DOCUMENTED FAILURES — asserted at their MEASURED value, not at the\r\n * threshold, so the suite stays green while the breach stays visible and\r\n * any drift shows up as a diff. Both need a palette decision, not a\r\n * test change.\r\n * ══════════════════════════════════════════════════════════════════ */\r\n describe(\"KNOWN AA FAILURES (documented, pending decision)\", () => {\r\n /**\r\n * A9-01 — `fgSubtle` on `bgSubtle` ≈ 4.32:1, below the 4.5 floor.\r\n *\r\n * `colors.ts` documents fgSubtle as \"AA · 4.81:1 on white — incidental\r\n * text only (WCAG 1.4.6)\". On white that holds. On `bgSubtle` it does not,\r\n * and the exemption does not rescue it, because fgSubtle is NOT used only\r\n * for incidental text — it colours KV eyebrow labels, section captions and\r\n * hero stat labels, all of which name the value beside them.\r\n *\r\n * LIVE BREACH: both preview drawers put `--fg-subtle` labels on a\r\n * `--bg-subtle` hero panel (dfd `GestionDFDPreviewDrawer` HERO_BOX_STYLE +\r\n * HERO_LABEL_STYLE, ti `GestionTIPreviewDrawer` HERO_STAT_LABEL_STYLE), at\r\n * `--text-xs` (12px) — too small to qualify as large text, so the 4.5\r\n * floor applies.\r\n *\r\n * FIX OPTIONS: darken fgSubtle (affects the muted/subtle hierarchy\r\n * fleet-wide), or switch those labels to `--fg-muted` (AAA, 7.5:1 on\r\n * bgSubtle) which is what every other label surface already uses.\r\n */\r\n test(\"fgSubtle on bgSubtle is BELOW AA — ~4.32:1\", () => {\r\n const ratio = contrastRatio(ink.fgSubtle, surface.bgSubtle);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_NORMAL);\r\n expect(ratio as number).toBeGreaterThan(4.2);\r\n // It DOES pass on white — the failure is surface-specific.\r\n expect(passesContrast(contrastRatio(ink.fgSubtle, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n\r\n /**\r\n * A9-02 — `borderStrong` ≈ 2.87:1 on white. BELOW the 3:1 non-text floor.\r\n *\r\n * ⚠️ The token's own comment in `colors.ts` reads:\r\n * borderStrong: \"#9099AA\", // WCAG 1.4.11 · ≥ 3:1 against white\r\n * That claim is FALSE. This is precisely the drift this file exists to\r\n * catch — an unenforced hand-written ratio that nobody re-derived.\r\n *\r\n * IMPACT depends on usage. `--border-strong` currently colours the\r\n * scrollbar thumb (`base.css`) and the `kbd` bottom edge in\r\n * KeyboardShortcutsHelp. If it is ever used for an INPUT border or any\r\n * other control boundary, 1.4.11 applies and the breach is live — audit\r\n * usage before deciding severity.\r\n *\r\n * FIX: darken to relative luminance ≤ 0.30 (currently 0.316). Roughly\r\n * #868FA3 / #8A92A5; change the token and this assertion flips to the\r\n * `passesContrast(..., \"ui\")` form.\r\n */\r\n test(\"borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)\", () => {\r\n const ratio = contrastRatio(border.borderStrong, \"#FFFFFF\");\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.8);\r\n });\r\n\r\n /**\r\n * A9-03 — `dark.borderStrong` ≈ 2.28:1 on `dark.surface`. Worse than the\r\n * light-mode equivalent, and the same 1.4.11 floor applies in dark mode.\r\n *\r\n * FIX: lighten to relative luminance ≥ 0.119 (currently 0.078) — roughly\r\n * #5C6478 or lighter. Note dark mode is currently UNREACHABLE in both\r\n * consuming modules (neither sets `[data-theme=\"dark\"]` on <html>), which\r\n * is why nobody has seen it — see the RGESN R-9.5 note in the handover.\r\n */\r\n test(\"dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1\", () => {\r\n const ratio = contrastRatio(dark.borderStrong, dark.surface);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.2);\r\n });\r\n\r\n /**\r\n * Already flagged in colors.ts itself: secondaryFg (#FFFFFF) on\r\n * secondary (#4FB8CF) ≈ 1.96:1. The token comment restricts it to\r\n * chip/badge surfaces and non-text accent fills. Asserted here so the\r\n * restriction is machine-checked rather than comment-only: it fails BOTH\r\n * the text floor and the 3:1 non-text floor.\r\n */\r\n test(\"brandSecondary text pair is BELOW AA and below 3:1 — fills only\", () => {\r\n const ratio = contrastRatio(brandSecondary.secondaryFg, brandSecondary.secondary);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n });\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -13,45 +13,42 @@ var _cssVariables = require("../theme/cssVariables");
13
13
  * - dropped a critical variable downstream consumers rely on, or
14
14
  * - leaked an alias name (--md / --lg) into the global namespace.
15
15
  */
16
- describe("getCssVariables() — Batch 1 + 2 invariants", function () {
17
- var css;
18
- beforeAll(function () {
16
+ describe("getCssVariables() — Batch 1 + 2 invariants", () => {
17
+ let css;
18
+ beforeAll(() => {
19
19
  css = (0, _cssVariables.getCssVariables)();
20
20
  });
21
- test("emits a :root block", function () {
21
+ test("emits a :root block", () => {
22
22
  expect(css).toMatch(/:root\s*\{/);
23
23
  });
24
- test("never emits ': undefined' values (the ghost-token bug class)", function () {
24
+ test("never emits ': undefined' values (the ghost-token bug class)", () => {
25
25
  // Match `--anything: undefined;` with optional whitespace.
26
26
  // This catches the regression that produced --fw-black resolving
27
27
  // to undefined in :root after Batch 1 removed fontWeight.black.
28
- var matches = css.match(/--[\w-]+\s*:\s*undefined\b/g);
28
+ const matches = css.match(/--[\w-]+\s*:\s*undefined\b/g);
29
29
  expect(matches).toBeNull();
30
30
  });
31
- test("does NOT emit --fw-black (Batch 1 removed fontWeight.black)", function () {
31
+ test("does NOT emit --fw-black (Batch 1 removed fontWeight.black)", () => {
32
32
  expect(css).not.toMatch(/--fw-black/);
33
33
  });
34
- test("emits all critical brand + ink + surface variables", function () {
35
- var required = ["--accent", "--accent-soft", "--accent-hover", "--accent-fg", "--fg", "--fg-muted", "--fg-subtle", "--fg-inverse", "--bg", "--bg-elev", "--bg-subtle", "--bg-hover", "--surface", "--border", "--border-strong"];
36
- for (var _i = 0, _required = required; _i < _required.length; _i++) {
37
- var v = _required[_i];
38
- expect(css).toContain("".concat(v, ":"));
34
+ test("emits all critical brand + ink + surface variables", () => {
35
+ const required = ["--accent", "--accent-soft", "--accent-hover", "--accent-fg", "--fg", "--fg-muted", "--fg-subtle", "--fg-inverse", "--bg", "--bg-elev", "--bg-subtle", "--bg-hover", "--surface", "--border", "--border-strong"];
36
+ for (const v of required) {
37
+ expect(css).toContain(`${v}:`);
39
38
  }
40
39
  });
41
- test("emits all semantic + status palette variables", function () {
42
- var required = ["--success", "--success-fg", "--success-soft", "--danger", "--danger-fg", "--danger-soft", "--warning", "--warning-fg", "--warning-soft", "--info", "--info-fg", "--info-soft", "--status-new-soft", "--status-new-fg", "--status-sent-soft", "--status-sent-fg", "--status-pending-soft", "--status-pending-fg", "--status-approved-soft", "--status-approved-fg", "--status-rejected-soft", "--status-rejected-fg", "--status-neutral-soft", "--status-neutral-fg"];
43
- for (var _i2 = 0, _required2 = required; _i2 < _required2.length; _i2++) {
44
- var v = _required2[_i2];
45
- expect(css).toContain("".concat(v, ":"));
40
+ test("emits all semantic + status palette variables", () => {
41
+ const required = ["--success", "--success-fg", "--success-soft", "--danger", "--danger-fg", "--danger-soft", "--warning", "--warning-fg", "--warning-soft", "--info", "--info-fg", "--info-soft", "--status-new-soft", "--status-new-fg", "--status-sent-soft", "--status-sent-fg", "--status-pending-soft", "--status-pending-fg", "--status-approved-soft", "--status-approved-fg", "--status-rejected-soft", "--status-rejected-fg", "--status-neutral-soft", "--status-neutral-fg"];
42
+ for (const v of required) {
43
+ expect(css).toContain(`${v}:`);
46
44
  }
47
45
  });
48
- test("emits the typography variables", function () {
49
- var required = ["--font-sans", "--font-mono", "--text-display", "--text-h2", "--text-h3", "--text-h4", "--text-body", "--text-sm", "--text-xs", "--fw-regular", "--fw-medium", "--fw-semibold", "--fw-bold", "--lh-tight", "--lh-snug", "--lh-normal", "--lh-loose",
46
+ test("emits the typography variables", () => {
47
+ const required = ["--font-sans", "--font-mono", "--text-display", "--text-h2", "--text-h3", "--text-h4", "--text-body", "--text-sm", "--text-xs", "--fw-regular", "--fw-medium", "--fw-semibold", "--fw-bold", "--lh-tight", "--lh-snug", "--lh-normal", "--lh-loose",
50
48
  // A7-02 — letter-spacing scale.
51
49
  "--ls-tight", "--ls-normal", "--ls-wide"];
52
- for (var _i3 = 0, _required3 = required; _i3 < _required3.length; _i3++) {
53
- var v = _required3[_i3];
54
- expect(css).toContain("".concat(v, ":"));
50
+ for (const v of required) {
51
+ expect(css).toContain(`${v}:`);
55
52
  }
56
53
  });
57
54
 
@@ -72,50 +69,46 @@ describe("getCssVariables() — Batch 1 + 2 invariants", function () {
72
69
  * call site. Adding any of them is a Charter §02 amendment and must arrive
73
70
  * with its table entry, not via a failing consumer.
74
71
  */
75
- test("does NOT emit the four rejected phantom tokens (A7-02)", function () {
76
- for (var _i4 = 0, _arr = ["--border-subtle", "--r-xs", "--icon-sm", "--icon-xl"]; _i4 < _arr.length; _i4++) {
77
- var v = _arr[_i4];
78
- expect(css).not.toContain("".concat(v, ":"));
72
+ test("does NOT emit the four rejected phantom tokens (A7-02)", () => {
73
+ for (const v of ["--border-subtle", "--r-xs", "--icon-sm", "--icon-xl"]) {
74
+ expect(css).not.toContain(`${v}:`);
79
75
  }
80
76
  });
81
- test("emits the spacing grid (--s-1 through --s-10)", function () {
82
- for (var i = 1; i <= 10; i += 1) {
83
- expect(css).toContain("--s-".concat(i, ":"));
77
+ test("emits the spacing grid (--s-1 through --s-10)", () => {
78
+ for (let i = 1; i <= 10; i += 1) {
79
+ expect(css).toContain(`--s-${i}:`);
84
80
  }
85
81
  });
86
- test("emits the spacing aliases under --space-* prefix", function () {
87
- var aliases = ["xs", "sm", "md", "lg", "xl", "xxl"];
88
- for (var _i5 = 0, _aliases = aliases; _i5 < _aliases.length; _i5++) {
89
- var a = _aliases[_i5];
90
- expect(css).toContain("--space-".concat(a, ":"));
82
+ test("emits the spacing aliases under --space-* prefix", () => {
83
+ const aliases = ["xs", "sm", "md", "lg", "xl", "xxl"];
84
+ for (const a of aliases) {
85
+ expect(css).toContain(`--space-${a}:`);
91
86
  }
92
87
  });
93
- test("does NOT emit unprefixed alias names that would pollute the global CSS namespace", function () {
88
+ test("does NOT emit unprefixed alias names that would pollute the global CSS namespace", () => {
94
89
  // Bare --md / --lg / --xl would collide with consumer stylesheets.
95
90
  // Batch 2 explicitly partitioned spacing into numeric grid (--s-N)
96
91
  // and semantic aliases (--space-X) to prevent this.
97
92
  // Use word boundaries so we don't false-match --r-md, --space-md, etc.
98
- var polluters = [/[^\w-]--xs\s*:/, /[^\w-]--sm\s*:/, /[^\w-]--md\s*:/, /[^\w-]--lg\s*:/, /[^\w-]--xl\s*:/, /[^\w-]--xxl\s*:/];
99
- for (var _i6 = 0, _polluters = polluters; _i6 < _polluters.length; _i6++) {
100
- var re = _polluters[_i6];
93
+ const polluters = [/[^\w-]--xs\s*:/, /[^\w-]--sm\s*:/, /[^\w-]--md\s*:/, /[^\w-]--lg\s*:/, /[^\w-]--xl\s*:/, /[^\w-]--xxl\s*:/];
94
+ for (const re of polluters) {
101
95
  expect(css).not.toMatch(re);
102
96
  }
103
97
  });
104
- test("emits radius, shadow, motion, easing, layout, density", function () {
105
- var required = ["--r-sm", "--r-md", "--r-lg", "--r-xl", "--r-full", "--r-none", "--shadow-xs", "--shadow-sm", "--shadow-md", "--shadow-lg", "--shadow-focus", "--duration-fast", "--duration-base", "--duration-slow", "--easing-out", "--easing-in", "--easing-soft", "--sidebar-w", "--topbar-h", "--content-max", "--form-max", "--tactile-min", "--row-h", "--input-h", "--btn-h", "--text-fs"];
106
- for (var _i7 = 0, _required4 = required; _i7 < _required4.length; _i7++) {
107
- var v = _required4[_i7];
108
- expect(css).toContain("".concat(v, ":"));
98
+ test("emits radius, shadow, motion, easing, layout, density", () => {
99
+ const required = ["--r-sm", "--r-md", "--r-lg", "--r-xl", "--r-full", "--r-none", "--shadow-xs", "--shadow-sm", "--shadow-md", "--shadow-lg", "--shadow-focus", "--duration-fast", "--duration-base", "--duration-slow", "--easing-out", "--easing-in", "--easing-soft", "--sidebar-w", "--topbar-h", "--content-max", "--form-max", "--tactile-min", "--row-h", "--input-h", "--btn-h", "--text-fs"];
100
+ for (const v of required) {
101
+ expect(css).toContain(`${v}:`);
109
102
  }
110
103
  });
111
- test("emits z-index variables", function () {
104
+ test("emits z-index variables", () => {
112
105
  // Iterates the full zIndex object in cssVariables, so any
113
106
  // future zIndex slot (popover, snackbar, tooltip from Batch 1)
114
107
  // surfaces here without code change.
115
108
  expect(css).toMatch(/--z-modal\s*:/);
116
109
  expect(css).toMatch(/--z-sticky\s*:/);
117
110
  });
118
- test("emits the dark-mode override block with derived soft variants", function () {
111
+ test("emits the dark-mode override block with derived soft variants", () => {
119
112
  expect(css).toContain('[data-theme="dark"]');
120
113
  // Soft semantic fills are color-mix-derived in dark, not static hex
121
114
  // (Batch 2 contrast fix for WCAG 1.4.11 non-text on dark surfaces).
@@ -124,16 +117,16 @@ describe("getCssVariables() — Batch 1 + 2 invariants", function () {
124
117
  expect(css).toMatch(/--warning-soft:\s*color-mix/);
125
118
  expect(css).toMatch(/--info-soft:\s*color-mix/);
126
119
  });
127
- test("emits the compact density override block", function () {
120
+ test("emits the compact density override block", () => {
128
121
  expect(css).toContain('[data-density="compact"]');
129
122
  // Compact override shrinks the row/input/btn heights.
130
123
  expect(css).toMatch(/\[data-density="compact"\][\s\S]*--btn-h:/);
131
124
  });
132
- test("emits the collapsed-sidebar override", function () {
125
+ test("emits the collapsed-sidebar override", () => {
133
126
  expect(css).toContain('[data-nav-collapsed="true"]');
134
127
  });
135
- test("brand override propagates through resolveBrand", function () {
136
- var customCss = (0, _cssVariables.getCssVariables)({
128
+ test("brand override propagates through resolveBrand", () => {
129
+ const customCss = (0, _cssVariables.getCssVariables)({
137
130
  brand: {
138
131
  accent: "#FF0000"
139
132
  }
@@ -142,10 +135,10 @@ describe("getCssVariables() — Batch 1 + 2 invariants", function () {
142
135
  // Default also still emits its accent
143
136
  expect(css).toMatch(/--accent:\s*#[0-9a-fA-F]{3,8}/);
144
137
  });
145
- test("brand override does NOT pollute other brand fields when omitted", function () {
138
+ test("brand override does NOT pollute other brand fields when omitted", () => {
146
139
  // Partial brand override — accentSoft should fall back to default,
147
140
  // not to undefined or an empty string.
148
- var customCss = (0, _cssVariables.getCssVariables)({
141
+ const customCss = (0, _cssVariables.getCssVariables)({
149
142
  brand: {
150
143
  accent: "#FF0000"
151
144
  }