@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,18 +1,3 @@
1
- var _excluded = ["name", "label", "required", "options", "loading", "disabled", "htmlFor", "hint", "getOptionLabel", "getOptionValue", "descriptionField", "onSelectionChange"];
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
- 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); }
8
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
13
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
- 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; }
15
- 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; }
16
1
  /**
17
2
  * FormikCombobox — bridge between Formik state and v2.Field +
18
3
  * v2.Combobox.
@@ -37,79 +22,79 @@ import { useField, useFormikContext } from "formik";
37
22
  import Field from "../components/Field";
38
23
  import Combobox from "../components/Combobox";
39
24
  import { jsx as _jsx } from "react/jsx-runtime";
40
- function FormikCombobox(_ref) {
41
- var _field$value;
42
- var name = _ref.name,
43
- label = _ref.label,
44
- required = _ref.required,
45
- _ref$options = _ref.options,
46
- options = _ref$options === void 0 ? [] : _ref$options,
47
- loading = _ref.loading,
48
- disabled = _ref.disabled,
49
- htmlFor = _ref.htmlFor,
50
- hint = _ref.hint,
51
- getOptionLabel = _ref.getOptionLabel,
52
- getOptionValue = _ref.getOptionValue,
53
- descriptionField = _ref.descriptionField,
54
- onSelectionChange = _ref.onSelectionChange,
55
- rest = _objectWithoutProperties(_ref, _excluded);
56
- var _useField = useField(name),
57
- _useField2 = _slicedToArray(_useField, 2),
58
- field = _useField2[0],
59
- meta = _useField2[1];
60
- var _useFormikContext = useFormikContext(),
61
- setFieldValue = _useFormikContext.setFieldValue,
62
- setFieldTouched = _useFormikContext.setFieldTouched;
63
- var hasError = Boolean(meta.touched && meta.error);
64
- var v2Options = options.map(function (opt) {
65
- var _ref2, _ref3;
66
- if (opt == null || _typeof(opt) !== "object") return opt;
67
- var rec = opt;
68
- var rawLabel = typeof getOptionLabel === "function" ? getOptionLabel(opt) : rec["label"];
25
+ function FormikCombobox({
26
+ name,
27
+ label,
28
+ required,
29
+ options = [],
30
+ loading,
31
+ disabled,
32
+ htmlFor,
33
+ hint,
34
+ getOptionLabel,
35
+ getOptionValue,
36
+ descriptionField,
37
+ width,
38
+ onSelectionChange,
39
+ ...rest
40
+ }) {
41
+ const [field, meta] = useField(name);
42
+ const {
43
+ setFieldValue,
44
+ setFieldTouched
45
+ } = useFormikContext();
46
+ const hasError = Boolean(meta.touched && meta.error);
47
+ const v2Options = options.map(opt => {
48
+ if (opt == null || typeof opt !== "object") return opt;
49
+ const rec = opt;
50
+ const rawLabel = typeof getOptionLabel === "function" ? getOptionLabel(opt) : rec["label"];
69
51
  // B7: harden against getOptionLabel returning a React node.
70
52
  // v2.Combobox feeds the label back through its internal
71
53
  // labelOf when computing the displayed value, and that path
72
54
  // assumes string. Always coerce defensively.
73
- var safeLabel = typeof rawLabel === "string" || rawLabel == null ? rawLabel : String(rawLabel);
55
+ const safeLabel = typeof rawLabel === "string" || rawLabel == null ? rawLabel : String(rawLabel);
74
56
  // B10: descriptionField alias → helper. Falls back to the
75
57
  // canonical `helper`/`summary` fields if neither is set.
76
- var helper = (_ref2 = (_ref3 = descriptionField && rec[descriptionField]) !== null && _ref3 !== void 0 ? _ref3 : rec["helper"]) !== null && _ref2 !== void 0 ? _ref2 : rec["summary"];
58
+ const helper = (descriptionField && rec[descriptionField]) ?? rec["helper"] ?? rec["summary"];
77
59
  return {
78
60
  value: typeof getOptionValue === "function" ? getOptionValue(opt) : opt,
79
61
  label: safeLabel,
80
- helper: helper,
62
+ helper,
81
63
  __raw: opt
82
64
  };
83
65
  });
84
- var handleChange = function handleChange(next) {
66
+ const handleChange = next => {
85
67
  setFieldValue(name, next);
86
68
  setFieldTouched(name, true, false);
87
69
  if (typeof onSelectionChange === "function") {
88
- var _raw, _v2Options$find;
89
- var picked = (_raw = (_v2Options$find = v2Options.find(function (o) {
90
- return o != null && _typeof(o) === "object" && "value" in o && o.value === next;
91
- })) === null || _v2Options$find === void 0 ? void 0 : _v2Options$find.__raw) !== null && _raw !== void 0 ? _raw : null;
70
+ const picked = v2Options.find(o => o != null && typeof o === "object" && "value" in o && o.value === next)?.__raw ?? null;
92
71
  onSelectionChange(picked);
93
72
  }
94
73
  };
95
- return /*#__PURE__*/_jsx(Field, _objectSpread(_objectSpread(_objectSpread({
74
+ return /*#__PURE__*/_jsx(Field, {
96
75
  label: label,
97
76
  error: hasError ? meta.error : null,
98
77
  hint: !hasError ? hint : undefined,
99
- htmlFor: htmlFor || name
100
- }, required !== undefined ? {
101
- required: required
102
- } : {}), disabled !== undefined ? {
103
- disabled: disabled
104
- } : {}), {}, {
105
- children: /*#__PURE__*/_jsx(Combobox, _objectSpread(_objectSpread({
106
- value: (_field$value = field.value) !== null && _field$value !== void 0 ? _field$value : null,
78
+ htmlFor: htmlFor || name,
79
+ ...(required !== undefined ? {
80
+ required
81
+ } : {}),
82
+ ...(disabled !== undefined ? {
83
+ disabled
84
+ } : {}),
85
+ ...(width !== undefined ? {
86
+ width
87
+ } : {}),
88
+ children: /*#__PURE__*/_jsx(Combobox, {
89
+ value: field.value ?? null,
107
90
  options: v2Options,
108
- onChange: handleChange
109
- }, rest), loading !== undefined ? {
110
- loading: loading
111
- } : {}))
112
- }));
91
+ onChange: handleChange,
92
+ ...rest,
93
+ ...(loading !== undefined ? {
94
+ loading
95
+ } : {})
96
+ })
97
+ });
113
98
  }
114
99
  export default FormikCombobox;
