@portnet/ui 6.0.2 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (980) hide show
  1. package/CHANGELOG.md +652 -0
  2. package/dist/esm/index.js +72 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +81 -86
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +155 -59
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +37 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +2 -3
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -53
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -87
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +152 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  346. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  347. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  348. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  349. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  350. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  351. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  352. package/dist/esm/v2/personalization/index.js +17 -0
  353. package/dist/esm/v2/personalization/index.js.map +1 -1
  354. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  355. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  356. package/dist/esm/v2/personalization/schema.js +8 -9
  357. package/dist/esm/v2/personalization/schema.js.map +1 -1
  358. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  359. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  360. package/dist/esm/v2/referentiel/types.js +2 -0
  361. package/dist/esm/v2/referentiel/types.js.map +1 -0
  362. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  363. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  364. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  365. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  367. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  368. package/dist/esm/v2/theme/_brand.js +8 -24
  369. package/dist/esm/v2/theme/_brand.js.map +1 -1
  370. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  371. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  372. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  373. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  374. package/dist/esm/v2/theme/cssVariables.js +62 -69
  375. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  376. package/dist/esm/v2/theme/index.js +5 -5
  377. package/dist/esm/v2/theme/index.js.map +1 -1
  378. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  379. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  380. package/dist/esm/v2/tokens/chart.js +261 -0
  381. package/dist/esm/v2/tokens/chart.js.map +1 -0
  382. package/dist/esm/v2/tokens/colors.js +22 -22
  383. package/dist/esm/v2/tokens/colors.js.map +1 -1
  384. package/dist/esm/v2/tokens/density.js +62 -7
  385. package/dist/esm/v2/tokens/density.js.map +1 -1
  386. package/dist/esm/v2/tokens/index.js +49 -34
  387. package/dist/esm/v2/tokens/index.js.map +1 -1
  388. package/dist/esm/v2/tokens/motion.js +12 -20
  389. package/dist/esm/v2/tokens/motion.js.map +1 -1
  390. package/dist/esm/v2/tokens/radius.js +1 -1
  391. package/dist/esm/v2/tokens/radius.js.map +1 -1
  392. package/dist/esm/v2/tokens/shadows.js +6 -6
  393. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  394. package/dist/esm/v2/tokens/spacing.js +2 -2
  395. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  396. package/dist/esm/v2/tokens/state.js +1 -1
  397. package/dist/esm/v2/tokens/state.js.map +1 -1
  398. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  399. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  400. package/dist/esm/v2/tokens/tokens.json +6 -1
  401. package/dist/esm/v2/tokens/typography.js +13 -13
  402. package/dist/esm/v2/tokens/typography.js.map +1 -1
  403. package/dist/esm/v2/tokens/zIndex.js +1 -1
  404. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  405. package/dist/esm/v2/types/datagrid.js.map +1 -1
  406. package/dist/esm/v2/utils/apiError.js +16 -37
  407. package/dist/esm/v2/utils/apiError.js.map +1 -1
  408. package/dist/esm/v2/utils/contrast.js +31 -32
  409. package/dist/esm/v2/utils/contrast.js.map +1 -1
  410. package/dist/esm/v2/utils/cx.js +5 -25
  411. package/dist/esm/v2/utils/cx.js.map +1 -1
  412. package/dist/esm/v2/utils/fileDownload.js +23 -26
  413. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  414. package/dist/esm/v2/utils/fileValidation.js +209 -0
  415. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  416. package/dist/esm/v2/utils/fmtDate.js +111 -0
  417. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  419. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  420. package/dist/esm/v2/utils/formikErrors.js +78 -0
  421. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  422. package/dist/esm/v2/utils/index.js +35 -2
  423. package/dist/esm/v2/utils/index.js.map +1 -1
  424. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  425. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  426. package/dist/esm/v2/utils/networkStatus.js +12 -12
  427. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  428. package/dist/index.d.ts +7 -1
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +110 -49
  431. package/dist/index.js.map +1 -1
  432. package/dist/v2/__tests__/AppMain.test.js +133 -0
  433. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  434. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  435. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  436. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  437. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  438. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  439. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  440. package/dist/v2/__tests__/FieldError.test.js +82 -49
  441. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  442. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  443. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  444. package/dist/v2/__tests__/FieldWidth.test.js +23 -25
  445. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
  446. package/dist/v2/__tests__/FileCard.test.js +29 -28
  447. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  448. package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
  449. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
  451. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
  452. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  453. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
  455. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
  456. package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
  457. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  458. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  459. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  460. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  461. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  462. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  463. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  464. package/dist/v2/__tests__/apiError.test.js +50 -69
  465. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  466. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  467. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  468. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  469. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  470. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  471. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  472. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  473. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  474. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  475. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  476. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  477. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  478. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  479. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  480. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  481. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  482. package/dist/v2/__tests__/labels-merge.test.js +23 -27
  483. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  484. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  485. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  486. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  487. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  488. package/dist/v2/__tests__/rowActions.test.js +186 -0
  489. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  490. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  491. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  493. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  494. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  495. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  496. package/dist/v2/components/Accordion.js +60 -82
  497. package/dist/v2/components/Accordion.js.map +1 -1
  498. package/dist/v2/components/ActionStrip.js +40 -52
  499. package/dist/v2/components/ActionStrip.js.map +1 -1
  500. package/dist/v2/components/Banner.js +42 -41
  501. package/dist/v2/components/Banner.js.map +1 -1
  502. package/dist/v2/components/Busy.js +22 -27
  503. package/dist/v2/components/Busy.js.map +1 -1
  504. package/dist/v2/components/Button.js +39 -50
  505. package/dist/v2/components/Button.js.map +1 -1
  506. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  507. package/dist/v2/components/CategoryTag.js +49 -32
  508. package/dist/v2/components/CategoryTag.js.map +1 -1
  509. package/dist/v2/components/Checkbox.js +39 -45
  510. package/dist/v2/components/Checkbox.js.map +1 -1
  511. package/dist/v2/components/Chip.js +29 -42
  512. package/dist/v2/components/Chip.js.map +1 -1
  513. package/dist/v2/components/Combobox.js +122 -144
  514. package/dist/v2/components/Combobox.js.map +1 -1
  515. package/dist/v2/components/CommandPalette.js +138 -225
  516. package/dist/v2/components/CommandPalette.js.map +1 -1
  517. package/dist/v2/components/ConfirmDialog.js +46 -56
  518. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  519. package/dist/v2/components/DatePicker.js +81 -86
  520. package/dist/v2/components/DatePicker.js.map +1 -1
  521. package/dist/v2/components/DateRangePicker.js +77 -87
  522. package/dist/v2/components/DateRangePicker.js.map +1 -1
  523. package/dist/v2/components/DateTimePicker.js +84 -91
  524. package/dist/v2/components/DateTimePicker.js.map +1 -1
  525. package/dist/v2/components/Drawer.d.ts.map +1 -1
  526. package/dist/v2/components/Drawer.js +93 -88
  527. package/dist/v2/components/Drawer.js.map +1 -1
  528. package/dist/v2/components/Dropzone.js +150 -196
  529. package/dist/v2/components/Dropzone.js.map +1 -1
  530. package/dist/v2/components/EmptyState.js +18 -20
  531. package/dist/v2/components/EmptyState.js.map +1 -1
  532. package/dist/v2/components/FavoriteToggle.js +28 -39
  533. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  534. package/dist/v2/components/Field.d.ts +62 -4
  535. package/dist/v2/components/Field.d.ts.map +1 -1
  536. package/dist/v2/components/Field.js +169 -70
  537. package/dist/v2/components/Field.js.map +1 -1
  538. package/dist/v2/components/FieldError.js +18 -21
  539. package/dist/v2/components/FieldError.js.map +1 -1
  540. package/dist/v2/components/FieldHelp.js +40 -60
  541. package/dist/v2/components/FieldHelp.js.map +1 -1
  542. package/dist/v2/components/FileCard.js +27 -31
  543. package/dist/v2/components/FileCard.js.map +1 -1
  544. package/dist/v2/components/FilterTab.js +30 -38
  545. package/dist/v2/components/FilterTab.js.map +1 -1
  546. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  547. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  548. package/dist/v2/components/ForbiddenPage.js +37 -17
  549. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  550. package/dist/v2/components/FormGrid.js +53 -59
  551. package/dist/v2/components/FormGrid.js.map +1 -1
  552. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  553. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  554. package/dist/v2/components/FormikDisplay.js +108 -33
  555. package/dist/v2/components/FormikDisplay.js.map +1 -1
  556. package/dist/v2/components/Input.d.ts +40 -0
  557. package/dist/v2/components/Input.d.ts.map +1 -1
  558. package/dist/v2/components/Input.js +81 -41
  559. package/dist/v2/components/Input.js.map +1 -1
  560. package/dist/v2/components/KPICard.js +57 -67
  561. package/dist/v2/components/KPICard.js.map +1 -1
  562. package/dist/v2/components/KPIStrip.js +16 -22
  563. package/dist/v2/components/KPIStrip.js.map +1 -1
  564. package/dist/v2/components/KV.js +25 -31
  565. package/dist/v2/components/KV.js.map +1 -1
  566. package/dist/v2/components/KVGrid.js +19 -26
  567. package/dist/v2/components/KVGrid.js.map +1 -1
  568. package/dist/v2/components/Layout.js +91 -120
  569. package/dist/v2/components/Layout.js.map +1 -1
  570. package/dist/v2/components/MobileRowCard.js +79 -91
  571. package/dist/v2/components/MobileRowCard.js.map +1 -1
  572. package/dist/v2/components/Modal.js +61 -69
  573. package/dist/v2/components/Modal.js.map +1 -1
  574. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  575. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  576. package/dist/v2/components/NetworkErrorPage.js +38 -21
  577. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  578. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  579. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  580. package/dist/v2/components/NotFoundPage.js +37 -18
  581. package/dist/v2/components/NotFoundPage.js.map +1 -1
  582. package/dist/v2/components/NumberInput.js +88 -118
  583. package/dist/v2/components/NumberInput.js.map +1 -1
  584. package/dist/v2/components/OverflowMenu.js +38 -56
  585. package/dist/v2/components/OverflowMenu.js.map +1 -1
  586. package/dist/v2/components/PdfViewer.js +34 -45
  587. package/dist/v2/components/PdfViewer.js.map +1 -1
  588. package/dist/v2/components/ProgressBar.js +42 -49
  589. package/dist/v2/components/ProgressBar.js.map +1 -1
  590. package/dist/v2/components/Radio.js +59 -67
  591. package/dist/v2/components/Radio.js.map +1 -1
  592. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  593. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  594. package/dist/v2/components/SectionHeader.js +34 -41
  595. package/dist/v2/components/SectionHeader.js.map +1 -1
  596. package/dist/v2/components/Segmented.js +69 -93
  597. package/dist/v2/components/Segmented.js.map +1 -1
  598. package/dist/v2/components/Select.d.ts +26 -2
  599. package/dist/v2/components/Select.d.ts.map +1 -1
  600. package/dist/v2/components/Select.js +120 -155
  601. package/dist/v2/components/Select.js.map +1 -1
  602. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  603. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  604. package/dist/v2/components/ServerErrorPage.js +37 -20
  605. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  606. package/dist/v2/components/Skeleton.js +86 -100
  607. package/dist/v2/components/Skeleton.js.map +1 -1
  608. package/dist/v2/components/SkipLink.js +9 -12
  609. package/dist/v2/components/SkipLink.js.map +1 -1
  610. package/dist/v2/components/Spinner.js +16 -25
  611. package/dist/v2/components/Spinner.js.map +1 -1
  612. package/dist/v2/components/Status.js +18 -29
  613. package/dist/v2/components/Status.js.map +1 -1
  614. package/dist/v2/components/Stepper.js +80 -82
  615. package/dist/v2/components/Stepper.js.map +1 -1
  616. package/dist/v2/components/Surface.js +34 -49
  617. package/dist/v2/components/Surface.js.map +1 -1
  618. package/dist/v2/components/Switch.js +29 -37
  619. package/dist/v2/components/Switch.js.map +1 -1
  620. package/dist/v2/components/TabPanel.d.ts +17 -0
  621. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  622. package/dist/v2/components/TabPanel.js +90 -0
  623. package/dist/v2/components/TabPanel.js.map +1 -0
  624. package/dist/v2/components/Tabs.d.ts +25 -0
  625. package/dist/v2/components/Tabs.d.ts.map +1 -1
  626. package/dist/v2/components/Tabs.js +53 -29
  627. package/dist/v2/components/Tabs.js.map +1 -1
  628. package/dist/v2/components/TelInput.js +80 -115
  629. package/dist/v2/components/TelInput.js.map +1 -1
  630. package/dist/v2/components/Textarea.js +26 -35
  631. package/dist/v2/components/Textarea.js.map +1 -1
  632. package/dist/v2/components/TimePicker.js +62 -74
  633. package/dist/v2/components/TimePicker.js.map +1 -1
  634. package/dist/v2/components/Toast.js +119 -174
  635. package/dist/v2/components/Toast.js.map +1 -1
  636. package/dist/v2/components/Tooltip.js +23 -38
  637. package/dist/v2/components/Tooltip.js.map +1 -1
  638. package/dist/v2/components/_ErrorPageBody.js +15 -16
  639. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  640. package/dist/v2/components/_pickerShared.js +5 -5
  641. package/dist/v2/components/_pickerShared.js.map +1 -1
  642. package/dist/v2/components/index.d.ts +40 -1
  643. package/dist/v2/components/index.d.ts.map +1 -1
  644. package/dist/v2/components/index.js +153 -136
  645. package/dist/v2/components/index.js.map +1 -1
  646. package/dist/v2/hooks/index.d.ts +65 -0
  647. package/dist/v2/hooks/index.d.ts.map +1 -1
  648. package/dist/v2/hooks/index.js +63 -24
  649. package/dist/v2/hooks/index.js.map +1 -1
  650. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  651. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  652. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  653. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  654. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  655. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  656. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  657. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  658. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  659. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  660. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  661. package/dist/v2/hooks/useDensity.js +14 -18
  662. package/dist/v2/hooks/useDensity.js.map +1 -1
  663. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  664. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  665. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  666. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  667. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  668. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  669. package/dist/v2/hooks/useFocusTrap.js +20 -24
  670. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  671. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  672. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  673. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  674. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  675. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  676. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  677. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  678. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  679. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  680. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  681. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  682. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  683. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  684. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  685. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  687. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  688. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  689. package/dist/v2/hooks/useSortedRows.js +4 -6
  690. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  691. package/dist/v2/hooks/useTabLoading.js +7 -22
  692. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  693. package/dist/v2/index.js +143 -145
  694. package/dist/v2/index.js.map +1 -1
  695. package/dist/v2/modalContext.js +2 -2
  696. package/dist/v2/modalContext.js.map +1 -1
  697. package/dist/v2/models/favorite.d.ts +8 -9
  698. package/dist/v2/models/favorite.d.ts.map +1 -1
  699. package/dist/v2/models/favorite.js.map +1 -1
  700. package/dist/v2/models/index.js +4 -4
  701. package/dist/v2/models/index.js.map +1 -1
  702. package/dist/v2/models/personalization.d.ts +44 -48
  703. package/dist/v2/models/personalization.d.ts.map +1 -1
  704. package/dist/v2/models/personalization.js.map +1 -1
  705. package/dist/v2/models/referentiel.d.ts +32 -50
  706. package/dist/v2/models/referentiel.d.ts.map +1 -1
  707. package/dist/v2/models/referentiel.js.map +1 -1
  708. package/dist/v2/models/savedFilter.d.ts +8 -17
  709. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  710. package/dist/v2/models/savedFilter.js.map +1 -1
  711. package/dist/v2/patterns/ActionBar.js +152 -187
  712. package/dist/v2/patterns/ActionBar.js.map +1 -1
  713. package/dist/v2/patterns/AppMain.d.ts +109 -0
  714. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  715. package/dist/v2/patterns/AppMain.js +115 -0
  716. package/dist/v2/patterns/AppMain.js.map +1 -0
  717. package/dist/v2/patterns/BulkActionBar.js +40 -42
  718. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  719. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  720. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  721. package/dist/v2/patterns/ChartFigure.js +159 -0
  722. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  723. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  724. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  725. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  726. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  727. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  728. package/dist/v2/patterns/DataGrid.js +262 -297
  729. package/dist/v2/patterns/DataGrid.js.map +1 -1
  730. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  731. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  733. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  734. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  735. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  736. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  737. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  738. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  739. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  740. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  741. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  742. package/dist/v2/patterns/DetailSplit.js +116 -0
  743. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  744. package/dist/v2/patterns/FavoriteColumn.js +22 -23
  745. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  746. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  747. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  748. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  749. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  750. package/dist/v2/patterns/FilterTabBar.js +120 -0
  751. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  752. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  753. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  754. package/dist/v2/patterns/FormPageShell.js +53 -50
  755. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  756. package/dist/v2/patterns/FormSection.d.ts +8 -3
  757. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  758. package/dist/v2/patterns/FormSection.js +44 -51
  759. package/dist/v2/patterns/FormSection.js.map +1 -1
  760. package/dist/v2/patterns/FormikCheckbox.js +36 -45
  761. package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
  762. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  763. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  765. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  766. package/dist/v2/patterns/FormikCombobox.js +55 -72
  767. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  768. package/dist/v2/patterns/FormikDatePicker.js +50 -64
  769. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  770. package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
  771. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
  772. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  773. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  774. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  775. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  776. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  777. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  778. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  779. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikFile.js +99 -83
  781. package/dist/v2/patterns/FormikFile.js.map +1 -1
  782. package/dist/v2/patterns/FormikInput.js +45 -58
  783. package/dist/v2/patterns/FormikInput.js.map +1 -1
  784. package/dist/v2/patterns/FormikRadioGroup.js +45 -56
  785. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
  786. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  787. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  788. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  789. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  790. package/dist/v2/patterns/FormikSelect.js +70 -92
  791. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  792. package/dist/v2/patterns/FormikTextarea.js +35 -51
  793. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  794. package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
  795. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  796. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  797. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  798. package/dist/v2/patterns/PageContent.js +17 -20
  799. package/dist/v2/patterns/PageContent.js.map +1 -1
  800. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  801. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  802. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  803. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  804. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  805. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/ReferentielField.js +347 -327
  807. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
  809. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
  810. package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
  811. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
  812. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  813. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  814. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  815. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  816. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  817. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  818. package/dist/v2/patterns/SortableHeader.js +35 -57
  819. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  820. package/dist/v2/patterns/Tour.js +121 -142
  821. package/dist/v2/patterns/Tour.js.map +1 -1
  822. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  823. package/dist/v2/patterns/_dataGridShared.js +131 -147
  824. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  825. package/dist/v2/patterns/_pickerSerialisation.js +9 -10
  826. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
  827. package/dist/v2/patterns/_sort.js +17 -33
  828. package/dist/v2/patterns/_sort.js.map +1 -1
  829. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  830. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  831. package/dist/v2/patterns/_useColumnResize.js +80 -99
  832. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  833. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  834. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  835. package/dist/v2/patterns/filterCriteria.js +110 -0
  836. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  837. package/dist/v2/patterns/index.d.ts +160 -0
  838. package/dist/v2/patterns/index.d.ts.map +1 -1
  839. package/dist/v2/patterns/index.js +157 -79
  840. package/dist/v2/patterns/index.js.map +1 -1
  841. package/dist/v2/patterns/rowActions.d.ts +150 -0
  842. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  843. package/dist/v2/patterns/rowActions.js +232 -0
  844. package/dist/v2/patterns/rowActions.js.map +1 -0
  845. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  846. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  847. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  848. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  849. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  850. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  851. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  852. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  853. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  854. package/dist/v2/personalization/adapters/index.js +5 -5
  855. package/dist/v2/personalization/adapters/index.js.map +1 -1
  856. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  857. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  858. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  859. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  860. package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
  861. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
  862. package/dist/v2/personalization/capabilities/index.js +12 -12
  863. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  864. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  865. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  866. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  867. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  868. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  869. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  870. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  871. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  872. package/dist/v2/personalization/index.d.ts +16 -0
  873. package/dist/v2/personalization/index.d.ts.map +1 -1
  874. package/dist/v2/personalization/index.js +30 -23
  875. package/dist/v2/personalization/index.js.map +1 -1
  876. package/dist/v2/personalization/personalizationContext.js +10 -12
  877. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  878. package/dist/v2/personalization/schema.js +8 -9
  879. package/dist/v2/personalization/schema.js.map +1 -1
  880. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  881. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  882. package/dist/v2/referentiel/index.js +11 -13
  883. package/dist/v2/referentiel/index.js.map +1 -1
  884. package/dist/v2/referentiel/types.d.ts +105 -0
  885. package/dist/v2/referentiel/types.d.ts.map +1 -0
  886. package/dist/v2/referentiel/types.js +6 -0
  887. package/dist/v2/referentiel/types.js.map +1 -0
  888. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  889. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  890. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  891. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  892. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  893. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  894. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  895. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  896. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  897. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  898. package/dist/v2/theme/_brand.js +12 -26
  899. package/dist/v2/theme/_brand.js.map +1 -1
  900. package/dist/v2/theme/_brandSecondary.js +12 -26
  901. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  902. package/dist/v2/theme/createPortnetTheme.js +41 -49
  903. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  904. package/dist/v2/theme/cssVariables.d.ts +3 -3
  905. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  906. package/dist/v2/theme/cssVariables.js +65 -70
  907. package/dist/v2/theme/cssVariables.js.map +1 -1
  908. package/dist/v2/theme/index.js +10 -10
  909. package/dist/v2/theme/index.js.map +1 -1
  910. package/dist/v2/tokens/breakpoints.js +16 -16
  911. package/dist/v2/tokens/breakpoints.js.map +1 -1
  912. package/dist/v2/tokens/chart.d.ts +103 -0
  913. package/dist/v2/tokens/chart.d.ts.map +1 -0
  914. package/dist/v2/tokens/chart.js +270 -0
  915. package/dist/v2/tokens/chart.js.map +1 -0
  916. package/dist/v2/tokens/colors.js +24 -24
  917. package/dist/v2/tokens/colors.js.map +1 -1
  918. package/dist/v2/tokens/density.d.ts +104 -0
  919. package/dist/v2/tokens/density.d.ts.map +1 -1
  920. package/dist/v2/tokens/density.js +67 -12
  921. package/dist/v2/tokens/density.js.map +1 -1
  922. package/dist/v2/tokens/index.d.ts +50 -1
  923. package/dist/v2/tokens/index.d.ts.map +1 -1
  924. package/dist/v2/tokens/index.js +116 -68
  925. package/dist/v2/tokens/index.js.map +1 -1
  926. package/dist/v2/tokens/motion.js +16 -22
  927. package/dist/v2/tokens/motion.js.map +1 -1
  928. package/dist/v2/tokens/radius.js +3 -3
  929. package/dist/v2/tokens/radius.js.map +1 -1
  930. package/dist/v2/tokens/shadows.js +8 -8
  931. package/dist/v2/tokens/shadows.js.map +1 -1
  932. package/dist/v2/tokens/spacing.js +4 -4
  933. package/dist/v2/tokens/spacing.js.map +1 -1
  934. package/dist/v2/tokens/state.js +3 -3
  935. package/dist/v2/tokens/state.js.map +1 -1
  936. package/dist/v2/tokens/statusPalette.js +21 -23
  937. package/dist/v2/tokens/statusPalette.js.map +1 -1
  938. package/dist/v2/tokens/tokens.json +6 -1
  939. package/dist/v2/tokens/typography.js +15 -15
  940. package/dist/v2/tokens/typography.js.map +1 -1
  941. package/dist/v2/tokens/zIndex.js +3 -3
  942. package/dist/v2/tokens/zIndex.js.map +1 -1
  943. package/dist/v2/types/datagrid.d.ts +9 -1
  944. package/dist/v2/types/datagrid.d.ts.map +1 -1
  945. package/dist/v2/types/datagrid.js.map +1 -1
  946. package/dist/v2/types/index.js +2 -2
  947. package/dist/v2/types/index.js.map +1 -1
  948. package/dist/v2/utils/apiError.js +16 -37
  949. package/dist/v2/utils/apiError.js.map +1 -1
  950. package/dist/v2/utils/contrast.js +31 -32
  951. package/dist/v2/utils/contrast.js.map +1 -1
  952. package/dist/v2/utils/cx.js +7 -27
  953. package/dist/v2/utils/cx.js.map +1 -1
  954. package/dist/v2/utils/fileDownload.js +25 -28
  955. package/dist/v2/utils/fileDownload.js.map +1 -1
  956. package/dist/v2/utils/fileValidation.d.ts +116 -0
  957. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  958. package/dist/v2/utils/fileValidation.js +220 -0
  959. package/dist/v2/utils/fileValidation.js.map +1 -0
  960. package/dist/v2/utils/fmtDate.d.ts +103 -0
  961. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  962. package/dist/v2/utils/fmtDate.js +119 -0
  963. package/dist/v2/utils/fmtDate.js.map +1 -0
  964. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  965. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  966. package/dist/v2/utils/fmtMoney.js +9 -11
  967. package/dist/v2/utils/fmtMoney.js.map +1 -1
  968. package/dist/v2/utils/formikErrors.d.ts +67 -0
  969. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  970. package/dist/v2/utils/formikErrors.js +85 -0
  971. package/dist/v2/utils/formikErrors.js.map +1 -0
  972. package/dist/v2/utils/index.d.ts +5 -0
  973. package/dist/v2/utils/index.d.ts.map +1 -1
  974. package/dist/v2/utils/index.js +67 -18
  975. package/dist/v2/utils/index.js.map +1 -1
  976. package/dist/v2/utils/mergeLabels.js +9 -14
  977. package/dist/v2/utils/mergeLabels.js.map +1 -1
  978. package/dist/v2/utils/networkStatus.js +14 -14
  979. package/dist/v2/utils/networkStatus.js.map +1 -1
  980. package/package.json +26 -9
