@portnet/ui 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -1,15 +1,8 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
3
  var fs = _interopRequireWildcard(require("fs"));
5
4
  var path = _interopRequireWildcard(require("path"));
6
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
7
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
8
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
9
- var _marked = /*#__PURE__*/_regeneratorRuntime().mark(walk);
10
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11
- 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); }
12
- 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; } /* eslint-env node */
5
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
6
  /**
14
7
  * Static-analysis tests guarding against re-introduction of banned
15
8
  * patterns in src/lib/v2/. Pure filesystem scan; no React, no jsdom.
@@ -19,7 +12,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
19
12
  * not just what it forbids.
20
13
  */
21
14
 
22
- var V2_ROOT = path.resolve(__dirname, "..");
15
+ const V2_ROOT = path.resolve(__dirname, "..");
23
16
  /**
24
17
  * Recursively walk a directory, yielding paths of source files that
25
18
  * are eligible for scanning. Excludes nested __tests__ folders so
@@ -27,95 +20,35 @@ var V2_ROOT = path.resolve(__dirname, "..");
27
20
  * the rule. Scans .js/.jsx/.ts/.tsx/.css (ambient .d.ts excluded — no
28
21
  * runtime style/breakpoint literals live there).
29
22
  */
30
- function walk(dir) {
31
- var _iterator, _step, entry, p;
32
- return _regeneratorRuntime().wrap(function walk$(_context) {
33
- while (1) {
34
- switch (_context.prev = _context.next) {
35
- case 0:
36
- _iterator = _createForOfIteratorHelper(fs.readdirSync(dir, {
37
- withFileTypes: true
38
- }));
39
- _context.prev = 1;
40
- _iterator.s();
41
- case 3:
42
- if ((_step = _iterator.n()).done) {
43
- _context.next = 17;
44
- break;
45
- }
46
- entry = _step.value;
47
- p = path.join(dir, entry.name);
48
- if (!entry.isDirectory()) {
49
- _context.next = 12;
50
- break;
51
- }
52
- if (!(entry.name === "__tests__" || entry.name === "node_modules")) {
53
- _context.next = 9;
54
- break;
55
- }
56
- return _context.abrupt("continue", 15);
57
- case 9:
58
- return _context.delegateYield(walk(p), "t0", 10);
59
- case 10:
60
- _context.next = 15;
61
- break;
62
- case 12:
63
- if (!(entry.isFile() && /\.(?:jsx?|tsx?|css)$/.test(entry.name) && !entry.name.endsWith(".d.ts"))) {
64
- _context.next = 15;
65
- break;
66
- }
67
- _context.next = 15;
68
- return p;
69
- case 15:
70
- _context.next = 3;
71
- break;
72
- case 17:
73
- _context.next = 22;
74
- break;
75
- case 19:
76
- _context.prev = 19;
77
- _context.t1 = _context["catch"](1);
78
- _iterator.e(_context.t1);
79
- case 22:
80
- _context.prev = 22;
81
- _iterator.f();
82
- return _context.finish(22);
83
- case 25:
84
- case "end":
85
- return _context.stop();
86
- }
23
+ function* walk(dir) {
24
+ for (const entry of fs.readdirSync(dir, {
25
+ withFileTypes: true
26
+ })) {
27
+ const p = path.join(dir, entry.name);
28
+ if (entry.isDirectory()) {
29
+ if (entry.name === "__tests__" || entry.name === "node_modules") continue;
30
+ yield* walk(p);
31
+ } else if (entry.isFile() && /\.(?:jsx?|tsx?|css)$/.test(entry.name) && !entry.name.endsWith(".d.ts")) {
32
+ yield p;
87
33
  }
88
- }, _marked, null, [[1, 19, 22, 25]]);
34
+ }
89
35
  }
90
36
  function readAllSourceFiles() {
91
- var files = [];
92
- var _iterator2 = _createForOfIteratorHelper(walk(V2_ROOT)),
93
- _step2;
94
- try {
95
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
96
- var file = _step2.value;
97
- files.push({
98
- path: file,
99
- content: fs.readFileSync(file, "utf8")
100
- });
101
- }
102
- } catch (err) {
103
- _iterator2.e(err);
104
- } finally {
105
- _iterator2.f();
37
+ const files = [];
38
+ for (const file of walk(V2_ROOT)) {
39
+ files.push({
40
+ path: file,
41
+ content: fs.readFileSync(file, "utf8")
42
+ });
106
43
  }
107
44
  return files;
108
45
  }
109
46
  function findOffenders(files, predicate) {
110
- return files.filter(function (f) {
111
- return predicate(f.content);
112
- }).map(function (f) {
113
- return path.relative(V2_ROOT, f.path);
114
- });
47
+ return files.filter(f => predicate(f.content)).map(f => path.relative(V2_ROOT, f.path));
115
48
  }
116
- describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
117
- var files;
118
- beforeAll(function () {
49
+ describe("Banned patterns in src/lib/v2/ (regression guard)", () => {
50
+ let files;
51
+ beforeAll(() => {
119
52
  files = readAllSourceFiles();
120
53
  // Sanity check — make sure the walker actually found source.
121
54
  // A misconfigured path would silently make every test pass with
@@ -155,16 +88,12 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
155
88
  * `__tests__` is excluded from `walk`, which is why this docstring may name
156
89
  * the token freely.
157
90
  */
158
- test("no `--fw-black` references anywhere in src/lib/v2/", function () {
159
- var offenders = findOffenders(files, function (c) {
160
- return c.includes("--fw-black");
161
- });
91
+ test("no `--fw-black` references anywhere in src/lib/v2/", () => {
92
+ const offenders = findOffenders(files, c => c.includes("--fw-black"));
162
93
  expect(offenders).toEqual([]);
163
94
  });
164
- test("no `var(--fw-black)` consumption (paranoid duplicate of the above)", function () {
165
- var offenders = findOffenders(files, function (c) {
166
- return c.includes("var(--fw-black)");
167
- });
95
+ test("no `var(--fw-black)` consumption (paranoid duplicate of the above)", () => {
96
+ const offenders = findOffenders(files, c => c.includes("var(--fw-black)"));
168
97
  expect(offenders).toEqual([]);
169
98
  });
170
99
 
@@ -176,13 +105,11 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
176
105
  * FilterTab). Each time it took a careful read to spot, since
177
106
  * 650 looks "close enough" to semibold (600).
178
107
  */
179
- test("no `fontWeight: 650` literal in component sx / inline style", function () {
108
+ test("no `fontWeight: 650` literal in component sx / inline style", () => {
180
109
  // Match `fontWeight: 650` and `fontWeight:650` (with or without space).
181
110
  // Word boundary on the right so we don't false-match 6500.
182
- var re = /fontWeight\s*:\s*650\b/;
183
- var offenders = findOffenders(files, function (c) {
184
- return re.test(c);
185
- });
111
+ const re = /fontWeight\s*:\s*650\b/;
112
+ const offenders = findOffenders(files, c => re.test(c));
186
113
  expect(offenders).toEqual([]);
187
114
  });
188
115
 
@@ -191,11 +118,9 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
191
118
  * Same rationale as above but for the kebab-case form used inside
192
119
  * .css files (base.css and friends).
193
120
  */
194
- test("no `font-weight: 650` in CSS files", function () {
195
- var re = /font-weight\s*:\s*650\b/;
196
- var offenders = findOffenders(files, function (c) {
197
- return re.test(c);
198
- });
121
+ test("no `font-weight: 650` in CSS files", () => {
122
+ const re = /font-weight\s*:\s*650\b/;
123
+ const offenders = findOffenders(files, c => re.test(c));
199
124
  expect(offenders).toEqual([]);
200
125
  });
201
126
 
@@ -214,11 +139,9 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
214
139
  * they never match. Feature queries (prefers-reduced-motion,
215
140
  * pointer, print) carry no width literal and are unaffected.
216
141
  */
217
- test("no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)", function () {
218
- var re = /@media[^{]*\b(?:min|max)-width\s*:\s*\d/;
219
- var offenders = findOffenders(files, function (c) {
220
- return re.test(c);
221
- });
142
+ test("no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)", () => {
143
+ const re = /@media[^{]*\b(?:min|max)-width\s*:\s*\d/;
144
+ const offenders = findOffenders(files, c => re.test(c));
222
145
  expect(offenders).toEqual([]);
223
146
  });
224
147
 
@@ -231,11 +154,9 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
231
154
  * only the string-literal form: the theme-callback form has no quote
232
155
  * immediately after the opening paren and is unaffected.
233
156
  */
234
- test("no useMediaQuery() with a literal px breakpoint string", function () {
235
- var re = /useMediaQuery\(\s*["'`][^)]*\d+\s*px/;
236
- var offenders = findOffenders(files, function (c) {
237
- return re.test(c);
238
- });
157
+ test("no useMediaQuery() with a literal px breakpoint string", () => {
158
+ const re = /useMediaQuery\(\s*["'`][^)]*\d+\s*px/;
159
+ const offenders = findOffenders(files, c => re.test(c));
239
160
  expect(offenders).toEqual([]);
240
161
  });
241
162
 
@@ -261,11 +182,9 @@ describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
261
182
  * display:grid site in the v2 surface (KVGrid, components/FormGrid,
262
183
  * patterns/FormGrid, FormGrid.Item, KeyboardShortcutsHelp).
263
184
  */
264
- test("no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))", function () {
265
- var re = /minmax\(\s*\d+(?:\.\d+)?\s*px/i;
266
- var offenders = findOffenders(files, function (c) {
267
- return re.test(c);
268
- });
185
+ test("no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))", () => {
186
+ const re = /minmax\(\s*\d+(?:\.\d+)?\s*px/i;
187
+ const offenders = findOffenders(files, c => re.test(c));
269
188
  expect(offenders).toEqual([]);
270
189
  });
271
190
  });
@@ -1 +1 @@
1
- {"version":3,"file":"banned-patterns.test.js","names":["fs","_interopRequireWildcard","require","path","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_regeneratorRuntime","exports","Op","hasOwn","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_marked","walk","_createForOfIteratorHelper","o","allowArrayLike","it","Array","isArray","_unsupportedIterableToArray","F","s","n","e","_e","f","normalCompletion","didErr","step","_e2","minLen","_arrayLikeToArray","toString","from","test","arr","len","arr2","V2_ROOT","__dirname","dir","_iterator","_step","p","walk$","_context","readdirSync","withFileTypes","join","isDirectory","isFile","endsWith","t1","readAllSourceFiles","files","_iterator2","_step2","file","content","readFileSync","findOffenders","predicate","filter","map","relative","describe","beforeAll","expect","toBeGreaterThan","offenders","c","includes","toEqual","re"],"sources":["../../../src/lib/v2/__tests__/banned-patterns.test.ts"],"sourcesContent":["/* eslint-env node */\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\n\r\n/**\r\n * Static-analysis tests guarding against re-introduction of banned\r\n * patterns in src/lib/v2/. Pure filesystem scan; no React, no jsdom.\r\n *\r\n * Each banned pattern has a unique regression history documented in\r\n * the per-test comment so future readers know WHY the rule exists,\r\n * not just what it forbids.\r\n */\r\n\r\nconst V2_ROOT: string = path.resolve(__dirname, \"..\");\r\n\r\ninterface SourceFile {\r\n path: string;\r\n content: string;\r\n}\r\n\r\n/**\r\n * Recursively walk a directory, yielding paths of source files that\r\n * are eligible for scanning. Excludes nested __tests__ folders so\r\n * test fixtures referencing banned strings as test data don't trigger\r\n * the rule. Scans .js/.jsx/.ts/.tsx/.css (ambient .d.ts excluded — no\r\n * runtime style/breakpoint literals live there).\r\n */\r\nfunction* walk(dir: string): Generator<string> {\r\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\r\n const p = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n if (entry.name === \"__tests__\" || entry.name === \"node_modules\") continue;\r\n yield* walk(p);\r\n } else if (\r\n entry.isFile() &&\r\n /\\.(?:jsx?|tsx?|css)$/.test(entry.name) &&\r\n !entry.name.endsWith(\".d.ts\")\r\n ) {\r\n yield p;\r\n }\r\n }\r\n}\r\n\r\nfunction readAllSourceFiles(): SourceFile[] {\r\n const files: SourceFile[] = [];\r\n for (const file of walk(V2_ROOT)) {\r\n files.push({ path: file, content: fs.readFileSync(file, \"utf8\") });\r\n }\r\n return files;\r\n}\r\n\r\nfunction findOffenders(\r\n files: SourceFile[],\r\n predicate: (content: string) => boolean\r\n): string[] {\r\n return files\r\n .filter((f) => predicate(f.content))\r\n .map((f) => path.relative(V2_ROOT, f.path));\r\n}\r\n\r\ndescribe(\"Banned patterns in src/lib/v2/ (regression guard)\", () => {\r\n let files: SourceFile[];\r\n\r\n beforeAll(() => {\r\n files = readAllSourceFiles();\r\n // Sanity check — make sure the walker actually found source.\r\n // A misconfigured path would silently make every test pass with\r\n // an empty input set; this prevents that false-positive.\r\n expect(files.length).toBeGreaterThan(20);\r\n });\r\n\r\n /**\r\n * --fw-black ghost token\r\n * History: Batch 1 removed fontWeight.black from the typography\r\n * tokens; Batch 2 dropped the matching `--fw-black` line from the\r\n * cssVariables emitter. Two regression sites detected later\r\n * (KPICard in Batch 6, FormSection in Batch 7) — both silently\r\n * lost their bold weight at runtime. The CSS variable was\r\n * referenced but resolved to undefined.\r\n *\r\n * ⚠ THE SCAN IS RAW AND COMMENT-BLIND. DO NOT \"FIX\" THAT.\r\n *\r\n * `findOffenders` matches the banned literal anywhere in the file, including\r\n * inside comments. That is deliberate: a guard that parses code can be fooled\r\n * by anything its parser mishandles, whereas a text scan cannot. The cost is\r\n * that DOCUMENTING the banned token — even to record its removal — trips the\r\n * rule.\r\n *\r\n * That is exactly what happened during the procuration-portnet-fe audit: both\r\n * `--fw-black` tests failed, and the \"offenders\" turned out to be explanatory\r\n * comments in `KPICard.tsx` and `theme/cssVariables.ts` describing the very\r\n * fix this rule enforces. The code was correct; both files already used\r\n * `var(--fw-bold)`. The comments were reworded to refer to the token\r\n * descriptively instead.\r\n *\r\n * So: if this fails, read the offending lines BEFORE assuming a regression.\r\n * The correct remedy is to reword the prose, never to add comment-stripping\r\n * here — that would weaken every rule in this file to fix a documentation\r\n * nit.\r\n *\r\n * `__tests__` is excluded from `walk`, which is why this docstring may name\r\n * the token freely.\r\n */\r\n test(\"no `--fw-black` references anywhere in src/lib/v2/\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"--fw-black\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n test(\"no `var(--fw-black)` consumption (paranoid duplicate of the above)\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"var(--fw-black)\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * fontWeight: 650\r\n * History: Banned by Batch 1 typography refactor — 650 is a\r\n * non-standard CSS weight not supported by non-variable fallback\r\n * fonts. Re-introduced twice in Batch 6 (Stepper HStepper +\r\n * FilterTab). Each time it took a careful read to spot, since\r\n * 650 looks \"close enough\" to semibold (600).\r\n */\r\n test(\"no `fontWeight: 650` literal in component sx / inline style\", () => {\r\n // Match `fontWeight: 650` and `fontWeight:650` (with or without space).\r\n // Word boundary on the right so we don't false-match 6500.\r\n const re = /fontWeight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Plain CSS form `font-weight: 650`\r\n * Same rationale as above but for the kebab-case form used inside\r\n * .css files (base.css and friends).\r\n */\r\n test(\"no `font-weight: 650` in CSS files\", () => {\r\n const re = /font-weight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — raw px-width @media query\r\n * History: Batch 1 (mobile & responsive certification). The\r\n * breakpoint scale is single-sourced in tokens/breakpoints and\r\n * wired into BOTH the MUI theme (theme.breakpoints) and the `mq`\r\n * string helpers. A raw `@media (min-width:600px)` (or any literal\r\n * px width) bypasses that single source and silently re-introduces\r\n * the MUI-default divergence (sm:600 / md:900 / lg:1200) the token\r\n * wiring was added to eliminate.\r\n *\r\n * Token-derived queries are produced via mq.up()/down() as\r\n * interpolated `${...}px` strings — no digit follows `width:`, so\r\n * they never match. Feature queries (prefers-reduced-motion,\r\n * pointer, print) carry no width literal and are unaffected.\r\n */\r\n test(\"no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)\", () => {\r\n const re = /@media[^{]*\\b(?:min|max)-width\\s*:\\s*\\d/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — useMediaQuery() with a literal px string\r\n * History: Batch 1. `useMediaQuery(\"(max-width: 600px)\")` hardcodes a\r\n * breakpoint outside the token scale. The sanctioned form passes a\r\n * theme callback — `useMediaQuery(theme.breakpoints.down(\"sm\"))` — so\r\n * the query resolves against the wired token values. This rule flags\r\n * only the string-literal form: the theme-callback form has no quote\r\n * immediately after the opening paren and is unaffected.\r\n */\r\n test(\"no useMediaQuery() with a literal px breakpoint string\", () => {\r\n const re = /useMediaQuery\\(\\s*[\"'`][^)]*\\d+\\s*px/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded px floor in a CSS-grid minmax() track\r\n * History: Batch 2 (KVGrid + components/FormGrid) and Batch 9\r\n * (patterns/FormGrid) — the mobile & responsive certification. An\r\n * auto-fill grid written as `minmax(<N>px, 1fr)` uses the px value as\r\n * a HARD track minimum: when that floor exceeds the available\r\n * container width (a large N, or the grid nested inside a narrow\r\n * column / Drawer at the sm tier) the track cannot shrink and\r\n * overflows its container, producing horizontal scroll on tablet /\r\n * phone viewports (WCAG 1.4.10 Reflow).\r\n *\r\n * The sanctioned forms never match this rule:\r\n * - `minmax(0, 1fr)` → 0 floor, no px\r\n * - `minmax(min(${w}px, 100%), 1fr)` → starts with `min(` (not a\r\n * digit) and the px floor is\r\n * clamped to the container\r\n * Only a LITERAL leading-digit px floor — `minmax(240px, …)` — trips\r\n * the rule, which is exactly the un-clamped, un-tokenised regression\r\n * the responsive audit forbids. Verified green against every\r\n * display:grid site in the v2 surface (KVGrid, components/FormGrid,\r\n * patterns/FormGrid, FormGrid.Item, KeyboardShortcutsHelp).\r\n */\r\n test(\"no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))\", () => {\r\n const re = /minmax\\(\\s*\\d+(?:\\.\\d+)?\\s*px/i;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"banned-patterns.test.js","names":["fs","_interopRequireWildcard","require","path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","V2_ROOT","resolve","__dirname","walk","dir","entry","readdirSync","withFileTypes","p","join","name","isDirectory","isFile","test","endsWith","readAllSourceFiles","files","file","push","content","readFileSync","findOffenders","predicate","filter","map","relative","describe","beforeAll","expect","length","toBeGreaterThan","offenders","c","includes","toEqual","re"],"sources":["../../../src/lib/v2/__tests__/banned-patterns.test.ts"],"sourcesContent":["import * as fs from \"fs\";\r\nimport * as path from \"path\";\r\n\r\n/**\r\n * Static-analysis tests guarding against re-introduction of banned\r\n * patterns in src/lib/v2/. Pure filesystem scan; no React, no jsdom.\r\n *\r\n * Each banned pattern has a unique regression history documented in\r\n * the per-test comment so future readers know WHY the rule exists,\r\n * not just what it forbids.\r\n */\r\n\r\nconst V2_ROOT: string = path.resolve(__dirname, \"..\");\r\n\r\ninterface SourceFile {\r\n path: string;\r\n content: string;\r\n}\r\n\r\n/**\r\n * Recursively walk a directory, yielding paths of source files that\r\n * are eligible for scanning. Excludes nested __tests__ folders so\r\n * test fixtures referencing banned strings as test data don't trigger\r\n * the rule. Scans .js/.jsx/.ts/.tsx/.css (ambient .d.ts excluded — no\r\n * runtime style/breakpoint literals live there).\r\n */\r\nfunction* walk(dir: string): Generator<string> {\r\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\r\n const p = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n if (entry.name === \"__tests__\" || entry.name === \"node_modules\") continue;\r\n yield* walk(p);\r\n } else if (\r\n entry.isFile() &&\r\n /\\.(?:jsx?|tsx?|css)$/.test(entry.name) &&\r\n !entry.name.endsWith(\".d.ts\")\r\n ) {\r\n yield p;\r\n }\r\n }\r\n}\r\n\r\nfunction readAllSourceFiles(): SourceFile[] {\r\n const files: SourceFile[] = [];\r\n for (const file of walk(V2_ROOT)) {\r\n files.push({ path: file, content: fs.readFileSync(file, \"utf8\") });\r\n }\r\n return files;\r\n}\r\n\r\nfunction findOffenders(\r\n files: SourceFile[],\r\n predicate: (content: string) => boolean\r\n): string[] {\r\n return files\r\n .filter((f) => predicate(f.content))\r\n .map((f) => path.relative(V2_ROOT, f.path));\r\n}\r\n\r\ndescribe(\"Banned patterns in src/lib/v2/ (regression guard)\", () => {\r\n let files: SourceFile[];\r\n\r\n beforeAll(() => {\r\n files = readAllSourceFiles();\r\n // Sanity check — make sure the walker actually found source.\r\n // A misconfigured path would silently make every test pass with\r\n // an empty input set; this prevents that false-positive.\r\n expect(files.length).toBeGreaterThan(20);\r\n });\r\n\r\n /**\r\n * --fw-black ghost token\r\n * History: Batch 1 removed fontWeight.black from the typography\r\n * tokens; Batch 2 dropped the matching `--fw-black` line from the\r\n * cssVariables emitter. Two regression sites detected later\r\n * (KPICard in Batch 6, FormSection in Batch 7) — both silently\r\n * lost their bold weight at runtime. The CSS variable was\r\n * referenced but resolved to undefined.\r\n *\r\n * ⚠ THE SCAN IS RAW AND COMMENT-BLIND. DO NOT \"FIX\" THAT.\r\n *\r\n * `findOffenders` matches the banned literal anywhere in the file, including\r\n * inside comments. That is deliberate: a guard that parses code can be fooled\r\n * by anything its parser mishandles, whereas a text scan cannot. The cost is\r\n * that DOCUMENTING the banned token — even to record its removal — trips the\r\n * rule.\r\n *\r\n * That is exactly what happened during the procuration-portnet-fe audit: both\r\n * `--fw-black` tests failed, and the \"offenders\" turned out to be explanatory\r\n * comments in `KPICard.tsx` and `theme/cssVariables.ts` describing the very\r\n * fix this rule enforces. The code was correct; both files already used\r\n * `var(--fw-bold)`. The comments were reworded to refer to the token\r\n * descriptively instead.\r\n *\r\n * So: if this fails, read the offending lines BEFORE assuming a regression.\r\n * The correct remedy is to reword the prose, never to add comment-stripping\r\n * here — that would weaken every rule in this file to fix a documentation\r\n * nit.\r\n *\r\n * `__tests__` is excluded from `walk`, which is why this docstring may name\r\n * the token freely.\r\n */\r\n test(\"no `--fw-black` references anywhere in src/lib/v2/\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"--fw-black\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n test(\"no `var(--fw-black)` consumption (paranoid duplicate of the above)\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"var(--fw-black)\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * fontWeight: 650\r\n * History: Banned by Batch 1 typography refactor — 650 is a\r\n * non-standard CSS weight not supported by non-variable fallback\r\n * fonts. Re-introduced twice in Batch 6 (Stepper HStepper +\r\n * FilterTab). Each time it took a careful read to spot, since\r\n * 650 looks \"close enough\" to semibold (600).\r\n */\r\n test(\"no `fontWeight: 650` literal in component sx / inline style\", () => {\r\n // Match `fontWeight: 650` and `fontWeight:650` (with or without space).\r\n // Word boundary on the right so we don't false-match 6500.\r\n const re = /fontWeight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Plain CSS form `font-weight: 650`\r\n * Same rationale as above but for the kebab-case form used inside\r\n * .css files (base.css and friends).\r\n */\r\n test(\"no `font-weight: 650` in CSS files\", () => {\r\n const re = /font-weight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — raw px-width @media query\r\n * History: Batch 1 (mobile & responsive certification). The\r\n * breakpoint scale is single-sourced in tokens/breakpoints and\r\n * wired into BOTH the MUI theme (theme.breakpoints) and the `mq`\r\n * string helpers. A raw `@media (min-width:600px)` (or any literal\r\n * px width) bypasses that single source and silently re-introduces\r\n * the MUI-default divergence (sm:600 / md:900 / lg:1200) the token\r\n * wiring was added to eliminate.\r\n *\r\n * Token-derived queries are produced via mq.up()/down() as\r\n * interpolated `${...}px` strings — no digit follows `width:`, so\r\n * they never match. Feature queries (prefers-reduced-motion,\r\n * pointer, print) carry no width literal and are unaffected.\r\n */\r\n test(\"no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)\", () => {\r\n const re = /@media[^{]*\\b(?:min|max)-width\\s*:\\s*\\d/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — useMediaQuery() with a literal px string\r\n * History: Batch 1. `useMediaQuery(\"(max-width: 600px)\")` hardcodes a\r\n * breakpoint outside the token scale. The sanctioned form passes a\r\n * theme callback — `useMediaQuery(theme.breakpoints.down(\"sm\"))` — so\r\n * the query resolves against the wired token values. This rule flags\r\n * only the string-literal form: the theme-callback form has no quote\r\n * immediately after the opening paren and is unaffected.\r\n */\r\n test(\"no useMediaQuery() with a literal px breakpoint string\", () => {\r\n const re = /useMediaQuery\\(\\s*[\"'`][^)]*\\d+\\s*px/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded px floor in a CSS-grid minmax() track\r\n * History: Batch 2 (KVGrid + components/FormGrid) and Batch 9\r\n * (patterns/FormGrid) — the mobile & responsive certification. An\r\n * auto-fill grid written as `minmax(<N>px, 1fr)` uses the px value as\r\n * a HARD track minimum: when that floor exceeds the available\r\n * container width (a large N, or the grid nested inside a narrow\r\n * column / Drawer at the sm tier) the track cannot shrink and\r\n * overflows its container, producing horizontal scroll on tablet /\r\n * phone viewports (WCAG 1.4.10 Reflow).\r\n *\r\n * The sanctioned forms never match this rule:\r\n * - `minmax(0, 1fr)` → 0 floor, no px\r\n * - `minmax(min(${w}px, 100%), 1fr)` → starts with `min(` (not a\r\n * digit) and the px floor is\r\n * clamped to the container\r\n * Only a LITERAL leading-digit px floor — `minmax(240px, …)` — trips\r\n * the rule, which is exactly the un-clamped, un-tokenised regression\r\n * the responsive audit forbids. Verified green against every\r\n * display:grid site in the v2 surface (KVGrid, components/FormGrid,\r\n * patterns/FormGrid, FormGrid.Item, KeyboardShortcutsHelp).\r\n */\r\n test(\"no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))\", () => {\r\n const re = /minmax\\(\\s*\\d+(?:\\.\\d+)?\\s*px/i;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ var _contrast = require("../utils/contrast");
4
+ var _chart = require("../tokens/chart");
5
+ var _tokens = require("../tokens");
6
+ /**
7
+ * Categorical chart palette certification (gap G-37).
8
+ *
9
+ * WHY THIS FILE EXISTS
10
+ * --------------------
11
+ * `tokens/chart.ts` makes three claims that a consumer cannot check and that a
12
+ * comment cannot keep true:
13
+ *
14
+ * 1. every fill clears the 3:1 non-text floor (WCAG 1.4.11 / R-C.3) on the
15
+ * LIGHT surface;
16
+ * 2. and on the DARK surface — which is what allows ONE array to serve both
17
+ * themes, where `status` needs a `dark.status` override;
18
+ * 3. the entries stay distinguishable from each other, INCLUDING under
19
+ * colour-vision deficiency.
20
+ *
21
+ * The third is the one that matters most and is the least obvious. A pie chart
22
+ * encodes its data in hue alone: two slices that collapse to the same colour
23
+ * under deuteranopia do not merely look similar, they merge, and the reader
24
+ * loses the datum. Roughly 8% of men have a red-green deficiency, so a palette
25
+ * verified only under normal vision is verified for the easy case.
26
+ *
27
+ * Same discipline as contrast-palette.test.ts: ratios are COMPUTED here, never
28
+ * copied from a comment. The palette this replaced — 32 hex literals across two
29
+ * files in `refonte-frontend` — had none of the three properties verified, and
30
+ * two of its entries (#0088FE / #2196f3) were a ~9 ΔE pair that merged under
31
+ * both simulated dichromacies.
32
+ */
33
+
34
+ const WHITE = _tokens.surface.surface;
35
+ const DARK_SURFACE = _tokens.dark.surface;
36
+
37
+ /** Minimum separation demanded of any pair, in CIE76 ΔE units. */
38
+ const MIN_DELTA_E = 12;
39
+ function parseHex(hex) {
40
+ const h = hex.replace("#", "");
41
+ return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
42
+ }
43
+ function toLinear(channel) {
44
+ const c = channel / 255;
45
+ return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
46
+ }
47
+
48
+ /* ── CIE L*a*b* + CIE76 ─────────────────────────────────────────────────────
49
+ * CIE76 rather than CIEDE2000: it is a weaker metric, so a threshold that
50
+ * passes under CIE76 is the more conservative claim, and it is short enough to
51
+ * read in one sitting. */
52
+ function toLab(rgb) {
53
+ const [r, g, b] = [toLinear(rgb[0]), toLinear(rgb[1]), toLinear(rgb[2])];
54
+ const x = (0.4124 * r + 0.3576 * g + 0.1805 * b) / 0.95047;
55
+ const y = 0.2126 * r + 0.7152 * g + 0.0722 * b;
56
+ const z = (0.0193 * r + 0.1192 * g + 0.9505 * b) / 1.08883;
57
+ const f = t => t > 216 / 24389 ? Math.cbrt(t) : 841 / 108 * t + 4 / 29;
58
+ const [fx, fy, fz] = [f(x), f(y), f(z)];
59
+ return [116 * fy - 16, 500 * (fx - fy), 200 * (fy - fz)];
60
+ }
61
+ function deltaE(a, b) {
62
+ const la = toLab(a);
63
+ const lb = toLab(b);
64
+ return Math.hypot(la[0] - lb[0], la[1] - lb[1], la[2] - lb[2]);
65
+ }
66
+
67
+ /* ── Dichromacy simulation (Viénot, Brettel & Mollon 1999) ──────────────────
68
+ * Linear RGB → LMS, collapse the missing cone response, back to sRGB. */
69
+
70
+ const RGB_TO_LMS = [[17.8824, 43.5161, 4.11935], [3.45565, 27.1554, 3.86714], [0.0299566, 0.184309, 1.46709]];
71
+ const LMS_TO_RGB = [[0.080944, -0.130504, 0.116721], [-0.0102485, 0.0540194, -0.113615], [-0.000365294, -0.00412163, 0.693513]];
72
+
73
+ /** Green-cone deficiency. */
74
+ const DEUTERANOPIA = [[1, 0, 0], [0.494207, 0, 1.24827], [0, 0, 1]];
75
+
76
+ /** Red-cone deficiency. */
77
+ const PROTANOPIA = [[0, 2.02344, -2.52581], [0, 1, 0], [0, 0, 1]];
78
+ function apply(m, v) {
79
+ return [m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2], m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2], m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2]];
80
+ }
81
+ function simulate(rgb, deficiency) {
82
+ const linear = [toLinear(rgb[0]), toLinear(rgb[1]), toLinear(rgb[2])];
83
+ const seen = apply(LMS_TO_RGB, apply(deficiency, apply(RGB_TO_LMS, linear)));
84
+ const encode = c => {
85
+ const clamped = Math.min(1, Math.max(0, c));
86
+ const srgb = clamped <= 0.0031308 ? 12.92 * clamped : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;
87
+ return Math.round(Math.min(1, Math.max(0, srgb)) * 255);
88
+ };
89
+ return [encode(seen[0]), encode(seen[1]), encode(seen[2])];
90
+ }
91
+
92
+ /** Worst-case separation: normal vision, deuteranopia, protanopia. */
93
+ function worstCaseSeparation(a, b) {
94
+ const ra = parseHex(a);
95
+ const rb = parseHex(b);
96
+ return Math.min(deltaE(ra, rb), deltaE(simulate(ra, DEUTERANOPIA), simulate(rb, DEUTERANOPIA)), deltaE(simulate(ra, PROTANOPIA), simulate(rb, PROTANOPIA)));
97
+ }
98
+ describe("Categorical chart palette (tokens/chart)", () => {
99
+ test("shape is pinned — 12 entries, 8 of them the hue-balanced core", () => {
100
+ expect(_chart.chartCategorical).toHaveLength(12);
101
+ expect(_chart.CHART_CATEGORICAL_CORE).toBe(8);
102
+ expect(_chart.chartCategorical.every(c => /^#[0-9A-F]{6}$/.test(c))).toBe(true);
103
+ });
104
+ describe("non-text contrast ≥ 3:1 (WCAG 1.4.11 / R-C.3)", () => {
105
+ _chart.chartCategorical.forEach((colour, index) => {
106
+ test(`--chart-${index + 1} (${colour}) on the light surface`, () => {
107
+ expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(colour, WHITE), "ui")).toBe(true);
108
+ });
109
+
110
+ /**
111
+ * The dark-surface half is what earns this palette a single array. If a
112
+ * future hue is nudged out of the luminance window, THIS is the test that
113
+ * fails, and the remedy is to re-solve the lightness — not to add a
114
+ * `dark.chart` override, which would double the surface to maintain.
115
+ */
116
+ test(`--chart-${index + 1} (${colour}) on the dark surface`, () => {
117
+ expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(colour, DARK_SURFACE), "ui")).toBe(true);
118
+ });
119
+ });
120
+ });
121
+ describe("mutual distinguishability, normal vision and dichromacy", () => {
122
+ test(`every pair is ≥ ${MIN_DELTA_E} ΔE in the worst of three vision models`, () => {
123
+ const tooClose = [];
124
+ for (let i = 0; i < _chart.chartCategorical.length; i += 1) {
125
+ for (let j = i + 1; j < _chart.chartCategorical.length; j += 1) {
126
+ const a = _chart.chartCategorical[i];
127
+ const b = _chart.chartCategorical[j];
128
+ const separation = worstCaseSeparation(a, b);
129
+ if (separation < MIN_DELTA_E) {
130
+ tooClose.push(`${a} (${i + 1}) vs ${b} (${j + 1}) — ${separation.toFixed(1)} ΔE`);
131
+ }
132
+ }
133
+ }
134
+ expect(tooClose).toEqual([]);
135
+ });
136
+
137
+ /**
138
+ * The tightest pair, asserted at its MEASURED value rather than at the
139
+ * threshold — the convention this repository already uses in
140
+ * contrast-palette.test.ts, so that drift shows up as a diff instead of as
141
+ * a pass that quietly got worse.
142
+ */
143
+ test("the closest pair is red vs olive, at ~12.4 ΔE", () => {
144
+ const separation = worstCaseSeparation("#C92E1D", "#3B7911");
145
+ expect(separation).toBeGreaterThan(12);
146
+ expect(separation).toBeLessThan(13);
147
+ });
148
+ });
149
+ describe("chartColorOn() — text drawn ON a slice is AA (WCAG 1.4.3)", () => {
150
+ _chart.chartCategorical.forEach((fill, index) => {
151
+ test(`label on --chart-${index + 1} (${fill})`, () => {
152
+ expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)((0, _chart.chartColorOn)(index), fill), "normal")).toBe(true);
153
+ });
154
+ });
155
+ test("the label array is index-aligned with the palette", () => {
156
+ expect(_chart.chartCategoricalOn).toHaveLength(_chart.chartCategorical.length);
157
+ });
158
+
159
+ /**
160
+ * The regression this closes: `refonte-frontend` printed `fill="white"` on
161
+ * every pie label. Asserted here so the two-tier palette can never be
162
+ * paired with a single label colour again — white FAILS on the light tier.
163
+ */
164
+ test("a single white label colour would NOT satisfy AA on every entry", () => {
165
+ const failures = _chart.chartCategorical.filter(fill => !(0, _contrast.passesContrast)((0, _contrast.contrastRatio)("#FFFFFF", fill), "normal"));
166
+ expect(failures.length).toBeGreaterThan(0);
167
+ });
168
+ test("bad input resolves to the first label colour", () => {
169
+ expect((0, _chart.chartColorOn)(-1)).toBe(_chart.chartCategoricalOn[0]);
170
+ expect((0, _chart.chartColorOn)(Number.NaN)).toBe(_chart.chartCategoricalOn[0]);
171
+ expect((0, _chart.chartColorOn)(12)).toBe(_chart.chartCategoricalOn[0]);
172
+ });
173
+ });
174
+ describe("chartColor()", () => {
175
+ test("returns the palette in order", () => {
176
+ _chart.chartCategorical.forEach((colour, index) => {
177
+ expect((0, _chart.chartColor)(index)).toBe(colour);
178
+ });
179
+ });
180
+ test("cycles past the end", () => {
181
+ expect((0, _chart.chartColor)(12)).toBe(_chart.chartCategorical[0]);
182
+ expect((0, _chart.chartColor)(13)).toBe(_chart.chartCategorical[1]);
183
+ });
184
+ test("bad input resolves to the first entry instead of throwing", () => {
185
+ expect((0, _chart.chartColor)(-1)).toBe(_chart.chartCategorical[0]);
186
+ expect((0, _chart.chartColor)(Number.NaN)).toBe(_chart.chartCategorical[0]);
187
+ });
188
+ test("fractional indices floor rather than producing undefined", () => {
189
+ expect((0, _chart.chartColor)(2.7)).toBe(_chart.chartCategorical[2]);
190
+ });
191
+ });
192
+
193
+ /**
194
+ * A categorical palette must not be mistaken for the workflow palette. These
195
+ * are different vocabularies (R-2.2 reserves `status` for canonical workflow
196
+ * states), and a value shared between them would invite exactly the confusion
197
+ * the split exists to prevent.
198
+ */
199
+ test("no entry duplicates a workflow status colour", () => {
200
+ const statusColours = new Set(Object.values(_tokens.status).flatMap(s => [s.soft.toUpperCase(), s.fg.toUpperCase()]));
201
+ const overlap = _chart.chartCategorical.filter(c => statusColours.has(c.toUpperCase()));
202
+ expect(overlap).toEqual([]);
203
+ });
204
+ });
205
+ //# sourceMappingURL=chart-palette.test.js.map