@portnet/ui 6.0.0 → 6.0.2

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 (820) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/dist/esm/index.js +214 -0
  3. package/dist/esm/index.js.map +1 -0
  4. package/dist/esm/v2/__tests__/FieldError.test.js +159 -0
  5. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -0
  6. package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
  7. package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
  8. package/dist/esm/v2/__tests__/FileCard.test.js +143 -0
  9. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -0
  10. package/dist/esm/v2/__tests__/FormikCheckbox.test.js +265 -0
  11. package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  12. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +248 -0
  13. package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  14. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +380 -0
  15. package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  16. package/dist/esm/v2/__tests__/MobileRowCard.test.js +332 -0
  17. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -0
  18. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +235 -0
  19. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  20. package/dist/esm/v2/__tests__/apiError.test.js +181 -0
  21. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -0
  22. package/dist/esm/v2/__tests__/banned-patterns.test.js +270 -0
  23. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -0
  24. package/dist/esm/v2/__tests__/contrast-palette.test.js +224 -0
  25. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -0
  26. package/dist/esm/v2/__tests__/cssVariables.test.js +157 -0
  27. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -0
  28. package/dist/esm/v2/__tests__/labels-merge.test.js +146 -0
  29. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -0
  30. package/dist/esm/v2/__tests__/locale-fallback.test.js +109 -0
  31. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -0
  32. package/dist/esm/v2/__tests__/useFocusTrap.test.js +514 -0
  33. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -0
  34. package/dist/esm/v2/components/Accordion.js +230 -0
  35. package/dist/esm/v2/components/Accordion.js.map +1 -0
  36. package/dist/esm/v2/components/ActionStrip.js +146 -0
  37. package/dist/esm/v2/components/ActionStrip.js.map +1 -0
  38. package/dist/esm/v2/components/Banner.js +254 -0
  39. package/dist/esm/v2/components/Banner.js.map +1 -0
  40. package/dist/esm/v2/components/Busy.js +97 -0
  41. package/dist/esm/v2/components/Busy.js.map +1 -0
  42. package/dist/esm/v2/components/Button.js +114 -0
  43. package/dist/esm/v2/components/Button.js.map +1 -0
  44. package/dist/esm/v2/components/CategoryTag.js +81 -0
  45. package/dist/esm/v2/components/CategoryTag.js.map +1 -0
  46. package/dist/esm/v2/components/Checkbox.js +124 -0
  47. package/dist/esm/v2/components/Checkbox.js.map +1 -0
  48. package/dist/esm/v2/components/Chip.js +124 -0
  49. package/dist/esm/v2/components/Chip.js.map +1 -0
  50. package/dist/esm/v2/components/Combobox.js +394 -0
  51. package/dist/esm/v2/components/Combobox.js.map +1 -0
  52. package/dist/esm/v2/components/CommandPalette.js +660 -0
  53. package/dist/esm/v2/components/CommandPalette.js.map +1 -0
  54. package/dist/esm/v2/components/ConfirmDialog.js +144 -0
  55. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -0
  56. package/dist/esm/v2/components/DatePicker.js +200 -0
  57. package/dist/esm/v2/components/DatePicker.js.map +1 -0
  58. package/dist/esm/v2/components/DateRangePicker.js +289 -0
  59. package/dist/esm/v2/components/DateRangePicker.js.map +1 -0
  60. package/dist/esm/v2/components/DateTimePicker.js +215 -0
  61. package/dist/esm/v2/components/DateTimePicker.js.map +1 -0
  62. package/dist/esm/v2/components/Drawer.js +333 -0
  63. package/dist/esm/v2/components/Drawer.js.map +1 -0
  64. package/dist/esm/v2/components/Dropzone.js +540 -0
  65. package/dist/esm/v2/components/Dropzone.js.map +1 -0
  66. package/dist/esm/v2/components/EmptyState.js +102 -0
  67. package/dist/esm/v2/components/EmptyState.js.map +1 -0
  68. package/dist/esm/v2/components/FavoriteToggle.js +127 -0
  69. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -0
  70. package/dist/esm/v2/components/Field.js +259 -0
  71. package/dist/esm/v2/components/Field.js.map +1 -0
  72. package/dist/esm/v2/components/FieldError.js +124 -0
  73. package/dist/esm/v2/components/FieldError.js.map +1 -0
  74. package/dist/esm/v2/components/FieldHelp.js +202 -0
  75. package/dist/esm/v2/components/FieldHelp.js.map +1 -0
  76. package/dist/esm/v2/components/FileCard.js +162 -0
  77. package/dist/esm/v2/components/FileCard.js.map +1 -0
  78. package/dist/esm/v2/components/FilterTab.js +138 -0
  79. package/dist/esm/v2/components/FilterTab.js.map +1 -0
  80. package/dist/esm/v2/components/ForbiddenPage.js +74 -0
  81. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -0
  82. package/dist/esm/v2/components/FormGrid.js +179 -0
  83. package/dist/esm/v2/components/FormGrid.js.map +1 -0
  84. package/dist/esm/v2/components/FormikDisplay.js +118 -0
  85. package/dist/esm/v2/components/FormikDisplay.js.map +1 -0
  86. package/dist/esm/v2/components/Input.js +107 -0
  87. package/dist/esm/v2/components/Input.js.map +1 -0
  88. package/dist/esm/v2/components/KPICard.js +237 -0
  89. package/dist/esm/v2/components/KPICard.js.map +1 -0
  90. package/dist/esm/v2/components/KPIStrip.js +84 -0
  91. package/dist/esm/v2/components/KPIStrip.js.map +1 -0
  92. package/dist/esm/v2/components/KV.js +75 -0
  93. package/dist/esm/v2/components/KV.js.map +1 -0
  94. package/dist/esm/v2/components/KVGrid.js +74 -0
  95. package/dist/esm/v2/components/KVGrid.js.map +1 -0
  96. package/dist/esm/v2/components/Layout.js +284 -0
  97. package/dist/esm/v2/components/Layout.js.map +1 -0
  98. package/dist/esm/v2/components/MobileRowCard.js +314 -0
  99. package/dist/esm/v2/components/MobileRowCard.js.map +1 -0
  100. package/dist/esm/v2/components/Modal.js +276 -0
  101. package/dist/esm/v2/components/Modal.js.map +1 -0
  102. package/dist/esm/v2/components/NetworkErrorPage.js +78 -0
  103. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -0
  104. package/dist/esm/v2/components/NotFoundPage.js +58 -0
  105. package/dist/esm/v2/components/NotFoundPage.js.map +1 -0
  106. package/dist/esm/v2/components/NumberInput.js +309 -0
  107. package/dist/esm/v2/components/NumberInput.js.map +1 -0
  108. package/dist/esm/v2/components/OverflowMenu.js +184 -0
  109. package/dist/esm/v2/components/OverflowMenu.js.map +1 -0
  110. package/dist/esm/v2/components/PdfViewer.js +122 -0
  111. package/dist/esm/v2/components/PdfViewer.js.map +1 -0
  112. package/dist/esm/v2/components/ProgressBar.js +202 -0
  113. package/dist/esm/v2/components/ProgressBar.js.map +1 -0
  114. package/dist/esm/v2/components/Radio.js +228 -0
  115. package/dist/esm/v2/components/Radio.js.map +1 -0
  116. package/dist/esm/v2/components/SectionErrorBoundary.js +214 -0
  117. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -0
  118. package/dist/esm/v2/components/SectionHeader.js +132 -0
  119. package/dist/esm/v2/components/SectionHeader.js.map +1 -0
  120. package/dist/esm/v2/components/Segmented.js +254 -0
  121. package/dist/esm/v2/components/Segmented.js.map +1 -0
  122. package/dist/esm/v2/components/Select.js +490 -0
  123. package/dist/esm/v2/components/Select.js.map +1 -0
  124. package/dist/esm/v2/components/ServerErrorPage.js +74 -0
  125. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -0
  126. package/dist/esm/v2/components/Skeleton.js +269 -0
  127. package/dist/esm/v2/components/Skeleton.js.map +1 -0
  128. package/dist/esm/v2/components/SkipLink.js +49 -0
  129. package/dist/esm/v2/components/SkipLink.js.map +1 -0
  130. package/dist/esm/v2/components/Spinner.js +69 -0
  131. package/dist/esm/v2/components/Spinner.js.map +1 -0
  132. package/dist/esm/v2/components/Status.js +64 -0
  133. package/dist/esm/v2/components/Status.js.map +1 -0
  134. package/dist/esm/v2/components/Stepper.js +432 -0
  135. package/dist/esm/v2/components/Stepper.js.map +1 -0
  136. package/dist/esm/v2/components/Surface.js +159 -0
  137. package/dist/esm/v2/components/Surface.js.map +1 -0
  138. package/dist/esm/v2/components/Switch.js +128 -0
  139. package/dist/esm/v2/components/Switch.js.map +1 -0
  140. package/dist/esm/v2/components/Tabs.js +150 -0
  141. package/dist/esm/v2/components/Tabs.js.map +1 -0
  142. package/dist/esm/v2/components/TelInput.js +274 -0
  143. package/dist/esm/v2/components/TelInput.js.map +1 -0
  144. package/dist/esm/v2/components/Textarea.js +72 -0
  145. package/dist/esm/v2/components/Textarea.js.map +1 -0
  146. package/dist/esm/v2/components/TimePicker.js +134 -0
  147. package/dist/esm/v2/components/TimePicker.js.map +1 -0
  148. package/dist/esm/v2/components/Toast.js +376 -0
  149. package/dist/esm/v2/components/Toast.js.map +1 -0
  150. package/dist/esm/v2/components/Tooltip.js +161 -0
  151. package/dist/esm/v2/components/Tooltip.js.map +1 -0
  152. package/dist/esm/v2/components/_ErrorPageBody.js +85 -0
  153. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -0
  154. package/dist/esm/v2/components/_pickerShared.js +60 -0
  155. package/dist/esm/v2/components/_pickerShared.js.map +1 -0
  156. package/dist/esm/v2/components/index.js +271 -0
  157. package/dist/esm/v2/components/index.js.map +1 -0
  158. package/dist/esm/v2/hooks/index.js +10 -0
  159. package/dist/esm/v2/hooks/index.js.map +1 -0
  160. package/dist/esm/v2/hooks/useDelayedFlag.js +55 -0
  161. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -0
  162. package/dist/esm/v2/hooks/useDensity.js +119 -0
  163. package/dist/esm/v2/hooks/useDensity.js.map +1 -0
  164. package/dist/esm/v2/hooks/useFocusFirstError.js +197 -0
  165. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -0
  166. package/dist/esm/v2/hooks/useFocusTrap.js +202 -0
  167. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -0
  168. package/dist/esm/v2/hooks/useFormAutoSave.js +181 -0
  169. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -0
  170. package/dist/esm/v2/hooks/useFormCompletionProgress.js +131 -0
  171. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -0
  172. package/dist/esm/v2/hooks/useResolvedDensity.js +44 -0
  173. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -0
  174. package/dist/esm/v2/hooks/useSortedRows.js +32 -0
  175. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -0
  176. package/dist/esm/v2/hooks/useTabLoading.js +79 -0
  177. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -0
  178. package/dist/esm/v2/index.js +132 -0
  179. package/dist/esm/v2/index.js.map +1 -0
  180. package/dist/esm/v2/modalContext.js +108 -0
  181. package/dist/esm/v2/modalContext.js.map +1 -0
  182. package/dist/esm/v2/models/favorite.js +2 -0
  183. package/dist/esm/v2/models/favorite.js.map +1 -0
  184. package/dist/esm/v2/models/index.js +12 -0
  185. package/dist/esm/v2/models/index.js.map +1 -0
  186. package/dist/esm/v2/models/personalization.js +2 -0
  187. package/dist/esm/v2/models/personalization.js.map +1 -0
  188. package/dist/esm/v2/models/referentiel.js +2 -0
  189. package/dist/esm/v2/models/referentiel.js.map +1 -0
  190. package/dist/esm/v2/models/savedFilter.js +2 -0
  191. package/dist/esm/v2/models/savedFilter.js.map +1 -0
  192. package/dist/esm/v2/patterns/ActionBar.js +603 -0
  193. package/dist/esm/v2/patterns/ActionBar.js.map +1 -0
  194. package/dist/esm/v2/patterns/BulkActionBar.js +147 -0
  195. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -0
  196. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +303 -0
  197. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -0
  198. package/dist/esm/v2/patterns/ColumnsToggle.js +301 -0
  199. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -0
  200. package/dist/esm/v2/patterns/DataGrid.js +820 -0
  201. package/dist/esm/v2/patterns/DataGrid.js.map +1 -0
  202. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +375 -0
  203. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -0
  204. package/dist/esm/v2/patterns/DataGridToolbar.js +249 -0
  205. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -0
  206. package/dist/esm/v2/patterns/DataGridVirtualized.js +523 -0
  207. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -0
  208. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +70 -0
  209. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
  210. package/dist/esm/v2/patterns/FavoriteColumn.js +117 -0
  211. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -0
  212. package/dist/esm/v2/patterns/FavoritesFilter.js +91 -0
  213. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -0
  214. package/dist/esm/v2/patterns/FormErrorSummary.js +101 -0
  215. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -0
  216. package/dist/esm/v2/patterns/FormPageShell.js +126 -0
  217. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -0
  218. package/dist/esm/v2/patterns/FormSection.js +190 -0
  219. package/dist/esm/v2/patterns/FormSection.js.map +1 -0
  220. package/dist/esm/v2/patterns/FormikCheckbox.js +140 -0
  221. package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
  222. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +110 -0
  223. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -0
  224. package/dist/esm/v2/patterns/FormikCombobox.js +118 -0
  225. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -0
  226. package/dist/esm/v2/patterns/FormikDatePicker.js +162 -0
  227. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -0
  228. package/dist/esm/v2/patterns/FormikDateTimePicker.js +150 -0
  229. package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
  230. package/dist/esm/v2/patterns/FormikErrorFocus.js +77 -0
  231. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -0
  232. package/dist/esm/v2/patterns/FormikFile.js +148 -0
  233. package/dist/esm/v2/patterns/FormikFile.js.map +1 -0
  234. package/dist/esm/v2/patterns/FormikInput.js +130 -0
  235. package/dist/esm/v2/patterns/FormikInput.js.map +1 -0
  236. package/dist/esm/v2/patterns/FormikRadioGroup.js +141 -0
  237. package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
  238. package/dist/esm/v2/patterns/FormikReferentielField.js +116 -0
  239. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -0
  240. package/dist/esm/v2/patterns/FormikSelect.js +162 -0
  241. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -0
  242. package/dist/esm/v2/patterns/FormikTextarea.js +79 -0
  243. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -0
  244. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +212 -0
  245. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
  246. package/dist/esm/v2/patterns/NetworkErrorBanner.js +72 -0
  247. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -0
  248. package/dist/esm/v2/patterns/PageContent.js +62 -0
  249. package/dist/esm/v2/patterns/PageContent.js.map +1 -0
  250. package/dist/esm/v2/patterns/ReferentielField.js +615 -0
  251. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -0
  252. package/dist/esm/v2/patterns/RowFavoriteToggle.js +122 -0
  253. package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
  254. package/dist/esm/v2/patterns/SaveFilterDialog.js +197 -0
  255. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -0
  256. package/dist/esm/v2/patterns/SavedFiltersMenu.js +406 -0
  257. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -0
  258. package/dist/esm/v2/patterns/SkeletonPageShell.js +342 -0
  259. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -0
  260. package/dist/esm/v2/patterns/SortableHeader.js +179 -0
  261. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -0
  262. package/dist/esm/v2/patterns/Tour.js +471 -0
  263. package/dist/esm/v2/patterns/Tour.js.map +1 -0
  264. package/dist/esm/v2/patterns/_dataGridShared.js +431 -0
  265. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -0
  266. package/dist/esm/v2/patterns/_pickerSerialisation.js +74 -0
  267. package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
  268. package/dist/esm/v2/patterns/_sort.js +112 -0
  269. package/dist/esm/v2/patterns/_sort.js.map +1 -0
  270. package/dist/esm/v2/patterns/_useColumnReorder.js +257 -0
  271. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -0
  272. package/dist/esm/v2/patterns/_useColumnResize.js +191 -0
  273. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -0
  274. package/dist/esm/v2/patterns/index.js +178 -0
  275. package/dist/esm/v2/patterns/index.js.map +1 -0
  276. package/dist/esm/v2/personalization/PersonalizationProvider.js +168 -0
  277. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -0
  278. package/dist/esm/v2/personalization/adapters/_storageKey.js +60 -0
  279. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -0
  280. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +124 -0
  281. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
  282. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +70 -0
  283. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
  284. package/dist/esm/v2/personalization/adapters/index.js +11 -0
  285. package/dist/esm/v2/personalization/adapters/index.js.map +1 -0
  286. package/dist/esm/v2/personalization/capabilities/favorites.js +216 -0
  287. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -0
  288. package/dist/esm/v2/personalization/capabilities/favoritesView.js +111 -0
  289. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -0
  290. package/dist/esm/v2/personalization/capabilities/gridPreferences.js +209 -0
  291. package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  292. package/dist/esm/v2/personalization/capabilities/index.js +22 -0
  293. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -0
  294. package/dist/esm/v2/personalization/capabilities/savedFilters.js +291 -0
  295. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -0
  296. package/dist/esm/v2/personalization/createPersonalizationStore.js +472 -0
  297. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -0
  298. package/dist/esm/v2/personalization/index.js +64 -0
  299. package/dist/esm/v2/personalization/index.js.map +1 -0
  300. package/dist/esm/v2/personalization/personalizationContext.js +108 -0
  301. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -0
  302. package/dist/esm/v2/personalization/schema.js +92 -0
  303. package/dist/esm/v2/personalization/schema.js.map +1 -0
  304. package/dist/esm/v2/personalization/types.js +2 -0
  305. package/dist/esm/v2/personalization/types.js.map +1 -0
  306. package/dist/esm/v2/referentiel/ReferentielProvider.js +87 -0
  307. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -0
  308. package/dist/esm/v2/referentiel/index.js +15 -0
  309. package/dist/esm/v2/referentiel/index.js.map +1 -0
  310. package/dist/esm/v2/referentiel/useReferentielClient.js +37 -0
  311. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -0
  312. package/dist/esm/v2/referentiel/useReferentielOptions.js +169 -0
  313. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -0
  314. package/dist/esm/v2/referentiel/useReferentielSearch.js +132 -0
  315. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -0
  316. package/dist/esm/v2/styles/base.css +425 -0
  317. package/dist/esm/v2/styles/css.d.ts +10 -0
  318. package/dist/esm/v2/styles/index.js +12 -0
  319. package/dist/esm/v2/styles/index.js.map +1 -0
  320. package/dist/esm/v2/theme/_brand.js +64 -0
  321. package/dist/esm/v2/theme/_brand.js.map +1 -0
  322. package/dist/esm/v2/theme/_brandSecondary.js +60 -0
  323. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -0
  324. package/dist/esm/v2/theme/createPortnetTheme.js +548 -0
  325. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -0
  326. package/dist/esm/v2/theme/cssVariables.js +198 -0
  327. package/dist/esm/v2/theme/cssVariables.js.map +1 -0
  328. package/dist/esm/v2/theme/index.js +32 -0
  329. package/dist/esm/v2/theme/index.js.map +1 -0
  330. package/dist/esm/v2/tokens/breakpoints.js +106 -0
  331. package/dist/esm/v2/tokens/breakpoints.js.map +1 -0
  332. package/dist/esm/v2/tokens/colors.js +219 -0
  333. package/dist/esm/v2/tokens/colors.js.map +1 -0
  334. package/dist/esm/v2/tokens/density.js +98 -0
  335. package/dist/esm/v2/tokens/density.js.map +1 -0
  336. package/dist/esm/v2/tokens/index.js +80 -0
  337. package/dist/esm/v2/tokens/index.js.map +1 -0
  338. package/dist/esm/v2/tokens/motion.js +88 -0
  339. package/dist/esm/v2/tokens/motion.js.map +1 -0
  340. package/dist/esm/v2/tokens/radius.js +22 -0
  341. package/dist/esm/v2/tokens/radius.js.map +1 -0
  342. package/dist/esm/v2/tokens/shadows.js +40 -0
  343. package/dist/esm/v2/tokens/shadows.js.map +1 -0
  344. package/dist/esm/v2/tokens/spacing.js +51 -0
  345. package/dist/esm/v2/tokens/spacing.js.map +1 -0
  346. package/dist/esm/v2/tokens/state.js +41 -0
  347. package/dist/esm/v2/tokens/state.js.map +1 -0
  348. package/dist/esm/v2/tokens/statusPalette.js +66 -0
  349. package/dist/esm/v2/tokens/statusPalette.js.map +1 -0
  350. package/dist/esm/v2/tokens/tokens.json +153 -0
  351. package/dist/esm/v2/tokens/typography.js +149 -0
  352. package/dist/esm/v2/tokens/typography.js.map +1 -0
  353. package/dist/esm/v2/tokens/zIndex.js +44 -0
  354. package/dist/esm/v2/tokens/zIndex.js.map +1 -0
  355. package/dist/esm/v2/types/common.js +2 -0
  356. package/dist/esm/v2/types/common.js.map +1 -0
  357. package/dist/esm/v2/types/datagrid.js +2 -0
  358. package/dist/esm/v2/types/datagrid.js.map +1 -0
  359. package/dist/esm/v2/types/index.js +12 -0
  360. package/dist/esm/v2/types/index.js.map +1 -0
  361. package/dist/esm/v2/utils/apiError.js +281 -0
  362. package/dist/esm/v2/utils/apiError.js.map +1 -0
  363. package/dist/esm/v2/utils/contrast.js +157 -0
  364. package/dist/esm/v2/utils/contrast.js.map +1 -0
  365. package/dist/esm/v2/utils/cx.js +38 -0
  366. package/dist/esm/v2/utils/cx.js.map +1 -0
  367. package/dist/esm/v2/utils/fileDownload.js +226 -0
  368. package/dist/esm/v2/utils/fileDownload.js.map +1 -0
  369. package/dist/esm/v2/utils/fmtMoney.js +78 -0
  370. package/dist/esm/v2/utils/fmtMoney.js.map +1 -0
  371. package/dist/esm/v2/utils/index.js +43 -0
  372. package/dist/esm/v2/utils/index.js.map +1 -0
  373. package/dist/esm/v2/utils/mergeLabels.js +86 -0
  374. package/dist/esm/v2/utils/mergeLabels.js.map +1 -0
  375. package/dist/esm/v2/utils/networkStatus.js +114 -0
  376. package/dist/esm/v2/utils/networkStatus.js.map +1 -0
  377. package/dist/index.d.ts +5 -2
  378. package/dist/index.d.ts.map +1 -1
  379. package/dist/index.js +35 -0
  380. package/dist/index.js.map +1 -1
  381. package/dist/v2/__tests__/FieldError.test.js +160 -0
  382. package/dist/v2/__tests__/FieldError.test.js.map +1 -0
  383. package/dist/v2/__tests__/FieldWidth.test.js +150 -0
  384. package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
  385. package/dist/v2/__tests__/FileCard.test.js +144 -0
  386. package/dist/v2/__tests__/FileCard.test.js.map +1 -0
  387. package/dist/v2/__tests__/FormikCheckbox.test.js +268 -0
  388. package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
  389. package/dist/v2/__tests__/FormikDateTimePicker.test.js +247 -0
  390. package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
  391. package/dist/v2/__tests__/FormikRadioGroup.test.js +381 -0
  392. package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
  393. package/dist/v2/__tests__/MobileRowCard.test.js +52 -56
  394. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
  395. package/dist/v2/__tests__/SectionErrorBoundary.test.js +237 -0
  396. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  397. package/dist/v2/__tests__/labels-merge.test.js +20 -24
  398. package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
  399. package/dist/v2/components/Accordion.d.ts +6 -6
  400. package/dist/v2/components/Accordion.d.ts.map +1 -1
  401. package/dist/v2/components/Accordion.js.map +1 -1
  402. package/dist/v2/components/ActionStrip.d.ts +12 -12
  403. package/dist/v2/components/ActionStrip.d.ts.map +1 -1
  404. package/dist/v2/components/ActionStrip.js.map +1 -1
  405. package/dist/v2/components/Banner.d.ts +48 -9
  406. package/dist/v2/components/Banner.d.ts.map +1 -1
  407. package/dist/v2/components/Banner.js +116 -35
  408. package/dist/v2/components/Banner.js.map +1 -1
  409. package/dist/v2/components/Busy.d.ts +3 -3
  410. package/dist/v2/components/Busy.d.ts.map +1 -1
  411. package/dist/v2/components/Busy.js.map +1 -1
  412. package/dist/v2/components/Button.d.ts +6 -6
  413. package/dist/v2/components/Button.d.ts.map +1 -1
  414. package/dist/v2/components/Button.js.map +1 -1
  415. package/dist/v2/components/CategoryTag.d.ts +3 -3
  416. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  417. package/dist/v2/components/CategoryTag.js.map +1 -1
  418. package/dist/v2/components/Checkbox.d.ts +11 -11
  419. package/dist/v2/components/Checkbox.d.ts.map +1 -1
  420. package/dist/v2/components/Checkbox.js.map +1 -1
  421. package/dist/v2/components/Chip.d.ts +8 -8
  422. package/dist/v2/components/Chip.d.ts.map +1 -1
  423. package/dist/v2/components/Chip.js +2 -1
  424. package/dist/v2/components/Chip.js.map +1 -1
  425. package/dist/v2/components/Combobox.d.ts +27 -27
  426. package/dist/v2/components/Combobox.d.ts.map +1 -1
  427. package/dist/v2/components/Combobox.js +3 -2
  428. package/dist/v2/components/Combobox.js.map +1 -1
  429. package/dist/v2/components/CommandPalette.d.ts +20 -20
  430. package/dist/v2/components/CommandPalette.d.ts.map +1 -1
  431. package/dist/v2/components/CommandPalette.js +2 -6
  432. package/dist/v2/components/CommandPalette.js.map +1 -1
  433. package/dist/v2/components/ConfirmDialog.d.ts +13 -13
  434. package/dist/v2/components/ConfirmDialog.d.ts.map +1 -1
  435. package/dist/v2/components/ConfirmDialog.js +2 -1
  436. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  437. package/dist/v2/components/DatePicker.d.ts +11 -11
  438. package/dist/v2/components/DatePicker.d.ts.map +1 -1
  439. package/dist/v2/components/DatePicker.js.map +1 -1
  440. package/dist/v2/components/DateRangePicker.d.ts +16 -16
  441. package/dist/v2/components/DateRangePicker.d.ts.map +1 -1
  442. package/dist/v2/components/DateRangePicker.js +2 -1
  443. package/dist/v2/components/DateRangePicker.js.map +1 -1
  444. package/dist/v2/components/DateTimePicker.d.ts +11 -11
  445. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  446. package/dist/v2/components/DateTimePicker.js +37 -4
  447. package/dist/v2/components/DateTimePicker.js.map +1 -1
  448. package/dist/v2/components/Drawer.d.ts +18 -18
  449. package/dist/v2/components/Drawer.d.ts.map +1 -1
  450. package/dist/v2/components/Drawer.js +2 -1
  451. package/dist/v2/components/Drawer.js.map +1 -1
  452. package/dist/v2/components/Dropzone.d.ts +34 -34
  453. package/dist/v2/components/Dropzone.d.ts.map +1 -1
  454. package/dist/v2/components/Dropzone.js +11 -3
  455. package/dist/v2/components/Dropzone.js.map +1 -1
  456. package/dist/v2/components/EmptyState.d.ts +7 -7
  457. package/dist/v2/components/EmptyState.d.ts.map +1 -1
  458. package/dist/v2/components/EmptyState.js.map +1 -1
  459. package/dist/v2/components/FavoriteToggle.d.ts +7 -7
  460. package/dist/v2/components/FavoriteToggle.d.ts.map +1 -1
  461. package/dist/v2/components/FavoriteToggle.js +2 -1
  462. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  463. package/dist/v2/components/Field.d.ts +76 -13
  464. package/dist/v2/components/Field.d.ts.map +1 -1
  465. package/dist/v2/components/Field.js +87 -9
  466. package/dist/v2/components/Field.js.map +1 -1
  467. package/dist/v2/components/FieldError.d.ts +78 -0
  468. package/dist/v2/components/FieldError.d.ts.map +1 -0
  469. package/dist/v2/components/FieldError.js +131 -0
  470. package/dist/v2/components/FieldError.js.map +1 -0
  471. package/dist/v2/components/FieldHelp.d.ts +7 -7
  472. package/dist/v2/components/FieldHelp.d.ts.map +1 -1
  473. package/dist/v2/components/FieldHelp.js.map +1 -1
  474. package/dist/v2/components/FileCard.d.ts +75 -0
  475. package/dist/v2/components/FileCard.d.ts.map +1 -0
  476. package/dist/v2/components/FileCard.js +169 -0
  477. package/dist/v2/components/FileCard.js.map +1 -0
  478. package/dist/v2/components/FilterTab.d.ts +9 -9
  479. package/dist/v2/components/FilterTab.d.ts.map +1 -1
  480. package/dist/v2/components/FilterTab.js +2 -1
  481. package/dist/v2/components/FilterTab.js.map +1 -1
  482. package/dist/v2/components/FormGrid.d.ts +9 -4
  483. package/dist/v2/components/FormGrid.d.ts.map +1 -1
  484. package/dist/v2/components/FormGrid.js +11 -1
  485. package/dist/v2/components/FormGrid.js.map +1 -1
  486. package/dist/v2/components/FormikDisplay.d.ts +6 -6
  487. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  488. package/dist/v2/components/FormikDisplay.js.map +1 -1
  489. package/dist/v2/components/Input.d.ts +6 -6
  490. package/dist/v2/components/Input.d.ts.map +1 -1
  491. package/dist/v2/components/Input.js.map +1 -1
  492. package/dist/v2/components/KPICard.d.ts +43 -13
  493. package/dist/v2/components/KPICard.d.ts.map +1 -1
  494. package/dist/v2/components/KPICard.js +53 -14
  495. package/dist/v2/components/KPICard.js.map +1 -1
  496. package/dist/v2/components/KPIStrip.d.ts +68 -0
  497. package/dist/v2/components/KPIStrip.d.ts.map +1 -0
  498. package/dist/v2/components/KPIStrip.js +92 -0
  499. package/dist/v2/components/KPIStrip.js.map +1 -0
  500. package/dist/v2/components/KV.d.ts +3 -3
  501. package/dist/v2/components/KV.d.ts.map +1 -1
  502. package/dist/v2/components/KV.js.map +1 -1
  503. package/dist/v2/components/KVGrid.d.ts +2 -2
  504. package/dist/v2/components/KVGrid.d.ts.map +1 -1
  505. package/dist/v2/components/KVGrid.js +8 -1
  506. package/dist/v2/components/KVGrid.js.map +1 -1
  507. package/dist/v2/components/Layout.d.ts +7 -7
  508. package/dist/v2/components/Layout.d.ts.map +1 -1
  509. package/dist/v2/components/Layout.js.map +1 -1
  510. package/dist/v2/components/MobileRowCard.d.ts +13 -13
  511. package/dist/v2/components/MobileRowCard.d.ts.map +1 -1
  512. package/dist/v2/components/MobileRowCard.js.map +1 -1
  513. package/dist/v2/components/Modal.d.ts +12 -12
  514. package/dist/v2/components/Modal.d.ts.map +1 -1
  515. package/dist/v2/components/Modal.js.map +1 -1
  516. package/dist/v2/components/NetworkErrorPage.d.ts +1 -1
  517. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  518. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  519. package/dist/v2/components/NumberInput.d.ts +14 -14
  520. package/dist/v2/components/NumberInput.d.ts.map +1 -1
  521. package/dist/v2/components/NumberInput.js +7 -6
  522. package/dist/v2/components/NumberInput.js.map +1 -1
  523. package/dist/v2/components/OverflowMenu.d.ts +14 -14
  524. package/dist/v2/components/OverflowMenu.d.ts.map +1 -1
  525. package/dist/v2/components/OverflowMenu.js +4 -8
  526. package/dist/v2/components/OverflowMenu.js.map +1 -1
  527. package/dist/v2/components/PdfViewer.d.ts +9 -9
  528. package/dist/v2/components/PdfViewer.d.ts.map +1 -1
  529. package/dist/v2/components/PdfViewer.js.map +1 -1
  530. package/dist/v2/components/ProgressBar.d.ts +10 -10
  531. package/dist/v2/components/ProgressBar.d.ts.map +1 -1
  532. package/dist/v2/components/ProgressBar.js.map +1 -1
  533. package/dist/v2/components/Radio.d.ts +7 -7
  534. package/dist/v2/components/Radio.d.ts.map +1 -1
  535. package/dist/v2/components/Radio.js.map +1 -1
  536. package/dist/v2/components/SectionErrorBoundary.d.ts +89 -0
  537. package/dist/v2/components/SectionErrorBoundary.d.ts.map +1 -0
  538. package/dist/v2/components/SectionErrorBoundary.js +221 -0
  539. package/dist/v2/components/SectionErrorBoundary.js.map +1 -0
  540. package/dist/v2/components/SectionHeader.d.ts +5 -5
  541. package/dist/v2/components/SectionHeader.d.ts.map +1 -1
  542. package/dist/v2/components/SectionHeader.js.map +1 -1
  543. package/dist/v2/components/Segmented.d.ts +11 -11
  544. package/dist/v2/components/Segmented.d.ts.map +1 -1
  545. package/dist/v2/components/Segmented.js.map +1 -1
  546. package/dist/v2/components/Select.d.ts +33 -15
  547. package/dist/v2/components/Select.d.ts.map +1 -1
  548. package/dist/v2/components/Select.js +147 -30
  549. package/dist/v2/components/Select.js.map +1 -1
  550. package/dist/v2/components/ServerErrorPage.d.ts +1 -1
  551. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  552. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  553. package/dist/v2/components/Skeleton.d.ts +15 -15
  554. package/dist/v2/components/Skeleton.d.ts.map +1 -1
  555. package/dist/v2/components/Skeleton.js.map +1 -1
  556. package/dist/v2/components/SkipLink.d.ts +2 -2
  557. package/dist/v2/components/SkipLink.d.ts.map +1 -1
  558. package/dist/v2/components/SkipLink.js.map +1 -1
  559. package/dist/v2/components/Status.d.ts +3 -3
  560. package/dist/v2/components/Status.d.ts.map +1 -1
  561. package/dist/v2/components/Status.js.map +1 -1
  562. package/dist/v2/components/Stepper.d.ts +28 -22
  563. package/dist/v2/components/Stepper.d.ts.map +1 -1
  564. package/dist/v2/components/Stepper.js +31 -5
  565. package/dist/v2/components/Stepper.js.map +1 -1
  566. package/dist/v2/components/Surface.d.ts +94 -0
  567. package/dist/v2/components/Surface.d.ts.map +1 -0
  568. package/dist/v2/components/Surface.js +163 -0
  569. package/dist/v2/components/Surface.js.map +1 -0
  570. package/dist/v2/components/Switch.d.ts +4 -4
  571. package/dist/v2/components/Switch.d.ts.map +1 -1
  572. package/dist/v2/components/Switch.js.map +1 -1
  573. package/dist/v2/components/Tabs.d.ts +6 -6
  574. package/dist/v2/components/Tabs.d.ts.map +1 -1
  575. package/dist/v2/components/Tabs.js.map +1 -1
  576. package/dist/v2/components/TelInput.d.ts +8 -8
  577. package/dist/v2/components/TelInput.d.ts.map +1 -1
  578. package/dist/v2/components/TelInput.js +18 -18
  579. package/dist/v2/components/TelInput.js.map +1 -1
  580. package/dist/v2/components/Textarea.d.ts +1 -1
  581. package/dist/v2/components/Textarea.d.ts.map +1 -1
  582. package/dist/v2/components/Textarea.js.map +1 -1
  583. package/dist/v2/components/TimePicker.d.ts +11 -11
  584. package/dist/v2/components/TimePicker.d.ts.map +1 -1
  585. package/dist/v2/components/TimePicker.js.map +1 -1
  586. package/dist/v2/components/Toast.d.ts +6 -6
  587. package/dist/v2/components/Toast.d.ts.map +1 -1
  588. package/dist/v2/components/Toast.js +9 -8
  589. package/dist/v2/components/Toast.js.map +1 -1
  590. package/dist/v2/components/Tooltip.d.ts +1 -1
  591. package/dist/v2/components/Tooltip.d.ts.map +1 -1
  592. package/dist/v2/components/Tooltip.js.map +1 -1
  593. package/dist/v2/components/index.d.ts +170 -0
  594. package/dist/v2/components/index.d.ts.map +1 -1
  595. package/dist/v2/components/index.js +35 -0
  596. package/dist/v2/components/index.js.map +1 -1
  597. package/dist/v2/index.d.ts.map +1 -1
  598. package/dist/v2/index.js.map +1 -1
  599. package/dist/v2/models/favorite.d.ts +1 -1
  600. package/dist/v2/models/favorite.d.ts.map +1 -1
  601. package/dist/v2/models/favorite.js.map +1 -1
  602. package/dist/v2/models/personalization.d.ts +13 -13
  603. package/dist/v2/models/personalization.d.ts.map +1 -1
  604. package/dist/v2/models/personalization.js.map +1 -1
  605. package/dist/v2/models/referentiel.d.ts +11 -11
  606. package/dist/v2/models/referentiel.d.ts.map +1 -1
  607. package/dist/v2/models/referentiel.js.map +1 -1
  608. package/dist/v2/models/savedFilter.d.ts +8 -8
  609. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  610. package/dist/v2/models/savedFilter.js.map +1 -1
  611. package/dist/v2/patterns/ActionBar.d.ts +33 -33
  612. package/dist/v2/patterns/ActionBar.d.ts.map +1 -1
  613. package/dist/v2/patterns/ActionBar.js +2 -1
  614. package/dist/v2/patterns/ActionBar.js.map +1 -1
  615. package/dist/v2/patterns/BulkActionBar.d.ts +12 -12
  616. package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -1
  617. package/dist/v2/patterns/BulkActionBar.js +2 -1
  618. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  619. package/dist/v2/patterns/CollapsibleDataGrid.d.ts +15 -15
  620. package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -1
  621. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  622. package/dist/v2/patterns/ColumnsToggle.d.ts +7 -7
  623. package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -1
  624. package/dist/v2/patterns/ColumnsToggle.js +4 -8
  625. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  626. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -12
  627. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  628. package/dist/v2/patterns/DataGridSettingsMenu.js +9 -8
  629. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  630. package/dist/v2/patterns/DataGridToolbar.d.ts +40 -40
  631. package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -1
  632. package/dist/v2/patterns/DataGridToolbar.js +2 -1
  633. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  634. package/dist/v2/patterns/DataGridVirtualized.d.ts +27 -27
  635. package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -1
  636. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  637. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +5 -5
  638. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -1
  639. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  640. package/dist/v2/patterns/FavoriteColumn.d.ts +15 -15
  641. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  642. package/dist/v2/patterns/FavoriteColumn.js +14 -61
  643. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  644. package/dist/v2/patterns/FavoritesFilter.d.ts +10 -10
  645. package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -1
  646. package/dist/v2/patterns/FavoritesFilter.js +2 -1
  647. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  648. package/dist/v2/patterns/FormErrorSummary.d.ts +4 -4
  649. package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -1
  650. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  651. package/dist/v2/patterns/FormPageShell.d.ts +4 -4
  652. package/dist/v2/patterns/FormPageShell.d.ts.map +1 -1
  653. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  654. package/dist/v2/patterns/FormSection.d.ts +19 -8
  655. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  656. package/dist/v2/patterns/FormSection.js +106 -71
  657. package/dist/v2/patterns/FormSection.js.map +1 -1
  658. package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
  659. package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
  660. package/dist/v2/patterns/FormikCheckbox.js +147 -0
  661. package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
  662. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +6 -6
  663. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  664. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  665. package/dist/v2/patterns/FormikCombobox.d.ts +18 -12
  666. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  667. package/dist/v2/patterns/FormikCombobox.js +5 -2
  668. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  669. package/dist/v2/patterns/FormikDatePicker.d.ts +48 -8
  670. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  671. package/dist/v2/patterns/FormikDatePicker.js +58 -65
  672. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  673. package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
  674. package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
  675. package/dist/v2/patterns/FormikDateTimePicker.js +158 -0
  676. package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
  677. package/dist/v2/patterns/FormikErrorFocus.d.ts +3 -3
  678. package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -1
  679. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  680. package/dist/v2/patterns/FormikFile.d.ts +8 -8
  681. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  682. package/dist/v2/patterns/FormikFile.js.map +1 -1
  683. package/dist/v2/patterns/FormikInput.d.ts +51 -6
  684. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  685. package/dist/v2/patterns/FormikInput.js +53 -2
  686. package/dist/v2/patterns/FormikInput.js.map +1 -1
  687. package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
  688. package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
  689. package/dist/v2/patterns/FormikRadioGroup.js +148 -0
  690. package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
  691. package/dist/v2/patterns/FormikReferentielField.d.ts +8 -8
  692. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  693. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  694. package/dist/v2/patterns/FormikSelect.d.ts +41 -12
  695. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  696. package/dist/v2/patterns/FormikSelect.js +32 -3
  697. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  698. package/dist/v2/patterns/FormikTextarea.d.ts +14 -6
  699. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  700. package/dist/v2/patterns/FormikTextarea.js +5 -2
  701. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  702. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +21 -8
  703. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  704. package/dist/v2/patterns/KeyboardShortcutsHelp.js +27 -14
  705. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  706. package/dist/v2/patterns/NetworkErrorBanner.d.ts +4 -4
  707. package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -1
  708. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  709. package/dist/v2/patterns/PageContent.d.ts +3 -3
  710. package/dist/v2/patterns/PageContent.d.ts.map +1 -1
  711. package/dist/v2/patterns/PageContent.js.map +1 -1
  712. package/dist/v2/patterns/ReferentielField.d.ts +49 -49
  713. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  714. package/dist/v2/patterns/ReferentielField.js +2 -1
  715. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  716. package/dist/v2/patterns/RowFavoriteToggle.d.ts +92 -0
  717. package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
  718. package/dist/v2/patterns/RowFavoriteToggle.js +127 -0
  719. package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
  720. package/dist/v2/patterns/SaveFilterDialog.d.ts +10 -10
  721. package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -1
  722. package/dist/v2/patterns/SaveFilterDialog.js +9 -8
  723. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  724. package/dist/v2/patterns/SavedFiltersMenu.d.ts +7 -7
  725. package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -1
  726. package/dist/v2/patterns/SavedFiltersMenu.js +9 -8
  727. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  728. package/dist/v2/patterns/SkeletonPageShell.d.ts +7 -7
  729. package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -1
  730. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  731. package/dist/v2/patterns/SortableHeader.d.ts +1 -1
  732. package/dist/v2/patterns/SortableHeader.d.ts.map +1 -1
  733. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  734. package/dist/v2/patterns/Tour.d.ts +12 -12
  735. package/dist/v2/patterns/Tour.d.ts.map +1 -1
  736. package/dist/v2/patterns/Tour.js +9 -8
  737. package/dist/v2/patterns/Tour.js.map +1 -1
  738. package/dist/v2/patterns/_dataGridShared.d.ts +25 -6
  739. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  740. package/dist/v2/patterns/_dataGridShared.js +37 -3
  741. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  742. package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
  743. package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
  744. package/dist/v2/patterns/_pickerSerialisation.js +81 -0
  745. package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
  746. package/dist/v2/patterns/_useColumnReorder.d.ts +1 -1
  747. package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -1
  748. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  749. package/dist/v2/patterns/_useColumnResize.d.ts +1 -1
  750. package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -1
  751. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  752. package/dist/v2/patterns/index.d.ts +114 -0
  753. package/dist/v2/patterns/index.d.ts.map +1 -1
  754. package/dist/v2/patterns/index.js +34 -0
  755. package/dist/v2/patterns/index.js.map +1 -1
  756. package/dist/v2/personalization/PersonalizationProvider.d.ts +9 -9
  757. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  758. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  759. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +1 -1
  760. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -1
  761. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  762. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +1 -1
  763. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -1
  764. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  765. package/dist/v2/personalization/capabilities/favoritesView.d.ts +3 -3
  766. package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -1
  767. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  768. package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
  769. package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
  770. package/dist/v2/personalization/capabilities/gridPreferences.js +215 -0
  771. package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
  772. package/dist/v2/personalization/capabilities/index.d.ts +6 -0
  773. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
  774. package/dist/v2/personalization/capabilities/index.js +13 -0
  775. package/dist/v2/personalization/capabilities/index.js.map +1 -1
  776. package/dist/v2/personalization/capabilities/savedFilters.d.ts +3 -3
  777. package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -1
  778. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  779. package/dist/v2/personalization/createPersonalizationStore.d.ts +8 -8
  780. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  781. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  782. package/dist/v2/personalization/index.d.ts +18 -0
  783. package/dist/v2/personalization/index.d.ts.map +1 -1
  784. package/dist/v2/personalization/index.js +13 -0
  785. package/dist/v2/personalization/index.js.map +1 -1
  786. package/dist/v2/personalization/schema.d.ts +2 -2
  787. package/dist/v2/personalization/schema.d.ts.map +1 -1
  788. package/dist/v2/personalization/schema.js.map +1 -1
  789. package/dist/v2/personalization/types.d.ts +19 -19
  790. package/dist/v2/personalization/types.d.ts.map +1 -1
  791. package/dist/v2/personalization/types.js.map +1 -1
  792. package/dist/v2/referentiel/ReferentielProvider.d.ts +4 -4
  793. package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -1
  794. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  795. package/dist/v2/referentiel/useReferentielOptions.d.ts +4 -4
  796. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  797. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  798. package/dist/v2/referentiel/useReferentielSearch.d.ts +3 -3
  799. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  800. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  801. package/dist/v2/theme/createPortnetTheme.d.ts +32 -7
  802. package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -1
  803. package/dist/v2/theme/createPortnetTheme.js +25 -1
  804. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  805. package/dist/v2/types/datagrid.d.ts +59 -59
  806. package/dist/v2/types/datagrid.d.ts.map +1 -1
  807. package/dist/v2/types/datagrid.js.map +1 -1
  808. package/dist/v2/utils/apiError.d.ts +65 -4
  809. package/dist/v2/utils/apiError.d.ts.map +1 -1
  810. package/dist/v2/utils/apiError.js +69 -6
  811. package/dist/v2/utils/apiError.js.map +1 -1
  812. package/dist/v2/utils/index.d.ts +1 -0
  813. package/dist/v2/utils/index.d.ts.map +1 -1
  814. package/dist/v2/utils/index.js +7 -0
  815. package/dist/v2/utils/index.js.map +1 -1
  816. package/dist/v2/utils/mergeLabels.d.ts +59 -0
  817. package/dist/v2/utils/mergeLabels.d.ts.map +1 -0
  818. package/dist/v2/utils/mergeLabels.js +93 -0
  819. package/dist/v2/utils/mergeLabels.js.map +1 -0
  820. package/package.json +23 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","names":["React","Dialog","DialogTitle","DialogContent","DialogActions","IconButton","CloseIcon","Typography","useMediaQuery","useTheme","layout","zIndex","useFocusTrap","jsx","_jsx","jsxs","_jsxs","DIALOG_ROOT_SX","Object","freeze","modal","BACKDROP_SLOT_PROPS","sx","backgroundColor","PAPER_BASE_SX","width","borderRadius","boxShadow","PAPER_FULLSCREEN_SX","maxWidth","DIALOG_TITLE_SX","padding","display","alignItems","justifyContent","gap","TITLE_TYPOGRAPHY_SX","fontSize","fontWeight","color","SUBTITLE_TYPOGRAPHY_SX","marginTop","CLOSE_ICON_BUTTON_SX","marginRight","DIALOG_CONTENT_SX","borderColor","DIALOG_ACTIONS_SX","Modal","_ref","open","onClose","title","subtitle","children","footer","_ref$size","size","_ref$disableBackdropC","disableBackdropClick","_ref$disableEscape","disableEscape","_ref$fullScreenOnMobi","fullScreenOnMobile","ariaLabel","_ref$ariaLabelClose","ariaLabelClose","titleId","useId","paperRef","useRef","theme","isMobile","breakpoints","down","fullScreen","handleClose","_e","reason","md","slotProps","useMemo","paper","ref","_objectSpread","backdrop","role","undefined","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","id","variant","component","onClick","dividers"],"sources":["../../../../src/lib/v2/components/Modal.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useTheme } from \"@mui/material/styles\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { layout, zIndex } from \"../tokens\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\n\r\n/**\r\n * Modal - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Modal · Dialog\".\r\n *\r\n * R-M.1 - Closable via Esc + backdrop click + explicit X button.\r\n * R-M.2 - Focus trap when open, focus restored to trigger on close.\r\n * Backed by the v2 useFocusTrap hook (Batch 3) - honours\r\n * [autofocus] and [data-autofocus] markers, coordinates\r\n * with nested traps via a module-level trapStack, and\r\n * filters disabled/hidden/inert subtrees.\r\n * R-M.3 - role=\"dialog\" + aria-modal=\"true\" + aria-labelledby.\r\n * R-M.4 - No modal inside modal - use stepper flow.\r\n * R-M.5 - Use Drawer (not Modal) for ≥ 3 fields or long scroll.\r\n * R-M.6 - Action principale à droite, secondaire à gauche.\r\n * R-RS.2 - Below the `sm` breakpoint token (< 481px) the dialog goes\r\n * FULL-SCREEN by default. A md/lg/xl modal centred with its\r\n * token max-width left only a thin sliver of usable width at\r\n * 320–375px; full-screen restores a usable reading column and\r\n * keeps the footer actions reachable (WCAG 1.4.10 Reflow).\r\n * Opt out with fullScreenOnMobile={false} for genuinely tiny\r\n * confirm dialogs that read better centred.\r\n *\r\n * <Modal open={open} onClose={close} title=\"Confirmation\" size=\"sm\"\r\n * footer={<><Button variant=\"ghost\" onClick={close}>Annuler</Button>\r\n * <Button variant=\"primary\">OK</Button></>}>\r\n * Body content here.\r\n * </Modal>\r\n *\r\n * Accessible name (R-Ar.5 / R-M.3):\r\n * `aria-labelledby` points at the title <Typography> (id=titleId), so the\r\n * dialog's accessible name is the title text ONLY — the close button and\r\n * subtitle are not part of it. When no `title` is provided, pass `ariaLabel`\r\n * to name the dialog; otherwise it would have no accessible name.\r\n *\r\n * Initial focus targeting (R-Ar.4):\r\n * By default the FIRST focusable element of the dialog gets focus on\r\n * open. To opt a specific control in (e.g. the destructive \"Delete\"\r\n * button which intentionally is NOT first), mark it with either:\r\n * - React's <button autoFocus> attribute (standard), or\r\n * - <button data-autofocus> (v2 marker, identical effect).\r\n * Both are matched by useFocusTrap's AUTOFOCUS_SELECTORS.\r\n *\r\n * Stacking:\r\n * The modal's portal layer uses the v2 `zIndex.modal` token (100), so\r\n * it stacks ABOVE a Drawer (zIndex.drawer:80) when opened from inside\r\n * one (e.g. a ReferentielField search launched from the filters Drawer)\r\n * and BELOW snackbar:150 / toast:200 / tooltip:250 so notifications and\r\n * tooltips fired from a modal action stay on top. MUI popups rendered\r\n * inside the modal — Combobox/Autocomplete listboxes and X date-picker\r\n * calendars — also render at theme.zIndex.modal (100) and, opening\r\n * after the dialog, paint above it by DOM order (MUI's own\r\n * Dialog+Autocomplete contract). A previous build hardcoded 1350 here\r\n * (a leftover from MUI's 1100..1500 scale before the v2 remap to\r\n * 0..250); that buried those in-modal popups (at 100) behind the modal\r\n * and pushed the modal above toasts/tooltips.\r\n */\r\n\r\n/* ── Hoisted static sx (D5) ────────────────────────────────────────────\r\n * Frozen at module load. Same emotion / allocation rationale as Tabs +\r\n * DataGrid hoisting. The paper slotProps cannot be fully hoisted because\r\n * it embeds the dynamic `maxWidth` (size-driven) and the `ref` (per\r\n * Modal instance) — its static base is hoisted and the dynamic\r\n * additions are layered via useMemo at the call site.\r\n */\r\n\r\nconst DIALOG_ROOT_SX = Object.freeze({\r\n // v2 z-index token (zIndex.js). modal:100 sits ABOVE drawer:80 (so a\r\n // Modal opened from inside a Drawer stacks correctly) and BELOW\r\n // snackbar:150 / toast:200 / tooltip:250. In-modal MUI popups\r\n // (Combobox listboxes, X date-picker calendars) also use\r\n // theme.zIndex.modal and paint above the dialog by DOM order. The\r\n // previous hardcoded 1350 predated the v2 remap of MUI's 1100..1500\r\n // scale down to 0..250.\r\n zIndex: zIndex.modal,\r\n});\r\n\r\n// MUI v9: backdrop forwarded via slotProps.backdrop (was BackdropProps\r\n// at the Dialog top-level in v5/v6/v7, removed in v9). The content\r\n// `{ sx: {...} }` is unchanged — the backdrop slot receives the same\r\n// shape.\r\nconst BACKDROP_SLOT_PROPS = Object.freeze({\r\n // R-AI.1 - backdrop derived from the live --fg token instead of hard\r\n // rgba(15,21,37,...). Adapts to any future theme override.\r\n sx: { backgroundColor: \"color-mix(in srgb, var(--fg) 45%, transparent)\" },\r\n});\r\n\r\nconst PAPER_BASE_SX = Object.freeze({\r\n width: \"100%\",\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n});\r\n\r\n/* R-RS.2 — full-screen paper sx for the mobile (< sm token) branch.\r\n * Drops the rounded corners + shadow (no longer floating) and lets the\r\n * paper fill the viewport. maxWidth is forced to 100% so the size-driven\r\n * token max-width can't re-clamp it. Kept as a frozen module constant so\r\n * the reference is stable across renders. */\r\nconst PAPER_FULLSCREEN_SX = Object.freeze({\r\n width: \"100%\",\r\n maxWidth: \"100%\",\r\n borderRadius: 0,\r\n boxShadow: \"none\",\r\n});\r\n\r\nconst DIALOG_TITLE_SX = Object.freeze({\r\n padding: \"var(--s-4) var(--s-5) var(--s-2)\",\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-2)\",\r\n} satisfies SxProps<Theme>);\r\n\r\nconst TITLE_TYPOGRAPHY_SX = Object.freeze({\r\n fontSize: \"var(--text-h3)\",\r\n fontWeight: \"var(--fw-bold)\",\r\n color: \"var(--fg)\",\r\n});\r\n\r\nconst SUBTITLE_TYPOGRAPHY_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-muted)\",\r\n marginTop: \"var(--s-1)\",\r\n});\r\n\r\nconst CLOSE_ICON_BUTTON_SX = Object.freeze({\r\n color: \"var(--fg-subtle)\",\r\n marginRight: \"calc(-1 * var(--s-1))\",\r\n marginTop: \"calc(-1 * var(--s-1))\",\r\n});\r\n\r\nconst DIALOG_CONTENT_SX = Object.freeze({\r\n padding: \"var(--s-4) var(--s-5)\",\r\n borderColor: \"var(--border)\",\r\n});\r\n\r\nconst DIALOG_ACTIONS_SX = Object.freeze({\r\n padding: \"var(--s-3) var(--s-5) var(--s-4)\",\r\n gap: \"var(--s-2)\",\r\n});\r\n\r\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport interface ModalProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n title?: React.ReactNode | undefined;\r\n subtitle?: React.ReactNode | undefined;\r\n children?: React.ReactNode | undefined;\r\n footer?: React.ReactNode | undefined;\r\n size?: ModalSize | undefined;\r\n disableBackdropClick?: boolean | undefined;\r\n disableEscape?: boolean | undefined;\r\n /** R-RS.2 — go full-screen below the `sm` token (< 481px). Default true. */\r\n fullScreenOnMobile?: boolean | undefined;\r\n /** Accessible name for the dialog when no `title` is rendered (R-M.3). */\r\n ariaLabel?: string | undefined;\r\n ariaLabelClose?: string | undefined;\r\n}\r\n\r\nfunction Modal({\r\n open,\r\n onClose,\r\n title,\r\n subtitle,\r\n children,\r\n footer,\r\n size = \"md\",\r\n disableBackdropClick = false,\r\n disableEscape = false,\r\n fullScreenOnMobile = true,\r\n ariaLabel,\r\n ariaLabelClose = \"Fermer la boîte de dialogue\",\r\n}: ModalProps) {\r\n // R-Ar.5 - stable, per-instance, collision-safe ID for aria-labelledby.\r\n const titleId = React.useId();\r\n\r\n // R-F.2 / R-M.2 - the v2 trap is wired on the Dialog Paper element,\r\n // activated only while the modal is open. MUI's own trap is disabled\r\n // via the disable*Focus props on Dialog below so the two implementations\r\n // don't compete for the same DOM event stream.\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef, !!open);\r\n\r\n // R-RS.2 — full-screen below the `sm` breakpoint TOKEN (< 481px now\r\n // that tokens are wired into the theme). Reads the live theme so a host\r\n // breakpoint override is honoured. Gated behind fullScreenOnMobile so a\r\n // caller can keep a small confirm dialog centred on phones.\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const fullScreen = fullScreenOnMobile && isMobile;\r\n\r\n const handleClose = (_e: unknown, reason: \"backdropClick\" | \"escapeKeyDown\") => {\r\n if (reason === \"backdropClick\" && disableBackdropClick) return;\r\n if (reason === \"escapeKeyDown\" && disableEscape) return;\r\n onClose?.();\r\n };\r\n\r\n // R-AI.1 - modal sizing is owned by the token system (layout.modal),\r\n // not duplicated here. See src/lib/v2/tokens/density.js.\r\n const maxWidth = layout.modal[size] || layout.modal.md;\r\n\r\n // MUI v9: paper slot is forwarded through slotProps.paper. The slot\r\n // cannot be fully hoisted — embeds the dynamic maxWidth (size-driven)\r\n // and the per-instance ref. Memo on [maxWidth, fullScreen] so the\r\n // reference is stable until either the size or the mobile branch flips.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: fullScreen\r\n ? { ...PAPER_FULLSCREEN_SX }\r\n : { ...PAPER_BASE_SX, maxWidth },\r\n },\r\n backdrop: BACKDROP_SLOT_PROPS,\r\n }),\r\n [maxWidth, fullScreen]\r\n );\r\n\r\n return (\r\n <Dialog\r\n open={!!open}\r\n onClose={handleClose}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n // Name = title text only (id is on the title Typography). Falls back\r\n // to ariaLabel when the dialog has no title.\r\n aria-labelledby={title != null ? titleId : undefined}\r\n aria-label={title == null ? ariaLabel : undefined}\r\n maxWidth={false}\r\n // R-RS.2 — hand the full-screen decision to MUI's own prop so it\r\n // applies the correct fullscreen paper geometry (100vw/100vh,\r\n // no margin); our PAPER_FULLSCREEN_SX only relaxes radius/shadow.\r\n fullScreen={fullScreen}\r\n // Hand over focus management to useFocusTrap above. Dialog still\r\n // owns the Portal, Backdrop, scroll lock, transitions, and Esc\r\n // wiring - just not the focus trap itself.\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n // Root sx anchors the portal at the v2 zIndex.modal token — above\r\n // the Drawer, below snackbar/toast/tooltip. See DIALOG_ROOT_SX.\r\n sx={DIALOG_ROOT_SX}\r\n slotProps={slotProps}\r\n >\r\n <DialogTitle sx={DIALOG_TITLE_SX}>\r\n <div>\r\n <Typography id={titleId} variant=\"h3\" component=\"h2\" sx={TITLE_TYPOGRAPHY_SX}>\r\n {title}\r\n </Typography>\r\n {subtitle && (\r\n <Typography sx={SUBTITLE_TYPOGRAPHY_SX}>\r\n {subtitle}\r\n </Typography>\r\n )}\r\n </div>\r\n <IconButton\r\n aria-label={ariaLabelClose}\r\n onClick={onClose}\r\n size=\"small\"\r\n sx={CLOSE_ICON_BUTTON_SX}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </DialogTitle>\r\n\r\n <DialogContent dividers={!!footer} sx={DIALOG_CONTENT_SX}>\r\n {children}\r\n </DialogContent>\r\n\r\n {footer && (\r\n <DialogActions sx={DIALOG_ACTIONS_SX}>\r\n {footer}\r\n </DialogActions>\r\n )}\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * NetworkErrorPage — Portnet UI v2 (component)
