@portnet/ui 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1011) hide show
  1. package/CHANGELOG.md +737 -0
  2. package/dist/esm/index.js +90 -3
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
  5. package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
  7. package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
  9. package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
  11. package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
  13. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
  14. package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
  15. package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  17. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
  19. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
  20. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
  21. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
  23. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
  25. package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
  27. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
  29. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
  30. package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
  31. package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
  33. package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  34. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
  35. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  36. package/dist/esm/v2/__tests__/apiError.test.js +50 -69
  37. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
  38. package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
  39. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
  40. package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
  41. package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
  42. package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
  43. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
  44. package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
  45. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
  46. package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
  47. package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
  48. package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
  49. package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
  50. package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
  51. package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
  52. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
  53. package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  54. package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
  55. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
  56. package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
  57. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
  58. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
  59. package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  60. package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
  61. package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
  62. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
  63. package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  64. package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
  65. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
  66. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
  67. package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  68. package/dist/esm/v2/components/Accordion.js +48 -70
  69. package/dist/esm/v2/components/Accordion.js.map +1 -1
  70. package/dist/esm/v2/components/ActionStrip.js +31 -43
  71. package/dist/esm/v2/components/ActionStrip.js.map +1 -1
  72. package/dist/esm/v2/components/Banner.js +25 -22
  73. package/dist/esm/v2/components/Banner.js.map +1 -1
  74. package/dist/esm/v2/components/Busy.js +14 -19
  75. package/dist/esm/v2/components/Busy.js.map +1 -1
  76. package/dist/esm/v2/components/Button.js +34 -45
  77. package/dist/esm/v2/components/Button.js.map +1 -1
  78. package/dist/esm/v2/components/CategoryTag.js +44 -27
  79. package/dist/esm/v2/components/CategoryTag.js.map +1 -1
  80. package/dist/esm/v2/components/Checkbox.js +32 -38
  81. package/dist/esm/v2/components/Checkbox.js.map +1 -1
  82. package/dist/esm/v2/components/Chip.js +23 -36
  83. package/dist/esm/v2/components/Chip.js.map +1 -1
  84. package/dist/esm/v2/components/Combobox.js +112 -136
  85. package/dist/esm/v2/components/Combobox.js.map +1 -1
  86. package/dist/esm/v2/components/CommandPalette.js +113 -198
  87. package/dist/esm/v2/components/CommandPalette.js.map +1 -1
  88. package/dist/esm/v2/components/ConfirmDialog.js +36 -45
  89. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
  90. package/dist/esm/v2/components/DatePicker.js +78 -81
  91. package/dist/esm/v2/components/DatePicker.js.map +1 -1
  92. package/dist/esm/v2/components/DateRangePicker.js +63 -74
  93. package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/v2/components/DateTimePicker.js +118 -90
  95. package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
  96. package/dist/esm/v2/components/Drawer.js +71 -65
  97. package/dist/esm/v2/components/Drawer.js.map +1 -1
  98. package/dist/esm/v2/components/Dropzone.js +130 -177
  99. package/dist/esm/v2/components/Dropzone.js.map +1 -1
  100. package/dist/esm/v2/components/EmptyState.js +9 -9
  101. package/dist/esm/v2/components/EmptyState.js.map +1 -1
  102. package/dist/esm/v2/components/FavoriteToggle.js +24 -33
  103. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
  104. package/dist/esm/v2/components/Field.js +210 -52
  105. package/dist/esm/v2/components/Field.js.map +1 -1
  106. package/dist/esm/v2/components/FieldError.js +9 -13
  107. package/dist/esm/v2/components/FieldError.js.map +1 -1
  108. package/dist/esm/v2/components/FieldHelp.js +28 -49
  109. package/dist/esm/v2/components/FieldHelp.js.map +1 -1
  110. package/dist/esm/v2/components/FileCard.js +14 -19
  111. package/dist/esm/v2/components/FileCard.js.map +1 -1
  112. package/dist/esm/v2/components/FilterTab.js +22 -31
  113. package/dist/esm/v2/components/FilterTab.js.map +1 -1
  114. package/dist/esm/v2/components/ForbiddenPage.js +28 -8
  115. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
  116. package/dist/esm/v2/components/FormGrid.js +48 -54
  117. package/dist/esm/v2/components/FormGrid.js.map +1 -1
  118. package/dist/esm/v2/components/FormikDisplay.js +98 -24
  119. package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
  120. package/dist/esm/v2/components/Input.js +75 -34
  121. package/dist/esm/v2/components/Input.js.map +1 -1
  122. package/dist/esm/v2/components/KPICard.js +42 -51
  123. package/dist/esm/v2/components/KPICard.js.map +1 -1
  124. package/dist/esm/v2/components/KPIStrip.js +9 -15
  125. package/dist/esm/v2/components/KPIStrip.js.map +1 -1
  126. package/dist/esm/v2/components/KV.js +16 -23
  127. package/dist/esm/v2/components/KV.js.map +1 -1
  128. package/dist/esm/v2/components/KVGrid.js +15 -23
  129. package/dist/esm/v2/components/KVGrid.js.map +1 -1
  130. package/dist/esm/v2/components/Layout.js +81 -117
  131. package/dist/esm/v2/components/Layout.js.map +1 -1
  132. package/dist/esm/v2/components/MobileRowCard.js +64 -75
  133. package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
  134. package/dist/esm/v2/components/Modal.js +44 -53
  135. package/dist/esm/v2/components/Modal.js.map +1 -1
  136. package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
  137. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
  138. package/dist/esm/v2/components/NotFoundPage.js +28 -9
  139. package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
  140. package/dist/esm/v2/components/NumberInput.js +77 -107
  141. package/dist/esm/v2/components/NumberInput.js.map +1 -1
  142. package/dist/esm/v2/components/OverflowMenu.js +24 -42
  143. package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
  144. package/dist/esm/v2/components/PdfViewer.js +24 -33
  145. package/dist/esm/v2/components/PdfViewer.js.map +1 -1
  146. package/dist/esm/v2/components/ProgressBar.js +28 -36
  147. package/dist/esm/v2/components/ProgressBar.js.map +1 -1
  148. package/dist/esm/v2/components/Radio.js +49 -57
  149. package/dist/esm/v2/components/Radio.js.map +1 -1
  150. package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
  151. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
  152. package/dist/esm/v2/components/SectionHeader.js +24 -31
  153. package/dist/esm/v2/components/SectionHeader.js.map +1 -1
  154. package/dist/esm/v2/components/Segmented.js +59 -84
  155. package/dist/esm/v2/components/Segmented.js.map +1 -1
  156. package/dist/esm/v2/components/Select.js +100 -138
  157. package/dist/esm/v2/components/Select.js.map +1 -1
  158. package/dist/esm/v2/components/ServerErrorPage.js +27 -10
  159. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
  160. package/dist/esm/v2/components/Skeleton.js +81 -96
  161. package/dist/esm/v2/components/Skeleton.js.map +1 -1
  162. package/dist/esm/v2/components/SkipLink.js +6 -7
  163. package/dist/esm/v2/components/SkipLink.js.map +1 -1
  164. package/dist/esm/v2/components/Spinner.js +13 -22
  165. package/dist/esm/v2/components/Spinner.js.map +1 -1
  166. package/dist/esm/v2/components/Status.js +14 -25
  167. package/dist/esm/v2/components/Status.js.map +1 -1
  168. package/dist/esm/v2/components/Stepper.js +68 -71
  169. package/dist/esm/v2/components/Stepper.js.map +1 -1
  170. package/dist/esm/v2/components/Surface.js +25 -44
  171. package/dist/esm/v2/components/Surface.js.map +1 -1
  172. package/dist/esm/v2/components/Switch.js +21 -29
  173. package/dist/esm/v2/components/Switch.js.map +1 -1
  174. package/dist/esm/v2/components/TabPanel.js +84 -0
  175. package/dist/esm/v2/components/TabPanel.js.map +1 -0
  176. package/dist/esm/v2/components/Tabs.js +43 -19
  177. package/dist/esm/v2/components/Tabs.js.map +1 -1
  178. package/dist/esm/v2/components/TelInput.js +75 -108
  179. package/dist/esm/v2/components/TelInput.js.map +1 -1
  180. package/dist/esm/v2/components/Textarea.js +21 -30
  181. package/dist/esm/v2/components/Textarea.js.map +1 -1
  182. package/dist/esm/v2/components/TimePicker.js +59 -69
  183. package/dist/esm/v2/components/TimePicker.js.map +1 -1
  184. package/dist/esm/v2/components/Toast.js +109 -163
  185. package/dist/esm/v2/components/Toast.js.map +1 -1
  186. package/dist/esm/v2/components/Tooltip.js +18 -31
  187. package/dist/esm/v2/components/Tooltip.js.map +1 -1
  188. package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
  189. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
  190. package/dist/esm/v2/components/_pickerShared.js +2 -2
  191. package/dist/esm/v2/components/_pickerShared.js.map +1 -1
  192. package/dist/esm/v2/components/index.js +64 -0
  193. package/dist/esm/v2/components/index.js.map +1 -1
  194. package/dist/esm/v2/hooks/index.js +62 -0
  195. package/dist/esm/v2/hooks/index.js.map +1 -1
  196. package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
  197. package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
  198. package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
  199. package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
  200. package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
  201. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
  202. package/dist/esm/v2/hooks/useDensity.js +13 -17
  203. package/dist/esm/v2/hooks/useDensity.js.map +1 -1
  204. package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
  205. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
  206. package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
  207. package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  208. package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
  209. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
  210. package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
  211. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
  212. package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
  213. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
  214. package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
  215. package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  216. package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
  217. package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  218. package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
  219. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
  220. package/dist/esm/v2/hooks/useSortedRows.js +3 -5
  221. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
  222. package/dist/esm/v2/hooks/useTabLoading.js +6 -21
  223. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
  224. package/dist/esm/v2/index.js +14 -4
  225. package/dist/esm/v2/index.js.map +1 -1
  226. package/dist/esm/v2/modalContext.js +2 -2
  227. package/dist/esm/v2/modalContext.js.map +1 -1
  228. package/dist/esm/v2/models/favorite.js.map +1 -1
  229. package/dist/esm/v2/models/personalization.js.map +1 -1
  230. package/dist/esm/v2/models/referentiel.js.map +1 -1
  231. package/dist/esm/v2/models/savedFilter.js.map +1 -1
  232. package/dist/esm/v2/patterns/ActionBar.js +115 -159
  233. package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
  234. package/dist/esm/v2/patterns/AppMain.js +108 -0
  235. package/dist/esm/v2/patterns/AppMain.js.map +1 -0
  236. package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
  237. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
  238. package/dist/esm/v2/patterns/ChartFigure.js +151 -0
  239. package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
  240. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
  241. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  242. package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
  243. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
  244. package/dist/esm/v2/patterns/DataGrid.js +221 -255
  245. package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
  246. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
  247. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  248. package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
  249. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
  250. package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
  251. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
  252. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
  253. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  254. package/dist/esm/v2/patterns/DetailSplit.js +108 -0
  255. package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
  256. package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
  257. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
  258. package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
  259. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
  260. package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
  261. package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
  262. package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
  263. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
  264. package/dist/esm/v2/patterns/FormPageShell.js +43 -41
  265. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
  266. package/dist/esm/v2/patterns/FormSection.js +30 -38
  267. package/dist/esm/v2/patterns/FormSection.js.map +1 -1
  268. package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
  269. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  270. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
  271. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  272. package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
  273. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
  274. package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
  275. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
  276. package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
  277. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  278. package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
  279. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
  280. package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
  281. package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
  282. package/dist/esm/v2/patterns/FormikFile.js +94 -78
  283. package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
  284. package/dist/esm/v2/patterns/FormikInput.js +40 -50
  285. package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
  286. package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
  287. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  288. package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
  289. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
  290. package/dist/esm/v2/patterns/FormikSelect.js +64 -84
  291. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
  292. package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
  293. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
  294. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
  295. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  296. package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
  297. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
  298. package/dist/esm/v2/patterns/PageContent.js +10 -14
  299. package/dist/esm/v2/patterns/PageContent.js.map +1 -1
  300. package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
  301. package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
  302. package/dist/esm/v2/patterns/ReferentielField.js +327 -312
  303. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
  304. package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
  305. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  306. package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
  307. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
  308. package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
  309. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
  310. package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
  311. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
  312. package/dist/esm/v2/patterns/SortableHeader.js +22 -45
  313. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
  314. package/dist/esm/v2/patterns/Tour.js +94 -120
  315. package/dist/esm/v2/patterns/Tour.js.map +1 -1
  316. package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
  317. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
  318. package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
  319. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  320. package/dist/esm/v2/patterns/_sort.js +17 -33
  321. package/dist/esm/v2/patterns/_sort.js.map +1 -1
  322. package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
  323. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
  324. package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
  325. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
  326. package/dist/esm/v2/patterns/filterCriteria.js +102 -0
  327. package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
  328. package/dist/esm/v2/patterns/index.js +235 -0
  329. package/dist/esm/v2/patterns/index.js.map +1 -1
  330. package/dist/esm/v2/patterns/rowActions.js +223 -0
  331. package/dist/esm/v2/patterns/rowActions.js.map +1 -0
  332. package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
  333. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
  334. package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
  335. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
  336. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
  337. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  338. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
  339. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  340. package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
  341. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
  342. package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
  343. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
  344. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
  345. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  346. package/dist/esm/v2/personalization/capabilities/index.js +5 -0
  347. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
  348. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
  349. package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  350. package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
  351. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
  352. package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
  353. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
  354. package/dist/esm/v2/personalization/index.js +35 -0
  355. package/dist/esm/v2/personalization/index.js.map +1 -1
  356. package/dist/esm/v2/personalization/personalizationContext.js +9 -9
  357. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
  358. package/dist/esm/v2/personalization/schema.js +8 -9
  359. package/dist/esm/v2/personalization/schema.js.map +1 -1
  360. package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
  361. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
  362. package/dist/esm/v2/referentiel/types.js +2 -0
  363. package/dist/esm/v2/referentiel/types.js.map +1 -0
  364. package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
  365. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
  366. package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
  367. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
  368. package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
  369. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
  370. package/dist/esm/v2/theme/_brand.js +8 -24
  371. package/dist/esm/v2/theme/_brand.js.map +1 -1
  372. package/dist/esm/v2/theme/_brandSecondary.js +8 -24
  373. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
  374. package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
  375. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
  376. package/dist/esm/v2/theme/cssVariables.js +62 -69
  377. package/dist/esm/v2/theme/cssVariables.js.map +1 -1
  378. package/dist/esm/v2/theme/index.js +5 -5
  379. package/dist/esm/v2/theme/index.js.map +1 -1
  380. package/dist/esm/v2/tokens/breakpoints.js +14 -14
  381. package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
  382. package/dist/esm/v2/tokens/chart.js +261 -0
  383. package/dist/esm/v2/tokens/chart.js.map +1 -0
  384. package/dist/esm/v2/tokens/colors.js +22 -22
  385. package/dist/esm/v2/tokens/colors.js.map +1 -1
  386. package/dist/esm/v2/tokens/density.js +62 -7
  387. package/dist/esm/v2/tokens/density.js.map +1 -1
  388. package/dist/esm/v2/tokens/index.js +49 -34
  389. package/dist/esm/v2/tokens/index.js.map +1 -1
  390. package/dist/esm/v2/tokens/motion.js +12 -20
  391. package/dist/esm/v2/tokens/motion.js.map +1 -1
  392. package/dist/esm/v2/tokens/radius.js +1 -1
  393. package/dist/esm/v2/tokens/radius.js.map +1 -1
  394. package/dist/esm/v2/tokens/shadows.js +6 -6
  395. package/dist/esm/v2/tokens/shadows.js.map +1 -1
  396. package/dist/esm/v2/tokens/spacing.js +2 -2
  397. package/dist/esm/v2/tokens/spacing.js.map +1 -1
  398. package/dist/esm/v2/tokens/state.js +1 -1
  399. package/dist/esm/v2/tokens/state.js.map +1 -1
  400. package/dist/esm/v2/tokens/statusPalette.js +17 -21
  401. package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
  402. package/dist/esm/v2/tokens/tokens.json +6 -1
  403. package/dist/esm/v2/tokens/typography.js +13 -13
  404. package/dist/esm/v2/tokens/typography.js.map +1 -1
  405. package/dist/esm/v2/tokens/zIndex.js +1 -1
  406. package/dist/esm/v2/tokens/zIndex.js.map +1 -1
  407. package/dist/esm/v2/types/datagrid.js.map +1 -1
  408. package/dist/esm/v2/utils/apiError.js +16 -37
  409. package/dist/esm/v2/utils/apiError.js.map +1 -1
  410. package/dist/esm/v2/utils/contrast.js +31 -32
  411. package/dist/esm/v2/utils/contrast.js.map +1 -1
  412. package/dist/esm/v2/utils/cx.js +5 -25
  413. package/dist/esm/v2/utils/cx.js.map +1 -1
  414. package/dist/esm/v2/utils/fileDownload.js +23 -26
  415. package/dist/esm/v2/utils/fileDownload.js.map +1 -1
  416. package/dist/esm/v2/utils/fileValidation.js +209 -0
  417. package/dist/esm/v2/utils/fileValidation.js.map +1 -0
  418. package/dist/esm/v2/utils/fmtDate.js +111 -0
  419. package/dist/esm/v2/utils/fmtDate.js.map +1 -0
  420. package/dist/esm/v2/utils/fmtMoney.js +8 -10
  421. package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
  422. package/dist/esm/v2/utils/formikErrors.js +78 -0
  423. package/dist/esm/v2/utils/formikErrors.js.map +1 -0
  424. package/dist/esm/v2/utils/index.js +35 -2
  425. package/dist/esm/v2/utils/index.js.map +1 -1
  426. package/dist/esm/v2/utils/mergeLabels.js +7 -12
  427. package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
  428. package/dist/esm/v2/utils/networkStatus.js +12 -12
  429. package/dist/esm/v2/utils/networkStatus.js.map +1 -1
  430. package/dist/index.d.ts +9 -1
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +122 -47
  433. package/dist/index.js.map +1 -1
  434. package/dist/v2/__tests__/AppMain.test.js +133 -0
  435. package/dist/v2/__tests__/AppMain.test.js.map +1 -0
  436. package/dist/v2/__tests__/ChartFigure.test.js +183 -0
  437. package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
  438. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
  439. package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
  440. package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
  441. package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
  442. package/dist/v2/__tests__/FieldError.test.js +98 -69
  443. package/dist/v2/__tests__/FieldError.test.js.map +1 -1
  444. package/dist/v2/__tests__/FieldNaming.test.js +161 -0
  445. package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
  446. package/dist/v2/__tests__/FieldWidth.test.js +148 -0
  447. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  448. package/dist/v2/__tests__/FileCard.test.js +45 -48
  449. package/dist/v2/__tests__/FileCard.test.js.map +1 -1
  450. package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
  451. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  452. package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
  453. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  454. package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
  455. package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
  456. package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
  457. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  458. package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
  459. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  460. package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
  461. package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
  462. package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
  463. package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
  464. package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
  465. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
  466. package/dist/v2/__tests__/apiError.test.js +50 -69
  467. package/dist/v2/__tests__/apiError.test.js.map +1 -1
  468. package/dist/v2/__tests__/banned-patterns.test.js +42 -123
  469. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
  470. package/dist/v2/__tests__/chart-palette.test.js +205 -0
  471. package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
  472. package/dist/v2/__tests__/contrast-palette.test.js +42 -74
  473. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
  474. package/dist/v2/__tests__/cssVariables.test.js +44 -51
  475. package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
  476. package/dist/v2/__tests__/fileValidation.test.js +136 -0
  477. package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
  478. package/dist/v2/__tests__/filterCriteria.test.js +324 -0
  479. package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
  480. package/dist/v2/__tests__/fmtDate.test.js +69 -0
  481. package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
  482. package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
  483. package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
  484. package/dist/v2/__tests__/labels-merge.test.js +38 -46
  485. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  486. package/dist/v2/__tests__/locale-fallback.test.js +47 -52
  487. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
  488. package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
  489. package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
  490. package/dist/v2/__tests__/rowActions.test.js +186 -0
  491. package/dist/v2/__tests__/rowActions.test.js.map +1 -0
  492. package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
  493. package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
  494. package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
  495. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
  496. package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
  497. package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
  498. package/dist/v2/components/Accordion.js +60 -82
  499. package/dist/v2/components/Accordion.js.map +1 -1
  500. package/dist/v2/components/ActionStrip.js +40 -52
  501. package/dist/v2/components/ActionStrip.js.map +1 -1
  502. package/dist/v2/components/Banner.js +42 -41
  503. package/dist/v2/components/Banner.js.map +1 -1
  504. package/dist/v2/components/Busy.js +22 -27
  505. package/dist/v2/components/Busy.js.map +1 -1
  506. package/dist/v2/components/Button.js +39 -50
  507. package/dist/v2/components/Button.js.map +1 -1
  508. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  509. package/dist/v2/components/CategoryTag.js +49 -32
  510. package/dist/v2/components/CategoryTag.js.map +1 -1
  511. package/dist/v2/components/Checkbox.js +39 -45
  512. package/dist/v2/components/Checkbox.js.map +1 -1
  513. package/dist/v2/components/Chip.js +29 -42
  514. package/dist/v2/components/Chip.js.map +1 -1
  515. package/dist/v2/components/Combobox.js +122 -144
  516. package/dist/v2/components/Combobox.js.map +1 -1
  517. package/dist/v2/components/CommandPalette.js +138 -225
  518. package/dist/v2/components/CommandPalette.js.map +1 -1
  519. package/dist/v2/components/ConfirmDialog.js +46 -56
  520. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  521. package/dist/v2/components/DatePicker.js +81 -86
  522. package/dist/v2/components/DatePicker.js.map +1 -1
  523. package/dist/v2/components/DateRangePicker.js +77 -87
  524. package/dist/v2/components/DateRangePicker.js.map +1 -1
  525. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  526. package/dist/v2/components/DateTimePicker.js +121 -95
  527. package/dist/v2/components/DateTimePicker.js.map +1 -1
  528. package/dist/v2/components/Drawer.d.ts.map +1 -1
  529. package/dist/v2/components/Drawer.js +93 -88
  530. package/dist/v2/components/Drawer.js.map +1 -1
  531. package/dist/v2/components/Dropzone.js +150 -196
  532. package/dist/v2/components/Dropzone.js.map +1 -1
  533. package/dist/v2/components/EmptyState.js +18 -20
  534. package/dist/v2/components/EmptyState.js.map +1 -1
  535. package/dist/v2/components/FavoriteToggle.js +28 -39
  536. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  537. package/dist/v2/components/Field.d.ts +121 -5
  538. package/dist/v2/components/Field.d.ts.map +1 -1
  539. package/dist/v2/components/Field.js +221 -62
  540. package/dist/v2/components/Field.js.map +1 -1
  541. package/dist/v2/components/FieldError.js +18 -21
  542. package/dist/v2/components/FieldError.js.map +1 -1
  543. package/dist/v2/components/FieldHelp.js +40 -60
  544. package/dist/v2/components/FieldHelp.js.map +1 -1
  545. package/dist/v2/components/FileCard.js +27 -31
  546. package/dist/v2/components/FileCard.js.map +1 -1
  547. package/dist/v2/components/FilterTab.js +30 -38
  548. package/dist/v2/components/FilterTab.js.map +1 -1
  549. package/dist/v2/components/ForbiddenPage.d.ts +25 -1
  550. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
  551. package/dist/v2/components/ForbiddenPage.js +37 -17
  552. package/dist/v2/components/ForbiddenPage.js.map +1 -1
  553. package/dist/v2/components/FormGrid.js +53 -59
  554. package/dist/v2/components/FormGrid.js.map +1 -1
  555. package/dist/v2/components/FormikDisplay.d.ts +50 -1
  556. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  557. package/dist/v2/components/FormikDisplay.js +108 -33
  558. package/dist/v2/components/FormikDisplay.js.map +1 -1
  559. package/dist/v2/components/Input.d.ts +40 -0
  560. package/dist/v2/components/Input.d.ts.map +1 -1
  561. package/dist/v2/components/Input.js +81 -41
  562. package/dist/v2/components/Input.js.map +1 -1
  563. package/dist/v2/components/KPICard.js +57 -67
  564. package/dist/v2/components/KPICard.js.map +1 -1
  565. package/dist/v2/components/KPIStrip.js +16 -22
  566. package/dist/v2/components/KPIStrip.js.map +1 -1
  567. package/dist/v2/components/KV.js +25 -31
  568. package/dist/v2/components/KV.js.map +1 -1
  569. package/dist/v2/components/KVGrid.js +19 -26
  570. package/dist/v2/components/KVGrid.js.map +1 -1
  571. package/dist/v2/components/Layout.js +91 -120
  572. package/dist/v2/components/Layout.js.map +1 -1
  573. package/dist/v2/components/MobileRowCard.js +79 -91
  574. package/dist/v2/components/MobileRowCard.js.map +1 -1
  575. package/dist/v2/components/Modal.js +61 -69
  576. package/dist/v2/components/Modal.js.map +1 -1
  577. package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
  578. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  579. package/dist/v2/components/NetworkErrorPage.js +38 -21
  580. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  581. package/dist/v2/components/NotFoundPage.d.ts +17 -1
  582. package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
  583. package/dist/v2/components/NotFoundPage.js +37 -18
  584. package/dist/v2/components/NotFoundPage.js.map +1 -1
  585. package/dist/v2/components/NumberInput.js +88 -118
  586. package/dist/v2/components/NumberInput.js.map +1 -1
  587. package/dist/v2/components/OverflowMenu.js +38 -56
  588. package/dist/v2/components/OverflowMenu.js.map +1 -1
  589. package/dist/v2/components/PdfViewer.js +34 -45
  590. package/dist/v2/components/PdfViewer.js.map +1 -1
  591. package/dist/v2/components/ProgressBar.js +42 -49
  592. package/dist/v2/components/ProgressBar.js.map +1 -1
  593. package/dist/v2/components/Radio.js +59 -67
  594. package/dist/v2/components/Radio.js.map +1 -1
  595. package/dist/v2/components/SectionErrorBoundary.js +90 -135
  596. package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
  597. package/dist/v2/components/SectionHeader.js +34 -41
  598. package/dist/v2/components/SectionHeader.js.map +1 -1
  599. package/dist/v2/components/Segmented.js +69 -93
  600. package/dist/v2/components/Segmented.js.map +1 -1
  601. package/dist/v2/components/Select.d.ts +26 -2
  602. package/dist/v2/components/Select.d.ts.map +1 -1
  603. package/dist/v2/components/Select.js +120 -155
  604. package/dist/v2/components/Select.js.map +1 -1
  605. package/dist/v2/components/ServerErrorPage.d.ts +27 -1
  606. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  607. package/dist/v2/components/ServerErrorPage.js +37 -20
  608. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  609. package/dist/v2/components/Skeleton.js +86 -100
  610. package/dist/v2/components/Skeleton.js.map +1 -1
  611. package/dist/v2/components/SkipLink.js +9 -12
  612. package/dist/v2/components/SkipLink.js.map +1 -1
  613. package/dist/v2/components/Spinner.js +16 -25
  614. package/dist/v2/components/Spinner.js.map +1 -1
  615. package/dist/v2/components/Status.js +18 -29
  616. package/dist/v2/components/Status.js.map +1 -1
  617. package/dist/v2/components/Stepper.js +80 -82
  618. package/dist/v2/components/Stepper.js.map +1 -1
  619. package/dist/v2/components/Surface.js +34 -49
  620. package/dist/v2/components/Surface.js.map +1 -1
  621. package/dist/v2/components/Switch.js +29 -37
  622. package/dist/v2/components/Switch.js.map +1 -1
  623. package/dist/v2/components/TabPanel.d.ts +17 -0
  624. package/dist/v2/components/TabPanel.d.ts.map +1 -0
  625. package/dist/v2/components/TabPanel.js +90 -0
  626. package/dist/v2/components/TabPanel.js.map +1 -0
  627. package/dist/v2/components/Tabs.d.ts +25 -0
  628. package/dist/v2/components/Tabs.d.ts.map +1 -1
  629. package/dist/v2/components/Tabs.js +53 -29
  630. package/dist/v2/components/Tabs.js.map +1 -1
  631. package/dist/v2/components/TelInput.js +80 -115
  632. package/dist/v2/components/TelInput.js.map +1 -1
  633. package/dist/v2/components/Textarea.js +26 -35
  634. package/dist/v2/components/Textarea.js.map +1 -1
  635. package/dist/v2/components/TimePicker.js +62 -74
  636. package/dist/v2/components/TimePicker.js.map +1 -1
  637. package/dist/v2/components/Toast.js +119 -174
  638. package/dist/v2/components/Toast.js.map +1 -1
  639. package/dist/v2/components/Tooltip.js +23 -38
  640. package/dist/v2/components/Tooltip.js.map +1 -1
  641. package/dist/v2/components/_ErrorPageBody.js +15 -16
  642. package/dist/v2/components/_ErrorPageBody.js.map +1 -1
  643. package/dist/v2/components/_pickerShared.js +5 -5
  644. package/dist/v2/components/_pickerShared.js.map +1 -1
  645. package/dist/v2/components/index.d.ts +67 -1
  646. package/dist/v2/components/index.d.ts.map +1 -1
  647. package/dist/v2/components/index.js +153 -136
  648. package/dist/v2/components/index.js.map +1 -1
  649. package/dist/v2/hooks/index.d.ts +65 -0
  650. package/dist/v2/hooks/index.d.ts.map +1 -1
  651. package/dist/v2/hooks/index.js +63 -24
  652. package/dist/v2/hooks/index.js.map +1 -1
  653. package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
  654. package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
  655. package/dist/v2/hooks/useAppliedFilters.js +117 -0
  656. package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
  657. package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
  658. package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
  659. package/dist/v2/hooks/useDebouncedCallback.js +87 -0
  660. package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
  661. package/dist/v2/hooks/useDelayedFlag.js +6 -20
  662. package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
  663. package/dist/v2/hooks/useDensity.d.ts.map +1 -1
  664. package/dist/v2/hooks/useDensity.js +14 -18
  665. package/dist/v2/hooks/useDensity.js.map +1 -1
  666. package/dist/v2/hooks/useFocusFirstError.js +26 -34
  667. package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
  668. package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
  669. package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
  670. package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
  671. package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
  672. package/dist/v2/hooks/useFocusTrap.js +20 -24
  673. package/dist/v2/hooks/useFocusTrap.js.map +1 -1
  674. package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
  675. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
  676. package/dist/v2/hooks/useFormAutoSave.js +39 -54
  677. package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
  678. package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
  679. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
  680. package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
  681. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
  682. package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
  683. package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  684. package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
  685. package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
  686. package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
  687. package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
  688. package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
  689. package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
  690. package/dist/v2/hooks/useResolvedDensity.js +5 -13
  691. package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
  692. package/dist/v2/hooks/useSortedRows.js +4 -6
  693. package/dist/v2/hooks/useSortedRows.js.map +1 -1
  694. package/dist/v2/hooks/useTabLoading.js +7 -22
  695. package/dist/v2/hooks/useTabLoading.js.map +1 -1
  696. package/dist/v2/index.d.ts.map +1 -1
  697. package/dist/v2/index.js +143 -145
  698. package/dist/v2/index.js.map +1 -1
  699. package/dist/v2/modalContext.js +2 -2
  700. package/dist/v2/modalContext.js.map +1 -1
  701. package/dist/v2/models/favorite.d.ts +8 -9
  702. package/dist/v2/models/favorite.d.ts.map +1 -1
  703. package/dist/v2/models/favorite.js.map +1 -1
  704. package/dist/v2/models/index.js +4 -4
  705. package/dist/v2/models/index.js.map +1 -1
  706. package/dist/v2/models/personalization.d.ts +44 -48
  707. package/dist/v2/models/personalization.d.ts.map +1 -1
  708. package/dist/v2/models/personalization.js.map +1 -1
  709. package/dist/v2/models/referentiel.d.ts +32 -50
  710. package/dist/v2/models/referentiel.d.ts.map +1 -1
  711. package/dist/v2/models/referentiel.js.map +1 -1
  712. package/dist/v2/models/savedFilter.d.ts +8 -17
  713. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  714. package/dist/v2/models/savedFilter.js.map +1 -1
  715. package/dist/v2/patterns/ActionBar.js +152 -187
  716. package/dist/v2/patterns/ActionBar.js.map +1 -1
  717. package/dist/v2/patterns/AppMain.d.ts +109 -0
  718. package/dist/v2/patterns/AppMain.d.ts.map +1 -0
  719. package/dist/v2/patterns/AppMain.js +115 -0
  720. package/dist/v2/patterns/AppMain.js.map +1 -0
  721. package/dist/v2/patterns/BulkActionBar.js +40 -42
  722. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  723. package/dist/v2/patterns/ChartFigure.d.ts +124 -0
  724. package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
  725. package/dist/v2/patterns/ChartFigure.js +159 -0
  726. package/dist/v2/patterns/ChartFigure.js.map +1 -0
  727. package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
  728. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  729. package/dist/v2/patterns/ColumnsToggle.js +60 -94
  730. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  731. package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
  732. package/dist/v2/patterns/DataGrid.js +262 -297
  733. package/dist/v2/patterns/DataGrid.js.map +1 -1
  734. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
  735. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  736. package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
  737. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  738. package/dist/v2/patterns/DataGridToolbar.js +103 -106
  739. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  740. package/dist/v2/patterns/DataGridVirtualized.js +179 -217
  741. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  742. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
  743. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  744. package/dist/v2/patterns/DetailSplit.d.ts +87 -0
  745. package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
  746. package/dist/v2/patterns/DetailSplit.js +116 -0
  747. package/dist/v2/patterns/DetailSplit.js.map +1 -0
  748. package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
  749. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  750. package/dist/v2/patterns/FavoriteColumn.js +32 -80
  751. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  752. package/dist/v2/patterns/FavoritesFilter.js +36 -44
  753. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  754. package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
  755. package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
  756. package/dist/v2/patterns/FilterTabBar.js +120 -0
  757. package/dist/v2/patterns/FilterTabBar.js.map +1 -0
  758. package/dist/v2/patterns/FormErrorSummary.js +20 -23
  759. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  760. package/dist/v2/patterns/FormPageShell.js +53 -50
  761. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  762. package/dist/v2/patterns/FormSection.d.ts +8 -3
  763. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  764. package/dist/v2/patterns/FormSection.js +44 -51
  765. package/dist/v2/patterns/FormSection.js.map +1 -1
  766. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  767. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  768. package/dist/v2/patterns/FormikCheckbox.js +138 -0
  769. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  770. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
  771. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  772. package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
  773. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  774. package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
  775. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  776. package/dist/v2/patterns/FormikCombobox.js +55 -69
  777. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  778. package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
  779. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  780. package/dist/v2/patterns/FormikDatePicker.js +59 -106
  781. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  782. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  783. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  784. package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
  785. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  786. package/dist/v2/patterns/FormikErrorFocus.js +25 -26
  787. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  788. package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
  789. package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
  790. package/dist/v2/patterns/FormikErrorSummary.js +97 -0
  791. package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
  792. package/dist/v2/patterns/FormikFile.d.ts +14 -1
  793. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  794. package/dist/v2/patterns/FormikFile.js +99 -83
  795. package/dist/v2/patterns/FormikFile.js.map +1 -1
  796. package/dist/v2/patterns/FormikInput.d.ts +11 -1
  797. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  798. package/dist/v2/patterns/FormikInput.js +45 -55
  799. package/dist/v2/patterns/FormikInput.js.map +1 -1
  800. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  801. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  802. package/dist/v2/patterns/FormikRadioGroup.js +137 -0
  803. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  804. package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
  805. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  806. package/dist/v2/patterns/FormikReferentielField.js +54 -64
  807. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  808. package/dist/v2/patterns/FormikSelect.d.ts +9 -1
  809. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  810. package/dist/v2/patterns/FormikSelect.js +70 -89
  811. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  812. package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
  813. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  814. package/dist/v2/patterns/FormikTextarea.js +35 -48
  815. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  816. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
  817. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  818. package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
  819. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  820. package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
  821. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  822. package/dist/v2/patterns/PageContent.js +17 -20
  823. package/dist/v2/patterns/PageContent.js.map +1 -1
  824. package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
  825. package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
  826. package/dist/v2/patterns/PreviewDrawer.js +159 -0
  827. package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
  828. package/dist/v2/patterns/ReferentielField.d.ts +86 -2
  829. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  830. package/dist/v2/patterns/ReferentielField.js +347 -327
  831. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  832. package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
  833. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  834. package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
  835. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  836. package/dist/v2/patterns/SaveFilterDialog.js +50 -77
  837. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  838. package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
  839. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  840. package/dist/v2/patterns/SkeletonPageShell.js +122 -143
  841. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  842. package/dist/v2/patterns/SortableHeader.js +35 -57
  843. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  844. package/dist/v2/patterns/Tour.js +121 -142
  845. package/dist/v2/patterns/Tour.js.map +1 -1
  846. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  847. package/dist/v2/patterns/_dataGridShared.js +131 -147
  848. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  849. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  850. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  851. package/dist/v2/patterns/_pickerSerialisation.js +80 -0
  852. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  853. package/dist/v2/patterns/_sort.js +17 -33
  854. package/dist/v2/patterns/_sort.js.map +1 -1
  855. package/dist/v2/patterns/_useColumnReorder.js +124 -163
  856. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  857. package/dist/v2/patterns/_useColumnResize.js +80 -99
  858. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  859. package/dist/v2/patterns/filterCriteria.d.ts +78 -0
  860. package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
  861. package/dist/v2/patterns/filterCriteria.js +110 -0
  862. package/dist/v2/patterns/filterCriteria.js.map +1 -0
  863. package/dist/v2/patterns/index.d.ts +247 -0
  864. package/dist/v2/patterns/index.d.ts.map +1 -1
  865. package/dist/v2/patterns/index.js +182 -70
  866. package/dist/v2/patterns/index.js.map +1 -1
  867. package/dist/v2/patterns/rowActions.d.ts +150 -0
  868. package/dist/v2/patterns/rowActions.d.ts.map +1 -0
  869. package/dist/v2/patterns/rowActions.js +232 -0
  870. package/dist/v2/patterns/rowActions.js.map +1 -0
  871. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  872. package/dist/v2/personalization/PersonalizationProvider.js +57 -53
  873. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  874. package/dist/v2/personalization/adapters/_storageKey.js +5 -5
  875. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
  876. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
  877. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  878. package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
  879. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  880. package/dist/v2/personalization/adapters/index.js +5 -5
  881. package/dist/v2/personalization/adapters/index.js.map +1 -1
  882. package/dist/v2/personalization/capabilities/favorites.js +39 -62
  883. package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
  884. package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
  885. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  886. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  887. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  888. package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
  889. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  890. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  891. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  892. package/dist/v2/personalization/capabilities/index.js +23 -10
  893. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  894. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
  895. package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
  896. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
  897. package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
  898. package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
  899. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  900. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  901. package/dist/v2/personalization/createPersonalizationStore.js +81 -182
  902. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  903. package/dist/v2/personalization/index.d.ts +34 -0
  904. package/dist/v2/personalization/index.d.ts.map +1 -1
  905. package/dist/v2/personalization/index.js +41 -21
  906. package/dist/v2/personalization/index.js.map +1 -1
  907. package/dist/v2/personalization/personalizationContext.js +10 -12
  908. package/dist/v2/personalization/personalizationContext.js.map +1 -1
  909. package/dist/v2/personalization/schema.js +8 -9
  910. package/dist/v2/personalization/schema.js.map +1 -1
  911. package/dist/v2/referentiel/ReferentielProvider.js +31 -45
  912. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  913. package/dist/v2/referentiel/index.js +11 -13
  914. package/dist/v2/referentiel/index.js.map +1 -1
  915. package/dist/v2/referentiel/types.d.ts +105 -0
  916. package/dist/v2/referentiel/types.d.ts.map +1 -0
  917. package/dist/v2/referentiel/types.js +6 -0
  918. package/dist/v2/referentiel/types.js.map +1 -0
  919. package/dist/v2/referentiel/useReferentielClient.js +13 -16
  920. package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
  921. package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
  922. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  923. package/dist/v2/referentiel/useReferentielOptions.js +63 -120
  924. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  925. package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
  926. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  927. package/dist/v2/referentiel/useReferentielSearch.js +40 -95
  928. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  929. package/dist/v2/theme/_brand.js +12 -26
  930. package/dist/v2/theme/_brand.js.map +1 -1
  931. package/dist/v2/theme/_brandSecondary.js +12 -26
  932. package/dist/v2/theme/_brandSecondary.js.map +1 -1
  933. package/dist/v2/theme/createPortnetTheme.js +41 -49
  934. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  935. package/dist/v2/theme/cssVariables.d.ts +3 -3
  936. package/dist/v2/theme/cssVariables.d.ts.map +1 -1
  937. package/dist/v2/theme/cssVariables.js +65 -70
  938. package/dist/v2/theme/cssVariables.js.map +1 -1
  939. package/dist/v2/theme/index.js +10 -10
  940. package/dist/v2/theme/index.js.map +1 -1
  941. package/dist/v2/tokens/breakpoints.js +16 -16
  942. package/dist/v2/tokens/breakpoints.js.map +1 -1
  943. package/dist/v2/tokens/chart.d.ts +103 -0
  944. package/dist/v2/tokens/chart.d.ts.map +1 -0
  945. package/dist/v2/tokens/chart.js +270 -0
  946. package/dist/v2/tokens/chart.js.map +1 -0
  947. package/dist/v2/tokens/colors.js +24 -24
  948. package/dist/v2/tokens/colors.js.map +1 -1
  949. package/dist/v2/tokens/density.d.ts +104 -0
  950. package/dist/v2/tokens/density.d.ts.map +1 -1
  951. package/dist/v2/tokens/density.js +67 -12
  952. package/dist/v2/tokens/density.js.map +1 -1
  953. package/dist/v2/tokens/index.d.ts +50 -1
  954. package/dist/v2/tokens/index.d.ts.map +1 -1
  955. package/dist/v2/tokens/index.js +116 -68
  956. package/dist/v2/tokens/index.js.map +1 -1
  957. package/dist/v2/tokens/motion.js +16 -22
  958. package/dist/v2/tokens/motion.js.map +1 -1
  959. package/dist/v2/tokens/radius.js +3 -3
  960. package/dist/v2/tokens/radius.js.map +1 -1
  961. package/dist/v2/tokens/shadows.js +8 -8
  962. package/dist/v2/tokens/shadows.js.map +1 -1
  963. package/dist/v2/tokens/spacing.js +4 -4
  964. package/dist/v2/tokens/spacing.js.map +1 -1
  965. package/dist/v2/tokens/state.js +3 -3
  966. package/dist/v2/tokens/state.js.map +1 -1
  967. package/dist/v2/tokens/statusPalette.js +21 -23
  968. package/dist/v2/tokens/statusPalette.js.map +1 -1
  969. package/dist/v2/tokens/tokens.json +6 -1
  970. package/dist/v2/tokens/typography.js +15 -15
  971. package/dist/v2/tokens/typography.js.map +1 -1
  972. package/dist/v2/tokens/zIndex.js +3 -3
  973. package/dist/v2/tokens/zIndex.js.map +1 -1
  974. package/dist/v2/types/datagrid.d.ts +9 -1
  975. package/dist/v2/types/datagrid.d.ts.map +1 -1
  976. package/dist/v2/types/datagrid.js.map +1 -1
  977. package/dist/v2/types/index.js +2 -2
  978. package/dist/v2/types/index.js.map +1 -1
  979. package/dist/v2/utils/apiError.js +16 -37
  980. package/dist/v2/utils/apiError.js.map +1 -1
  981. package/dist/v2/utils/contrast.js +31 -32
  982. package/dist/v2/utils/contrast.js.map +1 -1
  983. package/dist/v2/utils/cx.js +7 -27
  984. package/dist/v2/utils/cx.js.map +1 -1
  985. package/dist/v2/utils/fileDownload.js +25 -28
  986. package/dist/v2/utils/fileDownload.js.map +1 -1
  987. package/dist/v2/utils/fileValidation.d.ts +116 -0
  988. package/dist/v2/utils/fileValidation.d.ts.map +1 -0
  989. package/dist/v2/utils/fileValidation.js +220 -0
  990. package/dist/v2/utils/fileValidation.js.map +1 -0
  991. package/dist/v2/utils/fmtDate.d.ts +103 -0
  992. package/dist/v2/utils/fmtDate.d.ts.map +1 -0
  993. package/dist/v2/utils/fmtDate.js +119 -0
  994. package/dist/v2/utils/fmtDate.js.map +1 -0
  995. package/dist/v2/utils/fmtMoney.d.ts +3 -3
  996. package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
  997. package/dist/v2/utils/fmtMoney.js +9 -11
  998. package/dist/v2/utils/fmtMoney.js.map +1 -1
  999. package/dist/v2/utils/formikErrors.d.ts +67 -0
  1000. package/dist/v2/utils/formikErrors.d.ts.map +1 -0
  1001. package/dist/v2/utils/formikErrors.js +85 -0
  1002. package/dist/v2/utils/formikErrors.js.map +1 -0
  1003. package/dist/v2/utils/index.d.ts +5 -0
  1004. package/dist/v2/utils/index.d.ts.map +1 -1
  1005. package/dist/v2/utils/index.js +67 -18
  1006. package/dist/v2/utils/index.js.map +1 -1
  1007. package/dist/v2/utils/mergeLabels.js +9 -14
  1008. package/dist/v2/utils/mergeLabels.js.map +1 -1
  1009. package/dist/v2/utils/networkStatus.js +14 -14
  1010. package/dist/v2/utils/networkStatus.js.map +1 -1
  1011. package/package.json +26 -9
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.js","names":["React","Dialog","Box","IconButton","SearchIcon","CloseIcon","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_MS","DEFAULT_LABELS","Object","freeze","title","footerHint","closeButton","resultsCount","n","concat","pinnedTitle","recentTitle","BACKDROP_SLOT_PROPS","sx","backgroundColor","useDebounced","value","ms","_React$useState","useState","_React$useState2","_slicedToArray","out","setOut","useEffect","t","setTimeout","clearTimeout","normalize","s","String","replace","toLowerCase","subsequenceRun","hay","token","i","consecutive","bestConsecutive","h","length","scoreToken","startsWith","wbIdx","indexOf","subIdx","Math","min","run","scoreQuery","haystack","query","tokens","split","filter","Boolean","total","_iterator","_createForOfIteratorHelper","_step","done","err","e","f","filterGroups","groups","q","trim","map","g","id","items","_iterator2","_step2","scored","_iterator3","_step3","it","label","keywords","push","item","score","sort","a","b","CommandPalette","_ref","open","onClose","_ref$groups","recentItems","pinnedItems","_ref$placeholder","placeholder","_ref$emptyState","emptyState","onQueryChange","labels","L","useMemo","_React$useState3","_React$useState4","setQuery","debouncedQuery","_React$useState5","_React$useState6","highlight","setHighlight","inputRef","useRef","listRef","titleId","useId","listId","inputId","paperRef","allGroups","hasPinned","Array","isArray","hasRecent","_toConsumableArray","visibleGroups","itemsOnly","flatMap","max","_listRef$current","node","current","querySelector","scrollIntoView","block","activate","index","_it$onSelect","onSelect","call","onInputKeyDown","key","preventDefault","onInputChange","target","activeItemId","undefined","slotProps","paper","ref","width","maxWidth","borderRadius","boxShadow","margin","overflow","backdrop","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","children","className","display","alignItems","gap","padding","borderBottom","color","fontSize","component","type","role","autoFocus","onChange","onKeyDown","flex","border","outline","background","fontFamily","fontWeight","size","onClick","maxHeight","overflowY","textAlign","headerId","textTransform","letterSpacing","entry","isActive","idx","onMouseEnter","cursor","icon","minWidth","textOverflow","whiteSpace","shortcut","justifyContent","borderTop"],"sources":["../../../../src/lib/v2/components/CommandPalette.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * CommandPalette - Portnet UI v2\r\n *\r\n * Charter §03 / §07 · ⌘K command palette. Keyboard-first launcher for pages\r\n * and actions across the app.\r\n *\r\n * const [open, setOpen] = useState(false);\r\n * useEffect(() => {\r\n * const onKey = (e) => {\r\n * if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"k\") {\r\n * e.preventDefault();\r\n * setOpen(true);\r\n * }\r\n * };\r\n * window.addEventListener(\"keydown\", onKey);\r\n * return () => window.removeEventListener(\"keydown\", onKey);\r\n * }, []);\r\n *\r\n * <CommandPalette\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * groups={[\r\n * { id: \"pages\", title: \"Pages\", items: [\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * { id: \"titres\", label: \"Titres d'importation\", onSelect: () => nav(\"/titres\") },\r\n * ]},\r\n * { id: \"actions\", title: \"Actions\", items: [\r\n * { id: \"new-titre\", label: \"Nouveau titre\", icon: <AddIcon />, shortcut: \"C\", onSelect: createTitre },\r\n * ]},\r\n * ]}\r\n * />\r\n *\r\n * Recent + Pinned items (Batch 16 / H4)\r\n * -------------------------------------\r\n * <CommandPalette\r\n * pinnedItems={[\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * ]}\r\n * recentItems={[\r\n * { id: \"titre-2025-IM-0042\", label: \"2025-IM-0042 (SOFRANE SA)\", onSelect: () => nav(\"/titres/2025-IM-0042\") },\r\n * ]}\r\n * groups={[ ... ]}\r\n * />\r\n *\r\n * Both extras are HOST-MANAGED. Lib does NOT track selections or\r\n * pinning state — track in your per-item onSelect handler and\r\n * persist to localStorage / server prefs as a host concern.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <CommandPalette\r\n * placeholder=\"Search a page or action…\"\r\n * emptyState=\"No result.\"\r\n * labels={{\r\n * title: \"Command palette\",\r\n * footerHint: \"↑↓ to navigate · ↵ to select · Esc to close\",\r\n * closeButton: \"Close palette\",\r\n * resultsCount: (n) => `${n} result${n === 1 ? \"\" : \"s\"}`,\r\n * pinnedTitle: \"Pinned\",\r\n * recentTitle: \"Recent\",\r\n * }}\r\n * />\r\n *\r\n * `resultsCount` is a function so the host can plug in proper plural\r\n * rules (Intl.PluralRules, ICU MessageFormat, i18next, …).\r\n *\r\n * Matching behaviour (Batch 13 / D2):\r\n * The search is fuzzy. Each match is scored across four tiers\r\n * (prefix > word-boundary > substring > subsequence) and within\r\n * each group items are surfaced in descending score order.\r\n * Multi-token queries (\"tit imp\") split on whitespace and require\r\n * every token to hit somewhere; final score is the per-token\r\n * average. Diacritics are folded — \"Emile\" matches \"Émile\".\r\n *\r\n * Focus management (R-F.2):\r\n * Backed by the v2 useFocusTrap hook (Batch 3). The search <input>\r\n * declares `autoFocus`, so on open the trap's initial-focus rAF\r\n * lands directly on it. The input is a role=\"combobox\" and carries an\r\n * aria-label (CP-1) so screen readers announce a name, not just a role.\r\n */\r\n\r\nconst DEBOUNCE_MS = 80;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Palette de commandes\",\r\n footerHint: \"↑↓ pour naviguer · ↵ pour sélectionner · Esc pour fermer\",\r\n closeButton: \"Fermer la palette\",\r\n resultsCount: (n: number) => `${n} résultat${n > 1 ? \"s\" : \"\"}`,\r\n pinnedTitle: \"Épinglés\",\r\n recentTitle: \"Récents\",\r\n});\r\n\r\n// MUI v9: backdrop slot bag. Hoisted — its content (only an sx token)\r\n// is independent of any palette instance state.\r\nconst BACKDROP_SLOT_PROPS = Object.freeze({\r\n // R-G.2 / R-AI.1 - backdrop derived from the live --fg token (matches\r\n // Modal). Adapts to any future theme override.\r\n sx: { backgroundColor: \"color-mix(in srgb, var(--fg) 45%, transparent)\" },\r\n});\r\n\r\nexport interface CommandPaletteItem {\r\n id: string | number;\r\n label: React.ReactNode;\r\n icon?: React.ReactNode | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n keywords?: string | undefined;\r\n onSelect?: (() => void) | undefined;\r\n}\r\n\r\nexport interface CommandPaletteGroup {\r\n id: string;\r\n title?: React.ReactNode | undefined;\r\n items: CommandPaletteItem[];\r\n}\r\n\r\nexport interface CommandPaletteLabels {\r\n title?: string | undefined;\r\n footerHint?: string | undefined;\r\n closeButton?: string | undefined;\r\n resultsCount?: ((n: number) => React.ReactNode) | undefined;\r\n pinnedTitle?: React.ReactNode | undefined;\r\n recentTitle?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface CommandPaletteProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n groups?: CommandPaletteGroup[] | undefined;\r\n recentItems?: CommandPaletteItem[] | undefined;\r\n pinnedItems?: CommandPaletteItem[] | undefined;\r\n placeholder?: string | undefined;\r\n emptyState?: React.ReactNode | undefined;\r\n onQueryChange?: ((q: string) => void) | undefined;\r\n labels?: CommandPaletteLabels | undefined;\r\n}\r\n\r\nfunction useDebounced<T>(value: T, ms: number): T {\r\n const [out, setOut] = React.useState(value);\r\n React.useEffect(() => {\r\n const t = setTimeout(() => setOut(value), ms);\r\n return () => clearTimeout(t);\r\n }, [value, ms]);\r\n return out;\r\n}\r\n\r\n/* ── Fuzzy matching (D2) ───────────────────────────────────────────────\r\n * Module-level pure helpers. No external dep, no allocation per match\r\n * beyond the obligatory tokenisation Array.\r\n *\r\n * Score scale is conventional, NOT meaningful in absolute terms:\r\n * - 0 → no match (filtered out)\r\n * - higher → more relevant (sorted descending within each group)\r\n */\r\n\r\n/**\r\n * NFD-normalise + strip combining marks + lowercase. Folds diacritics\r\n * so \"Émile\" → \"emile\" and \"Café\" → \"cafe\", letting users search\r\n * without typing accents. The unicode range \\u0300-\\u036F covers the\r\n * Combining Diacritical Marks block (U+0300..U+036F).\r\n */\r\nfunction normalize(s: string): string {\r\n if (!s) return \"\";\r\n return String(s).normalize(\"NFD\").replace(/[\\u0300-\\u036F]/g, \"\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Subsequence match score — how well does `token` appear (in order,\r\n * not necessarily contiguous) inside `hay`?\r\n *\r\n * - Returns 0 if any character is missing.\r\n * - Otherwise returns the longest CONSECUTIVE run divided by the\r\n * token length. So \"imp\" inside \"important\" gets ratio 1.0\r\n * (whole word matched contiguously), while \"imp\" inside\r\n * \"i_m_p\" (gaps) gets a low ratio.\r\n *\r\n * The contiguous-run heuristic is much cheaper than a full Smith-\r\n * Waterman and good enough for command-palette UX.\r\n */\r\nfunction subsequenceRun(hay: string, token: string): number {\r\n let i = 0;\r\n let consecutive = 0;\r\n let bestConsecutive = 0;\r\n for (let h = 0; h < hay.length && i < token.length; h += 1) {\r\n if (hay[h] === token[i]) {\r\n i += 1;\r\n consecutive += 1;\r\n if (consecutive > bestConsecutive) bestConsecutive = consecutive;\r\n } else {\r\n consecutive = 0;\r\n }\r\n }\r\n if (i < token.length) return 0;\r\n return bestConsecutive / token.length;\r\n}\r\n\r\n/**\r\n * Score a single token against a haystack. Four tiers, best wins.\r\n * Both inputs are assumed already normalised (lowercase, no diacritics).\r\n */\r\nfunction scoreToken(hay: string, token: string): number {\r\n if (hay.startsWith(token)) return 100;\r\n\r\n const wbIdx = hay.indexOf(\" \" + token);\r\n if (wbIdx >= 0) return 80;\r\n\r\n const subIdx = hay.indexOf(token);\r\n if (subIdx >= 0) {\r\n return 60 - Math.min(20, subIdx * 0.1);\r\n }\r\n\r\n const run = subsequenceRun(hay, token);\r\n if (run > 0) return 40 * run;\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Score a multi-token query. Splits on whitespace; every token must hit\r\n * somewhere. Returns the average across tokens, or 0 if any token misses.\r\n */\r\nfunction scoreQuery(haystack: string, query: string): number {\r\n const hay = normalize(haystack);\r\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\r\n if (tokens.length === 0) return 1;\r\n if (!hay) return 0;\r\n\r\n let total = 0;\r\n for (const token of tokens) {\r\n const s = scoreToken(hay, token);\r\n if (s === 0) return 0;\r\n total += s;\r\n }\r\n return total / tokens.length;\r\n}\r\n\r\n/**\r\n * Filter `groups` against the query. Within each group, items are\r\n * surfaced in descending score order (most relevant first). Group\r\n * order itself is preserved — groups are author-defined categories,\r\n * not relevance buckets.\r\n *\r\n * Empty / whitespace-only query → return groups untouched (just drop\r\n * the empty ones). Preserves the original \"no query = browse\" UX.\r\n */\r\nfunction filterGroups(groups: CommandPaletteGroup[], query: string): CommandPaletteGroup[] {\r\n const q = query.trim();\r\n if (!q) {\r\n return groups\r\n .map((g) => ({ id: g.id, title: g.title, items: g.items }))\r\n .filter((g) => g.items.length > 0);\r\n }\r\n\r\n const out: CommandPaletteGroup[] = [];\r\n for (const g of groups) {\r\n const scored: Array<{ item: CommandPaletteItem; score: number }> = [];\r\n for (const it of g.items) {\r\n const hay = `${it.label} ${it.keywords || \"\"}`;\r\n const s = scoreQuery(hay, q);\r\n if (s > 0) scored.push({ item: it, score: s });\r\n }\r\n if (scored.length === 0) continue;\r\n scored.sort((a, b) => b.score - a.score);\r\n out.push({ id: g.id, title: g.title, items: scored.map((s) => s.item) });\r\n }\r\n return out;\r\n}\r\n\r\nfunction CommandPalette({\r\n open,\r\n onClose,\r\n groups = [],\r\n recentItems,\r\n pinnedItems,\r\n placeholder = \"Rechercher une page, une action…\",\r\n emptyState = \"Aucun résultat.\",\r\n onQueryChange,\r\n labels,\r\n}: CommandPaletteProps) {\r\n const L = React.useMemo(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n\r\n const [query, setQuery] = React.useState(\"\");\r\n const debouncedQuery = useDebounced(query, DEBOUNCE_MS);\r\n const [highlight, setHighlight] = React.useState(0);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n const listRef = React.useRef<HTMLDivElement>(null);\r\n const titleId = React.useId();\r\n const listId = React.useId();\r\n const inputId = React.useId();\r\n\r\n // R-F.2 - the v2 trap is wired on the Dialog Paper element, activated\r\n // only while the palette is open. MUI's own trap is disabled below.\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef as React.RefObject<HTMLDivElement>, !!open);\r\n\r\n // H4 — synthetic groups for pinnedItems / recentItems prepended to\r\n // the host's groups. Empty extras collapse the array to `groups`\r\n // verbatim — same reference when neither prop is set, so downstream\r\n // memoisation stays valid for the no-op case.\r\n const allGroups = React.useMemo<CommandPaletteGroup[]>(() => {\r\n const hasPinned = Array.isArray(pinnedItems) && pinnedItems.length > 0;\r\n const hasRecent = Array.isArray(recentItems) && recentItems.length > 0;\r\n if (!hasPinned && !hasRecent) return groups;\r\n const out: CommandPaletteGroup[] = [];\r\n if (hasPinned) {\r\n out.push({ id: \"_pinned\", title: L.pinnedTitle, items: pinnedItems ?? [] });\r\n }\r\n if (hasRecent) {\r\n out.push({ id: \"_recent\", title: L.recentTitle, items: recentItems ?? [] });\r\n }\r\n return [...out, ...groups];\r\n }, [pinnedItems, recentItems, groups, L.pinnedTitle, L.recentTitle]);\r\n\r\n const visibleGroups = React.useMemo(\r\n () => filterGroups(allGroups, debouncedQuery),\r\n [allGroups, debouncedQuery]\r\n );\r\n const itemsOnly = React.useMemo(\r\n () => visibleGroups.flatMap((g) => g.items),\r\n [visibleGroups]\r\n );\r\n\r\n // Reset state on (re)open. Initial focus on the input is handled by\r\n // useFocusTrap above (the input carries `autoFocus`).\r\n React.useEffect(() => {\r\n if (!open) return;\r\n setQuery(\"\");\r\n setHighlight(0);\r\n }, [open]);\r\n\r\n // Keep highlight valid when results shrink/grow\r\n React.useEffect(() => {\r\n if (highlight >= itemsOnly.length) {\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n }, [itemsOnly.length, highlight]);\r\n\r\n // Scroll the highlighted item into view\r\n React.useEffect(() => {\r\n if (!open || itemsOnly.length === 0) return;\r\n const node = listRef.current?.querySelector(`[data-item-index=\"${highlight}\"]`);\r\n if (node) node.scrollIntoView({ block: \"nearest\" });\r\n }, [highlight, open, itemsOnly.length]);\r\n\r\n const activate = (index: number) => {\r\n const it = itemsOnly[index];\r\n if (!it) return;\r\n onClose?.();\r\n // Defer the action one tick so onClose can restore focus before any\r\n // navigation happens (consumer-side routing).\r\n setTimeout(() => it.onSelect?.(), 0);\r\n };\r\n\r\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h + 1) % itemsOnly.length));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h - 1 + itemsOnly.length) % itemsOnly.length));\r\n } else if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n activate(highlight);\r\n } else if (e.key === \"Home\") {\r\n e.preventDefault();\r\n setHighlight(0);\r\n } else if (e.key === \"End\") {\r\n e.preventDefault();\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n };\r\n\r\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setQuery(e.target.value);\r\n onQueryChange?.(e.target.value);\r\n setHighlight(0);\r\n };\r\n\r\n const activeItemId = itemsOnly[highlight] ? `${listId}-opt-${highlight}` : undefined;\r\n\r\n // MUI v9: Dialog paper + backdrop bags forwarded through slotProps.\r\n // The paper slot embeds the per-instance focus-trap ref so we\r\n // useMemo it for reference stability across renders.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width: \"100%\",\r\n maxWidth: 640,\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n margin: \"var(--s-3)\",\r\n overflow: \"hidden\",\r\n } satisfies SxProps<Theme>,\r\n },\r\n backdrop: BACKDROP_SLOT_PROPS,\r\n }),\r\n []\r\n );\r\n\r\n return (\r\n <Dialog\r\n open={!!open}\r\n onClose={onClose}\r\n maxWidth={false}\r\n aria-labelledby={titleId}\r\n // Hand over focus management to useFocusTrap above.\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n slotProps={slotProps}\r\n >\r\n <Box className=\"pui-sr-only\" id={titleId}>\r\n {L.title}\r\n </Box>\r\n\r\n {/* Search input row */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n }}\r\n >\r\n <SearchIcon\r\n aria-hidden=\"true\"\r\n sx={{ color: \"var(--fg-subtle)\", fontSize: 20 }}\r\n />\r\n <Box\r\n component=\"input\"\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-expanded=\"true\"\r\n aria-controls={listId}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={activeItemId}\r\n // CP-1 — accessible name for the combobox input. The sr-only title\r\n // labels the Dialog, not this input, and a placeholder is not a\r\n // reliable accessible name; expose the placeholder text as the name.\r\n aria-label={placeholder}\r\n autoFocus\r\n value={query}\r\n onChange={onInputChange}\r\n onKeyDown={onInputKeyDown}\r\n placeholder={placeholder}\r\n sx={{\r\n flex: 1,\r\n border: 0,\r\n outline: \"none\",\r\n background: \"transparent\",\r\n fontFamily: \"inherit\",\r\n fontSize: \"var(--text-body, 14px)\",\r\n color: \"var(--fg)\",\r\n \"&::placeholder\": { color: \"var(--fg-subtle)\" },\r\n }}\r\n />\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n ESC\r\n </Box>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.closeButton}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Results listbox */}\r\n <Box\r\n ref={listRef}\r\n role=\"listbox\"\r\n id={listId}\r\n aria-labelledby={titleId}\r\n sx={{\r\n maxHeight: 360,\r\n overflowY: \"auto\",\r\n padding: \"var(--s-2) 0\",\r\n }}\r\n >\r\n {visibleGroups.length === 0 && (\r\n <Box\r\n sx={{\r\n padding: \"var(--s-5) var(--s-4)\",\r\n textAlign: \"center\",\r\n color: \"var(--fg-muted)\",\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n {emptyState}\r\n </Box>\r\n )}\r\n {(() => {\r\n let i = -1;\r\n return visibleGroups.map((g) => {\r\n const headerId = `${listId}-h-${g.id}`;\r\n return (\r\n <Box\r\n key={g.id}\r\n role=\"group\"\r\n aria-labelledby={headerId}\r\n >\r\n <Box\r\n id={headerId}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.06em\",\r\n padding: \"var(--s-2) var(--s-4) var(--s-1)\",\r\n }}\r\n >\r\n {g.title}\r\n </Box>\r\n {g.items.map((entry) => {\r\n i += 1;\r\n const isActive = i === highlight;\r\n const idx = i;\r\n return (\r\n <Box\r\n key={entry.id}\r\n role=\"option\"\r\n id={`${listId}-opt-${idx}`}\r\n aria-selected={isActive}\r\n data-item-index={idx}\r\n onMouseEnter={() => setHighlight(idx)}\r\n onClick={() => activate(idx)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n cursor: \"pointer\",\r\n background: isActive ? \"var(--accent-soft)\" : \"transparent\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg)\",\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n }}\r\n >\r\n {entry.icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg-muted)\",\r\n }}\r\n >\r\n {entry.icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {entry.label}\r\n </Box>\r\n {entry.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {entry.shortcut}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n });\r\n })()}\r\n </Box>\r\n\r\n {/* Footer */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n borderTop: \"1px solid var(--border)\",\r\n background: \"var(--bg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {/* Visual-only keyboard hints. Hidden from SR — the listbox already\r\n exposes navigation via aria-activedescendant + role semantics. */}\r\n <Box aria-hidden=\"true\">{L.footerHint}</Box>\r\n {/* R-A.1 — polite live region so SR users hear the result count\r\n change as they type. aria-atomic ensures the full sentence is\r\n re-read on update. C6 — aria-relevant explicit closes NVDA +\r\n Firefox cross-sibling pull-in quirks. */}\r\n <Box role=\"status\" aria-live=\"polite\" aria-relevant=\"additions text\" aria-atomic=\"true\">\r\n {L.resultsCount(itemsOnly.length)}\r\n </Box>\r\n </Box>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandPalette;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CommandPalette.js","names":["React","Dialog","Box","IconButton","SearchIcon","CloseIcon","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_MS","DEFAULT_LABELS","Object","freeze","title","footerHint","closeButton","resultsCount","n","pinnedTitle","recentTitle","BACKDROP_SLOT_PROPS","sx","backgroundColor","useDebounced","value","ms","out","setOut","useState","useEffect","t","setTimeout","clearTimeout","normalize","s","String","replace","toLowerCase","subsequenceRun","hay","token","i","consecutive","bestConsecutive","h","length","scoreToken","startsWith","wbIdx","indexOf","subIdx","Math","min","run","scoreQuery","haystack","query","tokens","split","filter","Boolean","total","filterGroups","groups","q","trim","map","g","id","items","scored","it","label","keywords","push","item","score","sort","a","b","CommandPalette","open","onClose","recentItems","pinnedItems","placeholder","emptyState","onQueryChange","labels","L","useMemo","setQuery","debouncedQuery","highlight","setHighlight","inputRef","useRef","listRef","titleId","useId","listId","inputId","paperRef","allGroups","hasPinned","Array","isArray","hasRecent","visibleGroups","itemsOnly","flatMap","max","node","current","querySelector","scrollIntoView","block","activate","index","onSelect","onInputKeyDown","e","key","preventDefault","onInputChange","target","activeItemId","undefined","slotProps","paper","ref","width","maxWidth","borderRadius","boxShadow","margin","overflow","backdrop","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","children","className","display","alignItems","gap","padding","borderBottom","color","fontSize","component","type","role","autoFocus","onChange","onKeyDown","flex","border","outline","background","fontFamily","fontWeight","size","onClick","maxHeight","overflowY","textAlign","headerId","textTransform","letterSpacing","entry","isActive","idx","onMouseEnter","cursor","icon","minWidth","textOverflow","whiteSpace","shortcut","justifyContent","borderTop"],"sources":["../../../../src/lib/v2/components/CommandPalette.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * CommandPalette - Portnet UI v2\r\n *\r\n * Charter §03 / §07 · ⌘K command palette. Keyboard-first launcher for pages\r\n * and actions across the app.\r\n *\r\n * const [open, setOpen] = useState(false);\r\n * useEffect(() => {\r\n * const onKey = (e) => {\r\n * if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"k\") {\r\n * e.preventDefault();\r\n * setOpen(true);\r\n * }\r\n * };\r\n * window.addEventListener(\"keydown\", onKey);\r\n * return () => window.removeEventListener(\"keydown\", onKey);\r\n * }, []);\r\n *\r\n * <CommandPalette\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * groups={[\r\n * { id: \"pages\", title: \"Pages\", items: [\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * { id: \"titres\", label: \"Titres d'importation\", onSelect: () => nav(\"/titres\") },\r\n * ]},\r\n * { id: \"actions\", title: \"Actions\", items: [\r\n * { id: \"new-titre\", label: \"Nouveau titre\", icon: <AddIcon />, shortcut: \"C\", onSelect: createTitre },\r\n * ]},\r\n * ]}\r\n * />\r\n *\r\n * Recent + Pinned items (Batch 16 / H4)\r\n * -------------------------------------\r\n * <CommandPalette\r\n * pinnedItems={[\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * ]}\r\n * recentItems={[\r\n * { id: \"titre-2025-IM-0042\", label: \"2025-IM-0042 (SOFRANE SA)\", onSelect: () => nav(\"/titres/2025-IM-0042\") },\r\n * ]}\r\n * groups={[ ... ]}\r\n * />\r\n *\r\n * Both extras are HOST-MANAGED. Lib does NOT track selections or\r\n * pinning state — track in your per-item onSelect handler and\r\n * persist to localStorage / server prefs as a host concern.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <CommandPalette\r\n * placeholder=\"Search a page or action…\"\r\n * emptyState=\"No result.\"\r\n * labels={{\r\n * title: \"Command palette\",\r\n * footerHint: \"↑↓ to navigate · ↵ to select · Esc to close\",\r\n * closeButton: \"Close palette\",\r\n * resultsCount: (n) => `${n} result${n === 1 ? \"\" : \"s\"}`,\r\n * pinnedTitle: \"Pinned\",\r\n * recentTitle: \"Recent\",\r\n * }}\r\n * />\r\n *\r\n * `resultsCount` is a function so the host can plug in proper plural\r\n * rules (Intl.PluralRules, ICU MessageFormat, i18next, …).\r\n *\r\n * Matching behaviour (Batch 13 / D2):\r\n * The search is fuzzy. Each match is scored across four tiers\r\n * (prefix > word-boundary > substring > subsequence) and within\r\n * each group items are surfaced in descending score order.\r\n * Multi-token queries (\"tit imp\") split on whitespace and require\r\n * every token to hit somewhere; final score is the per-token\r\n * average. Diacritics are folded — \"Emile\" matches \"Émile\".\r\n *\r\n * Focus management (R-F.2):\r\n * Backed by the v2 useFocusTrap hook (Batch 3). The search <input>\r\n * declares `autoFocus`, so on open the trap's initial-focus rAF\r\n * lands directly on it. The input is a role=\"combobox\" and carries an\r\n * aria-label (CP-1) so screen readers announce a name, not just a role.\r\n */\r\n\r\nconst DEBOUNCE_MS = 80;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Palette de commandes\",\r\n footerHint: \"↑↓ pour naviguer · ↵ pour sélectionner · Esc pour fermer\",\r\n closeButton: \"Fermer la palette\",\r\n resultsCount: (n: number) => `${n} résultat${n > 1 ? \"s\" : \"\"}`,\r\n pinnedTitle: \"Épinglés\",\r\n recentTitle: \"Récents\",\r\n});\r\n\r\n// MUI v9: backdrop slot bag. Hoisted — its content (only an sx token)\r\n// is independent of any palette instance state.\r\nconst BACKDROP_SLOT_PROPS = Object.freeze({\r\n // R-G.2 / R-AI.1 - backdrop derived from the live --fg token (matches\r\n // Modal). Adapts to any future theme override.\r\n sx: { backgroundColor: \"color-mix(in srgb, var(--fg) 45%, transparent)\" },\r\n});\r\n\r\nexport interface CommandPaletteItem {\r\n id: string | number;\r\n label: React.ReactNode;\r\n icon?: React.ReactNode | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n keywords?: string | undefined;\r\n onSelect?: (() => void) | undefined;\r\n}\r\n\r\nexport interface CommandPaletteGroup {\r\n id: string;\r\n title?: React.ReactNode | undefined;\r\n items: CommandPaletteItem[];\r\n}\r\n\r\nexport interface CommandPaletteLabels {\r\n title?: string | undefined;\r\n footerHint?: string | undefined;\r\n closeButton?: string | undefined;\r\n resultsCount?: ((n: number) => React.ReactNode) | undefined;\r\n pinnedTitle?: React.ReactNode | undefined;\r\n recentTitle?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface CommandPaletteProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n groups?: CommandPaletteGroup[] | undefined;\r\n recentItems?: CommandPaletteItem[] | undefined;\r\n pinnedItems?: CommandPaletteItem[] | undefined;\r\n placeholder?: string | undefined;\r\n emptyState?: React.ReactNode | undefined;\r\n onQueryChange?: ((q: string) => void) | undefined;\r\n labels?: CommandPaletteLabels | undefined;\r\n}\r\n\r\nfunction useDebounced<T>(value: T, ms: number): T {\r\n const [out, setOut] = React.useState(value);\r\n React.useEffect(() => {\r\n const t = setTimeout(() => setOut(value), ms);\r\n return () => clearTimeout(t);\r\n }, [value, ms]);\r\n return out;\r\n}\r\n\r\n/* ── Fuzzy matching (D2) ───────────────────────────────────────────────\r\n * Module-level pure helpers. No external dep, no allocation per match\r\n * beyond the obligatory tokenisation Array.\r\n *\r\n * Score scale is conventional, NOT meaningful in absolute terms:\r\n * - 0 → no match (filtered out)\r\n * - higher → more relevant (sorted descending within each group)\r\n */\r\n\r\n/**\r\n * NFD-normalise + strip combining marks + lowercase. Folds diacritics\r\n * so \"Émile\" → \"emile\" and \"Café\" → \"cafe\", letting users search\r\n * without typing accents. The unicode range \\u0300-\\u036F covers the\r\n * Combining Diacritical Marks block (U+0300..U+036F).\r\n */\r\nfunction normalize(s: string): string {\r\n if (!s) return \"\";\r\n return String(s).normalize(\"NFD\").replace(/[\\u0300-\\u036F]/g, \"\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Subsequence match score — how well does `token` appear (in order,\r\n * not necessarily contiguous) inside `hay`?\r\n *\r\n * - Returns 0 if any character is missing.\r\n * - Otherwise returns the longest CONSECUTIVE run divided by the\r\n * token length. So \"imp\" inside \"important\" gets ratio 1.0\r\n * (whole word matched contiguously), while \"imp\" inside\r\n * \"i_m_p\" (gaps) gets a low ratio.\r\n *\r\n * The contiguous-run heuristic is much cheaper than a full Smith-\r\n * Waterman and good enough for command-palette UX.\r\n */\r\nfunction subsequenceRun(hay: string, token: string): number {\r\n let i = 0;\r\n let consecutive = 0;\r\n let bestConsecutive = 0;\r\n for (let h = 0; h < hay.length && i < token.length; h += 1) {\r\n if (hay[h] === token[i]) {\r\n i += 1;\r\n consecutive += 1;\r\n if (consecutive > bestConsecutive) bestConsecutive = consecutive;\r\n } else {\r\n consecutive = 0;\r\n }\r\n }\r\n if (i < token.length) return 0;\r\n return bestConsecutive / token.length;\r\n}\r\n\r\n/**\r\n * Score a single token against a haystack. Four tiers, best wins.\r\n * Both inputs are assumed already normalised (lowercase, no diacritics).\r\n */\r\nfunction scoreToken(hay: string, token: string): number {\r\n if (hay.startsWith(token)) return 100;\r\n\r\n const wbIdx = hay.indexOf(\" \" + token);\r\n if (wbIdx >= 0) return 80;\r\n\r\n const subIdx = hay.indexOf(token);\r\n if (subIdx >= 0) {\r\n return 60 - Math.min(20, subIdx * 0.1);\r\n }\r\n\r\n const run = subsequenceRun(hay, token);\r\n if (run > 0) return 40 * run;\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Score a multi-token query. Splits on whitespace; every token must hit\r\n * somewhere. Returns the average across tokens, or 0 if any token misses.\r\n */\r\nfunction scoreQuery(haystack: string, query: string): number {\r\n const hay = normalize(haystack);\r\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\r\n if (tokens.length === 0) return 1;\r\n if (!hay) return 0;\r\n\r\n let total = 0;\r\n for (const token of tokens) {\r\n const s = scoreToken(hay, token);\r\n if (s === 0) return 0;\r\n total += s;\r\n }\r\n return total / tokens.length;\r\n}\r\n\r\n/**\r\n * Filter `groups` against the query. Within each group, items are\r\n * surfaced in descending score order (most relevant first). Group\r\n * order itself is preserved — groups are author-defined categories,\r\n * not relevance buckets.\r\n *\r\n * Empty / whitespace-only query → return groups untouched (just drop\r\n * the empty ones). Preserves the original \"no query = browse\" UX.\r\n */\r\nfunction filterGroups(groups: CommandPaletteGroup[], query: string): CommandPaletteGroup[] {\r\n const q = query.trim();\r\n if (!q) {\r\n return groups\r\n .map((g) => ({ id: g.id, title: g.title, items: g.items }))\r\n .filter((g) => g.items.length > 0);\r\n }\r\n\r\n const out: CommandPaletteGroup[] = [];\r\n for (const g of groups) {\r\n const scored: Array<{ item: CommandPaletteItem; score: number }> = [];\r\n for (const it of g.items) {\r\n const hay = `${it.label} ${it.keywords || \"\"}`;\r\n const s = scoreQuery(hay, q);\r\n if (s > 0) scored.push({ item: it, score: s });\r\n }\r\n if (scored.length === 0) continue;\r\n scored.sort((a, b) => b.score - a.score);\r\n out.push({ id: g.id, title: g.title, items: scored.map((s) => s.item) });\r\n }\r\n return out;\r\n}\r\n\r\nfunction CommandPalette({\r\n open,\r\n onClose,\r\n groups = [],\r\n recentItems,\r\n pinnedItems,\r\n placeholder = \"Rechercher une page, une action…\",\r\n emptyState = \"Aucun résultat.\",\r\n onQueryChange,\r\n labels,\r\n}: CommandPaletteProps) {\r\n const L = React.useMemo(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n\r\n const [query, setQuery] = React.useState(\"\");\r\n const debouncedQuery = useDebounced(query, DEBOUNCE_MS);\r\n const [highlight, setHighlight] = React.useState(0);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n const listRef = React.useRef<HTMLDivElement>(null);\r\n const titleId = React.useId();\r\n const listId = React.useId();\r\n const inputId = React.useId();\r\n\r\n // R-F.2 - the v2 trap is wired on the Dialog Paper element, activated\r\n // only while the palette is open. MUI's own trap is disabled below.\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef as React.RefObject<HTMLDivElement>, !!open);\r\n\r\n // H4 — synthetic groups for pinnedItems / recentItems prepended to\r\n // the host's groups. Empty extras collapse the array to `groups`\r\n // verbatim — same reference when neither prop is set, so downstream\r\n // memoisation stays valid for the no-op case.\r\n const allGroups = React.useMemo<CommandPaletteGroup[]>(() => {\r\n const hasPinned = Array.isArray(pinnedItems) && pinnedItems.length > 0;\r\n const hasRecent = Array.isArray(recentItems) && recentItems.length > 0;\r\n if (!hasPinned && !hasRecent) return groups;\r\n const out: CommandPaletteGroup[] = [];\r\n if (hasPinned) {\r\n out.push({ id: \"_pinned\", title: L.pinnedTitle, items: pinnedItems ?? [] });\r\n }\r\n if (hasRecent) {\r\n out.push({ id: \"_recent\", title: L.recentTitle, items: recentItems ?? [] });\r\n }\r\n return [...out, ...groups];\r\n }, [pinnedItems, recentItems, groups, L.pinnedTitle, L.recentTitle]);\r\n\r\n const visibleGroups = React.useMemo(\r\n () => filterGroups(allGroups, debouncedQuery),\r\n [allGroups, debouncedQuery]\r\n );\r\n const itemsOnly = React.useMemo(\r\n () => visibleGroups.flatMap((g) => g.items),\r\n [visibleGroups]\r\n );\r\n\r\n // Reset state on (re)open. Initial focus on the input is handled by\r\n // useFocusTrap above (the input carries `autoFocus`).\r\n React.useEffect(() => {\r\n if (!open) return;\r\n setQuery(\"\");\r\n setHighlight(0);\r\n }, [open]);\r\n\r\n // Keep highlight valid when results shrink/grow\r\n React.useEffect(() => {\r\n if (highlight >= itemsOnly.length) {\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n }, [itemsOnly.length, highlight]);\r\n\r\n // Scroll the highlighted item into view\r\n React.useEffect(() => {\r\n if (!open || itemsOnly.length === 0) return;\r\n const node = listRef.current?.querySelector(`[data-item-index=\"${highlight}\"]`);\r\n if (node) node.scrollIntoView({ block: \"nearest\" });\r\n }, [highlight, open, itemsOnly.length]);\r\n\r\n const activate = (index: number) => {\r\n const it = itemsOnly[index];\r\n if (!it) return;\r\n onClose?.();\r\n // Defer the action one tick so onClose can restore focus before any\r\n // navigation happens (consumer-side routing).\r\n setTimeout(() => it.onSelect?.(), 0);\r\n };\r\n\r\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h + 1) % itemsOnly.length));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h - 1 + itemsOnly.length) % itemsOnly.length));\r\n } else if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n activate(highlight);\r\n } else if (e.key === \"Home\") {\r\n e.preventDefault();\r\n setHighlight(0);\r\n } else if (e.key === \"End\") {\r\n e.preventDefault();\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n };\r\n\r\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setQuery(e.target.value);\r\n onQueryChange?.(e.target.value);\r\n setHighlight(0);\r\n };\r\n\r\n const activeItemId = itemsOnly[highlight] ? `${listId}-opt-${highlight}` : undefined;\r\n\r\n // MUI v9: Dialog paper + backdrop bags forwarded through slotProps.\r\n // The paper slot embeds the per-instance focus-trap ref so we\r\n // useMemo it for reference stability across renders.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width: \"100%\",\r\n maxWidth: 640,\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n margin: \"var(--s-3)\",\r\n overflow: \"hidden\",\r\n } satisfies SxProps<Theme>,\r\n },\r\n backdrop: BACKDROP_SLOT_PROPS,\r\n }),\r\n []\r\n );\r\n\r\n return (\r\n <Dialog\r\n open={!!open}\r\n onClose={onClose}\r\n maxWidth={false}\r\n aria-labelledby={titleId}\r\n // Hand over focus management to useFocusTrap above.\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n slotProps={slotProps}\r\n >\r\n <Box className=\"pui-sr-only\" id={titleId}>\r\n {L.title}\r\n </Box>\r\n\r\n {/* Search input row */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n }}\r\n >\r\n <SearchIcon\r\n aria-hidden=\"true\"\r\n sx={{ color: \"var(--fg-subtle)\", fontSize: 20 }}\r\n />\r\n <Box\r\n component=\"input\"\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-expanded=\"true\"\r\n aria-controls={listId}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={activeItemId}\r\n // CP-1 — accessible name for the combobox input. The sr-only title\r\n // labels the Dialog, not this input, and a placeholder is not a\r\n // reliable accessible name; expose the placeholder text as the name.\r\n aria-label={placeholder}\r\n autoFocus\r\n value={query}\r\n onChange={onInputChange}\r\n onKeyDown={onInputKeyDown}\r\n placeholder={placeholder}\r\n sx={{\r\n flex: 1,\r\n border: 0,\r\n outline: \"none\",\r\n background: \"transparent\",\r\n fontFamily: \"inherit\",\r\n fontSize: \"var(--text-body, 14px)\",\r\n color: \"var(--fg)\",\r\n \"&::placeholder\": { color: \"var(--fg-subtle)\" },\r\n }}\r\n />\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n ESC\r\n </Box>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.closeButton}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Results listbox */}\r\n <Box\r\n ref={listRef}\r\n role=\"listbox\"\r\n id={listId}\r\n aria-labelledby={titleId}\r\n sx={{\r\n maxHeight: 360,\r\n overflowY: \"auto\",\r\n padding: \"var(--s-2) 0\",\r\n }}\r\n >\r\n {visibleGroups.length === 0 && (\r\n <Box\r\n sx={{\r\n padding: \"var(--s-5) var(--s-4)\",\r\n textAlign: \"center\",\r\n color: \"var(--fg-muted)\",\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n {emptyState}\r\n </Box>\r\n )}\r\n {(() => {\r\n let i = -1;\r\n return visibleGroups.map((g) => {\r\n const headerId = `${listId}-h-${g.id}`;\r\n return (\r\n <Box\r\n key={g.id}\r\n role=\"group\"\r\n aria-labelledby={headerId}\r\n >\r\n <Box\r\n id={headerId}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.06em\",\r\n padding: \"var(--s-2) var(--s-4) var(--s-1)\",\r\n }}\r\n >\r\n {g.title}\r\n </Box>\r\n {g.items.map((entry) => {\r\n i += 1;\r\n const isActive = i === highlight;\r\n const idx = i;\r\n return (\r\n <Box\r\n key={entry.id}\r\n role=\"option\"\r\n id={`${listId}-opt-${idx}`}\r\n aria-selected={isActive}\r\n data-item-index={idx}\r\n onMouseEnter={() => setHighlight(idx)}\r\n onClick={() => activate(idx)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n cursor: \"pointer\",\r\n background: isActive ? \"var(--accent-soft)\" : \"transparent\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg)\",\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n }}\r\n >\r\n {entry.icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg-muted)\",\r\n }}\r\n >\r\n {entry.icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {entry.label}\r\n </Box>\r\n {entry.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {entry.shortcut}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n });\r\n })()}\r\n </Box>\r\n\r\n {/* Footer */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n borderTop: \"1px solid var(--border)\",\r\n background: \"var(--bg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {/* Visual-only keyboard hints. Hidden from SR — the listbox already\r\n exposes navigation via aria-activedescendant + role semantics. */}\r\n <Box aria-hidden=\"true\">{L.footerHint}</Box>\r\n {/* R-A.1 — polite live region so SR users hear the result count\r\n change as they type. aria-atomic ensures the full sentence is\r\n re-read on update. C6 — aria-relevant explicit closes NVDA +\r\n Firefox cross-sibling pull-in quirks. */}\r\n <Box role=\"status\" aria-live=\"polite\" aria-relevant=\"additions text\" aria-atomic=\"true\">\r\n {L.resultsCount(itemsOnly.length)}\r\n </Box>\r\n </Box>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandPalette;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,MAAM,MAAM,sBAAsB;AACzC,OAAOC,GAAG,MAAM,mBAAmB;AACnC,OAAOC,UAAU,MAAM,0BAA0B;AACjD,OAAOC,UAAU,MAAM,4BAA4B;AACnD,OAAOC,SAAS,MAAM,2BAA2B;AAEjD,OAAOC,YAAY,MAAM,uBAAuB;AAChD,SAASC,WAAW,QAAQ,sBAAsB;;AAElD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9EA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgFA,MAAMC,WAAW,GAAG,EAAE;AAEtB,MAAMC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EACnCC,KAAK,EAAS,sBAAsB;EACpCC,UAAU,EAAI,0DAA0D;EACxEC,WAAW,EAAG,mBAAmB;EACjCC,YAAY,EAAGC,CAAS,IAAK,GAAGA,CAAC,YAAYA,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;EAC/DC,WAAW,EAAG,UAAU;EACxBC,WAAW,EAAG;AAChB,CAAC,CAAC;;AAEF;AACA;AACA,MAAMC,mBAAmB,GAAGT,MAAM,CAACC,MAAM,CAAC;EACxC;EACA;EACAS,EAAE,EAAE;IAAEC,eAAe,EAAE;EAAiD;AAC1E,CAAC,CAAC;AAsCF,SAASC,YAAYA,CAAIC,KAAQ,EAAEC,EAAU,EAAK;EAChD,MAAM,CAACC,GAAG,EAAEC,MAAM,CAAC,GAAG9B,KAAK,CAAC+B,QAAQ,CAACJ,KAAK,CAAC;EAC3C3B,KAAK,CAACgC,SAAS,CAAC,MAAM;IACpB,MAAMC,CAAC,GAAGC,UAAU,CAAC,MAAMJ,MAAM,CAACH,KAAK,CAAC,EAAEC,EAAE,CAAC;IAC7C,OAAO,MAAMO,YAAY,CAACF,CAAC,CAAC;EAC9B,CAAC,EAAE,CAACN,KAAK,EAAEC,EAAE,CAAC,CAAC;EACf,OAAOC,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASO,SAASA,CAACC,CAAS,EAAU;EACpC,IAAI,CAACA,CAAC,EAAE,OAAO,EAAE;EACjB,OAAOC,MAAM,CAACD,CAAC,CAAC,CAACD,SAAS,CAAC,KAAK,CAAC,CAACG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAACC,WAAW,CAAC,CAAC;AACjF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAACC,GAAW,EAAEC,KAAa,EAAU;EAC1D,IAAIC,CAAC,GAAG,CAAC;EACT,IAAIC,WAAW,GAAG,CAAC;EACnB,IAAIC,eAAe,GAAG,CAAC;EACvB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,IAAIJ,CAAC,GAAGD,KAAK,CAACK,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;IAC1D,IAAIL,GAAG,CAACK,CAAC,CAAC,KAAKJ,KAAK,CAACC,CAAC,CAAC,EAAE;MACvBA,CAAC,IAAI,CAAC;MACNC,WAAW,IAAI,CAAC;MAChB,IAAIA,WAAW,GAAGC,eAAe,EAAEA,eAAe,GAAGD,WAAW;IAClE,CAAC,MAAM;MACLA,WAAW,GAAG,CAAC;IACjB;EACF;EACA,IAAID,CAAC,GAAGD,KAAK,CAACK,MAAM,EAAE,OAAO,CAAC;EAC9B,OAAOF,eAAe,GAAGH,KAAK,CAACK,MAAM;AACvC;;AAEA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAACP,GAAW,EAAEC,KAAa,EAAU;EACtD,IAAID,GAAG,CAACQ,UAAU,CAACP,KAAK,CAAC,EAAE,OAAO,GAAG;EAErC,MAAMQ,KAAK,GAAGT,GAAG,CAACU,OAAO,CAAC,GAAG,GAAGT,KAAK,CAAC;EACtC,IAAIQ,KAAK,IAAI,CAAC,EAAE,OAAO,EAAE;EAEzB,MAAME,MAAM,GAAGX,GAAG,CAACU,OAAO,CAACT,KAAK,CAAC;EACjC,IAAIU,MAAM,IAAI,CAAC,EAAE;IACf,OAAO,EAAE,GAAGC,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEF,MAAM,GAAG,GAAG,CAAC;EACxC;EAEA,MAAMG,GAAG,GAAGf,cAAc,CAACC,GAAG,EAAEC,KAAK,CAAC;EACtC,IAAIa,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAGA,GAAG;EAE5B,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAACC,QAAgB,EAAEC,KAAa,EAAU;EAC3D,MAAMjB,GAAG,GAAGN,SAAS,CAACsB,QAAQ,CAAC;EAC/B,MAAME,MAAM,GAAGxB,SAAS,CAACuB,KAAK,CAAC,CAACE,KAAK,CAAC,KAAK,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAC5D,IAAIH,MAAM,CAACZ,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC;EACjC,IAAI,CAACN,GAAG,EAAE,OAAO,CAAC;EAElB,IAAIsB,KAAK,GAAG,CAAC;EACb,KAAK,MAAMrB,KAAK,IAAIiB,MAAM,EAAE;IAC1B,MAAMvB,CAAC,GAAGY,UAAU,CAACP,GAAG,EAAEC,KAAK,CAAC;IAChC,IAAIN,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACrB2B,KAAK,IAAI3B,CAAC;EACZ;EACA,OAAO2B,KAAK,GAAGJ,MAAM,CAACZ,MAAM;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiB,YAAYA,CAACC,MAA6B,EAAEP,KAAa,EAAyB;EACzF,MAAMQ,CAAC,GAAGR,KAAK,CAACS,IAAI,CAAC,CAAC;EACtB,IAAI,CAACD,CAAC,EAAE;IACN,OAAOD,MAAM,CACVG,GAAG,CAAEC,CAAC,KAAM;MAAEC,EAAE,EAAED,CAAC,CAACC,EAAE;MAAEvD,KAAK,EAAEsD,CAAC,CAACtD,KAAK;MAAEwD,KAAK,EAAEF,CAAC,CAACE;IAAM,CAAC,CAAC,CAAC,CAC1DV,MAAM,CAAEQ,CAAC,IAAKA,CAAC,CAACE,KAAK,CAACxB,MAAM,GAAG,CAAC,CAAC;EACtC;EAEA,MAAMnB,GAA0B,GAAG,EAAE;EACrC,KAAK,MAAMyC,CAAC,IAAIJ,MAAM,EAAE;IACtB,MAAMO,MAA0D,GAAG,EAAE;IACrE,KAAK,MAAMC,EAAE,IAAIJ,CAAC,CAACE,KAAK,EAAE;MACxB,MAAM9B,GAAG,GAAG,GAAGgC,EAAE,CAACC,KAAK,IAAID,EAAE,CAACE,QAAQ,IAAI,EAAE,EAAE;MAC9C,MAAMvC,CAAC,GAAGoB,UAAU,CAACf,GAAG,EAAEyB,CAAC,CAAC;MAC5B,IAAI9B,CAAC,GAAG,CAAC,EAAEoC,MAAM,CAACI,IAAI,CAAC;QAAEC,IAAI,EAAEJ,EAAE;QAAEK,KAAK,EAAE1C;MAAE,CAAC,CAAC;IAChD;IACA,IAAIoC,MAAM,CAACzB,MAAM,KAAK,CAAC,EAAE;IACzByB,MAAM,CAACO,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACH,KAAK,GAAGE,CAAC,CAACF,KAAK,CAAC;IACxClD,GAAG,CAACgD,IAAI,CAAC;MAAEN,EAAE,EAAED,CAAC,CAACC,EAAE;MAAEvD,KAAK,EAAEsD,CAAC,CAACtD,KAAK;MAAEwD,KAAK,EAAEC,MAAM,CAACJ,GAAG,CAAEhC,CAAC,IAAKA,CAAC,CAACyC,IAAI;IAAE,CAAC,CAAC;EAC1E;EACA,OAAOjD,GAAG;AACZ;AAEA,SAASsD,cAAcA,CAAC;EACtBC,IAAI;EACJC,OAAO;EACPnB,MAAM,GAAG,EAAE;EACXoB,WAAW;EACXC,WAAW;EACXC,WAAW,GAAG,kCAAkC;EAChDC,UAAU,GAAG,iBAAiB;EAC9BC,aAAa;EACbC;AACmB,CAAC,EAAE;EACtB,MAAMC,CAAC,GAAG5F,KAAK,CAAC6F,OAAO,CACrB,MAAOtF,WAAW,CAACM,cAAc,EAAE8E,MAAM,CAAE,EAC3C,CAACA,MAAM,CACT,CAAC;EAED,MAAM,CAAChC,KAAK,EAAEmC,QAAQ,CAAC,GAAG9F,KAAK,CAAC+B,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAMgE,cAAc,GAAGrE,YAAY,CAACiC,KAAK,EAAE/C,WAAW,CAAC;EACvD,MAAM,CAACoF,SAAS,EAAEC,YAAY,CAAC,GAAGjG,KAAK,CAAC+B,QAAQ,CAAC,CAAC,CAAC;EACnD,MAAMmE,QAAQ,GAAGlG,KAAK,CAACmG,MAAM,CAAmB,IAAI,CAAC;EACrD,MAAMC,OAAO,GAAIpG,KAAK,CAACmG,MAAM,CAAiB,IAAI,CAAC;EACnD,MAAME,OAAO,GAAIrG,KAAK,CAACsG,KAAK,CAAC,CAAC;EAC9B,MAAMC,MAAM,GAAKvG,KAAK,CAACsG,KAAK,CAAC,CAAC;EAC9B,MAAME,OAAO,GAAIxG,KAAK,CAACsG,KAAK,CAAC,CAAC;;EAE9B;EACA;EACA,MAAMG,QAAQ,GAAGzG,KAAK,CAACmG,MAAM,CAAiB,IAAI,CAAC;EACnD7F,YAAY,CAACmG,QAAQ,EAAqC,CAAC,CAACrB,IAAI,CAAC;;EAEjE;EACA;EACA;EACA;EACA,MAAMsB,SAAS,GAAG1G,KAAK,CAAC6F,OAAO,CAAwB,MAAM;IAC3D,MAAMc,SAAS,GAAGC,KAAK,CAACC,OAAO,CAACtB,WAAW,CAAC,IAAIA,WAAW,CAACvC,MAAM,GAAG,CAAC;IACtE,MAAM8D,SAAS,GAAGF,KAAK,CAACC,OAAO,CAACvB,WAAW,CAAC,IAAIA,WAAW,CAACtC,MAAM,GAAG,CAAC;IACtE,IAAI,CAAC2D,SAAS,IAAI,CAACG,SAAS,EAAE,OAAO5C,MAAM;IAC3C,MAAMrC,GAA0B,GAAG,EAAE;IACrC,IAAI8E,SAAS,EAAE;MACb9E,GAAG,CAACgD,IAAI,CAAC;QAAEN,EAAE,EAAE,SAAS;QAAEvD,KAAK,EAAE4E,CAAC,CAACvE,WAAW;QAAEmD,KAAK,EAAEe,WAAW,IAAI;MAAG,CAAC,CAAC;IAC7E;IACA,IAAIuB,SAAS,EAAE;MACbjF,GAAG,CAACgD,IAAI,CAAC;QAAEN,EAAE,EAAE,SAAS;QAAEvD,KAAK,EAAE4E,CAAC,CAACtE,WAAW;QAAEkD,KAAK,EAAEc,WAAW,IAAI;MAAG,CAAC,CAAC;IAC7E;IACA,OAAO,CAAC,GAAGzD,GAAG,EAAE,GAAGqC,MAAM,CAAC;EAC5B,CAAC,EAAE,CAACqB,WAAW,EAAED,WAAW,EAAEpB,MAAM,EAAE0B,CAAC,CAACvE,WAAW,EAAEuE,CAAC,CAACtE,WAAW,CAAC,CAAC;EAEpE,MAAMyF,aAAa,GAAG/G,KAAK,CAAC6F,OAAO,CACjC,MAAM5B,YAAY,CAACyC,SAAS,EAAEX,cAAc,CAAC,EAC7C,CAACW,SAAS,EAAEX,cAAc,CAC5B,CAAC;EACD,MAAMiB,SAAS,GAAGhH,KAAK,CAAC6F,OAAO,CAC7B,MAAMkB,aAAa,CAACE,OAAO,CAAE3C,CAAC,IAAKA,CAAC,CAACE,KAAK,CAAC,EAC3C,CAACuC,aAAa,CAChB,CAAC;;EAED;EACA;EACA/G,KAAK,CAACgC,SAAS,CAAC,MAAM;IACpB,IAAI,CAACoD,IAAI,EAAE;IACXU,QAAQ,CAAC,EAAE,CAAC;IACZG,YAAY,CAAC,CAAC,CAAC;EACjB,CAAC,EAAE,CAACb,IAAI,CAAC,CAAC;;EAEV;EACApF,KAAK,CAACgC,SAAS,CAAC,MAAM;IACpB,IAAIgE,SAAS,IAAIgB,SAAS,CAAChE,MAAM,EAAE;MACjCiD,YAAY,CAAC3C,IAAI,CAAC4D,GAAG,CAAC,CAAC,EAAEF,SAAS,CAAChE,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD;EACF,CAAC,EAAE,CAACgE,SAAS,CAAChE,MAAM,EAAEgD,SAAS,CAAC,CAAC;;EAEjC;EACAhG,KAAK,CAACgC,SAAS,CAAC,MAAM;IACpB,IAAI,CAACoD,IAAI,IAAI4B,SAAS,CAAChE,MAAM,KAAK,CAAC,EAAE;IACrC,MAAMmE,IAAI,GAAGf,OAAO,CAACgB,OAAO,EAAEC,aAAa,CAAC,qBAAqBrB,SAAS,IAAI,CAAC;IAC/E,IAAImB,IAAI,EAAEA,IAAI,CAACG,cAAc,CAAC;MAAEC,KAAK,EAAE;IAAU,CAAC,CAAC;EACrD,CAAC,EAAE,CAACvB,SAAS,EAAEZ,IAAI,EAAE4B,SAAS,CAAChE,MAAM,CAAC,CAAC;EAEvC,MAAMwE,QAAQ,GAAIC,KAAa,IAAK;IAClC,MAAM/C,EAAE,GAAGsC,SAAS,CAACS,KAAK,CAAC;IAC3B,IAAI,CAAC/C,EAAE,EAAE;IACTW,OAAO,GAAG,CAAC;IACX;IACA;IACAnD,UAAU,CAAC,MAAMwC,EAAE,CAACgD,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;EACtC,CAAC;EAED,MAAMC,cAAc,GAAIC,CAAwC,IAAK;IACnE,IAAIA,CAAC,CAACC,GAAG,KAAK,WAAW,EAAE;MACzBD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClB7B,YAAY,CAAElD,CAAC,IAAMiE,SAAS,CAAChE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAACD,CAAC,GAAG,CAAC,IAAIiE,SAAS,CAAChE,MAAO,CAAC;IAChF,CAAC,MAAM,IAAI4E,CAAC,CAACC,GAAG,KAAK,SAAS,EAAE;MAC9BD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClB7B,YAAY,CAAElD,CAAC,IAAMiE,SAAS,CAAChE,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAACD,CAAC,GAAG,CAAC,GAAGiE,SAAS,CAAChE,MAAM,IAAIgE,SAAS,CAAChE,MAAO,CAAC;IACnG,CAAC,MAAM,IAAI4E,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;MAC5BD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClBN,QAAQ,CAACxB,SAAS,CAAC;IACrB,CAAC,MAAM,IAAI4B,CAAC,CAACC,GAAG,KAAK,MAAM,EAAE;MAC3BD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClB7B,YAAY,CAAC,CAAC,CAAC;IACjB,CAAC,MAAM,IAAI2B,CAAC,CAACC,GAAG,KAAK,KAAK,EAAE;MAC1BD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClB7B,YAAY,CAAC3C,IAAI,CAAC4D,GAAG,CAAC,CAAC,EAAEF,SAAS,CAAChE,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD;EACF,CAAC;EAED,MAAM+E,aAAa,GAAIH,CAAsC,IAAK;IAChE9B,QAAQ,CAAC8B,CAAC,CAACI,MAAM,CAACrG,KAAK,CAAC;IACxB+D,aAAa,GAAGkC,CAAC,CAACI,MAAM,CAACrG,KAAK,CAAC;IAC/BsE,YAAY,CAAC,CAAC,CAAC;EACjB,CAAC;EAED,MAAMgC,YAAY,GAAGjB,SAAS,CAAChB,SAAS,CAAC,GAAG,GAAGO,MAAM,QAAQP,SAAS,EAAE,GAAGkC,SAAS;;EAEpF;EACA;EACA;EACA,MAAMC,SAAS,GAAGnI,KAAK,CAAC6F,OAAO,CAC7B,OAAO;IACLuC,KAAK,EAAE;MACLC,GAAG,EAAE5B,QAAQ;MACbjF,EAAE,EAAE;QACF8G,KAAK,EAAE,MAAM;QACbC,QAAQ,EAAE,GAAG;QACbC,YAAY,EAAE,aAAa;QAC3BC,SAAS,EAAE,kBAAkB;QAC7BC,MAAM,EAAE,YAAY;QACpBC,QAAQ,EAAE;MACZ;IACF,CAAC;IACDC,QAAQ,EAAErH;EACZ,CAAC,CAAC,EACF,EACF,CAAC;EAED,oBACEZ,KAAA,CAACV,MAAM;IACLmF,IAAI,EAAE,CAAC,CAACA,IAAK;IACbC,OAAO,EAAEA,OAAQ;IACjBkD,QAAQ,EAAE,KAAM;IAChB,mBAAiBlC;IACjB;IAAA;IACAwC,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;IACnBZ,SAAS,EAAEA,SAAU;IAAAa,QAAA,gBAErBvI,IAAA,CAACP,GAAG;MAAC+I,SAAS,EAAC,aAAa;MAAC1E,EAAE,EAAE8B,OAAQ;MAAA2C,QAAA,EACtCpD,CAAC,CAAC5E;IAAK,CACL,CAAC,eAGNL,KAAA,CAACT,GAAG;MACFsB,EAAE,EAAE;QACF0H,OAAO,EAAE,MAAM;QACfC,UAAU,EAAE,QAAQ;QACpBC,GAAG,EAAE,YAAY;QACjBC,OAAO,EAAE,uBAAuB;QAChCC,YAAY,EAAE;MAChB,CAAE;MAAAN,QAAA,gBAEFvI,IAAA,CAACL,UAAU;QACT,eAAY,MAAM;QAClBoB,EAAE,EAAE;UAAE+H,KAAK,EAAE,kBAAkB;UAAEC,QAAQ,EAAE;QAAG;MAAE,CACjD,CAAC,eACF/I,IAAA,CAACP,GAAG;QACFuJ,SAAS,EAAC,OAAO;QACjBpB,GAAG,EAAEnC,QAAS;QACd3B,EAAE,EAAEiC,OAAQ;QACZkD,IAAI,EAAC,MAAM;QACXC,IAAI,EAAC,UAAU;QACf,iBAAc,MAAM;QACpB,iBAAepD,MAAO;QACtB,qBAAkB,MAAM;QACxB,yBAAuB0B;QACvB;QACA;QACA;QAAA;QACA,cAAYzC,WAAY;QACxBoE,SAAS;QACTjI,KAAK,EAAEgC,KAAM;QACbkG,QAAQ,EAAE9B,aAAc;QACxB+B,SAAS,EAAEnC,cAAe;QAC1BnC,WAAW,EAAEA,WAAY;QACzBhE,EAAE,EAAE;UACFuI,IAAI,EAAE,CAAC;UACPC,MAAM,EAAE,CAAC;UACTC,OAAO,EAAE,MAAM;UACfC,UAAU,EAAE,aAAa;UACzBC,UAAU,EAAE,SAAS;UACrBX,QAAQ,EAAE,wBAAwB;UAClCD,KAAK,EAAE,WAAW;UAClB,gBAAgB,EAAE;YAAEA,KAAK,EAAE;UAAmB;QAChD;MAAE,CACH,CAAC,eACF9I,IAAA,CAACP,GAAG;QACFuJ,SAAS,EAAC,KAAK;QACf,eAAY,MAAM;QAClBjI,EAAE,EAAE;UACFgI,QAAQ,EAAE,gBAAgB;UAC1BY,UAAU,EAAE,oBAAoB;UAChCb,KAAK,EAAE,kBAAkB;UACzBW,UAAU,EAAE,kBAAkB;UAC9BF,MAAM,EAAE,yBAAyB;UACjCxB,YAAY,EAAE,aAAa;UAC3Ba,OAAO,EAAE,gBAAgB;UACzBc,UAAU,EAAE;QACd,CAAE;QAAAnB,QAAA,EACH;MAED,CAAK,CAAC,eACNvI,IAAA,CAACN,UAAU;QACTkK,IAAI,EAAC,OAAO;QACZC,OAAO,EAAEjF,OAAQ;QACjB,cAAYO,CAAC,CAAC1E,WAAY;QAC1BM,EAAE,EAAE;UAAE+H,KAAK,EAAE;QAAkB,CAAE;QAAAP,QAAA,eAEjCvI,IAAA,CAACJ,SAAS;UAACmJ,QAAQ,EAAC;QAAO,CAAE;MAAC,CACpB,CAAC;IAAA,CACV,CAAC,eAGN7I,KAAA,CAACT,GAAG;MACFmI,GAAG,EAAEjC,OAAQ;MACbuD,IAAI,EAAC,SAAS;MACdpF,EAAE,EAAEgC,MAAO;MACX,mBAAiBF,OAAQ;MACzB7E,EAAE,EAAE;QACF+I,SAAS,EAAE,GAAG;QACdC,SAAS,EAAE,MAAM;QACjBnB,OAAO,EAAE;MACX,CAAE;MAAAL,QAAA,GAEDjC,aAAa,CAAC/D,MAAM,KAAK,CAAC,iBACzBvC,IAAA,CAACP,GAAG;QACFsB,EAAE,EAAE;UACF6H,OAAO,EAAE,uBAAuB;UAChCoB,SAAS,EAAE,QAAQ;UACnBlB,KAAK,EAAE,iBAAiB;UACxBC,QAAQ,EAAE;QACZ,CAAE;QAAAR,QAAA,EAEDvD;MAAU,CACR,CACN,EACA,CAAC,MAAM;QACN,IAAI7C,CAAC,GAAG,CAAC,CAAC;QACV,OAAOmE,aAAa,CAAC1C,GAAG,CAAEC,CAAC,IAAK;UAC9B,MAAMoG,QAAQ,GAAG,GAAGnE,MAAM,MAAMjC,CAAC,CAACC,EAAE,EAAE;UACtC,oBACE5D,KAAA,CAACT,GAAG;YAEFyJ,IAAI,EAAC,OAAO;YACZ,mBAAiBe,QAAS;YAAA1B,QAAA,gBAE1BvI,IAAA,CAACP,GAAG;cACFqE,EAAE,EAAEmG,QAAS;cACblJ,EAAE,EAAE;gBACFgI,QAAQ,EAAE,gBAAgB;gBAC1BY,UAAU,EAAE,oBAAoB;gBAChCb,KAAK,EAAE,kBAAkB;gBACzBoB,aAAa,EAAE,WAAW;gBAC1BC,aAAa,EAAE,QAAQ;gBACvBvB,OAAO,EAAE;cACX,CAAE;cAAAL,QAAA,EAED1E,CAAC,CAACtD;YAAK,CACL,CAAC,EACLsD,CAAC,CAACE,KAAK,CAACH,GAAG,CAAEwG,KAAK,IAAK;cACtBjI,CAAC,IAAI,CAAC;cACN,MAAMkI,QAAQ,GAAGlI,CAAC,KAAKoD,SAAS;cAChC,MAAM+E,GAAG,GAAGnI,CAAC;cACb,oBACEjC,KAAA,CAACT,GAAG;gBAEFyJ,IAAI,EAAC,QAAQ;gBACbpF,EAAE,EAAE,GAAGgC,MAAM,QAAQwE,GAAG,EAAG;gBAC3B,iBAAeD,QAAS;gBACxB,mBAAiBC,GAAI;gBACrBC,YAAY,EAAEA,CAAA,KAAM/E,YAAY,CAAC8E,GAAG,CAAE;gBACtCT,OAAO,EAAEA,CAAA,KAAM9C,QAAQ,CAACuD,GAAG,CAAE;gBAC7BvJ,EAAE,EAAE;kBACF0H,OAAO,EAAE,MAAM;kBACfC,UAAU,EAAE,QAAQ;kBACpBC,GAAG,EAAE,YAAY;kBACjBC,OAAO,EAAE,uBAAuB;kBAChC4B,MAAM,EAAE,SAAS;kBACjBf,UAAU,EAAEY,QAAQ,GAAG,oBAAoB,GAAG,aAAa;kBAC3DvB,KAAK,EAAEuB,QAAQ,GAAG,eAAe,GAAG,WAAW;kBAC/CtB,QAAQ,EAAE,gBAAgB;kBAC1BY,UAAU,EAAE;gBACd,CAAE;gBAAApB,QAAA,GAED6B,KAAK,CAACK,IAAI,iBACTzK,IAAA,CAACP,GAAG;kBACF,eAAY,MAAM;kBAClBsB,EAAE,EAAE;oBACF0H,OAAO,EAAE,aAAa;oBACtBK,KAAK,EAAEuB,QAAQ,GAAG,eAAe,GAAG;kBACtC,CAAE;kBAAA9B,QAAA,EAED6B,KAAK,CAACK;gBAAI,CACR,CACN,eACDzK,IAAA,CAACP,GAAG;kBAACsB,EAAE,EAAE;oBAAEuI,IAAI,EAAE,CAAC;oBAAEoB,QAAQ,EAAE,CAAC;oBAAExC,QAAQ,EAAE,QAAQ;oBAAEyC,YAAY,EAAE,UAAU;oBAAEC,UAAU,EAAE;kBAAS,CAAE;kBAAArC,QAAA,EACnG6B,KAAK,CAAClG;gBAAK,CACT,CAAC,EACLkG,KAAK,CAACS,QAAQ,iBACb7K,IAAA,CAACP,GAAG;kBACFuJ,SAAS,EAAC,KAAK;kBACf,eAAY,MAAM;kBAClBjI,EAAE,EAAE;oBACFgI,QAAQ,EAAE,gBAAgB;oBAC1BY,UAAU,EAAE,oBAAoB;oBAChCb,KAAK,EAAE,kBAAkB;oBACzBW,UAAU,EAAE,kBAAkB;oBAC9BF,MAAM,EAAE,yBAAyB;oBACjCxB,YAAY,EAAE,aAAa;oBAC3Ba,OAAO,EAAE,gBAAgB;oBACzBc,UAAU,EAAE;kBACd,CAAE;kBAAAnB,QAAA,EAED6B,KAAK,CAACS;gBAAQ,CACZ,CACN;cAAA,GAlDIT,KAAK,CAACtG,EAmDR,CAAC;YAEV,CAAC,CAAC;UAAA,GA5EGD,CAAC,CAACC,EA6EJ,CAAC;QAEV,CAAC,CAAC;MACJ,CAAC,EAAE,CAAC;IAAA,CACD,CAAC,eAGN5D,KAAA,CAACT,GAAG;MACFsB,EAAE,EAAE;QACF0H,OAAO,EAAE,MAAM;QACfC,UAAU,EAAE,QAAQ;QACpBoC,cAAc,EAAE,eAAe;QAC/BnC,GAAG,EAAE,YAAY;QACjBC,OAAO,EAAE,uBAAuB;QAChCmC,SAAS,EAAE,yBAAyB;QACpCtB,UAAU,EAAE,kBAAkB;QAC9BV,QAAQ,EAAE,gBAAgB;QAC1BD,KAAK,EAAE;MACT,CAAE;MAAAP,QAAA,gBAIFvI,IAAA,CAACP,GAAG;QAAC,eAAY,MAAM;QAAA8I,QAAA,EAAEpD,CAAC,CAAC3E;MAAU,CAAM,CAAC,eAK5CR,IAAA,CAACP,GAAG;QAACyJ,IAAI,EAAC,QAAQ;QAAC,aAAU,QAAQ;QAAC,iBAAc,gBAAgB;QAAC,eAAY,MAAM;QAAAX,QAAA,EACpFpD,CAAC,CAACzE,YAAY,CAAC6F,SAAS,CAAChE,MAAM;MAAC,CAC9B,CAAC;IAAA,CACH,CAAC;EAAA,CACA,CAAC;AAEb;AAEA,eAAemC,cAAc","ignoreList":[]}
@@ -1,9 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
1
  import * as React from "react";
8
2
  import Modal from "./Modal";
9
3
  import Button from "./Button";
@@ -41,33 +35,31 @@ import { mergeLabels } from "../utils/mergeLabels";
41
35
  * <ConfirmDialog labels={{ impactHeading: "Consequences" }} ... />
42
36
  */
43
37
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
44
- var DEFAULT_LABELS = Object.freeze({
38
+ const DEFAULT_LABELS = Object.freeze({
45
39
  impactHeading: "Conséquences"
46
40
  });
47
- function ConfirmDialog(_ref) {
48
- var open = _ref.open,
49
- onClose = _ref.onClose,
50
- onConfirm = _ref.onConfirm,
51
- title = _ref.title,
52
- description = _ref.description,
53
- _ref$confirmLabel = _ref.confirmLabel,
54
- confirmLabel = _ref$confirmLabel === void 0 ? "Confirmer" : _ref$confirmLabel,
55
- _ref$cancelLabel = _ref.cancelLabel,
56
- cancelLabel = _ref$cancelLabel === void 0 ? "Annuler" : _ref$cancelLabel,
57
- _ref$confirmVariant = _ref.confirmVariant,
58
- confirmVariant = _ref$confirmVariant === void 0 ? "primary" : _ref$confirmVariant,
59
- _ref$loading = _ref.loading,
60
- loading = _ref$loading === void 0 ? false : _ref$loading,
61
- impact = _ref.impact,
62
- labels = _ref.labels,
63
- children = _ref.children;
64
- var L = mergeLabels(DEFAULT_LABELS, labels);
41
+ function ConfirmDialog({
42
+ open,
43
+ onClose,
44
+ onConfirm,
45
+ title,
46
+ description,
47
+ confirmLabel = "Confirmer",
48
+ cancelLabel = "Annuler",
49
+ confirmVariant = "primary",
50
+ loading = false,
51
+ impact,
52
+ // optional list of bullet-point consequences
53
+ labels,
54
+ children
55
+ }) {
56
+ const L = mergeLabels(DEFAULT_LABELS, labels);
65
57
 
66
58
  // R-Ar.1 - stable id linking the impact heading to its <ul>
67
59
  // so SR users hear the relationship as a single semantic unit.
68
- var impactHeadingId = React.useId();
69
- var hasImpact = !!(impact && impact.length > 0);
70
- return /*#__PURE__*/_jsxs(Modal, _objectSpread(_objectSpread(_objectSpread({
60
+ const impactHeadingId = React.useId();
61
+ const hasImpact = !!(impact && impact.length > 0);
62
+ return /*#__PURE__*/_jsxs(Modal, {
71
63
  title: title,
72
64
  subtitle: description,
73
65
  size: "sm",
@@ -83,12 +75,13 @@ function ConfirmDialog(_ref) {
83
75
  onClick: onConfirm,
84
76
  children: confirmLabel
85
77
  })]
86
- })
87
- }, open !== undefined ? {
88
- open: open
89
- } : {}), onClose !== undefined ? {
90
- onClose: onClose
91
- } : {}), {}, {
78
+ }),
79
+ ...(open !== undefined ? {
80
+ open
81
+ } : {}),
82
+ ...(onClose !== undefined ? {
83
+ onClose
84
+ } : {}),
92
85
  children: [hasImpact && /*#__PURE__*/_jsxs(Box, {
93
86
  sx: {
94
87
  background: "var(--bg-subtle)",
@@ -126,19 +119,17 @@ function ConfirmDialog(_ref) {
126
119
  fontSize: "var(--text-sm)",
127
120
  color: "var(--fg)"
128
121
  },
129
- children: impact === null || impact === void 0 ? void 0 : impact.map(function (item, i) {
130
- return /*#__PURE__*/_jsx(Box, {
131
- component: "li",
132
- sx: {
133
- marginBottom: "var(--s-1)",
134
- lineHeight: "var(--lh-normal)"
135
- },
136
- children: item
137
- }, i);
138
- })
122
+ children: impact?.map((item, i) => /*#__PURE__*/_jsx(Box, {
123
+ component: "li",
124
+ sx: {
125
+ marginBottom: "var(--s-1)",
126
+ lineHeight: "var(--lh-normal)"
127
+ },
128
+ children: item
129
+ }, i))
139
130
  })]
140
131
  }), children]
141
- }));
132
+ });
142
133
  }