115
100
  //# sourceMappingURL=FormikCombobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormikCombobox.js","names":["useField","useFormikContext","Field","Combobox","jsx","_jsx","FormikCombobox","_ref","_field$value","name","label","required","_ref$options","options","loading","disabled","htmlFor","hint","getOptionLabel","getOptionValue","descriptionField","onSelectionChange","rest","_objectWithoutProperties","_excluded","_useField","_useField2","_slicedToArray","field","meta","_useFormikContext","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","v2Options","map","opt","_ref2","_ref3","_typeof","rec","rawLabel","safeLabel","String","helper","value","__raw","handleChange","next","_raw","_v2Options$find","picked","find","o","_objectSpread","undefined","children","onChange"],"sources":["../../../../src/lib/v2/patterns/FormikCombobox.tsx"],"sourcesContent":["/**\r\n * FormikCombobox — bridge between Formik state and v2.Field +\r\n * v2.Combobox.\r\n *\r\n * Maps caller-supplied raw options to v2.Combobox's {value, label,\r\n * helper} shape and exposes onSelectionChange(rawOption) for\r\n * consumers that need cross-field side effects on pick.\r\n *\r\n * Charter R-Sel.1 → R-Sel.4. Peer dependency: formik >= 2.x.\r\n *\r\n * Hardening notes:\r\n * - B7: defensive String() cast on the resolved label so a\r\n * consumer-supplied getOptionLabel that returns a React node\r\n * never crashes Autocomplete with the cryptic \"Objects are\r\n * not valid as a React child\" error.\r\n * - B10: `descriptionField` alias mirrors the legacy\r\n * AppFormikSelect API — surfaces option[descriptionField] as\r\n * the helper line under each Combobox row.\r\n */\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport Combobox from \"../components/Combobox\";\r\nimport type {\r\n ComboboxProps,\r\n ComboboxOption,\r\n ComboboxOptionValue,\r\n ComboboxValue,\r\n} from \"../components/Combobox\";\r\n\r\nexport interface FormikComboboxProps<TOption = unknown>\r\n extends Omit<\r\n ComboboxProps,\r\n \"value\" | \"onChange\" | \"options\" | \"loading\" | \"disabled\" | \"getOptionLabel\"\r\n > {\r\n name: string;\r\n label?: ReactNode | undefined;\r\n required?: boolean | undefined;\r\n options?: readonly TOption[] | undefined;\r\n loading?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: ReactNode | undefined;\r\n getOptionLabel?: ((opt: TOption) => ReactNode) | undefined;\r\n getOptionValue?: ((opt: TOption) => ComboboxOptionValue) | undefined;\r\n /**\r\n * Key on each raw option whose value should appear as a helper\r\n * line beneath the main label in the dropdown. Equivalent to\r\n * the legacy `descriptionField` prop on AppFormikSelect.\r\n */\r\n descriptionField?: string | undefined;\r\n onSelectionChange?: ((raw: TOption | null) => void) | undefined;\r\n}\r\n\r\nfunction FormikCombobox<TOption = unknown>({\r\n name,\r\n label,\r\n required,\r\n options = [],\r\n loading,\r\n disabled,\r\n htmlFor,\r\n hint,\r\n getOptionLabel,\r\n getOptionValue,\r\n descriptionField,\r\n onSelectionChange,\r\n ...rest\r\n}: FormikComboboxProps<TOption>) {\r\n const [field, meta] = useField(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n const v2Options = options.map((opt) => {\r\n if (opt == null || typeof opt !== \"object\") return opt;\r\n const rec = opt as Record<string, unknown>;\r\n const rawLabel =\r\n typeof getOptionLabel === \"function\" ? getOptionLabel(opt) : rec[\"label\"];\r\n // B7: harden against getOptionLabel returning a React node.\r\n // v2.Combobox feeds the label back through its internal\r\n // labelOf when computing the displayed value, and that path\r\n // assumes string. Always coerce defensively.\r\n const safeLabel =\r\n typeof rawLabel === \"string\" || rawLabel == null\r\n ? rawLabel\r\n : String(rawLabel);\r\n // B10: descriptionField alias → helper. Falls back to the\r\n // canonical `helper`/`summary` fields if neither is set.\r\n const helper =\r\n ((descriptionField && rec[descriptionField]) ?? rec[\"helper\"] ?? rec[\"summary\"]) as ReactNode;\r\n return {\r\n value: typeof getOptionValue === \"function\" ? getOptionValue(opt) : opt,\r\n label: safeLabel,\r\n helper,\r\n __raw: opt,\r\n };\r\n });\r\n\r\n const handleChange = (next: ComboboxValue): void => {\r\n setFieldValue(name, next);\r\n setFieldTouched(name, true, false);\r\n if (typeof onSelectionChange === \"function\") {\r\n const picked =\r\n (\r\n v2Options.find(\r\n (o) =>\r\n o != null &&\r\n typeof o === \"object\" &&\r\n \"value\" in o &&\r\n (o as { value?: unknown }).value === next\r\n ) as { __raw?: unknown } | undefined\r\n )?.__raw ?? null;\r\n onSelectionChange(picked as TOption | null);\r\n }\r\n };\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n >\r\n <Combobox\r\n value={field.value ?? null}\r\n options={v2Options as Array<string | ComboboxOption>}\r\n onChange={handleChange}\r\n {...rest}\r\n {...(loading !== undefined ? { loading } : {})}\r\n />\r\n </Field>\r\n );\r\n}\r\n\r\nexport default FormikCombobox;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormikCombobox.js","names":["useField","useFormikContext","Field","Combobox","jsx","_jsx","FormikCombobox","name","label","required","options","loading","disabled","htmlFor","hint","getOptionLabel","getOptionValue","descriptionField","width","onSelectionChange","rest","field","meta","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","v2Options","map","opt","rec","rawLabel","safeLabel","String","helper","value","__raw","handleChange","next","picked","find","o","undefined","children","onChange"],"sources":["../../../../src/lib/v2/patterns/FormikCombobox.tsx"],"sourcesContent":["/**\r\n * FormikCombobox — bridge between Formik state and v2.Field +\r\n * v2.Combobox.\r\n *\r\n * Maps caller-supplied raw options to v2.Combobox's {value, label,\r\n * helper} shape and exposes onSelectionChange(rawOption) for\r\n * consumers that need cross-field side effects on pick.\r\n *\r\n * Charter R-Sel.1 → R-Sel.4. Peer dependency: formik >= 2.x.\r\n *\r\n * Hardening notes:\r\n * - B7: defensive String() cast on the resolved label so a\r\n * consumer-supplied getOptionLabel that returns a React node\r\n * never crashes Autocomplete with the cryptic \"Objects are\r\n * not valid as a React child\" error.\r\n * - B10: `descriptionField` alias mirrors the legacy\r\n * AppFormikSelect API — surfaces option[descriptionField] as\r\n * the helper line under each Combobox row.\r\n */\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport Combobox from \"../components/Combobox\";\r\nimport type { FieldWidth } from \"../components/Field\";\r\nimport type {\r\n ComboboxProps,\r\n ComboboxOption,\r\n ComboboxOptionValue,\r\n ComboboxValue,\r\n} from \"../components/Combobox\";\r\n\r\nexport interface FormikComboboxProps<TOption = unknown>\r\n extends Omit<\r\n ComboboxProps,\r\n \"value\" | \"onChange\" | \"options\" | \"loading\" | \"disabled\" | \"getOptionLabel\"\r\n > {\r\n name: string;\r\n label?: ReactNode | undefined;\r\n required?: boolean | undefined;\r\n options?: readonly TOption[] | undefined;\r\n loading?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: ReactNode | undefined;\r\n getOptionLabel?: ((opt: TOption) => ReactNode) | undefined;\r\n getOptionValue?: ((opt: TOption) => ComboboxOptionValue) | undefined;\r\n /**\r\n * Key on each raw option whose value should appear as a helper\r\n * line beneath the main label in the dropdown. Equivalent to\r\n * the legacy `descriptionField` prop on AppFormikSelect.\r\n */\r\n descriptionField?: string | undefined;\r\n /**\r\n * Gabarit de largeur semantique (G-H). Le standard range les « complex\r\n * search auto-completes » en `l` : c'est le cas le plus courant ici.\r\n */\r\n width?: FieldWidth | undefined;\r\n onSelectionChange?: ((raw: TOption | null) => void) | undefined;\r\n}\r\n\r\nfunction FormikCombobox<TOption = unknown>({\r\n name,\r\n label,\r\n required,\r\n options = [],\r\n loading,\r\n disabled,\r\n htmlFor,\r\n hint,\r\n getOptionLabel,\r\n getOptionValue,\r\n descriptionField,\r\n width,\r\n onSelectionChange,\r\n ...rest\r\n}: FormikComboboxProps<TOption>) {\r\n const [field, meta] = useField(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n const v2Options = options.map((opt) => {\r\n if (opt == null || typeof opt !== \"object\") return opt;\r\n const rec = opt as Record<string, unknown>;\r\n const rawLabel =\r\n typeof getOptionLabel === \"function\" ? getOptionLabel(opt) : rec[\"label\"];\r\n // B7: harden against getOptionLabel returning a React node.\r\n // v2.Combobox feeds the label back through its internal\r\n // labelOf when computing the displayed value, and that path\r\n // assumes string. Always coerce defensively.\r\n const safeLabel =\r\n typeof rawLabel === \"string\" || rawLabel == null\r\n ? rawLabel\r\n : String(rawLabel);\r\n // B10: descriptionField alias → helper. Falls back to the\r\n // canonical `helper`/`summary` fields if neither is set.\r\n const helper =\r\n ((descriptionField && rec[descriptionField]) ?? rec[\"helper\"] ?? rec[\"summary\"]) as ReactNode;\r\n return {\r\n value: typeof getOptionValue === \"function\" ? getOptionValue(opt) : opt,\r\n label: safeLabel,\r\n helper,\r\n __raw: opt,\r\n };\r\n });\r\n\r\n const handleChange = (next: ComboboxValue): void => {\r\n setFieldValue(name, next);\r\n setFieldTouched(name, true, false);\r\n if (typeof onSelectionChange === \"function\") {\r\n const picked =\r\n (\r\n v2Options.find(\r\n (o) =>\r\n o != null &&\r\n typeof o === \"object\" &&\r\n \"value\" in o &&\r\n (o as { value?: unknown }).value === next\r\n ) as { __raw?: unknown } | undefined\r\n )?.__raw ?? null;\r\n onSelectionChange(picked as TOption | null);\r\n }\r\n };\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n {...(width !== undefined ? { width } : {})}\r\n >\r\n <Combobox\r\n value={field.value ?? null}\r\n options={v2Options as Array<string | ComboboxOption>}\r\n onChange={handleChange}\r\n {...rest}\r\n {...(loading !== undefined ? { loading } : {})}\r\n />\r\n </Field>\r\n );\r\n}\r\n\r\nexport default FormikCombobox;\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,18 +1,3 @@