3
+ *
4
+ * Charter §07 · Connexion perdue.
5
+ *
6
+ * Same contract as ServerErrorPage: router-agnostic with required
7
+ * onBack + onHome and an optional onRetry. The code heading reads
8
+ * "—" since there is no HTTP status to surface.
9
+ *
10
+ * import { NetworkErrorPage } from "@portnet/ui/lib/v2";
11
+ * import { useNavigate } from "react-router-dom";
12
+ *
13
+ * function NetworkErrorRoute() {
14
+ * const navigate = useNavigate();
15
+ * return (
16
+ * <NetworkErrorPage
17
+ * onBack={() => navigate(-1)}
18
+ * onHome={() => navigate("/")}
19
+ * onRetry={() => window.location.reload()}
20
+ * />
21
+ * );
22
+ * }
23
+ *
24
+ * NB: for TRANSIENT connection drops during normal navigation, the
25
+ * v2.NetworkErrorBanner (top of the page, with inline Retry CTA)
26
+ * is the charter-preferred pattern — Charter R-A.3 explicitly
27
+ * forbids forced navigation to a full error page on transient
28
+ * network failure, since it destroys the user's current context.
29
+ * This page is for the explicit /network-error route only.
30
+ */
31
+ import Box from "@mui/material/Box";
32
+ import ArrowBack from "@mui/icons-material/ArrowBack";
33
+ import WifiOff from "@mui/icons-material/WifiOff";
34
+ import ActionBar from "../patterns/ActionBar";
35
+ import Button from "./Button";
36
+ import ErrorPageBody from "./_ErrorPageBody";
37
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
38
+ function NetworkErrorPage(_ref) {
39
+ var onBack = _ref.onBack,
40
+ onHome = _ref.onHome,
41
+ onRetry = _ref.onRetry;
42
+ return /*#__PURE__*/_jsxs(_Fragment, {
43
+ children: [/*#__PURE__*/_jsx(ActionBar, {
44
+ back: onBack,
45
+ breadcrumb: ["Erreur", "Connexion perdue"],
46
+ title: "Connexion perdue"
47
+ }), /*#__PURE__*/_jsx(ErrorPageBody, {
48
+ icon: /*#__PURE__*/_jsx(WifiOff, {
49
+ sx: {
50
+ fontSize: 64,
51
+ color: "var(--warning)"
52
+ }
53
+ }),
54
+ code: "\u2014",
55
+ title: "Aucune connexion au serveur",
56
+ description: "V\xE9rifiez votre connexion r\xE9seau, puis r\xE9essayez. Si vous \xEAtes connect\xE9, le service est peut-\xEAtre momentan\xE9ment interrompu."
57
+ }), /*#__PURE__*/_jsxs(Box, {
58
+ sx: {
59
+ display: "flex",
60
+ justifyContent: "center",
61
+ gap: "var(--s-3)",
62
+ paddingBottom: "var(--s-7)"
63
+ },
64
+ children: [onRetry ? /*#__PURE__*/_jsx(Button, {
65
+ variant: "ghost",
66
+ onClick: onRetry,
67
+ children: "R\xE9essayer"
68
+ }) : null, /*#__PURE__*/_jsx(Button, {
69
+ variant: "primary",
70
+ icon: /*#__PURE__*/_jsx(ArrowBack, {}),
71
+ onClick: onHome,
72
+ children: "Retour \xE0 l'accueil"
73
+ })]
74
+ })]
75
+ });
76
+ }
77
+ export default NetworkErrorPage;
78
+ //# sourceMappingURL=NetworkErrorPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkErrorPage.js","names":["Box","ArrowBack","WifiOff","ActionBar","Button","ErrorPageBody","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","NetworkErrorPage","_ref","onBack","onHome","onRetry","children","back","breadcrumb","title","icon","sx","fontSize","color","code","description","display","justifyContent","gap","paddingBottom","variant","onClick"],"sources":["../../../../src/lib/v2/components/NetworkErrorPage.tsx"],"sourcesContent":["/**\r\n * NetworkErrorPage — Portnet UI v2 (component)\r\n *\r\n * Charter §07 · Connexion perdue.\r\n *\r\n * Same contract as ServerErrorPage: router-agnostic with required\r\n * onBack + onHome and an optional onRetry. The code heading reads\r\n * \"—\" since there is no HTTP status to surface.\r\n *\r\n * import { NetworkErrorPage } from \"@portnet/ui/lib/v2\";\r\n * import { useNavigate } from \"react-router-dom\";\r\n *\r\n * function NetworkErrorRoute() {\r\n * const navigate = useNavigate();\r\n * return (\r\n * <NetworkErrorPage\r\n * onBack={() => navigate(-1)}\r\n * onHome={() => navigate(\"/\")}\r\n * onRetry={() => window.location.reload()}\r\n * />\r\n * );\r\n * }\r\n *\r\n * NB: for TRANSIENT connection drops during normal navigation, the\r\n * v2.NetworkErrorBanner (top of the page, with inline Retry CTA)\r\n * is the charter-preferred pattern — Charter R-A.3 explicitly\r\n * forbids forced navigation to a full error page on transient\r\n * network failure, since it destroys the user's current context.\r\n * This page is for the explicit /network-error route only.\r\n */\r\nimport Box from \"@mui/material/Box\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport WifiOff from \"@mui/icons-material/WifiOff\";\r\nimport ActionBar from \"../patterns/ActionBar\";\r\nimport Button from \"./Button\";\r\nimport ErrorPageBody from \"./_ErrorPageBody\";\r\n\r\nexport interface NetworkErrorPageProps {\r\n /** Callback for the back button (top-bar arrow). */\r\n onBack: () => void;\r\n /** Callback for the primary \"Retour à l'accueil\" CTA. */\r\n onHome: () => void;\r\n /** Optional retry callback. When omitted, the Réessayer button is hidden. */\r\n onRetry?: (() => void) | undefined;\r\n}\r\n\r\nfunction NetworkErrorPage({ onBack, onHome, onRetry }: NetworkErrorPageProps) {\r\n return (\r\n <>\r\n <ActionBar\r\n back={onBack}\r\n breadcrumb={[\"Erreur\", \"Connexion perdue\"]}\r\n title=\"Connexion perdue\"\r\n />\r\n <ErrorPageBody\r\n icon={<WifiOff sx={{ fontSize: 64, color: \"var(--warning)\" }} />}\r\n code=\"—\"\r\n title=\"Aucune connexion au serveur\"\r\n description=\"Vérifiez votre connexion réseau, puis réessayez. Si vous êtes connecté, le service est peut-être momentanément interrompu.\"\r\n />\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n gap: \"var(--s-3)\",\r\n paddingBottom: \"var(--s-7)\",\r\n }}\r\n >\r\n {onRetry ? (\r\n <Button variant=\"ghost\" onClick={onRetry}>\r\n Réessayer\r\n </Button>\r\n ) : null}\r\n <Button variant=\"primary\" icon={<ArrowBack />} onClick={onHome}>\r\n Retour à l'accueil\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\nexport default NetworkErrorPage;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,+BAA+B;AACrD,OAAOC,OAAO,MAAM,6BAA6B;AACjD,OAAOC,SAAS,MAAM,uBAAuB;AAC7C,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,aAAa,MAAM,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAW7C,SAASC,gBAAgBA,CAAAC,IAAA,EAAqD;EAAA,IAAlDC,MAAM,GAAAD,IAAA,CAANC,MAAM;IAAEC,MAAM,GAAAF,IAAA,CAANE,MAAM;IAAEC,OAAO,GAAAH,IAAA,CAAPG,OAAO;EACjD,oBACEP,KAAA,CAAAE,SAAA;IAAAM,QAAA,gBACEV,IAAA,CAACJ,SAAS;MACRe,IAAI,EAAEJ,MAAO;MACbK,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAE;MAC3CC,KAAK,EAAC;IAAkB,CACzB,CAAC,eACFb,IAAA,CAACF,aAAa;MACZgB,IAAI,eAAEd,IAAA,CAACL,OAAO;QAACoB,EAAE,EAAE;UAAEC,QAAQ,EAAE,EAAE;UAAEC,KAAK,EAAE;QAAiB;MAAE,CAAE,CAAE;MACjEC,IAAI,EAAC,QAAG;MACRL,KAAK,EAAC,6BAA6B;MACnCM,WAAW,EAAC;IAA4H,CACzI,CAAC,eACFjB,KAAA,CAACT,GAAG;MACFsB,EAAE,EAAE;QACFK,OAAO,EAAS,MAAM;QACtBC,cAAc,EAAE,QAAQ;QACxBC,GAAG,EAAa,YAAY;QAC5BC,aAAa,EAAG;MAClB,CAAE;MAAAb,QAAA,GAEDD,OAAO,gBACNT,IAAA,CAACH,MAAM;QAAC2B,OAAO,EAAC,OAAO;QAACC,OAAO,EAAEhB,OAAQ;QAAAC,QAAA,EAAC;MAE1C,CAAQ,CAAC,GACP,IAAI,eACRV,IAAA,CAACH,MAAM;QAAC2B,OAAO,EAAC,SAAS;QAACV,IAAI,eAAEd,IAAA,CAACN,SAAS,IAAE,CAAE;QAAC+B,OAAO,EAAEjB,MAAO;QAAAE,QAAA,EAAC;MAEhE,CAAQ,CAAC;IAAA,CACN,CAAC;EAAA,CACN,CAAC;AAEP;AAEA,eAAeL,gBAAgB","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * NotFoundPage — Portnet UI v2 (component)
3
+ *
4
+ * Charter §07 · 404 / Page introuvable.
5
+ *
6
+ * Router-agnostic. See ForbiddenPage.js for the full contract and
7
+ * design rationale (onBack + onHome callback props).
8
+ *
9
+ * import { NotFoundPage } from "@portnet/ui/lib/v2";
10
+ * import { useNavigate } from "react-router-dom";
11
+ *
12
+ * function NotFoundRoute() {
13
+ * const navigate = useNavigate();
14
+ * return <NotFoundPage onBack={() => navigate(-1)} onHome={() => navigate("/")} />;
15
+ * }
16
+ */
17
+ import Box from "@mui/material/Box";
18
+ import ArrowBack from "@mui/icons-material/ArrowBack";
19
+ import SearchOff from "@mui/icons-material/SearchOff";
20
+ import ActionBar from "../patterns/ActionBar";
21
+ import Button from "./Button";
22
+ import ErrorPageBody from "./_ErrorPageBody";
23
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
24
+ function NotFoundPage(_ref) {
25
+ var onBack = _ref.onBack,
26
+ onHome = _ref.onHome;
27
+ return /*#__PURE__*/_jsxs(_Fragment, {
28
+ children: [/*#__PURE__*/_jsx(ActionBar, {
29
+ back: onBack,
30
+ breadcrumb: ["Erreur", "Page introuvable"],
31
+ title: "Page introuvable"
32
+ }), /*#__PURE__*/_jsx(ErrorPageBody, {
33
+ icon: /*#__PURE__*/_jsx(SearchOff, {
34
+ sx: {
35
+ fontSize: 64,
36
+ color: "var(--info)"
37
+ }
38
+ }),
39
+ code: "404",
40
+ title: "La page demand\xE9e n'existe pas",
41
+ description: "Le lien suivi est peut-\xEAtre obsol\xE8te, ou la page a \xE9t\xE9 d\xE9plac\xE9e. V\xE9rifiez l'adresse, ou retournez \xE0 l'accueil pour reprendre votre navigation."
42
+ }), /*#__PURE__*/_jsx(Box, {
43
+ sx: {
44
+ display: "flex",
45
+ justifyContent: "center",
46
+ paddingBottom: "var(--s-7)"
47
+ },
48
+ children: /*#__PURE__*/_jsx(Button, {
49
+ variant: "primary",
50
+ icon: /*#__PURE__*/_jsx(ArrowBack, {}),
51
+ onClick: onHome,
52
+ children: "Retour \xE0 l'accueil"
53
+ })
54
+ })]
55
+ });
56
+ }
57
+ export default NotFoundPage;
58
+ //# sourceMappingURL=NotFoundPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotFoundPage.js","names":["Box","ArrowBack","SearchOff","ActionBar","Button","ErrorPageBody","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","NotFoundPage","_ref","onBack","onHome","children","back","breadcrumb","title","icon","sx","fontSize","color","code","description","display","justifyContent","paddingBottom","variant","onClick"],"sources":["../../../../src/lib/v2/components/NotFoundPage.tsx"],"sourcesContent":["/**\r\n * NotFoundPage — Portnet UI v2 (component)\r\n *\r\n * Charter §07 · 404 / Page introuvable.\r\n *\r\n * Router-agnostic. See ForbiddenPage.js for the full contract and\r\n * design rationale (onBack + onHome callback props).\r\n *\r\n * import { NotFoundPage } from \"@portnet/ui/lib/v2\";\r\n * import { useNavigate } from \"react-router-dom\";\r\n *\r\n * function NotFoundRoute() {\r\n * const navigate = useNavigate();\r\n * return <NotFoundPage onBack={() => navigate(-1)} onHome={() => navigate(\"/\")} />;\r\n * }\r\n */\r\nimport Box from \"@mui/material/Box\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport SearchOff from \"@mui/icons-material/SearchOff\";\r\nimport ActionBar from \"../patterns/ActionBar\";\r\nimport Button from \"./Button\";\r\nimport ErrorPageBody from \"./_ErrorPageBody\";\r\n\r\nexport interface NotFoundPageProps {\r\n /** Callback for the back button (top-bar arrow). */\r\n onBack: () => void;\r\n /** Callback for the primary \"Retour à l'accueil\" CTA. */\r\n onHome: () => void;\r\n}\r\n\r\nfunction NotFoundPage({ onBack, onHome }: NotFoundPageProps) {\r\n return (\r\n <>\r\n <ActionBar\r\n back={onBack}\r\n breadcrumb={[\"Erreur\", \"Page introuvable\"]}\r\n title=\"Page introuvable\"\r\n />\r\n <ErrorPageBody\r\n icon={<SearchOff sx={{ fontSize: 64, color: \"var(--info)\" }} />}\r\n code=\"404\"\r\n title=\"La page demandée n'existe pas\"\r\n description=\"Le lien suivi est peut-être obsolète, ou la page a été déplacée. Vérifiez l'adresse, ou retournez à l'accueil pour reprendre votre navigation.\"\r\n />\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", paddingBottom: \"var(--s-7)\" }}>\r\n <Button variant=\"primary\" icon={<ArrowBack />} onClick={onHome}>\r\n Retour à l'accueil\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\nexport default NotFoundPage;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,+BAA+B;AACrD,OAAOC,SAAS,MAAM,+BAA+B;AACrD,OAAOC,SAAS,MAAM,uBAAuB;AAC7C,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,aAAa,MAAM,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAS7C,SAASC,YAAYA,CAAAC,IAAA,EAAwC;EAAA,IAArCC,MAAM,GAAAD,IAAA,CAANC,MAAM;IAAEC,MAAM,GAAAF,IAAA,CAANE,MAAM;EACpC,oBACEJ,KAAA,CAAAF,SAAA;IAAAO,QAAA,gBACET,IAAA,CAACJ,SAAS;MACRc,IAAI,EAAEH,MAAO;MACbI,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAE;MAC3CC,KAAK,EAAC;IAAkB,CACzB,CAAC,eACFZ,IAAA,CAACF,aAAa;MACZe,IAAI,eAAEb,IAAA,CAACL,SAAS;QAACmB,EAAE,EAAE;UAAEC,QAAQ,EAAE,EAAE;UAAEC,KAAK,EAAE;QAAc;MAAE,CAAE,CAAE;MAChEC,IAAI,EAAC,KAAK;MACVL,KAAK,EAAC,kCAA+B;MACrCM,WAAW,EAAC;IAAgJ,CAC7J,CAAC,eACFlB,IAAA,CAACP,GAAG;MAACqB,EAAE,EAAE;QAAEK,OAAO,EAAE,MAAM;QAAEC,cAAc,EAAE,QAAQ;QAAEC,aAAa,EAAE;MAAa,CAAE;MAAAZ,QAAA,eAClFT,IAAA,CAACH,MAAM;QAACyB,OAAO,EAAC,SAAS;QAACT,IAAI,eAAEb,IAAA,CAACN,SAAS,IAAE,CAAE;QAAC6B,OAAO,EAAEf,MAAO;QAAAC,QAAA,EAAC;MAEhE,CAAQ;IAAC,CACN,CAAC;EAAA,CACN,CAAC;AAEP;AAEA,eAAeJ,YAAY","ignoreList":[]}
@@ -0,0 +1,309 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ var _excluded = ["value", "onChange", "onBlur", "min", "max", "step", "decimals", "placeholder", "disabled", "error", "readOnly", "fullWidth", "showSpinner", "prefix", "suffix", "inputProps", "onValidate", "locale", "labels", "sx"];
3
+ 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; }
4
+ 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; }
5
+ 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; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
7
+ 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); }
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
+ import * as React from "react";
17
+ import OutlinedInput from "@mui/material/OutlinedInput";
18
+ import InputAdornment from "@mui/material/InputAdornment";
19
+ import IconButton from "@mui/material/IconButton";
20
+ import AddIcon from "@mui/icons-material/Add";
21
+ import RemoveIcon from "@mui/icons-material/Remove";
22
+ import { mergeLabels } from "../utils/mergeLabels";
23
+
24
+ /**
25
+ * NumberInput — Portnet UI v2
26
+ *
27
+ * Charter §03 · Component "NumberInput". Locale-aware numeric input.
28
+ *
29
+ * <Field label="Montant">
30
+ * <NumberInput
31
+ * value={amount} onChange={setAmount}
32
+ * min={0} max={1000000} decimals={2} suffix="MAD"
33
+ * />
34
+ * </Field>
35
+ *
36
+ * Locale (multi-locale platform — FR / EN / AR)
37
+ * <NumberInput
38
+ * locale="en-US"
39
+ * labels={{ decrement: "Decrease", increment: "Increase" }}
40
+ * value={amount} onChange={setAmount}
41
+ * />
42
+ *
43
+ * - `locale` controls DISPLAY formatting only. Parsing is
44
+ * permissive: `,` and `.` both accepted as decimal separator,
45
+ * all whitespace stripped — pasting from any locale just works.
46
+ * - `labels` overrides the FR defaults on the spinner buttons.
47
+ *
48
+ * Value contract:
49
+ * onChange(null) on empty input
50
+ * onChange(123.45) on valid number
51
+ * Display formatting (separators, decimals) is purely visual,
52
+ * reapplied on blur.
53
+ *
54
+ * A11y (aria-valuetext):
55
+ * aria-valuenow holds the raw number; aria-valuetext holds the
56
+ * localised, suffix-bearing string ("1 234,56 MAD") so SR users
57
+ * hear the same thing sighted users see.
58
+ *
59
+ * MUI v9 surface notes (audit Batch 3):
60
+ * The spinbutton aria contract (role + aria-value*) is injected
61
+ * via slotProps.input — MUI v9 idiomatic location for native
62
+ * <input/> attributes on OutlinedInput. Migrated from the
63
+ * deprecated `inputProps={...}` form to match the rest of the
64
+ * v2 surface (Switch, Combobox, DataGrid family).
65
+ * Consumer-passed `inputProps` remains merged in via spread —
66
+ * same order as the pre-migration code, so override semantics
67
+ * are preserved bit-for-bit.
68
+ *
69
+ * Tactile contract — known R-Tg.1 deviation (charter exception):
70
+ * The stepper buttons (showSpinner) are sized to 24 × 24 — the
71
+ * WCAG 2.5.8 AA floor — NOT the 44 × 44 R-Tg.1 AAA floor. The
72
+ * stepper is opt-in convenience UI on top of the keyboard
73
+ * ArrowUp / ArrowDown handler that the input itself provides;
74
+ * users requiring larger targets can type or use keyboard nav.
75
+ * Documented exception, see Batch 14 charter-exceptions log.
76
+ */
77
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
78
+ var FR_DECIMAL_SEP = ",";
79
+ var FR_THOUSAND_SEP = " ";
80
+
81
+ // Stepper button hit area — WCAG 2.5.8 AA (24 × 24). See JSDoc above
82
+ // for the rationale for not pursuing 44 × 44 / R-Tg.1 here.
83
+ var STEPPER_HIT_AREA = 24;
84
+ var DEFAULT_LABELS = Object.freeze({
85
+ decrement: "Diminuer",
86
+ increment: "Augmenter"
87
+ });
88
+ function formatForDisplay(num, decimals) {
89
+ var locale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "fr-FR";
90
+ if (num == null || Number.isNaN(num)) return "";
91
+ var opts = decimals != null ? {
92
+ minimumFractionDigits: decimals,
93
+ maximumFractionDigits: decimals
94
+ } : {
95
+ maximumFractionDigits: 6
96
+ };
97
+ try {
98
+ return new Intl.NumberFormat(locale, opts).format(num);
99
+ } catch (_unused) {
100
+ // Invalid BCP-47 tag — fall back to fr-FR rather than throwing.
101
+ return new Intl.NumberFormat("fr-FR", opts).format(num);
102
+ }
103
+ }
104
+ function parseFromUser(str) {
105
+ if (str == null || str === "") return null;
106
+ // Accept BOTH `,` and `.` as decimal separator; strip every whitespace
107
+ // (regular space, NBSP, narrow NBSP). Locale-agnostic by design.
108
+ var cleaned = String(str).replace(/[\u00A0\u202F]/g, " ").replace(/\s+/g, "").replace(",", ".");
109
+ if (cleaned === "" || cleaned === "-" || cleaned === ".") return null;
110
+ var n = Number(cleaned);
111
+ return Number.isFinite(n) ? n : null;
112
+ }
113
+ var NumberInput = /*#__PURE__*/React.forwardRef(function NumberInput(_ref, ref) {
114
+ var value = _ref.value,
115
+ onChange = _ref.onChange,
116
+ onBlur = _ref.onBlur,
117
+ min = _ref.min,
118
+ max = _ref.max,
119
+ _ref$step = _ref.step,
120
+ step = _ref$step === void 0 ? 1 : _ref$step,
121
+ decimals = _ref.decimals,
122
+ placeholder = _ref.placeholder,
123
+ disabled = _ref.disabled,
124
+ error = _ref.error,
125
+ readOnly = _ref.readOnly,
126
+ _ref$fullWidth = _ref.fullWidth,
127
+ fullWidth = _ref$fullWidth === void 0 ? true : _ref$fullWidth,
128
+ _ref$showSpinner = _ref.showSpinner,
129
+ showSpinner = _ref$showSpinner === void 0 ? false : _ref$showSpinner,
130
+ prefix = _ref.prefix,
131
+ suffix = _ref.suffix,
132
+ inputProps = _ref.inputProps,
133
+ onValidate = _ref.onValidate,
134
+ _ref$locale = _ref.locale,
135
+ locale = _ref$locale === void 0 ? "fr-FR" : _ref$locale,
136
+ labels = _ref.labels,
137
+ sx = _ref.sx,
138
+ rest = _objectWithoutProperties(_ref, _excluded);
139
+ var mergedLabels = mergeLabels(DEFAULT_LABELS, labels);
140
+ var _React$useState = React.useState(function () {
141
+ return formatForDisplay(value, decimals, locale);
142
+ }),
143
+ _React$useState2 = _slicedToArray(_React$useState, 2),
144
+ display = _React$useState2[0],
145
+ setDisplay = _React$useState2[1];
146
+ var _React$useState3 = React.useState(false),
147
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
148
+ focused = _React$useState4[0],
149
+ setFocused = _React$useState4[1];
150
+ React.useEffect(function () {
151
+ if (!focused) setDisplay(formatForDisplay(value, decimals, locale));
152
+ }, [value, decimals, locale, focused]);
153
+ var allowMinus = min == null || min < 0;
154
+ var onUserChange = function onUserChange(e) {
155
+ var raw = e.target.value;
156
+ var re = allowMinus ? /^-?[0-9]*[.,]?[0-9]*$/ : /^[0-9]*[.,]?[0-9]*$/;
157
+ if (raw !== "" && !re.test(raw)) return;
158
+ setDisplay(raw);
159
+ var parsed = parseFromUser(raw);
160
+ onChange === null || onChange === void 0 ? void 0 : onChange(parsed);
161
+ };
162
+ var clamp = function clamp(n) {
163
+ if (n == null) return n;
164
+ var out = n;
165
+ if (typeof min === "number" && out < min) out = min;
166
+ if (typeof max === "number" && out > max) out = max;
167
+ return out;
168
+ };
169
+ var handleBlur = function handleBlur(e) {
170
+ setFocused(false);
171
+ var parsed = parseFromUser(display);
172
+ var clamped = clamp(parsed);
173
+ if (clamped !== parsed) {
174
+ onChange === null || onChange === void 0 ? void 0 : onChange(clamped);
175
+ setDisplay(formatForDisplay(clamped, decimals, locale));
176
+ } else {
177
+ setDisplay(formatForDisplay(parsed, decimals, locale));
178
+ }
179
+ if (onValidate) {
180
+ var violation = parsed == null ? null : typeof min === "number" && parsed < min ? "min" : typeof max === "number" && parsed > max ? "max" : null;
181
+ onValidate({
182
+ value: parsed,
183
+ clamped: clamped,
184
+ violation: violation
185
+ });
186
+ }
187
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
188
+ };
189
+ var handleFocus = function handleFocus() {
190
+ return setFocused(true);
191
+ };
192
+ var bumpBy = function bumpBy(delta) {
193
+ var next = clamp((value !== null && value !== void 0 ? value : 0) + delta);
194
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
195
+ };
196
+ var onKeyDown = function onKeyDown(e) {
197
+ if (e.key === "ArrowUp") {
198
+ e.preventDefault();
199
+ bumpBy(+step);
200
+ }
201
+ if (e.key === "ArrowDown") {
202
+ e.preventDefault();
203
+ bumpBy(-step);
204
+ }
205
+ };
206
+ var ariaValueText = React.useMemo(function () {
207
+ if (value == null || Number.isNaN(value)) return undefined;
208
+ var formatted = formatForDisplay(value, decimals, locale);
209
+ if (typeof suffix === "string" && suffix.trim()) {
210
+ return "".concat(formatted, " ").concat(suffix).trim();
211
+ }
212
+ return formatted || undefined;
213
+ }, [value, decimals, locale, suffix]);
214
+
215
+ // Shared sx for both stepper IconButtons. WCAG 2.5.8 AA floor (24×24),
216
+ // padding 0 so the icon centres without cropping.
217
+ var stepperSx = {
218
+ color: "var(--fg-muted)",
219
+ minWidth: STEPPER_HIT_AREA,
220
+ minHeight: STEPPER_HIT_AREA,
221
+ padding: 0
222
+ };
223
+ return /*#__PURE__*/_jsx(OutlinedInput, _objectSpread({
224
+ ref: ref,
225
+ type: "text",
226
+ inputMode: "decimal",
227
+ value: display,
228
+ onChange: onUserChange,
229
+ onFocus: handleFocus,
230
+ onBlur: handleBlur,
231
+ onKeyDown: onKeyDown,
232
+ placeholder: placeholder,
233
+ disabled: disabled,
234
+ readOnly: readOnly,
235
+ error: !!error,
236
+ fullWidth: fullWidth,
237
+ startAdornment: prefix ? /*#__PURE__*/_jsx(InputAdornment, {
238
+ position: "start",
239
+ children: prefix
240
+ }) : undefined,
241
+ endAdornment: suffix || showSpinner ? /*#__PURE__*/_jsxs(InputAdornment, {
242
+ position: "end",
243
+ sx: {
244
+ gap: 0.25
245
+ },
246
+ children: [suffix && /*#__PURE__*/_jsx("span", {
247
+ children: suffix
248
+ }), showSpinner && /*#__PURE__*/_jsxs(_Fragment, {
249
+ children: [/*#__PURE__*/_jsx(IconButton, {
250
+ size: "small",
251
+ onClick: function onClick() {
252
+ return bumpBy(-step);
253
+ },
254
+ disabled: disabled || readOnly || typeof min === "number" && value != null && value <= min,
255
+ "aria-label": mergedLabels.decrement,
256
+ sx: stepperSx,
257
+ children: /*#__PURE__*/_jsx(RemoveIcon, {
258
+ sx: {
259
+ fontSize: 14
260
+ }
261
+ })
262
+ }), /*#__PURE__*/_jsx(IconButton, {
263
+ size: "small",
264
+ onClick: function onClick() {
265
+ return bumpBy(+step);
266
+ },
267
+ disabled: disabled || readOnly || typeof max === "number" && value != null && value >= max,
268
+ "aria-label": mergedLabels.increment,
269
+ sx: stepperSx,
270
+ children: /*#__PURE__*/_jsx(AddIcon, {
271
+ sx: {
272
+ fontSize: 14
273
+ }
274
+ })
275
+ })]
276
+ })]
277
+ }) : undefined,
278
+ slotProps: {
279
+ // MUI v9: the input slot bag forwards directly to the
280
+ // internal <input/> element on OutlinedInput. Was
281
+ // `inputProps={...}` at the top level — deprecated in v6,
282
+ // migrated for v9 alignment (audit Batch 3). Spread order
283
+ // preserved: consumer-supplied inputProps comes LAST so it
284
+ // can override aria-* attributes (same semantics as v5).
285
+ input: _objectSpread({
286
+ role: "spinbutton",
287
+ "aria-valuenow": value !== null && value !== void 0 ? value : undefined,
288
+ "aria-valuemin": min,
289
+ "aria-valuemax": max,
290
+ "aria-valuetext": ariaValueText
291
+ }, inputProps)
292
+ },
293
+ sx: _objectSpread({
294
+ // R-T.3 — tabular-nums for vertical alignment in tables/forms
295
+ "& input": {
296
+ fontVariantNumeric: "tabular-nums",
297
+ textAlign: "right"
298
+ }
299
+ }, sx)
300
+ }, rest));
301
+ });
302
+
303
+ // Locale separators exported so callers can mirror exact display elsewhere
304
+ // without re-implementing. Kept for back-compat; for full locale-correct
305
+ // formatting prefer `Intl.NumberFormat(locale)` directly.
306
+ export var FR_DECIMAL_SEPARATOR = FR_DECIMAL_SEP;
307
+ export var FR_THOUSAND_SEPARATOR = FR_THOUSAND_SEP;
308
+ export default NumberInput;
309
+ //# sourceMappingURL=NumberInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.js","names":["React","OutlinedInput","InputAdornment","IconButton","AddIcon","RemoveIcon","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","FR_DECIMAL_SEP","FR_THOUSAND_SEP","STEPPER_HIT_AREA","DEFAULT_LABELS","Object","freeze","decrement","increment","formatForDisplay","num","decimals","locale","arguments","length","undefined","Number","isNaN","opts","minimumFractionDigits","maximumFractionDigits","Intl","NumberFormat","format","_unused","parseFromUser","str","cleaned","String","replace","n","isFinite","NumberInput","forwardRef","_ref","ref","value","onChange","onBlur","min","max","_ref$step","step","placeholder","disabled","error","readOnly","_ref$fullWidth","fullWidth","_ref$showSpinner","showSpinner","prefix","suffix","inputProps","onValidate","_ref$locale","labels","sx","rest","_objectWithoutProperties","_excluded","mergedLabels","_React$useState","useState","_React$useState2","_slicedToArray","display","setDisplay","_React$useState3","_React$useState4","focused","setFocused","useEffect","allowMinus","onUserChange","e","raw","target","re","test","parsed","clamp","out","handleBlur","clamped","violation","handleFocus","bumpBy","delta","next","onKeyDown","key","preventDefault","ariaValueText","useMemo","formatted","trim","concat","stepperSx","color","minWidth","minHeight","padding","_objectSpread","type","inputMode","onFocus","startAdornment","position","children","endAdornment","gap","size","onClick","fontSize","slotProps","input","role","fontVariantNumeric","textAlign","FR_DECIMAL_SEPARATOR","FR_THOUSAND_SEPARATOR"],"sources":["../../../../src/lib/v2/components/NumberInput.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport OutlinedInput from \"@mui/material/OutlinedInput\";\r\nimport type { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * NumberInput — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"NumberInput\". Locale-aware numeric input.\r\n *\r\n * <Field label=\"Montant\">\r\n * <NumberInput\r\n * value={amount} onChange={setAmount}\r\n * min={0} max={1000000} decimals={2} suffix=\"MAD\"\r\n * />\r\n * </Field>\r\n *\r\n * Locale (multi-locale platform — FR / EN / AR)\r\n * <NumberInput\r\n * locale=\"en-US\"\r\n * labels={{ decrement: \"Decrease\", increment: \"Increase\" }}\r\n * value={amount} onChange={setAmount}\r\n * />\r\n *\r\n * - `locale` controls DISPLAY formatting only. Parsing is\r\n * permissive: `,` and `.` both accepted as decimal separator,\r\n * all whitespace stripped — pasting from any locale just works.\r\n * - `labels` overrides the FR defaults on the spinner buttons.\r\n *\r\n * Value contract:\r\n * onChange(null) on empty input\r\n * onChange(123.45) on valid number\r\n * Display formatting (separators, decimals) is purely visual,\r\n * reapplied on blur.\r\n *\r\n * A11y (aria-valuetext):\r\n * aria-valuenow holds the raw number; aria-valuetext holds the\r\n * localised, suffix-bearing string (\"1 234,56 MAD\") so SR users\r\n * hear the same thing sighted users see.\r\n *\r\n * MUI v9 surface notes (audit Batch 3):\r\n * The spinbutton aria contract (role + aria-value*) is injected\r\n * via slotProps.input — MUI v9 idiomatic location for native\r\n * <input/> attributes on OutlinedInput. Migrated from the\r\n * deprecated `inputProps={...}` form to match the rest of the\r\n * v2 surface (Switch, Combobox, DataGrid family).\r\n * Consumer-passed `inputProps` remains merged in via spread —\r\n * same order as the pre-migration code, so override semantics\r\n * are preserved bit-for-bit.\r\n *\r\n * Tactile contract — known R-Tg.1 deviation (charter exception):\r\n * The stepper buttons (showSpinner) are sized to 24 × 24 — the\r\n * WCAG 2.5.8 AA floor — NOT the 44 × 44 R-Tg.1 AAA floor. The\r\n * stepper is opt-in convenience UI on top of the keyboard\r\n * ArrowUp / ArrowDown handler that the input itself provides;\r\n * users requiring larger targets can type or use keyboard nav.\r\n * Documented exception, see Batch 14 charter-exceptions log.\r\n */\r\n\r\nexport interface NumberInputLabels {\r\n decrement?: string | undefined;\r\n increment?: string | undefined;\r\n}\r\n\r\nexport interface NumberInputValidateResult {\r\n value: number | null;\r\n clamped: number | null;\r\n violation: \"min\" | \"max\" | null;\r\n}\r\n\r\nexport interface NumberInputProps\r\n extends Omit<OutlinedInputProps, \"value\" | \"onChange\" | \"prefix\" | \"suffix\"> {\r\n value?: number | null | undefined;\r\n onChange?: ((value: number | null) => void) | undefined;\r\n min?: number | undefined;\r\n max?: number | undefined;\r\n step?: number | undefined;\r\n decimals?: number | undefined;\r\n showSpinner?: boolean | undefined;\r\n prefix?: React.ReactNode | undefined;\r\n suffix?: React.ReactNode | undefined;\r\n onValidate?: ((result: NumberInputValidateResult) => void) | undefined;\r\n locale?: string | undefined;\r\n labels?: NumberInputLabels | undefined;\r\n}\r\n\r\nconst FR_DECIMAL_SEP = \",\";\r\nconst FR_THOUSAND_SEP = \" \";\r\n\r\n// Stepper button hit area — WCAG 2.5.8 AA (24 × 24). See JSDoc above\r\n// for the rationale for not pursuing 44 × 44 / R-Tg.1 here.\r\nconst STEPPER_HIT_AREA = 24;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n decrement: \"Diminuer\",\r\n increment: \"Augmenter\",\r\n});\r\n\r\nfunction formatForDisplay(\r\n num: number | null | undefined,\r\n decimals: number | undefined,\r\n locale = \"fr-FR\",\r\n): string {\r\n if (num == null || Number.isNaN(num)) return \"\";\r\n const opts: Intl.NumberFormatOptions = decimals != null\r\n ? { minimumFractionDigits: decimals, maximumFractionDigits: decimals }\r\n : { maximumFractionDigits: 6 };\r\n try {\r\n return new Intl.NumberFormat(locale, opts).format(num);\r\n } catch {\r\n // Invalid BCP-47 tag — fall back to fr-FR rather than throwing.\r\n return new Intl.NumberFormat(\"fr-FR\", opts).format(num);\r\n }\r\n}\r\n\r\nfunction parseFromUser(str: string | null | undefined): number | null {\r\n if (str == null || str === \"\") return null;\r\n // Accept BOTH `,` and `.` as decimal separator; strip every whitespace\r\n // (regular space, NBSP, narrow NBSP). Locale-agnostic by design.\r\n const cleaned = String(str)\r\n .replace(/[\\u00A0\\u202F]/g, \" \")\r\n .replace(/\\s+/g, \"\")\r\n .replace(\",\", \".\");\r\n if (cleaned === \"\" || cleaned === \"-\" || cleaned === \".\") return null;\r\n const n = Number(cleaned);\r\n return Number.isFinite(n) ? n : null;\r\n}\r\n\r\nconst NumberInput = React.forwardRef<React.ComponentRef<typeof OutlinedInput>, NumberInputProps>(function NumberInput(\r\n {\r\n value, onChange, onBlur,\r\n min, max, step = 1, decimals,\r\n placeholder, disabled, error, readOnly,\r\n fullWidth = true, showSpinner = false,\r\n prefix, suffix, inputProps, onValidate,\r\n locale = \"fr-FR\",\r\n labels,\r\n sx,\r\n ...rest\r\n },\r\n ref,\r\n) {\r\n const mergedLabels = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n const [display, setDisplay] = React.useState<string>(() => formatForDisplay(value, decimals, locale));\r\n const [focused, setFocused] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!focused) setDisplay(formatForDisplay(value, decimals, locale));\r\n }, [value, decimals, locale, focused]);\r\n\r\n const allowMinus = min == null || min < 0;\r\n\r\n const onUserChange: NonNullable<OutlinedInputProps[\"onChange\"]> = (e) => {\r\n const raw = e.target.value;\r\n const re = allowMinus ? /^-?[0-9]*[.,]?[0-9]*$/ : /^[0-9]*[.,]?[0-9]*$/;\r\n if (raw !== \"\" && !re.test(raw)) return;\r\n setDisplay(raw);\r\n const parsed = parseFromUser(raw);\r\n onChange?.(parsed);\r\n };\r\n\r\n const clamp = (n: number | null): number | null => {\r\n if (n == null) return n;\r\n let out = n;\r\n if (typeof min === \"number\" && out < min) out = min;\r\n if (typeof max === \"number\" && out > max) out = max;\r\n return out;\r\n };\r\n\r\n const handleBlur: NonNullable<OutlinedInputProps[\"onBlur\"]> = (e) => {\r\n setFocused(false);\r\n const parsed = parseFromUser(display);\r\n const clamped = clamp(parsed);\r\n if (clamped !== parsed) {\r\n onChange?.(clamped);\r\n setDisplay(formatForDisplay(clamped, decimals, locale));\r\n } else {\r\n setDisplay(formatForDisplay(parsed, decimals, locale));\r\n }\r\n if (onValidate) {\r\n const violation: \"min\" | \"max\" | null =\r\n parsed == null ? null :\r\n (typeof min === \"number\" && parsed < min) ? \"min\" :\r\n (typeof max === \"number\" && parsed > max) ? \"max\" :\r\n null;\r\n onValidate({ value: parsed, clamped, violation });\r\n }\r\n onBlur?.(e);\r\n };\r\n\r\n const handleFocus = () => setFocused(true);\r\n\r\n const bumpBy = (delta: number) => {\r\n const next = clamp((value ?? 0) + delta);\r\n onChange?.(next);\r\n };\r\n\r\n const onKeyDown: NonNullable<OutlinedInputProps[\"onKeyDown\"]> = (e) => {\r\n if (e.key === \"ArrowUp\") { e.preventDefault(); bumpBy(+step); }\r\n if (e.key === \"ArrowDown\") { e.preventDefault(); bumpBy(-step); }\r\n };\r\n\r\n const ariaValueText = React.useMemo(() => {\r\n if (value == null || Number.isNaN(value)) return undefined;\r\n const formatted = formatForDisplay(value, decimals, locale);\r\n if (typeof suffix === \"string\" && suffix.trim()) {\r\n return `${formatted} ${suffix}`.trim();\r\n }\r\n return formatted || undefined;\r\n }, [value, decimals, locale, suffix]);\r\n\r\n // Shared sx for both stepper IconButtons. WCAG 2.5.8 AA floor (24×24),\r\n // padding 0 so the icon centres without cropping.\r\n const stepperSx = {\r\n color: \"var(--fg-muted)\",\r\n minWidth: STEPPER_HIT_AREA,\r\n minHeight: STEPPER_HIT_AREA,\r\n padding: 0,\r\n };\r\n\r\n return (\r\n <OutlinedInput\r\n ref={ref}\r\n type=\"text\"\r\n inputMode=\"decimal\"\r\n value={display}\r\n onChange={onUserChange}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n onKeyDown={onKeyDown}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n readOnly={readOnly}\r\n error={!!error}\r\n fullWidth={fullWidth}\r\n startAdornment={\r\n prefix ? <InputAdornment position=\"start\">{prefix}</InputAdornment> : undefined\r\n }\r\n endAdornment={\r\n (suffix || showSpinner) ? (\r\n <InputAdornment position=\"end\" sx={{ gap: 0.25 }}>\r\n {suffix && <span>{suffix}</span>}\r\n {showSpinner && (\r\n <>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => bumpBy(-step)}\r\n disabled={disabled || readOnly || (typeof min === \"number\" && value != null && value <= min)}\r\n aria-label={mergedLabels.decrement}\r\n sx={stepperSx}\r\n >\r\n <RemoveIcon sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => bumpBy(+step)}\r\n disabled={disabled || readOnly || (typeof max === \"number\" && value != null && value >= max)}\r\n aria-label={mergedLabels.increment}\r\n sx={stepperSx}\r\n >\r\n <AddIcon sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n </>\r\n )}\r\n </InputAdornment>\r\n ) : undefined\r\n }\r\n slotProps={{\r\n // MUI v9: the input slot bag forwards directly to the\r\n // internal <input/> element on OutlinedInput. Was\r\n // `inputProps={...}` at the top level — deprecated in v6,\r\n // migrated for v9 alignment (audit Batch 3). Spread order\r\n // preserved: consumer-supplied inputProps comes LAST so it\r\n // can override aria-* attributes (same semantics as v5).\r\n input: {\r\n role: \"spinbutton\" as const,\r\n \"aria-valuenow\": value ?? undefined,\r\n \"aria-valuemin\": min,\r\n \"aria-valuemax\": max,\r\n \"aria-valuetext\": ariaValueText,\r\n ...inputProps,\r\n },\r\n }}\r\n sx={{\r\n // R-T.3 — tabular-nums for vertical alignment in tables/forms\r\n \"& input\": { fontVariantNumeric: \"tabular-nums\", textAlign: \"right\" },\r\n ...sx,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n});\r\n\r\n// Locale separators exported so callers can mirror exact display elsewhere\r\n// without re-implementing. Kept for back-compat; for full locale-correct\r\n// formatting prefer `Intl.NumberFormat(locale)` directly.\r\nexport const FR_DECIMAL_SEPARATOR = FR_DECIMAL_SEP;\r\nexport const FR_THOUSAND_SEPARATOR = FR_THOUSAND_SEP;\r\n\r\nexport default NumberInput;\r\n"],"mappings":"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","ignoreList":[]}