143
134
  export default ConfirmDialog;
144
135
  //# sourceMappingURL=ConfirmDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialog.js","names":["React","Modal","Button","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","impactHeading","ConfirmDialog","_ref","open","onClose","onConfirm","title","description","_ref$confirmLabel","confirmLabel","_ref$cancelLabel","cancelLabel","_ref$confirmVariant","confirmVariant","_ref$loading","loading","impact","labels","children","L","impactHeadingId","useId","hasImpact","length","_objectSpread","subtitle","size","footer","variant","onClick","disabled","undefined","sx","background","border","borderRadius","padding","marginBottom","component","id","margin","fontSize","fontWeight","color","textTransform","letterSpacing","lineHeight","paddingInlineStart","map","item","i"],"sources":["../../../../src/lib/v2/components/ConfirmDialog.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"./Modal\";\r\nimport Button from \"./Button\";\r\nimport type { ButtonProps } from \"./Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * ConfirmDialog - Portnet UI v2\r\n *\r\n * Charter §04.4 - confirmation pattern for irreversible actions.\r\n * Use whenever an action cannot be undone with a 5-s toast.\r\n *\r\n * R-5.1 - Action irréversible → ConfirmDialog avec récap des conséquences.\r\n * R-5.2 - Suppression multiple → forcer la saisie ou clic bouton danger.\r\n *\r\n * <ConfirmDialog\r\n * open={open}\r\n * onClose={close}\r\n * onConfirm={remove}\r\n * title=\"Supprimer ce titre ?\"\r\n * description=\"Cette action est définitive.\"\r\n * confirmLabel=\"Supprimer\"\r\n * confirmVariant=\"danger\"\r\n * impact={[\r\n * \"Le titre 2025-IM-0042 sera supprimé.\",\r\n * \"Les pièces jointes liées seront archivées.\",\r\n * ]}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * confirmLabel / cancelLabel are direct overrides on the props.\r\n * The \"Conséquences\" heading rendered above the impact list is\r\n * localised via the `labels` prop:\r\n *\r\n * <ConfirmDialog labels={{ impactHeading: \"Consequences\" }} ... />\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n impactHeading: \"Conséquences\",\r\n});\r\n\r\nexport interface ConfirmDialogLabels {\r\n impactHeading?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface ConfirmDialogProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n onConfirm?: (() => void) | undefined;\r\n title?: React.ReactNode | undefined;\r\n description?: React.ReactNode | undefined;\r\n confirmLabel?: React.ReactNode | undefined;\r\n cancelLabel?: React.ReactNode | undefined;\r\n confirmVariant?: ButtonProps[\"variant\"] | undefined;\r\n loading?: boolean | undefined;\r\n impact?: React.ReactNode[] | undefined;\r\n labels?: ConfirmDialogLabels | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction ConfirmDialog({\r\n open,\r\n onClose,\r\n onConfirm,\r\n title,\r\n description,\r\n confirmLabel = \"Confirmer\",\r\n cancelLabel = \"Annuler\",\r\n confirmVariant = \"primary\",\r\n loading = false,\r\n impact, // optional list of bullet-point consequences\r\n labels,\r\n children,\r\n}: ConfirmDialogProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n // R-Ar.1 - stable id linking the impact heading to its <ul>\r\n // so SR users hear the relationship as a single semantic unit.\r\n const impactHeadingId = React.useId();\r\n const hasImpact = !!(impact && impact.length > 0);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n subtitle={description}\r\n size=\"sm\"\r\n footer={\r\n <>\r\n <Button variant=\"ghost\" onClick={onClose} disabled={loading}>\r\n {cancelLabel}\r\n </Button>\r\n <Button variant={confirmVariant} loading={loading} onClick={onConfirm}>\r\n {confirmLabel}\r\n </Button>\r\n </>\r\n }\r\n {...(open !== undefined ? { open } : {})}\r\n {...(onClose !== undefined ? { onClose } : {})}\r\n >\r\n {hasImpact && (\r\n <Box\r\n sx={{\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n marginBottom: children ? 2 : 0,\r\n }}\r\n >\r\n <Box\r\n component=\"h3\"\r\n id={impactHeadingId}\r\n sx={{\r\n // Modal title is <h2>; this is the correct next level. Visual\r\n // styling (uppercase caption) overrides the default <h3>.\r\n margin: 0,\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n marginBottom: 1,\r\n textTransform: \"uppercase\",\r\n /* A7-02 — was a raw \"0.04em\"; now the promoted token. */\r\n letterSpacing: \"var(--ls-wide)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {L.impactHeading}\r\n </Box>\r\n <Box\r\n component=\"ul\"\r\n aria-labelledby={impactHeadingId}\r\n sx={{\r\n margin: 0,\r\n // RTL-safe: paddingInlineStart resets correctly in both\r\n // LTR (left) and RTL (right). Was paddingLeft, which in\r\n // Arabic indented to the wrong side.\r\n paddingInlineStart: \"var(--s-5)\",\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {impact?.map((item, i) => (\r\n <Box\r\n component=\"li\"\r\n key={i}\r\n sx={{ marginBottom: \"var(--s-1)\", lineHeight: \"var(--lh-normal)\" }}\r\n >\r\n {item}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n {children}\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default ConfirmDialog;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ConfirmDialog.js","names":["React","Modal","Button","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","impactHeading","ConfirmDialog","open","onClose","onConfirm","title","description","confirmLabel","cancelLabel","confirmVariant","loading","impact","labels","children","L","impactHeadingId","useId","hasImpact","length","subtitle","size","footer","variant","onClick","disabled","undefined","sx","background","border","borderRadius","padding","marginBottom","component","id","margin","fontSize","fontWeight","color","textTransform","letterSpacing","lineHeight","paddingInlineStart","map","item","i"],"sources":["../../../../src/lib/v2/components/ConfirmDialog.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"./Modal\";\r\nimport Button from \"./Button\";\r\nimport type { ButtonProps } from \"./Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * ConfirmDialog - Portnet UI v2\r\n *\r\n * Charter §04.4 - confirmation pattern for irreversible actions.\r\n * Use whenever an action cannot be undone with a 5-s toast.\r\n *\r\n * R-5.1 - Action irréversible → ConfirmDialog avec récap des conséquences.\r\n * R-5.2 - Suppression multiple → forcer la saisie ou clic bouton danger.\r\n *\r\n * <ConfirmDialog\r\n * open={open}\r\n * onClose={close}\r\n * onConfirm={remove}\r\n * title=\"Supprimer ce titre ?\"\r\n * description=\"Cette action est définitive.\"\r\n * confirmLabel=\"Supprimer\"\r\n * confirmVariant=\"danger\"\r\n * impact={[\r\n * \"Le titre 2025-IM-0042 sera supprimé.\",\r\n * \"Les pièces jointes liées seront archivées.\",\r\n * ]}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * confirmLabel / cancelLabel are direct overrides on the props.\r\n * The \"Conséquences\" heading rendered above the impact list is\r\n * localised via the `labels` prop:\r\n *\r\n * <ConfirmDialog labels={{ impactHeading: \"Consequences\" }} ... />\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n impactHeading: \"Conséquences\",\r\n});\r\n\r\nexport interface ConfirmDialogLabels {\r\n impactHeading?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface ConfirmDialogProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n onConfirm?: (() => void) | undefined;\r\n title?: React.ReactNode | undefined;\r\n description?: React.ReactNode | undefined;\r\n confirmLabel?: React.ReactNode | undefined;\r\n cancelLabel?: React.ReactNode | undefined;\r\n confirmVariant?: ButtonProps[\"variant\"] | undefined;\r\n loading?: boolean | undefined;\r\n impact?: React.ReactNode[] | undefined;\r\n labels?: ConfirmDialogLabels | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction ConfirmDialog({\r\n open,\r\n onClose,\r\n onConfirm,\r\n title,\r\n description,\r\n confirmLabel = \"Confirmer\",\r\n cancelLabel = \"Annuler\",\r\n confirmVariant = \"primary\",\r\n loading = false,\r\n impact, // optional list of bullet-point consequences\r\n labels,\r\n children,\r\n}: ConfirmDialogProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n // R-Ar.1 - stable id linking the impact heading to its <ul>\r\n // so SR users hear the relationship as a single semantic unit.\r\n const impactHeadingId = React.useId();\r\n const hasImpact = !!(impact && impact.length > 0);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n subtitle={description}\r\n size=\"sm\"\r\n footer={\r\n <>\r\n <Button variant=\"ghost\" onClick={onClose} disabled={loading}>\r\n {cancelLabel}\r\n </Button>\r\n <Button variant={confirmVariant} loading={loading} onClick={onConfirm}>\r\n {confirmLabel}\r\n </Button>\r\n </>\r\n }\r\n {...(open !== undefined ? { open } : {})}\r\n {...(onClose !== undefined ? { onClose } : {})}\r\n >\r\n {hasImpact && (\r\n <Box\r\n sx={{\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n marginBottom: children ? 2 : 0,\r\n }}\r\n >\r\n <Box\r\n component=\"h3\"\r\n id={impactHeadingId}\r\n sx={{\r\n // Modal title is <h2>; this is the correct next level. Visual\r\n // styling (uppercase caption) overrides the default <h3>.\r\n margin: 0,\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n marginBottom: 1,\r\n textTransform: \"uppercase\",\r\n /* A7-02 — was a raw \"0.04em\"; now the promoted token. */\r\n letterSpacing: \"var(--ls-wide)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {L.impactHeading}\r\n </Box>\r\n <Box\r\n component=\"ul\"\r\n aria-labelledby={impactHeadingId}\r\n sx={{\r\n margin: 0,\r\n // RTL-safe: paddingInlineStart resets correctly in both\r\n // LTR (left) and RTL (right). Was paddingLeft, which in\r\n // Arabic indented to the wrong side.\r\n paddingInlineStart: \"var(--s-5)\",\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {impact?.map((item, i) => (\r\n <Box\r\n component=\"li\"\r\n key={i}\r\n sx={{ marginBottom: \"var(--s-1)\", lineHeight: \"var(--lh-normal)\" }}\r\n >\r\n {item}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n {children}\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default ConfirmDialog;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,MAAM,MAAM,UAAU;AAE7B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,SAASC,WAAW,QAAQ,sBAAsB;;AAElD;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;AA7BA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AA+BA,MAAMC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EACnCC,aAAa,EAAE;AACjB,CAAC,CAAC;AAqBF,SAASC,aAAaA,CAAC;EACrBC,IAAI;EACJC,OAAO;EACPC,SAAS;EACTC,KAAK;EACLC,WAAW;EACXC,YAAY,GAAG,WAAW;EAC1BC,WAAW,GAAG,SAAS;EACvBC,cAAc,GAAG,SAAS;EAC1BC,OAAO,GAAG,KAAK;EACfC,MAAM;EAAE;EACRC,MAAM;EACNC;AACkB,CAAC,EAAE;EACrB,MAAMC,CAAC,GAAGxB,WAAW,CAACO,cAAc,EAAEe,MAAM,CAAC;;EAE7C;EACA;EACA,MAAMG,eAAe,GAAG7B,KAAK,CAAC8B,KAAK,CAAC,CAAC;EACrC,MAAMC,SAAS,GAAG,CAAC,EAAEN,MAAM,IAAIA,MAAM,CAACO,MAAM,GAAG,CAAC,CAAC;EAEjD,oBACEtB,KAAA,CAACT,KAAK;IACJkB,KAAK,EAAEA,KAAM;IACbc,QAAQ,EAAEb,WAAY;IACtBc,IAAI,EAAC,IAAI;IACTC,MAAM,eACJzB,KAAA,CAAAF,SAAA;MAAAmB,QAAA,gBACErB,IAAA,CAACJ,MAAM;QAACkC,OAAO,EAAC,OAAO;QAACC,OAAO,EAAEpB,OAAQ;QAACqB,QAAQ,EAAEd,OAAQ;QAAAG,QAAA,EACzDL;MAAW,CACN,CAAC,eACThB,IAAA,CAACJ,MAAM;QAACkC,OAAO,EAAEb,cAAe;QAACC,OAAO,EAAEA,OAAQ;QAACa,OAAO,EAAEnB,SAAU;QAAAS,QAAA,EACnEN;MAAY,CACP,CAAC;IAAA,CACT,CACH;IAAA,IACIL,IAAI,KAAKuB,SAAS,GAAG;MAAEvB;IAAK,CAAC,GAAG,CAAC,CAAC;IAAA,IAClCC,OAAO,KAAKsB,SAAS,GAAG;MAAEtB;IAAQ,CAAC,GAAG,CAAC,CAAC;IAAAU,QAAA,GAE5CI,SAAS,iBACRrB,KAAA,CAACP,GAAG;MACFqC,EAAE,EAAE;QACFC,UAAU,EAAE,kBAAkB;QAC9BC,MAAM,EAAE,yBAAyB;QACjCC,YAAY,EAAE,aAAa;QAC3BC,OAAO,EAAE,uBAAuB;QAChCC,YAAY,EAAElB,QAAQ,GAAG,CAAC,GAAG;MAC/B,CAAE;MAAAA,QAAA,gBAEFrB,IAAA,CAACH,GAAG;QACF2C,SAAS,EAAC,IAAI;QACdC,EAAE,EAAElB,eAAgB;QACpBW,EAAE,EAAE;UACF;UACA;UACAQ,MAAM,EAAE,CAAC;UACTC,QAAQ,EAAE,gBAAgB;UAC1BC,UAAU,EAAE,oBAAoB;UAChCC,KAAK,EAAE,iBAAiB;UACxBN,YAAY,EAAE,CAAC;UACfO,aAAa,EAAE,WAAW;UAC1B;UACAC,aAAa,EAAE,gBAAgB;UAC/BC,UAAU,EAAE;QACd,CAAE;QAAA3B,QAAA,EAEDC,CAAC,CAACd;MAAa,CACb,CAAC,eACNR,IAAA,CAACH,GAAG;QACF2C,SAAS,EAAC,IAAI;QACd,mBAAiBjB,eAAgB;QACjCW,EAAE,EAAE;UACFQ,MAAM,EAAE,CAAC;UACT;UACA;UACA;UACAO,kBAAkB,EAAE,YAAY;UAChCN,QAAQ,EAAE,gBAAgB;UAC1BE,KAAK,EAAE;QACT,CAAE;QAAAxB,QAAA,EAEDF,MAAM,EAAE+B,GAAG,CAAC,CAACC,IAAI,EAAEC,CAAC,kBACnBpD,IAAA,CAACH,GAAG;UACF2C,SAAS,EAAC,IAAI;UAEdN,EAAE,EAAE;YAAEK,YAAY,EAAE,YAAY;YAAES,UAAU,EAAE;UAAmB,CAAE;UAAA3B,QAAA,EAElE8B;QAAI,GAHAC,CAIF,CACN;MAAC,CACC,CAAC;IAAA,CACH,CACN,EACA/B,QAAQ;EAAA,CACJ,CAAC;AAEZ;AAEA,eAAeZ,aAAa","ignoreList":[]}