1
- var _excluded = ["name", "label", "required", "disabled", "readOnly", "readOnlyFormat", "htmlFor", "hint", "outputFormat"];
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
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
- 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; }
14
- 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; }
15
- 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); }
16
1
  /**
17
2
  * FormikDatePicker — bridge between Formik state and v2.Field +
18
3
  * v2.DatePicker.
@@ -63,6 +48,12 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
63
48
  * objects, so they have no serialisation step and no equivalent asymmetry;
64
49
  * _pickerShared carries only Date<->Moment converters, not string parsing.
65
50
  *
51
+ * UPDATE (gap G-E): `FormikDateTimePicker` now exists too, and the two bridges
52
+ * SHARE `coerceToDate` / `serialiseDate` via `./_pickerSerialisation`. Keeping
53
+ * a private copy in each would have re-created the very asymmetry S-03
54
+ * describes, in a form even harder to spot: two bridges that look alike, that
55
+ * nobody compares, and that each look correct on their own.
56
+ *
66
57
  * Modal / Drawer usage (MUI X v9):
67
58
  * When rendered inside a v2.Drawer or a MUI Modal, the DatePicker
68
59
  * calendar popup may render behind the modal surface (both default
@@ -86,71 +77,27 @@ import { useField, useFormikContext } from "formik";
86
77
  import Field from "../components/Field";
87
78
  import DatePicker from "../components/DatePicker";
88
79
  import FormikDisplay from "../components/FormikDisplay";
80
+ import { coerceToDate, serialiseDate } from "./_pickerSerialisation";
89
81
  import { jsx as _jsx } from "react/jsx-runtime";
90
- /**
91
- * Read a Formik-stored value back into a Date.
92
- *
93
- * `outputFormat` is threaded in so the read is SYMMETRIC with `serialiseDate`
94
- * (S-03). Without it, a non-ISO format written by moment was read by
95
- * `new Date()`, which either rejects it or misreads it as MM-DD.
96
- */
97
- var coerceToDate = function coerceToDate(raw, outputFormat) {
98
- if (raw == null || raw === "") return null;
99
- if (raw instanceof Date) return raw;
100
- if (_typeof(raw) === "object" && typeof raw.toDate === "function") {
101
- var _d$getTime;
102
- var _d = raw.toDate();
103
- return isNaN(_d === null || _d === void 0 ? void 0 : (_d$getTime = _d.getTime) === null || _d$getTime === void 0 ? void 0 : _d$getTime.call(_d)) ? null : _d;
104
- }
105
- /* S-03 — parse with the format it was written with. STRICT mode: a stored value
106
- * that does not match yields null rather than moment's best guess.
107
- *
108
- * Guarded on `typeof raw === "string"` so a numeric timestamp keeps the
109
- * `new Date(number)` path — moment(number, format) is meaningless. "iso" is
110
- * excluded: it is not a moment token, and `new Date(isoString)` is already
111
- * correct. */
112
- if (typeof raw === "string" && outputFormat !== undefined && outputFormat !== "iso") {
113
- var parsed = moment(raw, outputFormat, true);
114
- return parsed.isValid() ? parsed.toDate() : null;
115
- }
116
- var d = new Date(raw);
117
- return isNaN(d.getTime()) ? null : d;
118
- };
119
-
120
- /**
121
- * Serialise a Date to the requested output format.
122
- * undefined → return the Date as-is (default — backward-compat)
123
- * "iso" → Date.toISOString()
124
- * any string → moment(date).format(outputFormat)
125
- */
126
- function serialiseDate(date, outputFormat) {
127
- if (!date || !(date instanceof Date) || isNaN(date.getTime())) {
128
- return outputFormat ? "" : null;
129
- }
130
- if (!outputFormat) return date;
131
- if (outputFormat === "iso") return date.toISOString();
132
- return moment(date).format(outputFormat);
133
- }
134
- var FormikDatePicker = function FormikDatePicker(_ref) {
135
- var name = _ref.name,
136
- label = _ref.label,
137
- required = _ref.required,
138
- disabled = _ref.disabled,
139
- readOnly = _ref.readOnly,
140
- _ref$readOnlyFormat = _ref.readOnlyFormat,
141
- readOnlyFormat = _ref$readOnlyFormat === void 0 ? "DD/MM/YYYY" : _ref$readOnlyFormat,
142
- htmlFor = _ref.htmlFor,
143
- hint = _ref.hint,
144
- outputFormat = _ref.outputFormat,
145
- rest = _objectWithoutProperties(_ref, _excluded);
146
- var _useField = useField(name),
147
- _useField2 = _slicedToArray(_useField, 2),
148
- field = _useField2[0],
149
- meta = _useField2[1];
150
- var _useFormikContext = useFormikContext(),
151
- setFieldValue = _useFormikContext.setFieldValue,
152
- setFieldTouched = _useFormikContext.setFieldTouched;
153
- var hasError = Boolean(meta.touched && meta.error);
82
+ const FormikDatePicker = ({
83
+ name,
84
+ label,
85
+ required,
86
+ disabled,
87
+ readOnly,
88
+ readOnlyFormat = "DD/MM/YYYY",
89
+ htmlFor,
90
+ hint,
91
+ outputFormat,
92
+ width,
93
+ ...rest
94
+ }) => {
95
+ const [field, meta] = useField(name);
96
+ const {
97
+ setFieldValue,
98
+ setFieldTouched
99
+ } = useFormikContext();
100
+ const hasError = Boolean(meta.touched && meta.error);
154
101
 
155
102
  /* Lecture seule. On repasse par `coerceToDate` avec le MÊME `outputFormat`
156
103
  * que le champ utilise pour écrire : c'est la symétrie que S-03 a installée,
@@ -161,36 +108,41 @@ var FormikDatePicker = function FormikDatePicker(_ref) {
161
108
  * marqueur « — » est reproduit ici plutôt que délégué — sans quoi un champ
162
109
  * sans date afficherait un panneau vide. */
163
110
  if (readOnly && !disabled) {
164
- return /*#__PURE__*/_jsx(FormikDisplay, _objectSpread(_objectSpread({
111
+ return /*#__PURE__*/_jsx(FormikDisplay, {
165
112
  name: name,
166
- label: label
167
- }, hint !== undefined ? {
168
- hint: hint
169
- } : {}), {}, {
170
- format: function format(raw) {
171
- var parsed = coerceToDate(raw, outputFormat);
113
+ label: label,
114
+ ...(hint !== undefined ? {
115
+ hint
116
+ } : {}),
117
+ format: raw => {
118
+ const parsed = coerceToDate(raw, outputFormat);
172
119
  return parsed ? moment(parsed).format(readOnlyFormat) : "\u2014";
173
120
  }
174
- }));
121
+ });
175
122
  }
176
- return /*#__PURE__*/_jsx(Field, _objectSpread(_objectSpread(_objectSpread({
123
+ return /*#__PURE__*/_jsx(Field, {
177
124
  label: label,
178
125
  error: hasError ? meta.error : null,
179
126
  hint: !hasError ? hint : undefined,
180
- htmlFor: htmlFor || name
181
- }, required !== undefined ? {
182
- required: required
183
- } : {}), disabled !== undefined ? {
184
- disabled: disabled
185
- } : {}), {}, {
186
- children: /*#__PURE__*/_jsx(DatePicker, _objectSpread({
127
+ htmlFor: htmlFor || name,
128
+ ...(required !== undefined ? {
129
+ required
130
+ } : {}),
131
+ ...(disabled !== undefined ? {
132
+ disabled
133
+ } : {}),
134
+ ...(width !== undefined ? {
135
+ width
136
+ } : {}),
137
+ children: /*#__PURE__*/_jsx(DatePicker, {
187
138
  value: coerceToDate(field.value, outputFormat),
188
- onChange: function onChange(next) {
139
+ onChange: next => {
189
140
  setFieldValue(name, serialiseDate(next, outputFormat));
190
141
  setFieldTouched(name, true, false);
191
- }
192
- }, rest))
193
- }));
142
+ },
143
+ ...rest
144
+ })
145
+ });
194
146
  };
195
147
  export default FormikDatePicker;
196
148
  //# sourceMappingURL=FormikDatePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormikDatePicker.js","names":["React","moment","useField","useFormikContext","Field","DatePicker","FormikDisplay","jsx","_jsx","coerceToDate","raw","outputFormat","Date","_typeof","toDate","_d$getTime","d","isNaN","getTime","call","undefined","parsed","isValid","serialiseDate","date","toISOString","format","FormikDatePicker","_ref","name","label","required","disabled","readOnly","_ref$readOnlyFormat","readOnlyFormat","htmlFor","hint","rest","_objectWithoutProperties","_excluded","_useField","_useField2","_slicedToArray","field","meta","_useFormikContext","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","_objectSpread","children","value","onChange","next"],"sources":["../../../../src/lib/v2/patterns/FormikDatePicker.tsx"],"sourcesContent":["/**\r\n * FormikDatePicker — bridge between Formik state and v2.Field +\r\n * v2.DatePicker.\r\n *\r\n * v2.DatePicker emits Date | null. Formik state may carry Date,\r\n * ISO string, or moment instance — this bridge normalises inbound\r\n * values to Date for the picker.\r\n *\r\n * outputFormat prop (Charter R-I.*):\r\n * By default, onChange writes a Date | null back to Formik, which\r\n * is fine for Yup.date() schemas. If your schema uses Yup.string()\r\n * with a format test (e.g. \"DD-MM-YYYY\"), pass the matching moment\r\n * format string:\r\n *\r\n * <FormikDatePicker name=\"dateNaissance\" outputFormat=\"DD-MM-YYYY\" />\r\n *\r\n * The field then stores \"03-05-2026\" instead of a Date object.\r\n * Pass outputFormat=\"iso\" to store an ISO 8601 string instead.\r\n * Default (undefined) = Date | null (backward-compatible).\r\n *\r\n * ── outputFormat MUST ROUND-TRIP — and now does (S-03) ────────────────\r\n *\r\n * This bridge used to serialise OUT through moment but read BACK through\r\n * `new Date(raw)`, ignoring outputFormat. The asymmetry silently corrupted any\r\n * non-ISO format:\r\n *\r\n * new Date(\"31-12-2026\") -> month 31 invalid -> Invalid Date -> null\r\n * -> the field rendered EMPTY when re-populated\r\n * new Date(\"05-03-2026\") -> V8 reads MM-DD -> 3 May, not 5 March\r\n * -> saving untouched wrote back \"03-05-2026\"\r\n *\r\n * The write path worked, so a form filled in and submitted immediately behaved\r\n * correctly; the damage only surfaced on RE-POPULATE, i.e. an edit flow — the\r\n * path a smoke test is least likely to exercise. `procuration-portnet-fe` shipped\r\n * it for seven batches under a clean strict typecheck.\r\n *\r\n * `coerceToDate` now parses with the SAME format it was written with, in moment's\r\n * STRICT mode, so a malformed stored value yields null instead of a plausible\r\n * wrong date. A missing date is recoverable; a date quietly off by two months is\r\n * not.\r\n *\r\n * BEHAVIOURAL NOTE for existing non-ISO callers: they were mis-parsing before.\r\n * This changes their result from wrong to right — which is the point, but it is a\r\n * change. Callers passing nothing, or \"iso\", are on the identical code path.\r\n *\r\n * Audit: this is the ONLY Formik date bridge in the library. DateTimePicker,\r\n * TimePicker and DateRangePicker are exposed as bare components exchanging Date\r\n * objects, so they have no serialisation step and no equivalent asymmetry;\r\n * _pickerShared carries only Date<->Moment converters, not string parsing.\r\n *\r\n * Modal / Drawer usage (MUI X v9):\r\n * When rendered inside a v2.Drawer or a MUI Modal, the DatePicker\r\n * calendar popup may render behind the modal surface (both default\r\n * to zIndex 1300). In MUI X v9, the popper slot is forwarded via\r\n * slotProps.popper (the legacy `PopperProps` was removed). Pass:\r\n *\r\n * <FormikDatePicker\r\n * slotProps={{ popper: { sx: { zIndex: 1400 } } }}\r\n * />\r\n *\r\n * Slot props forward through ...rest to v2.DatePicker and on to\r\n * MuiDatePicker, where they merge with the textField slot bag\r\n * already wired by v2.DatePicker.\r\n *\r\n * Charter R-I.*.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport moment from \"moment\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport DatePicker from \"../components/DatePicker\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\nimport type { DatePickerProps } from \"../components/DatePicker\";\r\n\r\n/**\r\n * Read a Formik-stored value back into a Date.\r\n *\r\n * `outputFormat` is threaded in so the read is SYMMETRIC with `serialiseDate`\r\n * (S-03). Without it, a non-ISO format written by moment was read by\r\n * `new Date()`, which either rejects it or misreads it as MM-DD.\r\n */\r\nconst coerceToDate = (raw: unknown, outputFormat?: string): Date | null => {\r\n if (raw == null || raw === \"\") return null;\r\n if (raw instanceof Date) return raw;\r\n if (typeof raw === \"object\" && typeof (raw as { toDate?: () => Date }).toDate === \"function\") {\r\n const d = (raw as { toDate: () => Date }).toDate();\r\n return isNaN(d?.getTime?.()) ? null : d;\r\n }\r\n /* S-03 — parse with the format it was written with. STRICT mode: a stored value\r\n * that does not match yields null rather than moment's best guess.\r\n *\r\n * Guarded on `typeof raw === \"string\"` so a numeric timestamp keeps the\r\n * `new Date(number)` path — moment(number, format) is meaningless. \"iso\" is\r\n * excluded: it is not a moment token, and `new Date(isoString)` is already\r\n * correct. */\r\n if (\r\n typeof raw === \"string\" &&\r\n outputFormat !== undefined &&\r\n outputFormat !== \"iso\"\r\n ) {\r\n const parsed = moment(raw, outputFormat, true);\r\n return parsed.isValid() ? parsed.toDate() : null;\r\n }\r\n const d = new Date(raw as string | number);\r\n return isNaN(d.getTime()) ? null : d;\r\n};\r\n\r\n/**\r\n * Serialise a Date to the requested output format.\r\n * undefined → return the Date as-is (default — backward-compat)\r\n * \"iso\" → Date.toISOString()\r\n * any string → moment(date).format(outputFormat)\r\n */\r\nfunction serialiseDate(date: Date | null, outputFormat: string | undefined): Date | string | null {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) {\r\n return outputFormat ? \"\" : null;\r\n }\r\n if (!outputFormat) return date;\r\n if (outputFormat === \"iso\") return date.toISOString();\r\n return moment(date).format(outputFormat);\r\n}\r\n\r\nexport interface FormikDatePickerProps\r\n extends Omit<\r\n DatePickerProps,\r\n \"value\" | \"onChange\" | \"disabled\" | \"error\" | \"label\" | \"readOnly\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: React.ReactNode | undefined;\r\n /**\r\n * outputFormat — when provided, the Formik field stores a formatted\r\n * string instead of a Date object. Use when your Yup schema uses\r\n * Yup.string() with a format-specific test (e.g. \"DD-MM-YYYY\").\r\n * Pass \"iso\" for ISO 8601, or any moment format token string.\r\n * Defaults to undefined (Date | null — backward-compatible).\r\n */\r\n outputFormat?: string | undefined;\r\n /**\r\n * Render the date as read-only text via FormikDisplay instead of a picker.\r\n * `disabled` wins when both are passed — same rule as FormikInput.\r\n *\r\n * `readOnly` IS OMITTED FROM `DatePickerProps` ABOVE, for two reasons.\r\n *\r\n * Mechanically: MUI declares it `readOnly?: boolean` with no `| undefined`,\r\n * so under `exactOptionalPropertyTypes` a host passing an optional\r\n * `boolean | undefined` — which is what a `readOnly?: boolean | undefined`\r\n * section prop is — could not satisfy the inherited signature.\r\n *\r\n * Semantically: this prop SUPERSEDES MUI's meaning. MUI's `readOnly` keeps the\r\n * text field and blocks editing; this one replaces the field with text, so\r\n * there is no input left to mark read-only and forwarding both would be\r\n * contradictory.\r\n *\r\n * BEHAVIOURAL NOTE for existing callers: `readOnly` previously fell through\r\n * `...rest` to MUI and produced a non-editable INPUT. It now produces display\r\n * text. Any caller relying on the old rendering should switch to `disabled`.\r\n */\r\n readOnly?: boolean | undefined;\r\n /**\r\n * Display format in read-only mode. Defaults to the French convention rather\r\n * than to `outputFormat`: what the field STORES and what a reader should SEE\r\n * are different concerns — a field storing \"iso\" or \"YYYY-MM-DD\" should still\r\n * read as 31/12/2026.\r\n */\r\n readOnlyFormat?: string | undefined;\r\n}\r\n\r\nconst FormikDatePicker = ({\r\n name,\r\n label,\r\n required,\r\n disabled,\r\n readOnly,\r\n readOnlyFormat = \"DD/MM/YYYY\",\r\n htmlFor,\r\n hint,\r\n outputFormat,\r\n ...rest\r\n}: FormikDatePickerProps) => {\r\n const [field, meta] = useField(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n /* Lecture seule. On repasse par `coerceToDate` avec le MÊME `outputFormat`\r\n * que le champ utilise pour écrire : c'est la symétrie que S-03 a installée,\r\n * et s'en écarter ici reproduirait exactement le bug qu'il a corrigé (une date\r\n * \"31-12-2026\" relue par `new Date()` devient Invalid Date).\r\n *\r\n * `format` court-circuite la branche « valeur vide » de FormikDisplay, donc le\r\n * marqueur « — » est reproduit ici plutôt que délégué — sans quoi un champ\r\n * sans date afficherait un panneau vide. */\r\n if (readOnly && !disabled) {\r\n return (\r\n <FormikDisplay\r\n name={name}\r\n label={label}\r\n {...(hint !== undefined ? { hint } : {})}\r\n format={(raw) => {\r\n const parsed = coerceToDate(raw, outputFormat);\r\n return parsed ? moment(parsed).format(readOnlyFormat) : \"\\u2014\";\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n >\r\n <DatePicker\r\n value={coerceToDate(field.value, outputFormat)}\r\n onChange={(next) => {\r\n setFieldValue(name, serialiseDate(next, outputFormat));\r\n setFieldTouched(name, true, false);\r\n }}\r\n {...rest}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikDatePicker;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormikDatePicker.js","names":["React","moment","useField","useFormikContext","Field","DatePicker","FormikDisplay","coerceToDate","serialiseDate","jsx","_jsx","FormikDatePicker","name","label","required","disabled","readOnly","readOnlyFormat","htmlFor","hint","outputFormat","width","rest","field","meta","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","undefined","format","raw","parsed","children","value","onChange","next"],"sources":["../../../../src/lib/v2/patterns/FormikDatePicker.tsx"],"sourcesContent":["/**\r\n * FormikDatePicker — bridge between Formik state and v2.Field +\r\n * v2.DatePicker.\r\n *\r\n * v2.DatePicker emits Date | null. Formik state may carry Date,\r\n * ISO string, or moment instance — this bridge normalises inbound\r\n * values to Date for the picker.\r\n *\r\n * outputFormat prop (Charter R-I.*):\r\n * By default, onChange writes a Date | null back to Formik, which\r\n * is fine for Yup.date() schemas. If your schema uses Yup.string()\r\n * with a format test (e.g. \"DD-MM-YYYY\"), pass the matching moment\r\n * format string:\r\n *\r\n * <FormikDatePicker name=\"dateNaissance\" outputFormat=\"DD-MM-YYYY\" />\r\n *\r\n * The field then stores \"03-05-2026\" instead of a Date object.\r\n * Pass outputFormat=\"iso\" to store an ISO 8601 string instead.\r\n * Default (undefined) = Date | null (backward-compatible).\r\n *\r\n * ── outputFormat MUST ROUND-TRIP — and now does (S-03) ────────────────\r\n *\r\n * This bridge used to serialise OUT through moment but read BACK through\r\n * `new Date(raw)`, ignoring outputFormat. The asymmetry silently corrupted any\r\n * non-ISO format:\r\n *\r\n * new Date(\"31-12-2026\") -> month 31 invalid -> Invalid Date -> null\r\n * -> the field rendered EMPTY when re-populated\r\n * new Date(\"05-03-2026\") -> V8 reads MM-DD -> 3 May, not 5 March\r\n * -> saving untouched wrote back \"03-05-2026\"\r\n *\r\n * The write path worked, so a form filled in and submitted immediately behaved\r\n * correctly; the damage only surfaced on RE-POPULATE, i.e. an edit flow — the\r\n * path a smoke test is least likely to exercise. `procuration-portnet-fe` shipped\r\n * it for seven batches under a clean strict typecheck.\r\n *\r\n * `coerceToDate` now parses with the SAME format it was written with, in moment's\r\n * STRICT mode, so a malformed stored value yields null instead of a plausible\r\n * wrong date. A missing date is recoverable; a date quietly off by two months is\r\n * not.\r\n *\r\n * BEHAVIOURAL NOTE for existing non-ISO callers: they were mis-parsing before.\r\n * This changes their result from wrong to right — which is the point, but it is a\r\n * change. Callers passing nothing, or \"iso\", are on the identical code path.\r\n *\r\n * Audit: this is the ONLY Formik date bridge in the library. DateTimePicker,\r\n * TimePicker and DateRangePicker are exposed as bare components exchanging Date\r\n * objects, so they have no serialisation step and no equivalent asymmetry;\r\n * _pickerShared carries only Date<->Moment converters, not string parsing.\r\n *\r\n * UPDATE (gap G-E): `FormikDateTimePicker` now exists too, and the two bridges\r\n * SHARE `coerceToDate` / `serialiseDate` via `./_pickerSerialisation`. Keeping\r\n * a private copy in each would have re-created the very asymmetry S-03\r\n * describes, in a form even harder to spot: two bridges that look alike, that\r\n * nobody compares, and that each look correct on their own.\r\n *\r\n * Modal / Drawer usage (MUI X v9):\r\n * When rendered inside a v2.Drawer or a MUI Modal, the DatePicker\r\n * calendar popup may render behind the modal surface (both default\r\n * to zIndex 1300). In MUI X v9, the popper slot is forwarded via\r\n * slotProps.popper (the legacy `PopperProps` was removed). Pass:\r\n *\r\n * <FormikDatePicker\r\n * slotProps={{ popper: { sx: { zIndex: 1400 } } }}\r\n * />\r\n *\r\n * Slot props forward through ...rest to v2.DatePicker and on to\r\n * MuiDatePicker, where they merge with the textField slot bag\r\n * already wired by v2.DatePicker.\r\n *\r\n * Charter R-I.*.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport moment from \"moment\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport DatePicker from \"../components/DatePicker\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\nimport { coerceToDate, serialiseDate } from \"./_pickerSerialisation\";\r\nimport type { FieldWidth } from \"../components/Field\";\r\nimport type { DatePickerProps } from \"../components/DatePicker\";\r\n\r\nexport interface FormikDatePickerProps\r\n extends Omit<\r\n DatePickerProps,\r\n \"value\" | \"onChange\" | \"disabled\" | \"error\" | \"label\" | \"readOnly\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: React.ReactNode | undefined;\r\n /**\r\n * outputFormat — when provided, the Formik field stores a formatted\r\n * string instead of a Date object. Use when your Yup schema uses\r\n * Yup.string() with a format-specific test (e.g. \"DD-MM-YYYY\").\r\n * Pass \"iso\" for ISO 8601, or any moment format token string.\r\n * Defaults to undefined (Date | null — backward-compatible).\r\n */\r\n outputFormat?: string | undefined;\r\n /**\r\n * Render the date as read-only text via FormikDisplay instead of a picker.\r\n * `disabled` wins when both are passed — same rule as FormikInput.\r\n *\r\n * `readOnly` IS OMITTED FROM `DatePickerProps` ABOVE, for two reasons.\r\n *\r\n * Mechanically: MUI declares it `readOnly?: boolean` with no `| undefined`,\r\n * so under `exactOptionalPropertyTypes` a host passing an optional\r\n * `boolean | undefined` — which is what a `readOnly?: boolean | undefined`\r\n * section prop is — could not satisfy the inherited signature.\r\n *\r\n * Semantically: this prop SUPERSEDES MUI's meaning. MUI's `readOnly` keeps the\r\n * text field and blocks editing; this one replaces the field with text, so\r\n * there is no input left to mark read-only and forwarding both would be\r\n * contradictory.\r\n *\r\n * BEHAVIOURAL NOTE for existing callers: `readOnly` previously fell through\r\n * `...rest` to MUI and produced a non-editable INPUT. It now produces display\r\n * text. Any caller relying on the old rendering should switch to `disabled`.\r\n */\r\n readOnly?: boolean | undefined;\r\n /**\r\n * Display format in read-only mode. Defaults to the French convention rather\r\n * than to `outputFormat`: what the field STORES and what a reader should SEE\r\n * are different concerns — a field storing \"iso\" or \"YYYY-MM-DD\" should still\r\n * read as 31/12/2026.\r\n */\r\n readOnlyFormat?: string | undefined;\r\n /**\r\n * Gabarit de largeur semantique (G-H). Le standard range explicitement les\r\n * dates en `s` (6 a 15 caracteres). Ne s'applique pas en mode `readOnly`.\r\n */\r\n width?: FieldWidth | undefined;\r\n}\r\n\r\nconst FormikDatePicker = ({\r\n name,\r\n label,\r\n required,\r\n disabled,\r\n readOnly,\r\n readOnlyFormat = \"DD/MM/YYYY\",\r\n htmlFor,\r\n hint,\r\n outputFormat,\r\n width,\r\n ...rest\r\n}: FormikDatePickerProps) => {\r\n const [field, meta] = useField(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n /* Lecture seule. On repasse par `coerceToDate` avec le MÊME `outputFormat`\r\n * que le champ utilise pour écrire : c'est la symétrie que S-03 a installée,\r\n * et s'en écarter ici reproduirait exactement le bug qu'il a corrigé (une date\r\n * \"31-12-2026\" relue par `new Date()` devient Invalid Date).\r\n *\r\n * `format` court-circuite la branche « valeur vide » de FormikDisplay, donc le\r\n * marqueur « — » est reproduit ici plutôt que délégué — sans quoi un champ\r\n * sans date afficherait un panneau vide. */\r\n if (readOnly && !disabled) {\r\n return (\r\n <FormikDisplay\r\n name={name}\r\n label={label}\r\n {...(hint !== undefined ? { hint } : {})}\r\n format={(raw) => {\r\n const parsed = coerceToDate(raw, outputFormat);\r\n return parsed ? moment(parsed).format(readOnlyFormat) : \"\\u2014\";\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n {...(width !== undefined ? { width } : {})}\r\n >\r\n <DatePicker\r\n value={coerceToDate(field.value, outputFormat)}\r\n onChange={(next) => {\r\n setFieldValue(name, serialiseDate(next, outputFormat));\r\n setFieldTouched(name, true, false);\r\n }}\r\n {...rest}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikDatePicker;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * FormikDateTimePicker — bridge between Formik state and v2.Field +
3
+ * v2.DateTimePicker.
4
+ *
5
+ * ── WHY (gap G-E) ────────────────────────────────────────────────────
6
+ *
7
+ * `FormikDatePicker` was the ONLY Formik date bridge in the library, and it is
8
+ * date-only. Any host with a date-AND-TIME field therefore had two options:
9
+ * drop the time, or hand-wire `useField` + the bare `DateTimePicker`.
10
+ *
11
+ * Dropping the time is not a styling compromise — it CHANGES WHAT THE BACKEND
12
+ * RECEIVES. Reported from refonte-frontend (lot 7): the physical-visit form
13
+ * stores a visit date carrying an hour and submits
14
+ * `moment(value).format("YYYY-MM-DD HH:mm")`. Routed through the date-only
15
+ * bridge, every visit would have been scheduled at 00:00 — silently, with no
16
+ * error anywhere, and only the agent showing up at the wrong time would
17
+ * eventually notice.
18
+ *
19
+ * Hand-wiring is the duplication R-2.1 forbids, and the shape in which
20
+ * validation messages go missing (see gaps G-A and G-C, same story).
21
+ *
22
+ * Usage:
23
+ *
24
+ * <FormikDateTimePicker
25
+ * name="dateVisite"
26
+ * label="Date de la visite"
27
+ * required
28
+ * />
29
+ *
30
+ * // Field must store a string in the charter datetime format:
31
+ * <FormikDateTimePicker
32
+ * name="dateVisite"
33
+ * outputFormat={DATETIME_FORMAT_CHARTER} // "YYYY-MM-DD HH:mm"
34
+ * />
35
+ *
36
+ * ── SERIALISATION IS SHARED WITH FormikDatePicker, DELIBERATELY ──────
37
+ *
38
+ * `coerceToDate` / `serialiseDate` live in `./_pickerSerialisation` and are
39
+ * used by BOTH bridges. That is not tidiness: `FormikDatePicker`'s S-03 note
40
+ * documents what happens when the read and the write of a date disagree — a
41
+ * stored "31-12-2026" read back by `new Date()` becomes Invalid Date, a stored
42
+ * "05-03-2026" becomes 3 May instead of 5 March. The write path works, so the
43
+ * damage only appears on RE-POPULATE, i.e. in an edit flow, which is the path
44
+ * a smoke test is least likely to exercise. One module shipped that for seven
45
+ * batches under a clean strict typecheck.
46
+ *
47
+ * Two private copies of that couple would have re-created the same class of
48
+ * bug in a form even harder to spot.
49
+ *
50
+ * ── DEFAULT OUTPUT IS A Date, LIKE THE SIBLING ──────────────────────
51
+ *
52
+ * With no `outputFormat`, the field stores `Date | null` — which is what
53
+ * `Yup.date()` expects and what a host formatting at submit time already
54
+ * handles. Pass `"iso"` for ISO 8601, or any moment token string (typically
55
+ * `DATETIME_FORMAT_CHARTER`) when the schema is a `Yup.string()` with a format
56
+ * test. Whatever is chosen, reading back uses the SAME format.
57
+ *
58
+ * Modal / Drawer usage (MUI X v9): the picker popup may render behind a modal
59
+ * surface (both default to zIndex 1300). Forward
60
+ * `slotProps={{ popper: { sx: { zIndex: 1400 } } }}` — it reaches
61
+ * MuiDateTimePicker through `...rest`, exactly as on `FormikDatePicker`.
62
+ *
63
+ * Charter §03 · R-I.*. Peer dependency: formik >= 2.x.
64
+ */
65
+
66
+ import * as React from "react";
67
+ import moment from "moment";
68
+ import { useField, useFormikContext } from "formik";
69
+ import Field from "../components/Field";
70
+ import DateTimePicker from "../components/DateTimePicker";
71
+ import FormikDisplay from "../components/FormikDisplay";
72
+ import { coerceToDate, serialiseDate } from "./_pickerSerialisation";
73
+ import { jsx as _jsx } from "react/jsx-runtime";
74
+ const FormikDateTimePicker = ({
75
+ name,
76
+ label,
77
+ required,
78
+ disabled,
79
+ readOnly,
80
+ readOnlyFormat = "DD/MM/YYYY HH:mm",
81
+ htmlFor,
82
+ hint,
83
+ outputFormat,
84
+ width,
85
+ ...rest
86
+ }) => {
87
+ const [field, meta] = useField(name);
88
+ const {
89
+ setFieldValue,
90
+ setFieldTouched
91
+ } = useFormikContext();
92
+ const hasError = Boolean(meta.touched && meta.error);
93
+
94
+ /* Lecture seule. On repasse par `coerceToDate` avec le MEME `outputFormat`
95
+ * que le champ utilise pour ecrire : c'est la symetrie de S-03. `format`
96
+ * court-circuite la branche « valeur vide » de FormikDisplay, donc le
97
+ * marqueur est reproduit ici plutot que delegue. */
98
+ if (readOnly && !disabled) {
99
+ return /*#__PURE__*/_jsx(FormikDisplay, {
100
+ name: name,
101
+ label: label,
102
+ ...(hint !== undefined ? {
103
+ hint
104
+ } : {}),
105
+ format: raw => {
106
+ const parsed = coerceToDate(raw, outputFormat);
107
+ return parsed ? moment(parsed).format(readOnlyFormat) : "\u2014";
108
+ }
109
+ });
110
+ }
111
+ return /*#__PURE__*/_jsx(Field, {
112
+ label: label,
113
+ error: hasError ? meta.error : null,
114
+ hint: !hasError ? hint : undefined,
115
+ htmlFor: htmlFor || name,
116
+ ...(required !== undefined ? {
117
+ required
118
+ } : {}),
119
+ ...(disabled !== undefined ? {
120
+ disabled
121
+ } : {}),
122
+ ...(width !== undefined ? {
123
+ width
124
+ } : {}),
125
+ children: /*#__PURE__*/_jsx(DateTimePicker, {
126
+ value: coerceToDate(field.value, outputFormat),
127
+ onChange: next => {
128
+ setFieldValue(name, serialiseDate(next, outputFormat));
129
+ setFieldTouched(name, true, false);
130
+ },
131
+ ...rest
132
+ })
133
+ });
134
+ };
135
+ export default FormikDateTimePicker;
136
+ //# sourceMappingURL=FormikDateTimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormikDateTimePicker.js","names":["React","moment","useField","useFormikContext","Field","DateTimePicker","FormikDisplay","coerceToDate","serialiseDate","jsx","_jsx","FormikDateTimePicker","name","label","required","disabled","readOnly","readOnlyFormat","htmlFor","hint","outputFormat","width","rest","field","meta","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","undefined","format","raw","parsed","children","value","onChange","next"],"sources":["../../../../src/lib/v2/patterns/FormikDateTimePicker.tsx"],"sourcesContent":["/**\r\n * FormikDateTimePicker — bridge between Formik state and v2.Field +\r\n * v2.DateTimePicker.\r\n *\r\n * ── WHY (gap G-E) ────────────────────────────────────────────────────\r\n *\r\n * `FormikDatePicker` was the ONLY Formik date bridge in the library, and it is\r\n * date-only. Any host with a date-AND-TIME field therefore had two options:\r\n * drop the time, or hand-wire `useField` + the bare `DateTimePicker`.\r\n *\r\n * Dropping the time is not a styling compromise — it CHANGES WHAT THE BACKEND\r\n * RECEIVES. Reported from refonte-frontend (lot 7): the physical-visit form\r\n * stores a visit date carrying an hour and submits\r\n * `moment(value).format(\"YYYY-MM-DD HH:mm\")`. Routed through the date-only\r\n * bridge, every visit would have been scheduled at 00:00 — silently, with no\r\n * error anywhere, and only the agent showing up at the wrong time would\r\n * eventually notice.\r\n *\r\n * Hand-wiring is the duplication R-2.1 forbids, and the shape in which\r\n * validation messages go missing (see gaps G-A and G-C, same story).\r\n *\r\n * Usage:\r\n *\r\n * <FormikDateTimePicker\r\n * name=\"dateVisite\"\r\n * label=\"Date de la visite\"\r\n * required\r\n * />\r\n *\r\n * // Field must store a string in the charter datetime format:\r\n * <FormikDateTimePicker\r\n * name=\"dateVisite\"\r\n * outputFormat={DATETIME_FORMAT_CHARTER} // \"YYYY-MM-DD HH:mm\"\r\n * />\r\n *\r\n * ── SERIALISATION IS SHARED WITH FormikDatePicker, DELIBERATELY ──────\r\n *\r\n * `coerceToDate` / `serialiseDate` live in `./_pickerSerialisation` and are\r\n * used by BOTH bridges. That is not tidiness: `FormikDatePicker`'s S-03 note\r\n * documents what happens when the read and the write of a date disagree — a\r\n * stored \"31-12-2026\" read back by `new Date()` becomes Invalid Date, a stored\r\n * \"05-03-2026\" becomes 3 May instead of 5 March. The write path works, so the\r\n * damage only appears on RE-POPULATE, i.e. in an edit flow, which is the path\r\n * a smoke test is least likely to exercise. One module shipped that for seven\r\n * batches under a clean strict typecheck.\r\n *\r\n * Two private copies of that couple would have re-created the same class of\r\n * bug in a form even harder to spot.\r\n *\r\n * ── DEFAULT OUTPUT IS A Date, LIKE THE SIBLING ──────────────────────\r\n *\r\n * With no `outputFormat`, the field stores `Date | null` — which is what\r\n * `Yup.date()` expects and what a host formatting at submit time already\r\n * handles. Pass `\"iso\"` for ISO 8601, or any moment token string (typically\r\n * `DATETIME_FORMAT_CHARTER`) when the schema is a `Yup.string()` with a format\r\n * test. Whatever is chosen, reading back uses the SAME format.\r\n *\r\n * Modal / Drawer usage (MUI X v9): the picker popup may render behind a modal\r\n * surface (both default to zIndex 1300). Forward\r\n * `slotProps={{ popper: { sx: { zIndex: 1400 } } }}` — it reaches\r\n * MuiDateTimePicker through `...rest`, exactly as on `FormikDatePicker`.\r\n *\r\n * Charter §03 · R-I.*. Peer dependency: formik >= 2.x.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport moment from \"moment\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport DateTimePicker from \"../components/DateTimePicker\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\nimport { coerceToDate, serialiseDate } from \"./_pickerSerialisation\";\r\nimport type { FieldWidth } from \"../components/Field\";\r\nimport type { DateTimePickerProps } from \"../components/DateTimePicker\";\r\n\r\nexport interface FormikDateTimePickerProps\r\n extends Omit<\r\n DateTimePickerProps,\r\n \"value\" | \"onChange\" | \"disabled\" | \"error\" | \"label\" | \"readOnly\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: React.ReactNode | undefined;\r\n /**\r\n * When provided, the Formik field stores a formatted STRING instead of a\r\n * `Date`. Pass `\"iso\"` for ISO 8601, or any moment token string — typically\r\n * `DATETIME_FORMAT_CHARTER` (\"YYYY-MM-DD HH:mm\"). Defaults to undefined\r\n * (`Date | null`).\r\n */\r\n outputFormat?: string | undefined;\r\n /**\r\n * Render the value as read-only text via `FormikDisplay` instead of a\r\n * picker. `disabled` wins when both are passed — same rule as\r\n * `FormikInput` and `FormikDatePicker`.\r\n *\r\n * Omitted from `DateTimePickerProps` above for the same two reasons as on\r\n * the sibling: MUI declares `readOnly?: boolean` with no `| undefined`, which\r\n * an optional section prop cannot satisfy under\r\n * `exactOptionalPropertyTypes`; and this prop SUPERSEDES MUI's meaning —\r\n * MUI keeps the text field and blocks editing, this one replaces the field\r\n * with text, so there is no input left to mark read-only.\r\n */\r\n readOnly?: boolean | undefined;\r\n /**\r\n * Display format in read-only mode. Defaults to the French convention rather\r\n * than to `outputFormat`: what the field STORES and what a reader should SEE\r\n * are different concerns — a field storing ISO should still read as\r\n * 31/12/2026 14:30.\r\n */\r\n readOnlyFormat?: string | undefined;\r\n /**\r\n * Gabarit de largeur semantique (G-H). Le standard range les dates en `s`\r\n * (6 a 15 caracteres) : une date-heure au format charte en fait 16, donc `s`\r\n * ou `m` selon la place disponible. Ne s'applique pas en mode `readOnly`.\r\n */\r\n width?: FieldWidth | undefined;\r\n}\r\n\r\nconst FormikDateTimePicker = ({\r\n name,\r\n label,\r\n required,\r\n disabled,\r\n readOnly,\r\n readOnlyFormat = \"DD/MM/YYYY HH:mm\",\r\n htmlFor,\r\n hint,\r\n outputFormat,\r\n width,\r\n ...rest\r\n}: FormikDateTimePickerProps) => {\r\n const [field, meta] = useField(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n /* Lecture seule. On repasse par `coerceToDate` avec le MEME `outputFormat`\r\n * que le champ utilise pour ecrire : c'est la symetrie de S-03. `format`\r\n * court-circuite la branche « valeur vide » de FormikDisplay, donc le\r\n * marqueur est reproduit ici plutot que delegue. */\r\n if (readOnly && !disabled) {\r\n return (\r\n <FormikDisplay\r\n name={name}\r\n label={label}\r\n {...(hint !== undefined ? { hint } : {})}\r\n format={(raw) => {\r\n const parsed = coerceToDate(raw, outputFormat);\r\n return parsed ? moment(parsed).format(readOnlyFormat) : \"\\u2014\";\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n {...(width !== undefined ? { width } : {})}\r\n >\r\n <DateTimePicker\r\n value={coerceToDate(field.value, outputFormat)}\r\n onChange={(next) => {\r\n setFieldValue(name, serialiseDate(next, outputFormat));\r\n setFieldTouched(name, true, false);\r\n }}\r\n {...rest}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikDateTimePicker;\r\n"],"mappings":"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","ignoreList":[]}