@@ -1,7 +1,3 @@
1
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
2
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
5
1
  import { useMemo } from "react";
6
2
 
7
3
  /**
@@ -37,38 +33,32 @@ import { useMemo } from "react";
37
33
  * "articles" → values.articles (array length checked)
38
34
  */
39
35
 
40
- export default function useFormCompletionProgress(_ref) {
41
- var values = _ref.values,
42
- requiredFields = _ref.requiredFields,
43
- _ref$optionalFields = _ref.optionalFields,
44
- optionalFields = _ref$optionalFields === void 0 ? [] : _ref$optionalFields;
45
- return useMemo(function () {
46
- var required = Array.isArray(requiredFields) ? requiredFields : [];
47
- var optional = Array.isArray(optionalFields) ? optionalFields : [];
48
- var filledRequired = required.filter(function (path) {
49
- return isFilled(getFieldValue(values, path));
50
- }).length;
51
- var filledOptional = optional.filter(function (path) {
52
- return isFilled(getFieldValue(values, path));
53
- }).length;
54
- var missingRequired = required.filter(function (path) {
55
- return !isFilled(getFieldValue(values, path));
56
- });
57
- var totalRequired = required.length;
58
- var totalOptional = optional.length;
59
- var requiredPct = totalRequired ? Math.round(filledRequired / totalRequired * 100) : 100;
60
- var overallFilled = filledRequired + filledOptional;
61
- var overallTotal = totalRequired + totalOptional;
62
- var overallPct = overallTotal ? Math.round(overallFilled / overallTotal * 100) : 0;
36
+ export default function useFormCompletionProgress({
37
+ values,
38
+ requiredFields,
39
+ optionalFields = []
40
+ }) {
41
+ return useMemo(() => {
42
+ const required = Array.isArray(requiredFields) ? requiredFields : [];
43
+ const optional = Array.isArray(optionalFields) ? optionalFields : [];
44
+ const filledRequired = required.filter(path => isFilled(getFieldValue(values, path))).length;
45
+ const filledOptional = optional.filter(path => isFilled(getFieldValue(values, path))).length;
46
+ const missingRequired = required.filter(path => !isFilled(getFieldValue(values, path)));
47
+ const totalRequired = required.length;
48
+ const totalOptional = optional.length;
49
+ const requiredPct = totalRequired ? Math.round(filledRequired / totalRequired * 100) : 100;
50
+ const overallFilled = filledRequired + filledOptional;
51
+ const overallTotal = totalRequired + totalOptional;
52
+ const overallPct = overallTotal ? Math.round(overallFilled / overallTotal * 100) : 0;
63
53
  return {
64
- requiredPct: requiredPct,
65
- overallPct: overallPct,
66
- filledRequired: filledRequired,
67
- totalRequired: totalRequired,
68
- filledOptional: filledOptional,
69
- totalOptional: totalOptional,
54
+ requiredPct,
55
+ overallPct,
56
+ filledRequired,
57
+ totalRequired,
58
+ filledOptional,
59
+ totalOptional,
70
60
  isCompleteRequired: totalRequired === 0 || filledRequired === totalRequired,
71
- missingRequired: missingRequired
61
+ missingRequired
72
62
  };
73
63
  }, [values, requiredFields, optionalFields]);
74
64
  }
@@ -84,23 +74,14 @@ export default function useFormCompletionProgress(_ref) {
84
74
  * getFieldValue({}, "doesNotExist") → undefined
85
75
  */
86
76
  function getFieldValue(obj, path) {
87
- if (!obj || _typeof(obj) !== "object") return undefined;
77
+ if (!obj || typeof obj !== "object") return undefined;
88
78
  if (!path) return undefined;
89
- var parts = path.split(".");
90
- var cur = obj;
91
- var _iterator = _createForOfIteratorHelper(parts),
92
- _step;
93
- try {
94
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
95
- var p = _step.value;
96
- if (cur === null || cur === undefined) return undefined;
97
- if (_typeof(cur) !== "object") return undefined;
98
- cur = cur[p];
99
- }
100
- } catch (err) {
101
- _iterator.e(err);
102
- } finally {
103
- _iterator.f();
79
+ const parts = path.split(".");
80
+ let cur = obj;
81
+ for (const p of parts) {
82
+ if (cur === null || cur === undefined) return undefined;
83
+ if (typeof cur !== "object") return undefined;
84
+ cur = cur[p];
104
85
  }
105
86
  return cur;
106
87
  }
@@ -124,7 +105,7 @@ function isFilled(v) {
124
105
  if (typeof v === "string") return v.trim().length > 0;
125
106
  if (Array.isArray(v)) return v.length > 0;
126
107
  if (v instanceof Date) return !Number.isNaN(v.getTime());
127
- if (_typeof(v) === "object") return Object.keys(v).length > 0;
108
+ if (typeof v === "object") return Object.keys(v).length > 0;
128
109
  // numbers, booleans
129
110
  return true;
130
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useFormCompletionProgress.js","names":["useMemo","useFormCompletionProgress","_ref","values","requiredFields","_ref$optionalFields","optionalFields","required","Array","isArray","optional","filledRequired","filter","path","isFilled","getFieldValue","length","filledOptional","missingRequired","totalRequired","totalOptional","requiredPct","Math","round","overallFilled","overallTotal","overallPct","isCompleteRequired","obj","_typeof","undefined","parts","split","cur","_iterator","_createForOfIteratorHelper","_step","s","n","done","p","value","err","e","f","v","trim","Date","Number","isNaN","getTime","Object","keys"],"sources":["../../../../src/lib/v2/hooks/useFormCompletionProgress.ts"],"sourcesContent":["import { useMemo } from \"react\";\r\n\r\n/**\r\n * useFormCompletionProgress — derive required/overall completion\r\n * percentages from current form values and a declared field list.\r\n * Pure useMemo computation, no side effects.\r\n *\r\n * Usage:\r\n * import { v2 } from \"@portnet/ui\";\r\n * const { useFormCompletionProgress, ProgressBar } = v2;\r\n *\r\n * const REQUIRED = [\"typeAutorisation\", \"importer.id\", \"dateFinValidite\"];\r\n * const OPTIONAL = [\"referenceLicence\", \"region\"];\r\n *\r\n * const {\r\n * requiredPct,\r\n * overallPct,\r\n * isCompleteRequired,\r\n * missingRequired,\r\n * filledRequired,\r\n * totalRequired,\r\n * } = useFormCompletionProgress({\r\n * values: formik.values,\r\n * requiredFields: REQUIRED,\r\n * optionalFields: OPTIONAL,\r\n * });\r\n *\r\n * <ProgressBar value={requiredPct} />\r\n * <span>{filledRequired}/{totalRequired} requis</span>\r\n *\r\n * Field paths support dot notation for nested values:\r\n * \"importer.id\" → values.importer.id\r\n * \"articles\" → values.articles (array length checked)\r\n */\r\n\r\ntype FormCompletionProgressOptions<Values> = {\r\n values: Values;\r\n /** Field keys / dot-paths that are required. */\r\n requiredFields: string[];\r\n /** Field keys / dot-paths that are optional. */\r\n optionalFields?: string[];\r\n};\r\n\r\ntype FormCompletionProgress = {\r\n requiredPct: number;\r\n overallPct: number;\r\n filledRequired: number;\r\n totalRequired: number;\r\n filledOptional: number;\r\n totalOptional: number;\r\n isCompleteRequired: boolean;\r\n missingRequired: string[];\r\n};\r\n\r\nexport default function useFormCompletionProgress<Values>({\r\n values,\r\n requiredFields,\r\n optionalFields = [],\r\n}: FormCompletionProgressOptions<Values>): FormCompletionProgress {\r\n return useMemo(() => {\r\n const required = Array.isArray(requiredFields) ? requiredFields : [];\r\n const optional = Array.isArray(optionalFields) ? optionalFields : [];\r\n\r\n const filledRequired = required.filter((path) =>\r\n isFilled(getFieldValue(values, path))\r\n ).length;\r\n const filledOptional = optional.filter((path) =>\r\n isFilled(getFieldValue(values, path))\r\n ).length;\r\n\r\n const missingRequired = required.filter(\r\n (path) => !isFilled(getFieldValue(values, path))\r\n );\r\n\r\n const totalRequired = required.length;\r\n const totalOptional = optional.length;\r\n\r\n const requiredPct = totalRequired\r\n ? Math.round((filledRequired / totalRequired) * 100)\r\n : 100;\r\n\r\n const overallFilled = filledRequired + filledOptional;\r\n const overallTotal = totalRequired + totalOptional;\r\n const overallPct = overallTotal\r\n ? Math.round((overallFilled / overallTotal) * 100)\r\n : 0;\r\n\r\n return {\r\n requiredPct,\r\n overallPct,\r\n filledRequired,\r\n totalRequired,\r\n filledOptional,\r\n totalOptional,\r\n isCompleteRequired: totalRequired === 0 || filledRequired === totalRequired,\r\n missingRequired,\r\n };\r\n }, [values, requiredFields, optionalFields]);\r\n}\r\n\r\n/* ── Helpers ───────────────────────────── */\r\n\r\n/**\r\n * Resolves a dot-separated field path against a values object.\r\n * Returns undefined on any missing intermediate.\r\n *\r\n * getFieldValue({ a: { b: { c: 42 } } }, \"a.b.c\") → 42\r\n * getFieldValue({ a: null }, \"a.b.c\") → undefined\r\n * getFieldValue({}, \"doesNotExist\") → undefined\r\n */\r\nfunction getFieldValue(obj: unknown, path: string): unknown {\r\n if (!obj || typeof obj !== \"object\") return undefined;\r\n if (!path) return undefined;\r\n const parts = path.split(\".\");\r\n let cur: unknown = obj;\r\n for (const p of parts) {\r\n if (cur === null || cur === undefined) return undefined;\r\n if (typeof cur !== \"object\") return undefined;\r\n cur = (cur as Record<string, unknown>)[p];\r\n }\r\n return cur;\r\n}\r\n\r\n/**\r\n * Centralised \"is this value considered filled?\" check.\r\n *\r\n * Considered EMPTY:\r\n * - null, undefined\r\n * - \"\" or whitespace-only string\r\n * - empty array []\r\n * - empty plain object {}\r\n *\r\n * Considered FILLED (intentional):\r\n * - 0, false (valid user input distinct from \"unset\")\r\n * - any non-empty array, object with keys, string, number\r\n * - Date instances with valid time\r\n */\r\nfunction isFilled(v: unknown): boolean {\r\n if (v === null || v === undefined) return false;\r\n if (typeof v === \"string\") return v.trim().length > 0;\r\n if (Array.isArray(v)) return v.length > 0;\r\n if (v instanceof Date) return !Number.isNaN(v.getTime());\r\n if (typeof v === \"object\") return Object.keys(v).length > 0;\r\n // numbers, booleans\r\n return true;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useFormCompletionProgress.js","names":["useMemo","useFormCompletionProgress","values","requiredFields","optionalFields","required","Array","isArray","optional","filledRequired","filter","path","isFilled","getFieldValue","length","filledOptional","missingRequired","totalRequired","totalOptional","requiredPct","Math","round","overallFilled","overallTotal","overallPct","isCompleteRequired","obj","undefined","parts","split","cur","p","v","trim","Date","Number","isNaN","getTime","Object","keys"],"sources":["../../../../src/lib/v2/hooks/useFormCompletionProgress.ts"],"sourcesContent":["import { useMemo } from \"react\";\r\n\r\n/**\r\n * useFormCompletionProgress — derive required/overall completion\r\n * percentages from current form values and a declared field list.\r\n * Pure useMemo computation, no side effects.\r\n *\r\n * Usage:\r\n * import { v2 } from \"@portnet/ui\";\r\n * const { useFormCompletionProgress, ProgressBar } = v2;\r\n *\r\n * const REQUIRED = [\"typeAutorisation\", \"importer.id\", \"dateFinValidite\"];\r\n * const OPTIONAL = [\"referenceLicence\", \"region\"];\r\n *\r\n * const {\r\n * requiredPct,\r\n * overallPct,\r\n * isCompleteRequired,\r\n * missingRequired,\r\n * filledRequired,\r\n * totalRequired,\r\n * } = useFormCompletionProgress({\r\n * values: formik.values,\r\n * requiredFields: REQUIRED,\r\n * optionalFields: OPTIONAL,\r\n * });\r\n *\r\n * <ProgressBar value={requiredPct} />\r\n * <span>{filledRequired}/{totalRequired} requis</span>\r\n *\r\n * Field paths support dot notation for nested values:\r\n * \"importer.id\" → values.importer.id\r\n * \"articles\" → values.articles (array length checked)\r\n */\r\n\r\ntype FormCompletionProgressOptions<Values> = {\r\n values: Values;\r\n /** Field keys / dot-paths that are required. */\r\n requiredFields: string[];\r\n /** Field keys / dot-paths that are optional. */\r\n optionalFields?: string[] | undefined;\r\n};\r\n\r\ntype FormCompletionProgress = {\r\n requiredPct: number;\r\n overallPct: number;\r\n filledRequired: number;\r\n totalRequired: number;\r\n filledOptional: number;\r\n totalOptional: number;\r\n isCompleteRequired: boolean;\r\n missingRequired: string[];\r\n};\r\n\r\nexport default function useFormCompletionProgress<Values>({\r\n values,\r\n requiredFields,\r\n optionalFields = [],\r\n}: FormCompletionProgressOptions<Values>): FormCompletionProgress {\r\n return useMemo(() => {\r\n const required = Array.isArray(requiredFields) ? requiredFields : [];\r\n const optional = Array.isArray(optionalFields) ? optionalFields : [];\r\n\r\n const filledRequired = required.filter((path) =>\r\n isFilled(getFieldValue(values, path))\r\n ).length;\r\n const filledOptional = optional.filter((path) =>\r\n isFilled(getFieldValue(values, path))\r\n ).length;\r\n\r\n const missingRequired = required.filter(\r\n (path) => !isFilled(getFieldValue(values, path))\r\n );\r\n\r\n const totalRequired = required.length;\r\n const totalOptional = optional.length;\r\n\r\n const requiredPct = totalRequired\r\n ? Math.round((filledRequired / totalRequired) * 100)\r\n : 100;\r\n\r\n const overallFilled = filledRequired + filledOptional;\r\n const overallTotal = totalRequired + totalOptional;\r\n const overallPct = overallTotal\r\n ? Math.round((overallFilled / overallTotal) * 100)\r\n : 0;\r\n\r\n return {\r\n requiredPct,\r\n overallPct,\r\n filledRequired,\r\n totalRequired,\r\n filledOptional,\r\n totalOptional,\r\n isCompleteRequired: totalRequired === 0 || filledRequired === totalRequired,\r\n missingRequired,\r\n };\r\n }, [values, requiredFields, optionalFields]);\r\n}\r\n\r\n/* ── Helpers ───────────────────────────── */\r\n\r\n/**\r\n * Resolves a dot-separated field path against a values object.\r\n * Returns undefined on any missing intermediate.\r\n *\r\n * getFieldValue({ a: { b: { c: 42 } } }, \"a.b.c\") → 42\r\n * getFieldValue({ a: null }, \"a.b.c\") → undefined\r\n * getFieldValue({}, \"doesNotExist\") → undefined\r\n */\r\nfunction getFieldValue(obj: unknown, path: string): unknown {\r\n if (!obj || typeof obj !== \"object\") return undefined;\r\n if (!path) return undefined;\r\n const parts = path.split(\".\");\r\n let cur: unknown = obj;\r\n for (const p of parts) {\r\n if (cur === null || cur === undefined) return undefined;\r\n if (typeof cur !== \"object\") return undefined;\r\n cur = (cur as Record<string, unknown>)[p];\r\n }\r\n return cur;\r\n}\r\n\r\n/**\r\n * Centralised \"is this value considered filled?\" check.\r\n *\r\n * Considered EMPTY:\r\n * - null, undefined\r\n * - \"\" or whitespace-only string\r\n * - empty array []\r\n * - empty plain object {}\r\n *\r\n * Considered FILLED (intentional):\r\n * - 0, false (valid user input distinct from \"unset\")\r\n * - any non-empty array, object with keys, string, number\r\n * - Date instances with valid time\r\n */\r\nfunction isFilled(v: unknown): boolean {\r\n if (v === null || v === undefined) return false;\r\n if (typeof v === \"string\") return v.trim().length > 0;\r\n if (Array.isArray(v)) return v.length > 0;\r\n if (v instanceof Date) return !Number.isNaN(v.getTime());\r\n if (typeof v === \"object\") return Object.keys(v).length > 0;\r\n // numbers, booleans\r\n return true;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,125 @@
1
+ import * as React from "react";
2
+
3
+ /**
4
+ * useKeyboardShortcuts — Portnet UI v2 (hook)
5
+ *
6
+ * Raccourcis clavier de page. §Keyboard / R-K.1.
7
+ *
8
+ * ─────────────────────────────────────────────────────────────────────────────
9
+ * WHY THIS BELONGS IN THE LIBRARY (capability gap G-48)
10
+ *
11
+ * The library already owned BOTH ENDS of page shortcuts and not the listener
12
+ * between them:
13
+ *
14
+ * · `KeyboardShortcutsHelp` — the « ? » dialogue that LISTS the shortcuts;
15
+ * · `data-v2-overlay-open` on `<body>` — the signal the library SETS when a
16
+ * modal or drawer is open, and which shortcuts must respect.
17
+ *
18
+ * So a host wiring shortcuts had to write the middle itself, and `ms-ti-fe`
19
+ * did: a `keydown` effect plus `isShortcutBlockingTarget` (a set of eleven
20
+ * interactive ARIA roles, the tag list, `isContentEditable`, `tabIndex >= 0`)
21
+ * plus `isOverlayOpen` reading the library's own attribute back off the body.
22
+ * Forty lines of platform behaviour in a listing page.
23
+ *
24
+ * >>> THE OVERLAY GUARD IS THE REASON THIS CANNOT STAY IN A HOST. The library
25
+ * >>> is what SETS `data-v2-overlay-open`; a host reading it is a module
26
+ * >>> depending on an implementation detail of the component it renders. If
27
+ * >>> that attribute is ever renamed, every host that copied the guard breaks
28
+ * >>> SILENTLY — the shortcuts simply start firing behind open modals, which
29
+ * >>> nothing tests and nobody notices until a « n » keystroke inside a drawer
30
+ * >>> navigates the page away. Owning the listener here means the guard and
31
+ * >>> the signal are maintained together. <<<
32
+ *
33
+ * Raised from `addm-fe` (Area 14), whose listings carry a `searchInputRef`
34
+ * declared and passed to `DataGridToolbar` FOR the « / » shortcut — a wire
35
+ * waiting for a listener that was never written.
36
+ * ─────────────────────────────────────────────────────────────────────────────
37
+ *
38
+ * WHAT THE HOOK REFUSES TO FIRE ON, and why each case matters:
39
+ *
40
+ * · A MODIFIER is held (⌘/Ctrl/Alt). « n » is a shortcut; ⌘N is the
41
+ * browser's new window, and stealing it is worse than having no shortcut.
42
+ * · The target is an EDITABLE element — input, textarea, select,
43
+ * contenteditable. Typing « / » in a search box must insert a slash.
44
+ * · The target is otherwise INTERACTIVE — a button, a link, anything with an
45
+ * interactive ARIA role or a positive tabIndex. `Espace` on a focused
46
+ * button activates it; a page shortcut must not pre-empt that.
47
+ * · An OVERLAY is open. See the note above.
48
+ *
49
+ * `<main>` is excluded from the tabIndex test deliberately: a page shell gives
50
+ * `<main>` a `tabIndex` so a skip link can reach it, which would otherwise
51
+ * disable every shortcut for a user who just used the skip link.
52
+ *
53
+ * Usage:
54
+ *
55
+ * useKeyboardShortcuts([
56
+ * { keys: ["/"], onTrigger: () => searchRef.current?.focus() },
57
+ * { keys: ["n"], onTrigger: goToCreate, enabled: canCreate },
58
+ * { keys: ["1", "2", "3"], onTrigger: (key) => setBucket(BY_KEY[key]) },
59
+ * ]);
60
+ *
61
+ * The host keeps its own `KeyboardShortcutsHelp` list: this hook knows which
62
+ * keys DO something, not how to describe them to a user (§9.2 — the business
63
+ * wording belongs to the host).
64
+ */
65
+
66
+ /**
67
+ * Roles whose focused element handles its own keys. Kept here rather than in
68
+ * a host so the list is maintained once for the fleet.
69
+ */
70
+ const INTERACTIVE_ROLES = new Set(["button", "link", "tab", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "checkbox", "radio", "combobox", "searchbox", "textbox", "switch", "spinbutton", "slider"]);
71
+ const EDITABLE_TAGS = new Set(["INPUT", "TEXTAREA", "SELECT"]);
72
+ function isBlockingTarget(node) {
73
+ if (!node || node === document.body) return false;
74
+ if (!(node instanceof Element)) return false;
75
+ const tag = node.tagName;
76
+ if (EDITABLE_TAGS.has(tag)) return true;
77
+ if (tag === "BUTTON" || tag === "A") return true;
78
+ if (node instanceof HTMLElement && node.isContentEditable) return true;
79
+ const role = node.getAttribute("role");
80
+ if (role && INTERACTIVE_ROLES.has(role)) return true;
81
+
82
+ /* `MAIN` excluded — see the note in the file header on skip links. */
83
+ if (node instanceof HTMLElement && node.tabIndex >= 0 && tag !== "MAIN") {
84
+ return true;
85
+ }
86
+ return false;
87
+ }
88
+
89
+ /** Is a library overlay (modal / drawer) currently open? */
90
+ function isOverlayOpen() {
91
+ if (typeof document === "undefined") return false;
92
+ return document.body?.getAttribute("data-v2-overlay-open") === "true";
93
+ }
94
+ export function useKeyboardShortcuts(shortcuts, {
95
+ enabled = true
96
+ } = {}) {
97
+ /* The descriptor array is rebuilt on every host render (inline literal, in
98
+ * practice), so it is read through a ref instead of being an effect
99
+ * dependency — otherwise the listener detaches and reattaches on each
100
+ * render, and a keystroke could land between the two. */
101
+ const ref = React.useRef(shortcuts);
102
+ React.useEffect(() => {
103
+ ref.current = shortcuts;
104
+ }, [shortcuts]);
105
+ React.useEffect(() => {
106
+ if (!enabled || typeof window === "undefined") return undefined;
107
+ const onKeyDown = e => {
108
+ if (e.metaKey || e.ctrlKey || e.altKey) return;
109
+ if (isBlockingTarget(document.activeElement)) return;
110
+ if (isBlockingTarget(e.target)) return;
111
+ if (isOverlayOpen()) return;
112
+ for (const shortcut of ref.current) {
113
+ if (shortcut.enabled === false) continue;
114
+ if (!shortcut.keys.includes(e.key)) continue;
115
+ e.preventDefault();
116
+ shortcut.onTrigger(e.key);
117
+ return;
118
+ }
119
+ };
120
+ window.addEventListener("keydown", onKeyDown);
121
+ return () => window.removeEventListener("keydown", onKeyDown);
122
+ }, [enabled]);
123
+ }
124
+ export default useKeyboardShortcuts;
125
+ //# sourceMappingURL=useKeyboardShortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcuts.js","names":["React","INTERACTIVE_ROLES","Set","EDITABLE_TAGS","isBlockingTarget","node","document","body","Element","tag","tagName","has","HTMLElement","isContentEditable","role","getAttribute","tabIndex","isOverlayOpen","useKeyboardShortcuts","shortcuts","enabled","ref","useRef","useEffect","current","window","undefined","onKeyDown","e","metaKey","ctrlKey","altKey","activeElement","target","shortcut","keys","includes","key","preventDefault","onTrigger","addEventListener","removeEventListener"],"sources":["../../../../src/lib/v2/hooks/useKeyboardShortcuts.ts"],"sourcesContent":["import * as React from \"react\";\r\n\r\n/**\r\n * useKeyboardShortcuts — Portnet UI v2 (hook)\r\n *\r\n * Raccourcis clavier de page. §Keyboard / R-K.1.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-48)\r\n *\r\n * The library already owned BOTH ENDS of page shortcuts and not the listener\r\n * between them:\r\n *\r\n * · `KeyboardShortcutsHelp` — the « ? » dialogue that LISTS the shortcuts;\r\n * · `data-v2-overlay-open` on `<body>` — the signal the library SETS when a\r\n * modal or drawer is open, and which shortcuts must respect.\r\n *\r\n * So a host wiring shortcuts had to write the middle itself, and `ms-ti-fe`\r\n * did: a `keydown` effect plus `isShortcutBlockingTarget` (a set of eleven\r\n * interactive ARIA roles, the tag list, `isContentEditable`, `tabIndex >= 0`)\r\n * plus `isOverlayOpen` reading the library's own attribute back off the body.\r\n * Forty lines of platform behaviour in a listing page.\r\n *\r\n * >>> THE OVERLAY GUARD IS THE REASON THIS CANNOT STAY IN A HOST. The library\r\n * >>> is what SETS `data-v2-overlay-open`; a host reading it is a module\r\n * >>> depending on an implementation detail of the component it renders. If\r\n * >>> that attribute is ever renamed, every host that copied the guard breaks\r\n * >>> SILENTLY — the shortcuts simply start firing behind open modals, which\r\n * >>> nothing tests and nobody notices until a « n » keystroke inside a drawer\r\n * >>> navigates the page away. Owning the listener here means the guard and\r\n * >>> the signal are maintained together. <<<\r\n *\r\n * Raised from `addm-fe` (Area 14), whose listings carry a `searchInputRef`\r\n * declared and passed to `DataGridToolbar` FOR the « / » shortcut — a wire\r\n * waiting for a listener that was never written.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * WHAT THE HOOK REFUSES TO FIRE ON, and why each case matters:\r\n *\r\n * · A MODIFIER is held (⌘/Ctrl/Alt). « n » is a shortcut; ⌘N is the\r\n * browser's new window, and stealing it is worse than having no shortcut.\r\n * · The target is an EDITABLE element — input, textarea, select,\r\n * contenteditable. Typing « / » in a search box must insert a slash.\r\n * · The target is otherwise INTERACTIVE — a button, a link, anything with an\r\n * interactive ARIA role or a positive tabIndex. `Espace` on a focused\r\n * button activates it; a page shortcut must not pre-empt that.\r\n * · An OVERLAY is open. See the note above.\r\n *\r\n * `<main>` is excluded from the tabIndex test deliberately: a page shell gives\r\n * `<main>` a `tabIndex` so a skip link can reach it, which would otherwise\r\n * disable every shortcut for a user who just used the skip link.\r\n *\r\n * Usage:\r\n *\r\n * useKeyboardShortcuts([\r\n * { keys: [\"/\"], onTrigger: () => searchRef.current?.focus() },\r\n * { keys: [\"n\"], onTrigger: goToCreate, enabled: canCreate },\r\n * { keys: [\"1\", \"2\", \"3\"], onTrigger: (key) => setBucket(BY_KEY[key]) },\r\n * ]);\r\n *\r\n * The host keeps its own `KeyboardShortcutsHelp` list: this hook knows which\r\n * keys DO something, not how to describe them to a user (§9.2 — the business\r\n * wording belongs to the host).\r\n */\r\n\r\n/**\r\n * Roles whose focused element handles its own keys. Kept here rather than in\r\n * a host so the list is maintained once for the fleet.\r\n */\r\nconst INTERACTIVE_ROLES = new Set([\r\n \"button\",\r\n \"link\",\r\n \"tab\",\r\n \"menuitem\",\r\n \"menuitemcheckbox\",\r\n \"menuitemradio\",\r\n \"option\",\r\n \"checkbox\",\r\n \"radio\",\r\n \"combobox\",\r\n \"searchbox\",\r\n \"textbox\",\r\n \"switch\",\r\n \"spinbutton\",\r\n \"slider\",\r\n]);\r\n\r\nconst EDITABLE_TAGS = new Set([\"INPUT\", \"TEXTAREA\", \"SELECT\"]);\r\n\r\nfunction isBlockingTarget(node: EventTarget | null): boolean {\r\n if (!node || node === document.body) return false;\r\n if (!(node instanceof Element)) return false;\r\n\r\n const tag = node.tagName;\r\n if (EDITABLE_TAGS.has(tag)) return true;\r\n if (tag === \"BUTTON\" || tag === \"A\") return true;\r\n\r\n if (node instanceof HTMLElement && node.isContentEditable) return true;\r\n\r\n const role = node.getAttribute(\"role\");\r\n if (role && INTERACTIVE_ROLES.has(role)) return true;\r\n\r\n /* `MAIN` excluded — see the note in the file header on skip links. */\r\n if (node instanceof HTMLElement && node.tabIndex >= 0 && tag !== \"MAIN\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** Is a library overlay (modal / drawer) currently open? */\r\nfunction isOverlayOpen(): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n return document.body?.getAttribute(\"data-v2-overlay-open\") === \"true\";\r\n}\r\n\r\nexport interface KeyboardShortcut {\r\n /**\r\n * Keys that trigger it, as `KeyboardEvent.key` values — so `\"/\"`, `\"?\"`,\r\n * `\"1\"`, `\"n\"`. Case matters: `\"n\"` does not match `Shift+N`.\r\n */\r\n keys: readonly string[];\r\n /**\r\n * Receives the key that matched, so one descriptor can serve a range\r\n * (`[\"1\",\"2\",\"3\"]` → one handler that reads which was pressed).\r\n */\r\n onTrigger: (key: string) => void;\r\n /**\r\n * @default true — a shortcut gated on a permission stays DECLARED and\r\n * inactive rather than being spliced out of the array, so the descriptor\r\n * list keeps the same shape as the help dialogue's.\r\n */\r\n enabled?: boolean | undefined;\r\n}\r\n\r\nexport interface UseKeyboardShortcutsOptions {\r\n /** Suspends every shortcut at once. @default true */\r\n enabled?: boolean | undefined;\r\n}\r\n\r\nexport function useKeyboardShortcuts(\r\n shortcuts: readonly KeyboardShortcut[],\r\n { enabled = true }: UseKeyboardShortcutsOptions = {}\r\n): void {\r\n /* The descriptor array is rebuilt on every host render (inline literal, in\r\n * practice), so it is read through a ref instead of being an effect\r\n * dependency — otherwise the listener detaches and reattaches on each\r\n * render, and a keystroke could land between the two. */\r\n const ref = React.useRef(shortcuts);\r\n React.useEffect(() => {\r\n ref.current = shortcuts;\r\n }, [shortcuts]);\r\n\r\n React.useEffect(() => {\r\n if (!enabled || typeof window === \"undefined\") return undefined;\r\n\r\n const onKeyDown = (e: KeyboardEvent): void => {\r\n if (e.metaKey || e.ctrlKey || e.altKey) return;\r\n if (isBlockingTarget(document.activeElement)) return;\r\n if (isBlockingTarget(e.target)) return;\r\n if (isOverlayOpen()) return;\r\n\r\n for (const shortcut of ref.current) {\r\n if (shortcut.enabled === false) continue;\r\n if (!shortcut.keys.includes(e.key)) continue;\r\n e.preventDefault();\r\n shortcut.onTrigger(e.key);\r\n return;\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKeyDown);\r\n return () => window.removeEventListener(\"keydown\", onKeyDown);\r\n }, [enabled]);\r\n}\r\n\r\nexport default useKeyboardShortcuts;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAG,IAAIC,GAAG,CAAC,CAChC,QAAQ,EACR,MAAM,EACN,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,CACT,CAAC;AAEF,MAAMC,aAAa,GAAG,IAAID,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE9D,SAASE,gBAAgBA,CAACC,IAAwB,EAAW;EAC3D,IAAI,CAACA,IAAI,IAAIA,IAAI,KAAKC,QAAQ,CAACC,IAAI,EAAE,OAAO,KAAK;EACjD,IAAI,EAAEF,IAAI,YAAYG,OAAO,CAAC,EAAE,OAAO,KAAK;EAE5C,MAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO;EACxB,IAAIP,aAAa,CAACQ,GAAG,CAACF,GAAG,CAAC,EAAE,OAAO,IAAI;EACvC,IAAIA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,GAAG,EAAE,OAAO,IAAI;EAEhD,IAAIJ,IAAI,YAAYO,WAAW,IAAIP,IAAI,CAACQ,iBAAiB,EAAE,OAAO,IAAI;EAEtE,MAAMC,IAAI,GAAGT,IAAI,CAACU,YAAY,CAAC,MAAM,CAAC;EACtC,IAAID,IAAI,IAAIb,iBAAiB,CAACU,GAAG,CAACG,IAAI,CAAC,EAAE,OAAO,IAAI;;EAEpD;EACA,IAAIT,IAAI,YAAYO,WAAW,IAAIP,IAAI,CAACW,QAAQ,IAAI,CAAC,IAAIP,GAAG,KAAK,MAAM,EAAE;IACvE,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd;;AAEA;AACA,SAASQ,aAAaA,CAAA,EAAY;EAChC,IAAI,OAAOX,QAAQ,KAAK,WAAW,EAAE,OAAO,KAAK;EACjD,OAAOA,QAAQ,CAACC,IAAI,EAAEQ,YAAY,CAAC,sBAAsB,CAAC,KAAK,MAAM;AACvE;AA0BA,OAAO,SAASG,oBAAoBA,CAClCC,SAAsC,EACtC;EAAEC,OAAO,GAAG;AAAkC,CAAC,GAAG,CAAC,CAAC,EAC9C;EACN;AACF;AACA;AACA;EACE,MAAMC,GAAG,GAAGrB,KAAK,CAACsB,MAAM,CAACH,SAAS,CAAC;EACnCnB,KAAK,CAACuB,SAAS,CAAC,MAAM;IACpBF,GAAG,CAACG,OAAO,GAAGL,SAAS;EACzB,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEfnB,KAAK,CAACuB,SAAS,CAAC,MAAM;IACpB,IAAI,CAACH,OAAO,IAAI,OAAOK,MAAM,KAAK,WAAW,EAAE,OAAOC,SAAS;IAE/D,MAAMC,SAAS,GAAIC,CAAgB,IAAW;MAC5C,IAAIA,CAAC,CAACC,OAAO,IAAID,CAAC,CAACE,OAAO,IAAIF,CAAC,CAACG,MAAM,EAAE;MACxC,IAAI3B,gBAAgB,CAACE,QAAQ,CAAC0B,aAAa,CAAC,EAAE;MAC9C,IAAI5B,gBAAgB,CAACwB,CAAC,CAACK,MAAM,CAAC,EAAE;MAChC,IAAIhB,aAAa,CAAC,CAAC,EAAE;MAErB,KAAK,MAAMiB,QAAQ,IAAIb,GAAG,CAACG,OAAO,EAAE;QAClC,IAAIU,QAAQ,CAACd,OAAO,KAAK,KAAK,EAAE;QAChC,IAAI,CAACc,QAAQ,CAACC,IAAI,CAACC,QAAQ,CAACR,CAAC,CAACS,GAAG,CAAC,EAAE;QACpCT,CAAC,CAACU,cAAc,CAAC,CAAC;QAClBJ,QAAQ,CAACK,SAAS,CAACX,CAAC,CAACS,GAAG,CAAC;QACzB;MACF;IACF,CAAC;IAEDZ,MAAM,CAACe,gBAAgB,CAAC,SAAS,EAAEb,SAAS,CAAC;IAC7C,OAAO,MAAMF,MAAM,CAACgB,mBAAmB,CAAC,SAAS,EAAEd,SAAS,CAAC;EAC/D,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;AACf;AAEA,eAAeF,oBAAoB","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ import { useSyncExternalStore } from "react";
2
+
3
+ /**
4
+ * usePrefersReducedMotion — Portnet UI v2
5
+ *
6
+ * `true` when the user has asked the system to reduce motion.
7
+ *
8
+ * const reduced = usePrefersReducedMotion();
9
+ * const options = { chart: { animation: !reduced } };
10
+ *
11
+ * ─────────────────────────────────────────────────────────────────────────────
12
+ * WHY THIS BELONGS IN THE LIBRARY (capability gap G-49)
13
+ *
14
+ * R-7.5 / R-Tg.2 MUST: `prefers-reduced-motion` is respected — animations
15
+ * ≤ 0.01 ms or none. The library already honours the rule everywhere IT owns
16
+ * the animation: `motion.ts` documents it, the base stylesheet carries the
17
+ * media query, `Skeleton` drops its shimmer (R-Sk.4).
18
+ *
19
+ * What was missing is the RUNTIME READ. A host that animates something the
20
+ * library does not own — a chart, a canvas, an imperative scroll, a
21
+ * third-party widget configured in JS — cannot reach the preference through
22
+ * CSS, because the decision is a JS value handed to another library. Every
23
+ * such host wrote the same helper, and every copy observed so far carried the
24
+ * SAME TWO DEFECTS:
25
+ *
26
+ * const prefersReducedMotion = (): boolean =>
27
+ * typeof window !== "undefined" &&
28
+ * typeof window.matchMedia === "function" &&
29
+ * window.matchMedia("(prefers-reduced-motion: reduce)").matches;
30
+ *
31
+ * 1. IT DOES NOT SUBSCRIBE. `matchMedia(...).matches` is read once, during a
32
+ * render that may never happen again. A user who turns the preference ON
33
+ * — which is exactly what someone does when motion starts to hurt — keeps
34
+ * the animations until something unrelated re-renders the screen. The
35
+ * rule is written in the present tense; a snapshot satisfies it by luck.
36
+ * 2. IT IS READ DURING RENDER, so the value is not part of React's state at
37
+ * all: two components on one page can disagree, and nothing reconciles
38
+ * them.
39
+ *
40
+ * `useSyncExternalStore` fixes both at once, and is the primitive React
41
+ * publishes for precisely this shape — an external, subscribable source of
42
+ * truth. It also supplies a correct server snapshot instead of a
43
+ * `typeof window` guard copied into every call site.
44
+ *
45
+ * Relevé depuis `autorisation-admis-pour-conforme-fe` (Area 4 — détection
46
+ * d'infrastructure UI locale), où le helper ci-dessus existait en TROIS copies
47
+ * identiques, une par écran de bilan, chacune appelée depuis un `useMemo` ou
48
+ * depuis une fabrique d'options au niveau module.
49
+ * ─────────────────────────────────────────────────────────────────────────────
50
+ *
51
+ * REDUCED MOTION IS NOT AN ACCESSIBILITY CERTIFICATE. A chart that stops
52
+ * animating is still a chart that owes a text equivalent (WCAG 1.1.1), and a
53
+ * transition under 200 ms still owes R-Mi.1 its justification.
54
+ */
55
+
56
+ /** The media query, exported so a consumer can assert on it in a test. */
57
+ export const PREFERS_REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
58
+
59
+ /**
60
+ * `null` in any environment without `matchMedia` — server rendering, and the
61
+ * older jsdom versions where the method is simply absent. Callers treat that
62
+ * as "no stated preference", the same default the CSS media query has.
63
+ */
64
+ function getMediaQueryList() {
65
+ if (typeof window === "undefined") return null;
66
+ if (typeof window.matchMedia !== "function") return null;
67
+ return window.matchMedia(PREFERS_REDUCED_MOTION_QUERY);
68
+ }
69
+ function subscribe(onStoreChange) {
70
+ const mql = getMediaQueryList();
71
+ if (mql === null) return () => undefined;
72
+
73
+ /* Safari 13 / iOS 12 ship `addListener` but not `addEventListener` on
74
+ * MediaQueryList. Both paths are kept: the browserslist floor is Safari 17,
75
+ * but this hook is also what a host reaches for inside a webview it does not
76
+ * choose, and the fallback costs two lines. */
77
+ if (typeof mql.addEventListener === "function") {
78
+ mql.addEventListener("change", onStoreChange);
79
+ return () => mql.removeEventListener("change", onStoreChange);
80
+ }
81
+ mql.addListener(onStoreChange);
82
+ return () => mql.removeListener(onStoreChange);
83
+ }
84
+ function getSnapshot() {
85
+ return getMediaQueryList()?.matches ?? false;
86
+ }
87
+
88
+ /**
89
+ * Server snapshot — `false`, and NOT the client default in disguise: a server
90
+ * has no user preference to read, and hydration corrects the value before
91
+ * paint, so nothing animates against the user's wish.
92
+ */
93
+ function getServerSnapshot() {
94
+ return false;
95
+ }
96
+ export default function usePrefersReducedMotion() {
97
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
98
+ }
99
+ //# sourceMappingURL=usePrefersReducedMotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersReducedMotion.js","names":["useSyncExternalStore","PREFERS_REDUCED_MOTION_QUERY","getMediaQueryList","window","matchMedia","subscribe","onStoreChange","mql","undefined","addEventListener","removeEventListener","addListener","removeListener","getSnapshot","matches","getServerSnapshot","usePrefersReducedMotion"],"sources":["../../../../src/lib/v2/hooks/usePrefersReducedMotion.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\r\n\r\n/**\r\n * usePrefersReducedMotion — Portnet UI v2\r\n *\r\n * `true` when the user has asked the system to reduce motion.\r\n *\r\n * const reduced = usePrefersReducedMotion();\r\n * const options = { chart: { animation: !reduced } };\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-49)\r\n *\r\n * R-7.5 / R-Tg.2 MUST: `prefers-reduced-motion` is respected — animations\r\n * ≤ 0.01 ms or none. The library already honours the rule everywhere IT owns\r\n * the animation: `motion.ts` documents it, the base stylesheet carries the\r\n * media query, `Skeleton` drops its shimmer (R-Sk.4).\r\n *\r\n * What was missing is the RUNTIME READ. A host that animates something the\r\n * library does not own — a chart, a canvas, an imperative scroll, a\r\n * third-party widget configured in JS — cannot reach the preference through\r\n * CSS, because the decision is a JS value handed to another library. Every\r\n * such host wrote the same helper, and every copy observed so far carried the\r\n * SAME TWO DEFECTS:\r\n *\r\n * const prefersReducedMotion = (): boolean =>\r\n * typeof window !== \"undefined\" &&\r\n * typeof window.matchMedia === \"function\" &&\r\n * window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\r\n *\r\n * 1. IT DOES NOT SUBSCRIBE. `matchMedia(...).matches` is read once, during a\r\n * render that may never happen again. A user who turns the preference ON\r\n * — which is exactly what someone does when motion starts to hurt — keeps\r\n * the animations until something unrelated re-renders the screen. The\r\n * rule is written in the present tense; a snapshot satisfies it by luck.\r\n * 2. IT IS READ DURING RENDER, so the value is not part of React's state at\r\n * all: two components on one page can disagree, and nothing reconciles\r\n * them.\r\n *\r\n * `useSyncExternalStore` fixes both at once, and is the primitive React\r\n * publishes for precisely this shape — an external, subscribable source of\r\n * truth. It also supplies a correct server snapshot instead of a\r\n * `typeof window` guard copied into every call site.\r\n *\r\n * Relevé depuis `autorisation-admis-pour-conforme-fe` (Area 4 — détection\r\n * d'infrastructure UI locale), où le helper ci-dessus existait en TROIS copies\r\n * identiques, une par écran de bilan, chacune appelée depuis un `useMemo` ou\r\n * depuis une fabrique d'options au niveau module.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * REDUCED MOTION IS NOT AN ACCESSIBILITY CERTIFICATE. A chart that stops\r\n * animating is still a chart that owes a text equivalent (WCAG 1.1.1), and a\r\n * transition under 200 ms still owes R-Mi.1 its justification.\r\n */\r\n\r\n/** The media query, exported so a consumer can assert on it in a test. */\r\nexport const PREFERS_REDUCED_MOTION_QUERY = \"(prefers-reduced-motion: reduce)\";\r\n\r\n/**\r\n * `null` in any environment without `matchMedia` — server rendering, and the\r\n * older jsdom versions where the method is simply absent. Callers treat that\r\n * as \"no stated preference\", the same default the CSS media query has.\r\n */\r\nfunction getMediaQueryList(): MediaQueryList | null {\r\n if (typeof window === \"undefined\") return null;\r\n if (typeof window.matchMedia !== \"function\") return null;\r\n return window.matchMedia(PREFERS_REDUCED_MOTION_QUERY);\r\n}\r\n\r\nfunction subscribe(onStoreChange: () => void): () => void {\r\n const mql = getMediaQueryList();\r\n if (mql === null) return () => undefined;\r\n\r\n /* Safari 13 / iOS 12 ship `addListener` but not `addEventListener` on\r\n * MediaQueryList. Both paths are kept: the browserslist floor is Safari 17,\r\n * but this hook is also what a host reaches for inside a webview it does not\r\n * choose, and the fallback costs two lines. */\r\n if (typeof mql.addEventListener === \"function\") {\r\n mql.addEventListener(\"change\", onStoreChange);\r\n return () => mql.removeEventListener(\"change\", onStoreChange);\r\n }\r\n\r\n mql.addListener(onStoreChange);\r\n return () => mql.removeListener(onStoreChange);\r\n}\r\n\r\nfunction getSnapshot(): boolean {\r\n return getMediaQueryList()?.matches ?? false;\r\n}\r\n\r\n/**\r\n * Server snapshot — `false`, and NOT the client default in disguise: a server\r\n * has no user preference to read, and hydration corrects the value before\r\n * paint, so nothing animates against the user's wish.\r\n */\r\nfunction getServerSnapshot(): boolean {\r\n return false;\r\n}\r\n\r\nexport default function usePrefersReducedMotion(): boolean {\r\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\r\n}\r\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,OAAO;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMC,4BAA4B,GAAG,kCAAkC;;AAE9E;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAAA,EAA0B;EAClD,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE,OAAO,IAAI;EAC9C,IAAI,OAAOA,MAAM,CAACC,UAAU,KAAK,UAAU,EAAE,OAAO,IAAI;EACxD,OAAOD,MAAM,CAACC,UAAU,CAACH,4BAA4B,CAAC;AACxD;AAEA,SAASI,SAASA,CAACC,aAAyB,EAAc;EACxD,MAAMC,GAAG,GAAGL,iBAAiB,CAAC,CAAC;EAC/B,IAAIK,GAAG,KAAK,IAAI,EAAE,OAAO,MAAMC,SAAS;;EAExC;AACF;AACA;AACA;EACE,IAAI,OAAOD,GAAG,CAACE,gBAAgB,KAAK,UAAU,EAAE;IAC9CF,GAAG,CAACE,gBAAgB,CAAC,QAAQ,EAAEH,aAAa,CAAC;IAC7C,OAAO,MAAMC,GAAG,CAACG,mBAAmB,CAAC,QAAQ,EAAEJ,aAAa,CAAC;EAC/D;EAEAC,GAAG,CAACI,WAAW,CAACL,aAAa,CAAC;EAC9B,OAAO,MAAMC,GAAG,CAACK,cAAc,CAACN,aAAa,CAAC;AAChD;AAEA,SAASO,WAAWA,CAAA,EAAY;EAC9B,OAAOX,iBAAiB,CAAC,CAAC,EAAEY,OAAO,IAAI,KAAK;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAAA,EAAY;EACpC,OAAO,KAAK;AACd;AAEA,eAAe,SAASC,uBAAuBA,CAAA,EAAY;EACzD,OAAOhB,oBAAoB,CAACK,SAAS,EAAEQ,WAAW,EAAEE,iBAAiB,CAAC;AACxE","ignoreList":[]}
@@ -1,9 +1,3 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- 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); }
4
- 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; }
5
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
1
  import useDensity from "./useDensity";
8
2
 
9
3
  /**
@@ -33,11 +27,9 @@ import useDensity from "./useDensity";
33
27
  * <DataGrid density={effective} … />
34
28
  */
35
29
 
36
- var VALID = new Set(["comfortable", "compact"]);
30
+ const VALID = new Set(["comfortable", "compact"]);
37
31
  export default function useResolvedDensity(propValue) {
38
- var _useDensity = useDensity(),
39
- _useDensity2 = _slicedToArray(_useDensity, 1),
40
- globalDensity = _useDensity2[0];
32
+ const [globalDensity] = useDensity();
41
33
  if (propValue !== undefined && VALID.has(propValue)) return propValue;
42
34
  return globalDensity;
43
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useResolvedDensity.js","names":["useDensity","VALID","Set","useResolvedDensity","propValue","_useDensity","_useDensity2","_slicedToArray","globalDensity","undefined","has"],"sources":["../../../../src/lib/v2/hooks/useResolvedDensity.ts"],"sourcesContent":["import useDensity from \"./useDensity\";\r\n\r\n/**\r\n * useResolvedDensity — Portnet UI v2\r\n *\r\n * Returns the effective density for a component instance, applying\r\n * the standard resolution order used across the v2 surface:\r\n *\r\n * (1) explicit `propValue` from the caller (component prop)\r\n * (2) the global user preference from useDensity()\r\n * (3) fallback \"comfortable\"\r\n *\r\n * Use this in any component that wants to honour the user-level\r\n * density preference BY DEFAULT but still allow a caller to force\r\n * an override per instance — e.g. a picker dialog that always\r\n * wants \"compact\" regardless of the global preference, or a key\r\n * report that always wants \"comfortable\" for legibility.\r\n *\r\n * The hook always subscribes to useDensity() so the component\r\n * re-renders correctly when the user toggles the global density\r\n * (same tab via setter, other tab via storage event). The prop\r\n * simply wins on the resolved value when it's a valid density.\r\n *\r\n * Charter R-9.5 / R-DG.11.\r\n *\r\n * const effective = useResolvedDensity(props.density);\r\n * <DataGrid density={effective} … />\r\n */\r\n\r\ntype DensityPref = ReturnType<typeof useDensity>[0];\r\n\r\nconst VALID = new Set([\"comfortable\", \"compact\"]);\r\n\r\nexport default function useResolvedDensity(propValue?: DensityPref): DensityPref {\r\n const [globalDensity] = useDensity();\r\n if (propValue !== undefined && VALID.has(propValue)) return propValue;\r\n return globalDensity;\r\n}\r\n"],"mappings":";;;;;;AAAA,OAAOA,UAAU,MAAM,cAAc;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,IAAMC,KAAK,GAAG,IAAIC,GAAG,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAEjD,eAAe,SAASC,kBAAkBA,CAACC,SAAuB,EAAe;EAC/E,IAAAC,WAAA,GAAwBL,UAAU,CAAC,CAAC;IAAAM,YAAA,GAAAC,cAAA,CAAAF,WAAA;IAA7BG,aAAa,GAAAF,YAAA;EACpB,IAAIF,SAAS,KAAKK,SAAS,IAAIR,KAAK,CAACS,GAAG,CAACN,SAAS,CAAC,EAAE,OAAOA,SAAS;EACrE,OAAOI,aAAa;AACtB","ignoreList":[]}
1
+ {"version":3,"file":"useResolvedDensity.js","names":["useDensity","VALID","Set","useResolvedDensity","propValue","globalDensity","undefined","has"],"sources":["../../../../src/lib/v2/hooks/useResolvedDensity.ts"],"sourcesContent":["import useDensity from \"./useDensity\";\r\n\r\n/**\r\n * useResolvedDensity — Portnet UI v2\r\n *\r\n * Returns the effective density for a component instance, applying\r\n * the standard resolution order used across the v2 surface:\r\n *\r\n * (1) explicit `propValue` from the caller (component prop)\r\n * (2) the global user preference from useDensity()\r\n * (3) fallback \"comfortable\"\r\n *\r\n * Use this in any component that wants to honour the user-level\r\n * density preference BY DEFAULT but still allow a caller to force\r\n * an override per instance — e.g. a picker dialog that always\r\n * wants \"compact\" regardless of the global preference, or a key\r\n * report that always wants \"comfortable\" for legibility.\r\n *\r\n * The hook always subscribes to useDensity() so the component\r\n * re-renders correctly when the user toggles the global density\r\n * (same tab via setter, other tab via storage event). The prop\r\n * simply wins on the resolved value when it's a valid density.\r\n *\r\n * Charter R-9.5 / R-DG.11.\r\n *\r\n * const effective = useResolvedDensity(props.density);\r\n * <DataGrid density={effective} … />\r\n */\r\n\r\ntype DensityPref = ReturnType<typeof useDensity>[0];\r\n\r\nconst VALID = new Set([\"comfortable\", \"compact\"]);\r\n\r\nexport default function useResolvedDensity(propValue?: DensityPref): DensityPref {\r\n const [globalDensity] = useDensity();\r\n if (propValue !== undefined && VALID.has(propValue)) return propValue;\r\n return globalDensity;\r\n}\r\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,cAAc;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAEjD,eAAe,SAASC,kBAAkBA,CAACC,SAAuB,EAAe;EAC/E,MAAM,CAACC,aAAa,CAAC,GAAGL,UAAU,CAAC,CAAC;EACpC,IAAII,SAAS,KAAKE,SAAS,IAAIL,KAAK,CAACM,GAAG,CAACH,SAAS,CAAC,EAAE,OAAOA,SAAS;EACrE,OAAOC,aAAa;AACtB","ignoreList":[]}
@@ -23,10 +23,8 @@ import { applySort } from "../patterns/_sort";
23
23
  * @returns A new sorted array (or the same reference when there's nothing to sort).
24
24
  */
25
25
  export default function useSortedRows(rows, sort, locale) {
26
- return useMemo(function () {
27
- return applySort(rows, sort, locale === undefined ? {} : {
28
- locale: locale
29
- });
30
- }, [rows, sort, locale]);
26
+ return useMemo(() => applySort(rows, sort, locale === undefined ? {} : {
27
+ locale
28
+ }), [rows, sort, locale]);
31
29
  }
32
30
  //# sourceMappingURL=useSortedRows.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSortedRows.js","names":["useMemo","applySort","useSortedRows","rows","sort","locale","undefined"],"sources":["../../../../src/lib/v2/hooks/useSortedRows.ts"],"sourcesContent":["import { useMemo } from \"react\";\r\nimport { applySort } from \"../patterns/_sort\";\r\nimport type { SortDescriptor } from \"../types/common\";\r\n\r\n/**\r\n * useSortedRows — Portnet UI v2\r\n *\r\n * Memoised, locale-aware sort. Wraps `applySort` (Batch 12 / C1) with a\r\n * useMemo so consumers don't have to wire the dependency array themselves.\r\n *\r\n * const [sort, setSort] = useState<SortDescriptor[]>([{ key: \"date\", dir: \"desc\" }]);\r\n * const sortedRows = useSortedRows(rows, sort, \"fr-FR\");\r\n * <DataGrid rows={sortedRows} sort={sort} onSortChange={setSort} ... />\r\n *\r\n * Re-runs when:\r\n * - `rows` reference changes (host responsibility — pass a stable ref\r\n * when the data hasn't actually changed, otherwise the sort\r\n * runs every render).\r\n * - `sort` reference changes.\r\n * - `locale` value changes (string compare).\r\n *\r\n * For server-side sorting, skip this hook and pass already-sorted rows\r\n * straight to DataGrid.\r\n *\r\n * @returns A new sorted array (or the same reference when there's nothing to sort).\r\n */\r\nexport default function useSortedRows<T extends object>(\r\n rows: T[],\r\n sort: SortDescriptor[],\r\n locale?: string,\r\n): T[] {\r\n return useMemo(\r\n () => applySort(rows, sort, locale === undefined ? {} : { locale }),\r\n [rows, sort, locale],\r\n );\r\n}\r\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,QAAQ,mBAAmB;AAG7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CACnCC,IAAS,EACTC,IAAsB,EACtBC,MAAe,EACV;EACL,OAAOL,OAAO,CACZ;IAAA,OAAMC,SAAS,CAACE,IAAI,EAAEC,IAAI,EAAEC,MAAM,KAAKC,SAAS,GAAG,CAAC,CAAC,GAAG;MAAED,MAAM,EAANA;IAAO,CAAC,CAAC;EAAA,GACnE,CAACF,IAAI,EAAEC,IAAI,EAAEC,MAAM,CACrB,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"useSortedRows.js","names":["useMemo","applySort","useSortedRows","rows","sort","locale","undefined"],"sources":["../../../../src/lib/v2/hooks/useSortedRows.ts"],"sourcesContent":["import { useMemo } from \"react\";\r\nimport { applySort } from \"../patterns/_sort\";\r\nimport type { SortDescriptor } from \"../types/common\";\r\n\r\n/**\r\n * useSortedRows — Portnet UI v2\r\n *\r\n * Memoised, locale-aware sort. Wraps `applySort` (Batch 12 / C1) with a\r\n * useMemo so consumers don't have to wire the dependency array themselves.\r\n *\r\n * const [sort, setSort] = useState<SortDescriptor[]>([{ key: \"date\", dir: \"desc\" }]);\r\n * const sortedRows = useSortedRows(rows, sort, \"fr-FR\");\r\n * <DataGrid rows={sortedRows} sort={sort} onSortChange={setSort} ... />\r\n *\r\n * Re-runs when:\r\n * - `rows` reference changes (host responsibility — pass a stable ref\r\n * when the data hasn't actually changed, otherwise the sort\r\n * runs every render).\r\n * - `sort` reference changes.\r\n * - `locale` value changes (string compare).\r\n *\r\n * For server-side sorting, skip this hook and pass already-sorted rows\r\n * straight to DataGrid.\r\n *\r\n * @returns A new sorted array (or the same reference when there's nothing to sort).\r\n */\r\nexport default function useSortedRows<T extends object>(\r\n rows: T[],\r\n sort: SortDescriptor[],\r\n locale?: string,\r\n): T[] {\r\n return useMemo(\r\n () => applySort(rows, sort, locale === undefined ? {} : { locale }),\r\n [rows, sort, locale],\r\n );\r\n}\r\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,QAAQ,mBAAmB;AAG7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CACnCC,IAAS,EACTC,IAAsB,EACtBC,MAAe,EACV;EACL,OAAOL,OAAO,CACZ,MAAMC,SAAS,CAACE,IAAI,EAAEC,IAAI,EAAEC,MAAM,KAAKC,SAAS,GAAG,CAAC,CAAC,GAAG;IAAED;EAAO,CAAC,CAAC,EACnE,CAACF,IAAI,EAAEC,IAAI,EAAEC,MAAM,CACrB,CAAC;AACH","ignoreList":[]}
@@ -1,9 +1,3 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- 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); }
4
- 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; }
5
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
1
  import { useState, useEffect } from "react";
8
2
 
9
3
  /**
@@ -11,7 +5,7 @@ import { useState, useEffect } from "react";
11
5
  * skeleton would only flicker into view; above it, the user
12
6
  * perceives a stall and benefits from the visual cue.
13
7
  */
14
- export var PERCEPTION_THRESHOLD_MS = 200;
8
+ export const PERCEPTION_THRESHOLD_MS = 200;
15
9
 
16
10
  /**
17
11
  * useTabLoading — Portnet UI v2
@@ -44,14 +38,9 @@ export var PERCEPTION_THRESHOLD_MS = 200;
44
38
  * }, [tab]);
45
39
  * const showSkeleton = useTabLoading(tab, PERCEPTION_THRESHOLD_MS, fetching);
46
40
  */
47
- export default function useTabLoading(tab) {
48
- var ms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : PERCEPTION_THRESHOLD_MS;
49
- var enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
50
- var _useState = useState(false),
51
- _useState2 = _slicedToArray(_useState, 2),
52
- loading = _useState2[0],
53
- setLoading = _useState2[1];
54
- useEffect(function () {
41
+ export default function useTabLoading(tab, ms = PERCEPTION_THRESHOLD_MS, enabled = false) {
42
+ const [loading, setLoading] = useState(false);
43
+ useEffect(() => {
55
44
  if (!enabled) {
56
45
  // Fetch finished (or never started) — drop any in-flight skeleton.
57
46
  setLoading(false);
@@ -60,9 +49,7 @@ export default function useTabLoading(tab) {
60
49
  // R-Sk.1 — DELAY showing the skeleton until the perception threshold.
61
50
  // If the fetch resolves before then, cleanup clears the timer and
62
51
  // the skeleton never flickers in.
63
- var t = setTimeout(function () {
64
- return setLoading(true);
65
- }, ms);
52
+ const t = setTimeout(() => setLoading(true), ms);
66
53
 
67
54
  // CRITICAL: cleanup ONLY clears the pending timer. We do NOT reset
68
55
  // `loading` to false here, otherwise tab changes while still
@@ -70,9 +57,7 @@ export default function useTabLoading(tab) {
70
57
  // 200 ms blank flicker between skeletons. The reset path is the
71
58
  // `!enabled` branch above, which fires precisely when loading
72
59
  // actually ends.
73
- return function () {
74
- return clearTimeout(t);
75
- };
60
+ return () => clearTimeout(t);
76
61
  }, [tab, ms, enabled]);
77
62
  return loading;
78
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useTabLoading.js","names":["useState","useEffect","PERCEPTION_THRESHOLD_MS","useTabLoading","tab","ms","arguments","length","undefined","enabled","_useState","_useState2","_slicedToArray","loading","setLoading","t","setTimeout","clearTimeout"],"sources":["../../../../src/lib/v2/hooks/useTabLoading.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\r\n\r\n/**\r\n * Charter R-Sk.1 — \"perception threshold\". Below this delay, a\r\n * skeleton would only flicker into view; above it, the user\r\n * perceives a stall and benefits from the visual cue.\r\n */\r\nexport const PERCEPTION_THRESHOLD_MS = 200;\r\n\r\n/**\r\n * useTabLoading — Portnet UI v2\r\n *\r\n * Skeleton-display gate that respects the 200 ms perception threshold.\r\n *\r\n * Charter R-Sk.1 — \"Skeleton displayed if loading > 200 ms; otherwise\r\n * nothing (perception)\". For fetches faster than 200 ms, this hook\r\n * never returns true — the user sees the data land directly with no\r\n * flicker. For fetches slower than 200 ms, the skeleton appears at\r\n * the threshold and stays until the fetch completes.\r\n *\r\n * Caller contract\r\n * - Drive `enabled` from your real loading state (true while a\r\n * fetch is in flight, false otherwise).\r\n * - The hook returns true ONLY when `enabled` has been true for\r\n * at least `ms` ms, and is reset to false the moment `enabled`\r\n * flips back to false.\r\n * - On tab change while still loading, the previous timer is\r\n * cancelled and a fresh one scheduled — but the existing\r\n * skeleton-visible state is PRESERVED (loading stays true if\r\n * it was already true). Without this, fast tab swapping\r\n * produced 200 ms blank flickers between consecutive skeletons.\r\n *\r\n * Example\r\n * const [fetching, setFetching] = useState(false);\r\n * useEffect(() => {\r\n * setFetching(true);\r\n * fetchTabData(tab).finally(() => setFetching(false));\r\n * }, [tab]);\r\n * const showSkeleton = useTabLoading(tab, PERCEPTION_THRESHOLD_MS, fetching);\r\n */\r\nexport default function useTabLoading(\r\n tab: string | number,\r\n ms: number = PERCEPTION_THRESHOLD_MS,\r\n enabled: boolean = false\r\n): boolean {\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n // Fetch finished (or never started) — drop any in-flight skeleton.\r\n setLoading(false);\r\n return undefined;\r\n }\r\n // R-Sk.1 — DELAY showing the skeleton until the perception threshold.\r\n // If the fetch resolves before then, cleanup clears the timer and\r\n // the skeleton never flickers in.\r\n const t = setTimeout(() => setLoading(true), ms);\r\n\r\n // CRITICAL: cleanup ONLY clears the pending timer. We do NOT reset\r\n // `loading` to false here, otherwise tab changes while still\r\n // fetching (both old and new tab loading) produced a visible\r\n // 200 ms blank flicker between skeletons. The reset path is the\r\n // `!enabled` branch above, which fires precisely when loading\r\n // actually ends.\r\n return () => clearTimeout(t);\r\n }, [tab, ms, enabled]);\r\n\r\n return loading;\r\n}\r\n"],"mappings":";;;;;;AAAA,SAASA,QAAQ,EAAEC,SAAS,QAAQ,OAAO;;AAE3C;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,uBAAuB,GAAG,GAAG;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CACnCC,GAAoB,EAGX;EAAA,IAFTC,EAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGJ,uBAAuB;EAAA,IACpCO,OAAgB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAExB,IAAAI,SAAA,GAA8BV,QAAQ,CAAC,KAAK,CAAC;IAAAW,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAtCG,OAAO,GAAAF,UAAA;IAAEG,UAAU,GAAAH,UAAA;EAE1BV,SAAS,CAAC,YAAM;IACd,IAAI,CAACQ,OAAO,EAAE;MACZ;MACAK,UAAU,CAAC,KAAK,CAAC;MACjB,OAAON,SAAS;IAClB;IACA;IACA;IACA;IACA,IAAMO,CAAC,GAAGC,UAAU,CAAC;MAAA,OAAMF,UAAU,CAAC,IAAI,CAAC;IAAA,GAAET,EAAE,CAAC;;IAEhD;IACA;IACA;IACA;IACA;IACA;IACA,OAAO;MAAA,OAAMY,YAAY,CAACF,CAAC,CAAC;IAAA;EAC9B,CAAC,EAAE,CAACX,GAAG,EAAEC,EAAE,EAAEI,OAAO,CAAC,CAAC;EAEtB,OAAOI,OAAO;AAChB","ignoreList":[]}
1
+ {"version":3,"file":"useTabLoading.js","names":["useState","useEffect","PERCEPTION_THRESHOLD_MS","useTabLoading","tab","ms","enabled","loading","setLoading","undefined","t","setTimeout","clearTimeout"],"sources":["../../../../src/lib/v2/hooks/useTabLoading.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\r\n\r\n/**\r\n * Charter R-Sk.1 — \"perception threshold\". Below this delay, a\r\n * skeleton would only flicker into view; above it, the user\r\n * perceives a stall and benefits from the visual cue.\r\n */\r\nexport const PERCEPTION_THRESHOLD_MS = 200;\r\n\r\n/**\r\n * useTabLoading — Portnet UI v2\r\n *\r\n * Skeleton-display gate that respects the 200 ms perception threshold.\r\n *\r\n * Charter R-Sk.1 — \"Skeleton displayed if loading > 200 ms; otherwise\r\n * nothing (perception)\". For fetches faster than 200 ms, this hook\r\n * never returns true — the user sees the data land directly with no\r\n * flicker. For fetches slower than 200 ms, the skeleton appears at\r\n * the threshold and stays until the fetch completes.\r\n *\r\n * Caller contract\r\n * - Drive `enabled` from your real loading state (true while a\r\n * fetch is in flight, false otherwise).\r\n * - The hook returns true ONLY when `enabled` has been true for\r\n * at least `ms` ms, and is reset to false the moment `enabled`\r\n * flips back to false.\r\n * - On tab change while still loading, the previous timer is\r\n * cancelled and a fresh one scheduled — but the existing\r\n * skeleton-visible state is PRESERVED (loading stays true if\r\n * it was already true). Without this, fast tab swapping\r\n * produced 200 ms blank flickers between consecutive skeletons.\r\n *\r\n * Example\r\n * const [fetching, setFetching] = useState(false);\r\n * useEffect(() => {\r\n * setFetching(true);\r\n * fetchTabData(tab).finally(() => setFetching(false));\r\n * }, [tab]);\r\n * const showSkeleton = useTabLoading(tab, PERCEPTION_THRESHOLD_MS, fetching);\r\n */\r\nexport default function useTabLoading(\r\n tab: string | number,\r\n ms: number = PERCEPTION_THRESHOLD_MS,\r\n enabled: boolean = false\r\n): boolean {\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n // Fetch finished (or never started) — drop any in-flight skeleton.\r\n setLoading(false);\r\n return undefined;\r\n }\r\n // R-Sk.1 — DELAY showing the skeleton until the perception threshold.\r\n // If the fetch resolves before then, cleanup clears the timer and\r\n // the skeleton never flickers in.\r\n const t = setTimeout(() => setLoading(true), ms);\r\n\r\n // CRITICAL: cleanup ONLY clears the pending timer. We do NOT reset\r\n // `loading` to false here, otherwise tab changes while still\r\n // fetching (both old and new tab loading) produced a visible\r\n // 200 ms blank flicker between skeletons. The reset path is the\r\n // `!enabled` branch above, which fires precisely when loading\r\n // actually ends.\r\n return () => clearTimeout(t);\r\n }, [tab, ms, enabled]);\r\n\r\n return loading;\r\n}\r\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,SAAS,QAAQ,OAAO;;AAE3C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAG,GAAG;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CACnCC,GAAoB,EACpBC,EAAU,GAAGH,uBAAuB,EACpCI,OAAgB,GAAG,KAAK,EACf;EACT,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EAE7CC,SAAS,CAAC,MAAM;IACd,IAAI,CAACK,OAAO,EAAE;MACZ;MACAE,UAAU,CAAC,KAAK,CAAC;MACjB,OAAOC,SAAS;IAClB;IACA;IACA;IACA;IACA,MAAMC,CAAC,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAAC,IAAI,CAAC,EAAEH,EAAE,CAAC;;IAEhD;IACA;IACA;IACA;IACA;IACA;IACA,OAAO,MAAMO,YAAY,CAACF,CAAC,CAAC;EAC9B,CAAC,EAAE,CAACN,GAAG,EAAEC,EAAE,EAAEC,OAAO,CAAC,CAAC;EAEtB,OAAOC,OAAO;AAChB","ignoreList":[]}
@@ -14,9 +14,8 @@
14
14
  * via babel-plugin-transform-define) to remove the manual-sync
15
15
  * footgun. Tracked as Batch 7 P3 follow-up (R19 migration backlog).
16
16
  */
17
- export var VERSION = "0.8.0-react19.1";
18
- import * as _tokens from "./tokens";
19
- export { _tokens as tokens };
17
+ export const VERSION = "0.8.0-react19.1";
18
+ export * as tokens from "./tokens";
20
19
  export { createPortnetTheme, getCssVariables, injectCssVariables, removeCssVariables } from "./theme";
21
20
 
22
21
  /**