@@ -1,13 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- var _excluded = ["value", "onChange", "onBlur", "minDate", "maxDate", "disablePast", "disableFuture", "disabled", "readOnly", "error", "placeholder", "fullWidth", "inputProps", "adapterLocale", "sx"],
3
- _excluded2 = ["id", "aria-describedby", "aria-invalid", "aria-required", "aria-labelledby"];
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
8
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
1
  import * as React from "react";
12
2
  import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
13
3
  import { DatePicker as MuiDatePicker } from "@mui/x-date-pickers/DatePicker";
@@ -87,44 +77,39 @@ import { dateToMoment, momentToDate } from "./_pickerShared";
87
77
  * wraps it).
88
78
  */
89
79
  import { jsx as _jsx } from "react/jsx-runtime";
90
- var CHARTER_FORMAT = "YYYY-MM-DD";
91
- var DatePicker = /*#__PURE__*/React.forwardRef(function DatePicker(_ref, ref) {
92
- var value = _ref.value,
93
- onChange = _ref.onChange,
94
- onBlur = _ref.onBlur,
95
- minDate = _ref.minDate,
96
- maxDate = _ref.maxDate,
97
- _ref$disablePast = _ref.disablePast,
98
- disablePast = _ref$disablePast === void 0 ? false : _ref$disablePast,
99
- _ref$disableFuture = _ref.disableFuture,
100
- disableFuture = _ref$disableFuture === void 0 ? false : _ref$disableFuture,
101
- _ref$disabled = _ref.disabled,
102
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
103
- _ref$readOnly = _ref.readOnly,
104
- readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
105
- error = _ref.error,
106
- _ref$placeholder = _ref.placeholder,
107
- placeholder = _ref$placeholder === void 0 ? "AAAA-MM-JJ" : _ref$placeholder,
108
- _ref$fullWidth = _ref.fullWidth,
109
- fullWidth = _ref$fullWidth === void 0 ? true : _ref$fullWidth,
110
- inputProps = _ref.inputProps,
111
- _ref$adapterLocale = _ref.adapterLocale,
112
- adapterLocale = _ref$adapterLocale === void 0 ? "fr" : _ref$adapterLocale,
113
- sx = _ref.sx,
114
- rest = _objectWithoutProperties(_ref, _excluded);
80
+ const CHARTER_FORMAT = "YYYY-MM-DD";
81
+ const DatePicker = /*#__PURE__*/React.forwardRef(function DatePicker({
82
+ value,
83
+ onChange,
84
+ onBlur,
85
+ minDate,
86
+ maxDate,
87
+ disablePast = false,
88
+ disableFuture = false,
89
+ disabled = false,
90
+ readOnly = false,
91
+ error,
92
+ placeholder = "AAAA-MM-JJ",
93
+ fullWidth = true,
94
+ inputProps,
95
+ adapterLocale = "fr",
96
+ sx,
97
+ ...rest
98
+ }, ref) {
115
99
  // DP-1 — Field cloneElement-injects the label + hint/error association props
116
100
  // onto this child; MUI X won't forward top-level aria/id to the field input,
117
101
  // so intercept them (cast — they aren't part of MuiDatePickerProps) and route
118
102
  // them onto the <input> via slotProps.htmlInput below. Everything else stays
119
103
  // in domRest for MuiDatePicker (real picker props: views, openTo, etc.).
120
- var _ref2 = rest,
121
- fieldId = _ref2.id,
122
- ariaDescribedby = _ref2["aria-describedby"],
123
- ariaInvalid = _ref2["aria-invalid"],
124
- ariaRequired = _ref2["aria-required"],
125
- ariaLabelledby = _ref2["aria-labelledby"],
126
- domRest = _objectWithoutProperties(_ref2, _excluded2);
127
- var handleChange = function handleChange(next) {
104
+ const {
105
+ id: fieldId,
106
+ "aria-describedby": ariaDescribedby,
107
+ "aria-invalid": ariaInvalid,
108
+ "aria-required": ariaRequired,
109
+ "aria-labelledby": ariaLabelledby,
110
+ ...domRest
111
+ } = rest;
112
+ const handleChange = next => {
128
113
  if (!onChange) return;
129
114
  onChange(momentToDate(next));
130
115
  };
@@ -136,65 +121,77 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function DatePicker(_ref, ref) {
136
121
  // Field-injected id + aria-* so the label / hint / error actually
137
122
  // associate with the date input. Memoised on the deps so the slotProps
138
123
  // object reference stays stable across renders.
139
- var slotProps = React.useMemo(function () {
140
- return {
141
- textField: _objectSpread(_objectSpread({
142
- ref: ref,
143
- error: !!error,
144
- fullWidth: fullWidth,
145
- size: "small"
146
- }, onBlur ? {
124
+ const slotProps = React.useMemo(() => ({
125
+ textField: {
126
+ ref,
127
+ error: !!error,
128
+ fullWidth,
129
+ size: "small",
130
+ // onBlur: the textField slot types this as FocusEventHandler<HTMLDivElement>;
131
+ // our public onBlur is input-based. Cast (type-only) and include only
132
+ // when defined so no explicit undefined reaches the slot.
133
+ ...(onBlur ? {
147
134
  onBlur: onBlur
148
- } : {}), {}, {
149
- sx: _objectSpread({
150
- "& .MuiOutlinedInput-input": {
151
- fontVariantNumeric: "tabular-nums"
152
- }
153
- }, sx),
154
- slotProps: {
155
- htmlInput: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
156
- placeholder: placeholder
157
- }, fieldId != null ? {
135
+ } : {}),
136
+ sx: {
137
+ "& .MuiOutlinedInput-input": {
138
+ fontVariantNumeric: "tabular-nums"
139
+ },
140
+ ...sx
141
+ },
142
+ slotProps: {
143
+ htmlInput: {
144
+ placeholder,
145
+ // DP-1 — Field-injected association attrs land on the <input>.
146
+ ...(fieldId != null ? {
158
147
  id: fieldId
159
- } : {}), ariaDescribedby != null ? {
148
+ } : {}),
149
+ ...(ariaDescribedby != null ? {
160
150
  "aria-describedby": ariaDescribedby
161
- } : {}), ariaInvalid != null ? {
151
+ } : {}),
152
+ ...(ariaInvalid != null ? {
162
153
  "aria-invalid": ariaInvalid
163
- } : {}), ariaRequired != null ? {
154
+ } : {}),
155
+ ...(ariaRequired != null ? {
164
156
  "aria-required": ariaRequired
165
- } : {}), ariaLabelledby != null ? {
157
+ } : {}),
158
+ ...(ariaLabelledby != null ? {
166
159
  "aria-labelledby": ariaLabelledby
167
- } : {}), inputProps)
160
+ } : {}),
161
+ // Explicit host inputProps win over the injected defaults.
162
+ ...inputProps
168
163
  }
169
- })
170
- };
171
- }, [ref, error, fullWidth, onBlur, sx, placeholder, inputProps, fieldId, ariaDescribedby, ariaInvalid, ariaRequired, ariaLabelledby]);
164
+ }
165
+ }
166
+ }), [ref, error, fullWidth, onBlur, sx, placeholder, inputProps, fieldId, ariaDescribedby, ariaInvalid, ariaRequired, ariaLabelledby]);
172
167
 
173
168
  // exactOptionalPropertyTypes: MUI's minDate/maxDate are `Moment` (not
174
169
  // `Moment | undefined`), so spread the key only when a bound is set
175
170
  // rather than passing an explicit `undefined`.
176
- var minDateM = minDate ? dateToMoment(minDate) : null;
177
- var maxDateM = maxDate ? dateToMoment(maxDate) : null;
171
+ const minDateM = minDate ? dateToMoment(minDate) : null;
172
+ const maxDateM = maxDate ? dateToMoment(maxDate) : null;
178
173
  return /*#__PURE__*/_jsx(LocalizationProvider, {
179
174
  dateAdapter: AdapterMoment,
180
175
  adapterLocale: adapterLocale,
181
- children: /*#__PURE__*/_jsx(MuiDatePicker, _objectSpread(_objectSpread(_objectSpread({
176
+ children: /*#__PURE__*/_jsx(MuiDatePicker, {
182
177
  value: dateToMoment(value),
183
- onChange: handleChange
184
- }, minDateM ? {
185
- minDate: minDateM
186
- } : {}), maxDateM ? {
187
- maxDate: maxDateM
188
- } : {}), {}, {
178
+ onChange: handleChange,
179
+ ...(minDateM ? {
180
+ minDate: minDateM
181
+ } : {}),
182
+ ...(maxDateM ? {
183
+ maxDate: maxDateM
184
+ } : {}),
189
185
  disablePast: disablePast,
190
186
  disableFuture: disableFuture,
191
187
  disabled: disabled,
192
188
  readOnly: readOnly,
193
189
  format: CHARTER_FORMAT,
194
- slotProps: slotProps
195
- }, domRest))
190
+ slotProps: slotProps,
191
+ ...domRest
192
+ })
196
193
  });
197
194
  });
198
- export var DATE_FORMAT_CHARTER = CHARTER_FORMAT;
195
+ export const DATE_FORMAT_CHARTER = CHARTER_FORMAT;
199
196
  export default DatePicker;
200
197
  //# sourceMappingURL=DatePicker.js.map