@portnet/ui 6.0.0 → 6.0.1

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 (748) hide show
  1. package/dist/esm/index.js +196 -0
  2. package/dist/esm/index.js.map +1 -0
  3. package/dist/esm/v2/__tests__/FieldError.test.js +160 -0
  4. package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -0
  5. package/dist/esm/v2/__tests__/FileCard.test.js +144 -0
  6. package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -0
  7. package/dist/esm/v2/__tests__/MobileRowCard.test.js +333 -0
  8. package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -0
  9. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +235 -0
  10. package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  11. package/dist/esm/v2/__tests__/apiError.test.js +181 -0
  12. package/dist/esm/v2/__tests__/apiError.test.js.map +1 -0
  13. package/dist/esm/v2/__tests__/banned-patterns.test.js +270 -0
  14. package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -0
  15. package/dist/esm/v2/__tests__/contrast-palette.test.js +224 -0
  16. package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -0
  17. package/dist/esm/v2/__tests__/cssVariables.test.js +157 -0
  18. package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -0
  19. package/dist/esm/v2/__tests__/labels-merge.test.js +147 -0
  20. package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -0
  21. package/dist/esm/v2/__tests__/locale-fallback.test.js +109 -0
  22. package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -0
  23. package/dist/esm/v2/__tests__/useFocusTrap.test.js +514 -0
  24. package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -0
  25. package/dist/esm/v2/components/Accordion.js +230 -0
  26. package/dist/esm/v2/components/Accordion.js.map +1 -0
  27. package/dist/esm/v2/components/ActionStrip.js +146 -0
  28. package/dist/esm/v2/components/ActionStrip.js.map +1 -0
  29. package/dist/esm/v2/components/Banner.js +254 -0
  30. package/dist/esm/v2/components/Banner.js.map +1 -0
  31. package/dist/esm/v2/components/Busy.js +97 -0
  32. package/dist/esm/v2/components/Busy.js.map +1 -0
  33. package/dist/esm/v2/components/Button.js +114 -0
  34. package/dist/esm/v2/components/Button.js.map +1 -0
  35. package/dist/esm/v2/components/CategoryTag.js +81 -0
  36. package/dist/esm/v2/components/CategoryTag.js.map +1 -0
  37. package/dist/esm/v2/components/Checkbox.js +124 -0
  38. package/dist/esm/v2/components/Checkbox.js.map +1 -0
  39. package/dist/esm/v2/components/Chip.js +124 -0
  40. package/dist/esm/v2/components/Chip.js.map +1 -0
  41. package/dist/esm/v2/components/Combobox.js +394 -0
  42. package/dist/esm/v2/components/Combobox.js.map +1 -0
  43. package/dist/esm/v2/components/CommandPalette.js +660 -0
  44. package/dist/esm/v2/components/CommandPalette.js.map +1 -0
  45. package/dist/esm/v2/components/ConfirmDialog.js +144 -0
  46. package/dist/esm/v2/components/ConfirmDialog.js.map +1 -0
  47. package/dist/esm/v2/components/DatePicker.js +200 -0
  48. package/dist/esm/v2/components/DatePicker.js.map +1 -0
  49. package/dist/esm/v2/components/DateRangePicker.js +289 -0
  50. package/dist/esm/v2/components/DateRangePicker.js.map +1 -0
  51. package/dist/esm/v2/components/DateTimePicker.js +182 -0
  52. package/dist/esm/v2/components/DateTimePicker.js.map +1 -0
  53. package/dist/esm/v2/components/Drawer.js +333 -0
  54. package/dist/esm/v2/components/Drawer.js.map +1 -0
  55. package/dist/esm/v2/components/Dropzone.js +540 -0
  56. package/dist/esm/v2/components/Dropzone.js.map +1 -0
  57. package/dist/esm/v2/components/EmptyState.js +102 -0
  58. package/dist/esm/v2/components/EmptyState.js.map +1 -0
  59. package/dist/esm/v2/components/FavoriteToggle.js +127 -0
  60. package/dist/esm/v2/components/FavoriteToggle.js.map +1 -0
  61. package/dist/esm/v2/components/Field.js +197 -0
  62. package/dist/esm/v2/components/Field.js.map +1 -0
  63. package/dist/esm/v2/components/FieldError.js +124 -0
  64. package/dist/esm/v2/components/FieldError.js.map +1 -0
  65. package/dist/esm/v2/components/FieldHelp.js +202 -0
  66. package/dist/esm/v2/components/FieldHelp.js.map +1 -0
  67. package/dist/esm/v2/components/FileCard.js +162 -0
  68. package/dist/esm/v2/components/FileCard.js.map +1 -0
  69. package/dist/esm/v2/components/FilterTab.js +138 -0
  70. package/dist/esm/v2/components/FilterTab.js.map +1 -0
  71. package/dist/esm/v2/components/ForbiddenPage.js +74 -0
  72. package/dist/esm/v2/components/ForbiddenPage.js.map +1 -0
  73. package/dist/esm/v2/components/FormGrid.js +179 -0
  74. package/dist/esm/v2/components/FormGrid.js.map +1 -0
  75. package/dist/esm/v2/components/FormikDisplay.js +118 -0
  76. package/dist/esm/v2/components/FormikDisplay.js.map +1 -0
  77. package/dist/esm/v2/components/Input.js +107 -0
  78. package/dist/esm/v2/components/Input.js.map +1 -0
  79. package/dist/esm/v2/components/KPICard.js +237 -0
  80. package/dist/esm/v2/components/KPICard.js.map +1 -0
  81. package/dist/esm/v2/components/KPIStrip.js +84 -0
  82. package/dist/esm/v2/components/KPIStrip.js.map +1 -0
  83. package/dist/esm/v2/components/KV.js +75 -0
  84. package/dist/esm/v2/components/KV.js.map +1 -0
  85. package/dist/esm/v2/components/KVGrid.js +74 -0
  86. package/dist/esm/v2/components/KVGrid.js.map +1 -0
  87. package/dist/esm/v2/components/Layout.js +284 -0
  88. package/dist/esm/v2/components/Layout.js.map +1 -0
  89. package/dist/esm/v2/components/MobileRowCard.js +314 -0
  90. package/dist/esm/v2/components/MobileRowCard.js.map +1 -0
  91. package/dist/esm/v2/components/Modal.js +276 -0
  92. package/dist/esm/v2/components/Modal.js.map +1 -0
  93. package/dist/esm/v2/components/NetworkErrorPage.js +78 -0
  94. package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -0
  95. package/dist/esm/v2/components/NotFoundPage.js +58 -0
  96. package/dist/esm/v2/components/NotFoundPage.js.map +1 -0
  97. package/dist/esm/v2/components/NumberInput.js +309 -0
  98. package/dist/esm/v2/components/NumberInput.js.map +1 -0
  99. package/dist/esm/v2/components/OverflowMenu.js +184 -0
  100. package/dist/esm/v2/components/OverflowMenu.js.map +1 -0
  101. package/dist/esm/v2/components/PdfViewer.js +122 -0
  102. package/dist/esm/v2/components/PdfViewer.js.map +1 -0
  103. package/dist/esm/v2/components/ProgressBar.js +202 -0
  104. package/dist/esm/v2/components/ProgressBar.js.map +1 -0
  105. package/dist/esm/v2/components/Radio.js +228 -0
  106. package/dist/esm/v2/components/Radio.js.map +1 -0
  107. package/dist/esm/v2/components/SectionErrorBoundary.js +214 -0
  108. package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -0
  109. package/dist/esm/v2/components/SectionHeader.js +132 -0
  110. package/dist/esm/v2/components/SectionHeader.js.map +1 -0
  111. package/dist/esm/v2/components/Segmented.js +254 -0
  112. package/dist/esm/v2/components/Segmented.js.map +1 -0
  113. package/dist/esm/v2/components/Select.js +490 -0
  114. package/dist/esm/v2/components/Select.js.map +1 -0
  115. package/dist/esm/v2/components/ServerErrorPage.js +74 -0
  116. package/dist/esm/v2/components/ServerErrorPage.js.map +1 -0
  117. package/dist/esm/v2/components/Skeleton.js +269 -0
  118. package/dist/esm/v2/components/Skeleton.js.map +1 -0
  119. package/dist/esm/v2/components/SkipLink.js +49 -0
  120. package/dist/esm/v2/components/SkipLink.js.map +1 -0
  121. package/dist/esm/v2/components/Spinner.js +69 -0
  122. package/dist/esm/v2/components/Spinner.js.map +1 -0
  123. package/dist/esm/v2/components/Status.js +64 -0
  124. package/dist/esm/v2/components/Status.js.map +1 -0
  125. package/dist/esm/v2/components/Stepper.js +432 -0
  126. package/dist/esm/v2/components/Stepper.js.map +1 -0
  127. package/dist/esm/v2/components/Surface.js +159 -0
  128. package/dist/esm/v2/components/Surface.js.map +1 -0
  129. package/dist/esm/v2/components/Switch.js +128 -0
  130. package/dist/esm/v2/components/Switch.js.map +1 -0
  131. package/dist/esm/v2/components/Tabs.js +150 -0
  132. package/dist/esm/v2/components/Tabs.js.map +1 -0
  133. package/dist/esm/v2/components/TelInput.js +274 -0
  134. package/dist/esm/v2/components/TelInput.js.map +1 -0
  135. package/dist/esm/v2/components/Textarea.js +72 -0
  136. package/dist/esm/v2/components/Textarea.js.map +1 -0
  137. package/dist/esm/v2/components/TimePicker.js +134 -0
  138. package/dist/esm/v2/components/TimePicker.js.map +1 -0
  139. package/dist/esm/v2/components/Toast.js +376 -0
  140. package/dist/esm/v2/components/Toast.js.map +1 -0
  141. package/dist/esm/v2/components/Tooltip.js +161 -0
  142. package/dist/esm/v2/components/Tooltip.js.map +1 -0
  143. package/dist/esm/v2/components/_ErrorPageBody.js +85 -0
  144. package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -0
  145. package/dist/esm/v2/components/_pickerShared.js +60 -0
  146. package/dist/esm/v2/components/_pickerShared.js.map +1 -0
  147. package/dist/esm/v2/components/index.js +244 -0
  148. package/dist/esm/v2/components/index.js.map +1 -0
  149. package/dist/esm/v2/hooks/index.js +10 -0
  150. package/dist/esm/v2/hooks/index.js.map +1 -0
  151. package/dist/esm/v2/hooks/useDelayedFlag.js +55 -0
  152. package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -0
  153. package/dist/esm/v2/hooks/useDensity.js +119 -0
  154. package/dist/esm/v2/hooks/useDensity.js.map +1 -0
  155. package/dist/esm/v2/hooks/useFocusFirstError.js +197 -0
  156. package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -0
  157. package/dist/esm/v2/hooks/useFocusTrap.js +202 -0
  158. package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -0
  159. package/dist/esm/v2/hooks/useFormAutoSave.js +181 -0
  160. package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -0
  161. package/dist/esm/v2/hooks/useFormCompletionProgress.js +131 -0
  162. package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -0
  163. package/dist/esm/v2/hooks/useResolvedDensity.js +44 -0
  164. package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -0
  165. package/dist/esm/v2/hooks/useSortedRows.js +32 -0
  166. package/dist/esm/v2/hooks/useSortedRows.js.map +1 -0
  167. package/dist/esm/v2/hooks/useTabLoading.js +79 -0
  168. package/dist/esm/v2/hooks/useTabLoading.js.map +1 -0
  169. package/dist/esm/v2/index.js +121 -0
  170. package/dist/esm/v2/index.js.map +1 -0
  171. package/dist/esm/v2/modalContext.js +108 -0
  172. package/dist/esm/v2/modalContext.js.map +1 -0
  173. package/dist/esm/v2/models/favorite.js +2 -0
  174. package/dist/esm/v2/models/favorite.js.map +1 -0
  175. package/dist/esm/v2/models/index.js +12 -0
  176. package/dist/esm/v2/models/index.js.map +1 -0
  177. package/dist/esm/v2/models/personalization.js +2 -0
  178. package/dist/esm/v2/models/personalization.js.map +1 -0
  179. package/dist/esm/v2/models/referentiel.js +2 -0
  180. package/dist/esm/v2/models/referentiel.js.map +1 -0
  181. package/dist/esm/v2/models/savedFilter.js +2 -0
  182. package/dist/esm/v2/models/savedFilter.js.map +1 -0
  183. package/dist/esm/v2/patterns/ActionBar.js +603 -0
  184. package/dist/esm/v2/patterns/ActionBar.js.map +1 -0
  185. package/dist/esm/v2/patterns/BulkActionBar.js +147 -0
  186. package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -0
  187. package/dist/esm/v2/patterns/CollapsibleDataGrid.js +303 -0
  188. package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -0
  189. package/dist/esm/v2/patterns/ColumnsToggle.js +301 -0
  190. package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -0
  191. package/dist/esm/v2/patterns/DataGrid.js +820 -0
  192. package/dist/esm/v2/patterns/DataGrid.js.map +1 -0
  193. package/dist/esm/v2/patterns/DataGridSettingsMenu.js +375 -0
  194. package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -0
  195. package/dist/esm/v2/patterns/DataGridToolbar.js +249 -0
  196. package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -0
  197. package/dist/esm/v2/patterns/DataGridVirtualized.js +523 -0
  198. package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -0
  199. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +70 -0
  200. package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
  201. package/dist/esm/v2/patterns/FavoriteColumn.js +164 -0
  202. package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -0
  203. package/dist/esm/v2/patterns/FavoritesFilter.js +91 -0
  204. package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -0
  205. package/dist/esm/v2/patterns/FormErrorSummary.js +101 -0
  206. package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -0
  207. package/dist/esm/v2/patterns/FormPageShell.js +126 -0
  208. package/dist/esm/v2/patterns/FormPageShell.js.map +1 -0
  209. package/dist/esm/v2/patterns/FormSection.js +190 -0
  210. package/dist/esm/v2/patterns/FormSection.js.map +1 -0
  211. package/dist/esm/v2/patterns/FormikCheckboxGroup.js +110 -0
  212. package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -0
  213. package/dist/esm/v2/patterns/FormikCombobox.js +115 -0
  214. package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -0
  215. package/dist/esm/v2/patterns/FormikDatePicker.js +196 -0
  216. package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -0
  217. package/dist/esm/v2/patterns/FormikErrorFocus.js +77 -0
  218. package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -0
  219. package/dist/esm/v2/patterns/FormikFile.js +148 -0
  220. package/dist/esm/v2/patterns/FormikFile.js.map +1 -0
  221. package/dist/esm/v2/patterns/FormikInput.js +127 -0
  222. package/dist/esm/v2/patterns/FormikInput.js.map +1 -0
  223. package/dist/esm/v2/patterns/FormikReferentielField.js +116 -0
  224. package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -0
  225. package/dist/esm/v2/patterns/FormikSelect.js +159 -0
  226. package/dist/esm/v2/patterns/FormikSelect.js.map +1 -0
  227. package/dist/esm/v2/patterns/FormikTextarea.js +76 -0
  228. package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -0
  229. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +195 -0
  230. package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
  231. package/dist/esm/v2/patterns/NetworkErrorBanner.js +72 -0
  232. package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -0
  233. package/dist/esm/v2/patterns/PageContent.js +62 -0
  234. package/dist/esm/v2/patterns/PageContent.js.map +1 -0
  235. package/dist/esm/v2/patterns/ReferentielField.js +615 -0
  236. package/dist/esm/v2/patterns/ReferentielField.js.map +1 -0
  237. package/dist/esm/v2/patterns/SaveFilterDialog.js +197 -0
  238. package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -0
  239. package/dist/esm/v2/patterns/SavedFiltersMenu.js +406 -0
  240. package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -0
  241. package/dist/esm/v2/patterns/SkeletonPageShell.js +342 -0
  242. package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -0
  243. package/dist/esm/v2/patterns/SortableHeader.js +179 -0
  244. package/dist/esm/v2/patterns/SortableHeader.js.map +1 -0
  245. package/dist/esm/v2/patterns/Tour.js +471 -0
  246. package/dist/esm/v2/patterns/Tour.js.map +1 -0
  247. package/dist/esm/v2/patterns/_dataGridShared.js +431 -0
  248. package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -0
  249. package/dist/esm/v2/patterns/_sort.js +112 -0
  250. package/dist/esm/v2/patterns/_sort.js.map +1 -0
  251. package/dist/esm/v2/patterns/_useColumnReorder.js +257 -0
  252. package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -0
  253. package/dist/esm/v2/patterns/_useColumnResize.js +191 -0
  254. package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -0
  255. package/dist/esm/v2/patterns/index.js +95 -0
  256. package/dist/esm/v2/patterns/index.js.map +1 -0
  257. package/dist/esm/v2/personalization/PersonalizationProvider.js +168 -0
  258. package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -0
  259. package/dist/esm/v2/personalization/adapters/_storageKey.js +60 -0
  260. package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -0
  261. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +124 -0
  262. package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
  263. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +70 -0
  264. package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
  265. package/dist/esm/v2/personalization/adapters/index.js +11 -0
  266. package/dist/esm/v2/personalization/adapters/index.js.map +1 -0
  267. package/dist/esm/v2/personalization/capabilities/favorites.js +216 -0
  268. package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -0
  269. package/dist/esm/v2/personalization/capabilities/favoritesView.js +111 -0
  270. package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -0
  271. package/dist/esm/v2/personalization/capabilities/index.js +17 -0
  272. package/dist/esm/v2/personalization/capabilities/index.js.map +1 -0
  273. package/dist/esm/v2/personalization/capabilities/savedFilters.js +291 -0
  274. package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -0
  275. package/dist/esm/v2/personalization/createPersonalizationStore.js +472 -0
  276. package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -0
  277. package/dist/esm/v2/personalization/index.js +46 -0
  278. package/dist/esm/v2/personalization/index.js.map +1 -0
  279. package/dist/esm/v2/personalization/personalizationContext.js +108 -0
  280. package/dist/esm/v2/personalization/personalizationContext.js.map +1 -0
  281. package/dist/esm/v2/personalization/schema.js +92 -0
  282. package/dist/esm/v2/personalization/schema.js.map +1 -0
  283. package/dist/esm/v2/personalization/types.js +2 -0
  284. package/dist/esm/v2/personalization/types.js.map +1 -0
  285. package/dist/esm/v2/referentiel/ReferentielProvider.js +87 -0
  286. package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -0
  287. package/dist/esm/v2/referentiel/index.js +15 -0
  288. package/dist/esm/v2/referentiel/index.js.map +1 -0
  289. package/dist/esm/v2/referentiel/useReferentielClient.js +37 -0
  290. package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -0
  291. package/dist/esm/v2/referentiel/useReferentielOptions.js +169 -0
  292. package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -0
  293. package/dist/esm/v2/referentiel/useReferentielSearch.js +132 -0
  294. package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -0
  295. package/dist/esm/v2/styles/base.css +425 -0
  296. package/dist/esm/v2/styles/css.d.ts +10 -0
  297. package/dist/esm/v2/styles/index.js +12 -0
  298. package/dist/esm/v2/styles/index.js.map +1 -0
  299. package/dist/esm/v2/theme/_brand.js +64 -0
  300. package/dist/esm/v2/theme/_brand.js.map +1 -0
  301. package/dist/esm/v2/theme/_brandSecondary.js +60 -0
  302. package/dist/esm/v2/theme/_brandSecondary.js.map +1 -0
  303. package/dist/esm/v2/theme/createPortnetTheme.js +548 -0
  304. package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -0
  305. package/dist/esm/v2/theme/cssVariables.js +198 -0
  306. package/dist/esm/v2/theme/cssVariables.js.map +1 -0
  307. package/dist/esm/v2/theme/index.js +32 -0
  308. package/dist/esm/v2/theme/index.js.map +1 -0
  309. package/dist/esm/v2/tokens/breakpoints.js +106 -0
  310. package/dist/esm/v2/tokens/breakpoints.js.map +1 -0
  311. package/dist/esm/v2/tokens/colors.js +219 -0
  312. package/dist/esm/v2/tokens/colors.js.map +1 -0
  313. package/dist/esm/v2/tokens/density.js +98 -0
  314. package/dist/esm/v2/tokens/density.js.map +1 -0
  315. package/dist/esm/v2/tokens/index.js +80 -0
  316. package/dist/esm/v2/tokens/index.js.map +1 -0
  317. package/dist/esm/v2/tokens/motion.js +88 -0
  318. package/dist/esm/v2/tokens/motion.js.map +1 -0
  319. package/dist/esm/v2/tokens/radius.js +22 -0
  320. package/dist/esm/v2/tokens/radius.js.map +1 -0
  321. package/dist/esm/v2/tokens/shadows.js +40 -0
  322. package/dist/esm/v2/tokens/shadows.js.map +1 -0
  323. package/dist/esm/v2/tokens/spacing.js +51 -0
  324. package/dist/esm/v2/tokens/spacing.js.map +1 -0
  325. package/dist/esm/v2/tokens/state.js +41 -0
  326. package/dist/esm/v2/tokens/state.js.map +1 -0
  327. package/dist/esm/v2/tokens/statusPalette.js +66 -0
  328. package/dist/esm/v2/tokens/statusPalette.js.map +1 -0
  329. package/dist/esm/v2/tokens/tokens.json +153 -0
  330. package/dist/esm/v2/tokens/typography.js +149 -0
  331. package/dist/esm/v2/tokens/typography.js.map +1 -0
  332. package/dist/esm/v2/tokens/zIndex.js +44 -0
  333. package/dist/esm/v2/tokens/zIndex.js.map +1 -0
  334. package/dist/esm/v2/types/common.js +2 -0
  335. package/dist/esm/v2/types/common.js.map +1 -0
  336. package/dist/esm/v2/types/datagrid.js +2 -0
  337. package/dist/esm/v2/types/datagrid.js.map +1 -0
  338. package/dist/esm/v2/types/index.js +12 -0
  339. package/dist/esm/v2/types/index.js.map +1 -0
  340. package/dist/esm/v2/utils/apiError.js +281 -0
  341. package/dist/esm/v2/utils/apiError.js.map +1 -0
  342. package/dist/esm/v2/utils/contrast.js +157 -0
  343. package/dist/esm/v2/utils/contrast.js.map +1 -0
  344. package/dist/esm/v2/utils/cx.js +38 -0
  345. package/dist/esm/v2/utils/cx.js.map +1 -0
  346. package/dist/esm/v2/utils/fileDownload.js +226 -0
  347. package/dist/esm/v2/utils/fileDownload.js.map +1 -0
  348. package/dist/esm/v2/utils/fmtMoney.js +78 -0
  349. package/dist/esm/v2/utils/fmtMoney.js.map +1 -0
  350. package/dist/esm/v2/utils/index.js +43 -0
  351. package/dist/esm/v2/utils/index.js.map +1 -0
  352. package/dist/esm/v2/utils/mergeLabels.js +86 -0
  353. package/dist/esm/v2/utils/mergeLabels.js.map +1 -0
  354. package/dist/esm/v2/utils/networkStatus.js +114 -0
  355. package/dist/esm/v2/utils/networkStatus.js.map +1 -0
  356. package/dist/index.d.ts +3 -2
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js +21 -0
  359. package/dist/index.js.map +1 -1
  360. package/dist/v2/__tests__/FieldError.test.js +164 -0
  361. package/dist/v2/__tests__/FieldError.test.js.map +1 -0
  362. package/dist/v2/__tests__/FileCard.test.js +148 -0
  363. package/dist/v2/__tests__/FileCard.test.js.map +1 -0
  364. package/dist/v2/__tests__/SectionErrorBoundary.test.js +237 -0
  365. package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
  366. package/dist/v2/components/Accordion.d.ts +6 -6
  367. package/dist/v2/components/Accordion.d.ts.map +1 -1
  368. package/dist/v2/components/Accordion.js.map +1 -1
  369. package/dist/v2/components/ActionStrip.d.ts +12 -12
  370. package/dist/v2/components/ActionStrip.d.ts.map +1 -1
  371. package/dist/v2/components/ActionStrip.js.map +1 -1
  372. package/dist/v2/components/Banner.d.ts +48 -9
  373. package/dist/v2/components/Banner.d.ts.map +1 -1
  374. package/dist/v2/components/Banner.js +116 -35
  375. package/dist/v2/components/Banner.js.map +1 -1
  376. package/dist/v2/components/Busy.d.ts +3 -3
  377. package/dist/v2/components/Busy.d.ts.map +1 -1
  378. package/dist/v2/components/Busy.js.map +1 -1
  379. package/dist/v2/components/Button.d.ts +6 -6
  380. package/dist/v2/components/Button.d.ts.map +1 -1
  381. package/dist/v2/components/Button.js.map +1 -1
  382. package/dist/v2/components/CategoryTag.d.ts +3 -3
  383. package/dist/v2/components/CategoryTag.d.ts.map +1 -1
  384. package/dist/v2/components/CategoryTag.js.map +1 -1
  385. package/dist/v2/components/Checkbox.d.ts +11 -11
  386. package/dist/v2/components/Checkbox.d.ts.map +1 -1
  387. package/dist/v2/components/Checkbox.js.map +1 -1
  388. package/dist/v2/components/Chip.d.ts +8 -8
  389. package/dist/v2/components/Chip.d.ts.map +1 -1
  390. package/dist/v2/components/Chip.js +2 -1
  391. package/dist/v2/components/Chip.js.map +1 -1
  392. package/dist/v2/components/Combobox.d.ts +27 -27
  393. package/dist/v2/components/Combobox.d.ts.map +1 -1
  394. package/dist/v2/components/Combobox.js +3 -2
  395. package/dist/v2/components/Combobox.js.map +1 -1
  396. package/dist/v2/components/CommandPalette.d.ts +20 -20
  397. package/dist/v2/components/CommandPalette.d.ts.map +1 -1
  398. package/dist/v2/components/CommandPalette.js +2 -6
  399. package/dist/v2/components/CommandPalette.js.map +1 -1
  400. package/dist/v2/components/ConfirmDialog.d.ts +13 -13
  401. package/dist/v2/components/ConfirmDialog.d.ts.map +1 -1
  402. package/dist/v2/components/ConfirmDialog.js +2 -1
  403. package/dist/v2/components/ConfirmDialog.js.map +1 -1
  404. package/dist/v2/components/DatePicker.d.ts +11 -11
  405. package/dist/v2/components/DatePicker.d.ts.map +1 -1
  406. package/dist/v2/components/DatePicker.js.map +1 -1
  407. package/dist/v2/components/DateRangePicker.d.ts +16 -16
  408. package/dist/v2/components/DateRangePicker.d.ts.map +1 -1
  409. package/dist/v2/components/DateRangePicker.js +2 -1
  410. package/dist/v2/components/DateRangePicker.js.map +1 -1
  411. package/dist/v2/components/DateTimePicker.d.ts +11 -11
  412. package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
  413. package/dist/v2/components/DateTimePicker.js.map +1 -1
  414. package/dist/v2/components/Drawer.d.ts +18 -18
  415. package/dist/v2/components/Drawer.d.ts.map +1 -1
  416. package/dist/v2/components/Drawer.js +2 -1
  417. package/dist/v2/components/Drawer.js.map +1 -1
  418. package/dist/v2/components/Dropzone.d.ts +34 -34
  419. package/dist/v2/components/Dropzone.d.ts.map +1 -1
  420. package/dist/v2/components/Dropzone.js +11 -3
  421. package/dist/v2/components/Dropzone.js.map +1 -1
  422. package/dist/v2/components/EmptyState.d.ts +7 -7
  423. package/dist/v2/components/EmptyState.d.ts.map +1 -1
  424. package/dist/v2/components/EmptyState.js.map +1 -1
  425. package/dist/v2/components/FavoriteToggle.d.ts +7 -7
  426. package/dist/v2/components/FavoriteToggle.d.ts.map +1 -1
  427. package/dist/v2/components/FavoriteToggle.js +2 -1
  428. package/dist/v2/components/FavoriteToggle.js.map +1 -1
  429. package/dist/v2/components/Field.d.ts +17 -12
  430. package/dist/v2/components/Field.d.ts.map +1 -1
  431. package/dist/v2/components/Field.js +25 -7
  432. package/dist/v2/components/Field.js.map +1 -1
  433. package/dist/v2/components/FieldError.d.ts +78 -0
  434. package/dist/v2/components/FieldError.d.ts.map +1 -0
  435. package/dist/v2/components/FieldError.js +131 -0
  436. package/dist/v2/components/FieldError.js.map +1 -0
  437. package/dist/v2/components/FieldHelp.d.ts +7 -7
  438. package/dist/v2/components/FieldHelp.d.ts.map +1 -1
  439. package/dist/v2/components/FieldHelp.js.map +1 -1
  440. package/dist/v2/components/FileCard.d.ts +75 -0
  441. package/dist/v2/components/FileCard.d.ts.map +1 -0
  442. package/dist/v2/components/FileCard.js +169 -0
  443. package/dist/v2/components/FileCard.js.map +1 -0
  444. package/dist/v2/components/FilterTab.d.ts +9 -9
  445. package/dist/v2/components/FilterTab.d.ts.map +1 -1
  446. package/dist/v2/components/FilterTab.js +2 -1
  447. package/dist/v2/components/FilterTab.js.map +1 -1
  448. package/dist/v2/components/FormGrid.d.ts +9 -4
  449. package/dist/v2/components/FormGrid.d.ts.map +1 -1
  450. package/dist/v2/components/FormGrid.js +11 -1
  451. package/dist/v2/components/FormGrid.js.map +1 -1
  452. package/dist/v2/components/FormikDisplay.d.ts +6 -6
  453. package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
  454. package/dist/v2/components/FormikDisplay.js.map +1 -1
  455. package/dist/v2/components/Input.d.ts +6 -6
  456. package/dist/v2/components/Input.d.ts.map +1 -1
  457. package/dist/v2/components/Input.js.map +1 -1
  458. package/dist/v2/components/KPICard.d.ts +43 -13
  459. package/dist/v2/components/KPICard.d.ts.map +1 -1
  460. package/dist/v2/components/KPICard.js +53 -14
  461. package/dist/v2/components/KPICard.js.map +1 -1
  462. package/dist/v2/components/KPIStrip.d.ts +68 -0
  463. package/dist/v2/components/KPIStrip.d.ts.map +1 -0
  464. package/dist/v2/components/KPIStrip.js +92 -0
  465. package/dist/v2/components/KPIStrip.js.map +1 -0
  466. package/dist/v2/components/KV.d.ts +3 -3
  467. package/dist/v2/components/KV.d.ts.map +1 -1
  468. package/dist/v2/components/KV.js.map +1 -1
  469. package/dist/v2/components/KVGrid.d.ts +2 -2
  470. package/dist/v2/components/KVGrid.d.ts.map +1 -1
  471. package/dist/v2/components/KVGrid.js +8 -1
  472. package/dist/v2/components/KVGrid.js.map +1 -1
  473. package/dist/v2/components/Layout.d.ts +7 -7
  474. package/dist/v2/components/Layout.d.ts.map +1 -1
  475. package/dist/v2/components/Layout.js.map +1 -1
  476. package/dist/v2/components/MobileRowCard.d.ts +13 -13
  477. package/dist/v2/components/MobileRowCard.d.ts.map +1 -1
  478. package/dist/v2/components/MobileRowCard.js.map +1 -1
  479. package/dist/v2/components/Modal.d.ts +12 -12
  480. package/dist/v2/components/Modal.d.ts.map +1 -1
  481. package/dist/v2/components/Modal.js.map +1 -1
  482. package/dist/v2/components/NetworkErrorPage.d.ts +1 -1
  483. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
  484. package/dist/v2/components/NetworkErrorPage.js.map +1 -1
  485. package/dist/v2/components/NumberInput.d.ts +14 -14
  486. package/dist/v2/components/NumberInput.d.ts.map +1 -1
  487. package/dist/v2/components/NumberInput.js +7 -6
  488. package/dist/v2/components/NumberInput.js.map +1 -1
  489. package/dist/v2/components/OverflowMenu.d.ts +14 -14
  490. package/dist/v2/components/OverflowMenu.d.ts.map +1 -1
  491. package/dist/v2/components/OverflowMenu.js +4 -8
  492. package/dist/v2/components/OverflowMenu.js.map +1 -1
  493. package/dist/v2/components/PdfViewer.d.ts +9 -9
  494. package/dist/v2/components/PdfViewer.d.ts.map +1 -1
  495. package/dist/v2/components/PdfViewer.js.map +1 -1
  496. package/dist/v2/components/ProgressBar.d.ts +10 -10
  497. package/dist/v2/components/ProgressBar.d.ts.map +1 -1
  498. package/dist/v2/components/ProgressBar.js.map +1 -1
  499. package/dist/v2/components/Radio.d.ts +7 -7
  500. package/dist/v2/components/Radio.d.ts.map +1 -1
  501. package/dist/v2/components/Radio.js.map +1 -1
  502. package/dist/v2/components/SectionErrorBoundary.d.ts +89 -0
  503. package/dist/v2/components/SectionErrorBoundary.d.ts.map +1 -0
  504. package/dist/v2/components/SectionErrorBoundary.js +221 -0
  505. package/dist/v2/components/SectionErrorBoundary.js.map +1 -0
  506. package/dist/v2/components/SectionHeader.d.ts +5 -5
  507. package/dist/v2/components/SectionHeader.d.ts.map +1 -1
  508. package/dist/v2/components/SectionHeader.js.map +1 -1
  509. package/dist/v2/components/Segmented.d.ts +11 -11
  510. package/dist/v2/components/Segmented.d.ts.map +1 -1
  511. package/dist/v2/components/Segmented.js.map +1 -1
  512. package/dist/v2/components/Select.d.ts +33 -15
  513. package/dist/v2/components/Select.d.ts.map +1 -1
  514. package/dist/v2/components/Select.js +147 -30
  515. package/dist/v2/components/Select.js.map +1 -1
  516. package/dist/v2/components/ServerErrorPage.d.ts +1 -1
  517. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
  518. package/dist/v2/components/ServerErrorPage.js.map +1 -1
  519. package/dist/v2/components/Skeleton.d.ts +15 -15
  520. package/dist/v2/components/Skeleton.d.ts.map +1 -1
  521. package/dist/v2/components/Skeleton.js.map +1 -1
  522. package/dist/v2/components/SkipLink.d.ts +2 -2
  523. package/dist/v2/components/SkipLink.d.ts.map +1 -1
  524. package/dist/v2/components/SkipLink.js.map +1 -1
  525. package/dist/v2/components/Status.d.ts +3 -3
  526. package/dist/v2/components/Status.d.ts.map +1 -1
  527. package/dist/v2/components/Status.js.map +1 -1
  528. package/dist/v2/components/Stepper.d.ts +28 -22
  529. package/dist/v2/components/Stepper.d.ts.map +1 -1
  530. package/dist/v2/components/Stepper.js +31 -5
  531. package/dist/v2/components/Stepper.js.map +1 -1
  532. package/dist/v2/components/Surface.d.ts +94 -0
  533. package/dist/v2/components/Surface.d.ts.map +1 -0
  534. package/dist/v2/components/Surface.js +163 -0
  535. package/dist/v2/components/Surface.js.map +1 -0
  536. package/dist/v2/components/Switch.d.ts +4 -4
  537. package/dist/v2/components/Switch.d.ts.map +1 -1
  538. package/dist/v2/components/Switch.js.map +1 -1
  539. package/dist/v2/components/Tabs.d.ts +6 -6
  540. package/dist/v2/components/Tabs.d.ts.map +1 -1
  541. package/dist/v2/components/Tabs.js.map +1 -1
  542. package/dist/v2/components/TelInput.d.ts +8 -8
  543. package/dist/v2/components/TelInput.d.ts.map +1 -1
  544. package/dist/v2/components/TelInput.js +18 -18
  545. package/dist/v2/components/TelInput.js.map +1 -1
  546. package/dist/v2/components/Textarea.d.ts +1 -1
  547. package/dist/v2/components/Textarea.d.ts.map +1 -1
  548. package/dist/v2/components/Textarea.js.map +1 -1
  549. package/dist/v2/components/TimePicker.d.ts +11 -11
  550. package/dist/v2/components/TimePicker.d.ts.map +1 -1
  551. package/dist/v2/components/TimePicker.js.map +1 -1
  552. package/dist/v2/components/Toast.d.ts +6 -6
  553. package/dist/v2/components/Toast.d.ts.map +1 -1
  554. package/dist/v2/components/Toast.js +9 -8
  555. package/dist/v2/components/Toast.js.map +1 -1
  556. package/dist/v2/components/Tooltip.d.ts +1 -1
  557. package/dist/v2/components/Tooltip.d.ts.map +1 -1
  558. package/dist/v2/components/Tooltip.js.map +1 -1
  559. package/dist/v2/components/index.d.ts +143 -0
  560. package/dist/v2/components/index.d.ts.map +1 -1
  561. package/dist/v2/components/index.js +35 -0
  562. package/dist/v2/components/index.js.map +1 -1
  563. package/dist/v2/models/favorite.d.ts +1 -1
  564. package/dist/v2/models/favorite.d.ts.map +1 -1
  565. package/dist/v2/models/favorite.js.map +1 -1
  566. package/dist/v2/models/personalization.d.ts +13 -13
  567. package/dist/v2/models/personalization.d.ts.map +1 -1
  568. package/dist/v2/models/personalization.js.map +1 -1
  569. package/dist/v2/models/referentiel.d.ts +11 -11
  570. package/dist/v2/models/referentiel.d.ts.map +1 -1
  571. package/dist/v2/models/referentiel.js.map +1 -1
  572. package/dist/v2/models/savedFilter.d.ts +8 -8
  573. package/dist/v2/models/savedFilter.d.ts.map +1 -1
  574. package/dist/v2/models/savedFilter.js.map +1 -1
  575. package/dist/v2/patterns/ActionBar.d.ts +33 -33
  576. package/dist/v2/patterns/ActionBar.d.ts.map +1 -1
  577. package/dist/v2/patterns/ActionBar.js +2 -1
  578. package/dist/v2/patterns/ActionBar.js.map +1 -1
  579. package/dist/v2/patterns/BulkActionBar.d.ts +12 -12
  580. package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -1
  581. package/dist/v2/patterns/BulkActionBar.js +2 -1
  582. package/dist/v2/patterns/BulkActionBar.js.map +1 -1
  583. package/dist/v2/patterns/CollapsibleDataGrid.d.ts +15 -15
  584. package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -1
  585. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
  586. package/dist/v2/patterns/ColumnsToggle.d.ts +7 -7
  587. package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -1
  588. package/dist/v2/patterns/ColumnsToggle.js +4 -8
  589. package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
  590. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -12
  591. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
  592. package/dist/v2/patterns/DataGridSettingsMenu.js +9 -8
  593. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
  594. package/dist/v2/patterns/DataGridToolbar.d.ts +40 -40
  595. package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -1
  596. package/dist/v2/patterns/DataGridToolbar.js +2 -1
  597. package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
  598. package/dist/v2/patterns/DataGridVirtualized.d.ts +27 -27
  599. package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -1
  600. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
  601. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +5 -5
  602. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -1
  603. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
  604. package/dist/v2/patterns/FavoriteColumn.d.ts +6 -6
  605. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
  606. package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
  607. package/dist/v2/patterns/FavoritesFilter.d.ts +10 -10
  608. package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -1
  609. package/dist/v2/patterns/FavoritesFilter.js +2 -1
  610. package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
  611. package/dist/v2/patterns/FormErrorSummary.d.ts +4 -4
  612. package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -1
  613. package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
  614. package/dist/v2/patterns/FormPageShell.d.ts +4 -4
  615. package/dist/v2/patterns/FormPageShell.d.ts.map +1 -1
  616. package/dist/v2/patterns/FormPageShell.js.map +1 -1
  617. package/dist/v2/patterns/FormSection.d.ts +19 -8
  618. package/dist/v2/patterns/FormSection.d.ts.map +1 -1
  619. package/dist/v2/patterns/FormSection.js +106 -71
  620. package/dist/v2/patterns/FormSection.js.map +1 -1
  621. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +6 -6
  622. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
  623. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
  624. package/dist/v2/patterns/FormikCombobox.d.ts +11 -11
  625. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
  626. package/dist/v2/patterns/FormikCombobox.js.map +1 -1
  627. package/dist/v2/patterns/FormikDatePicker.d.ts +36 -8
  628. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
  629. package/dist/v2/patterns/FormikDatePicker.js +27 -1
  630. package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
  631. package/dist/v2/patterns/FormikErrorFocus.d.ts +3 -3
  632. package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -1
  633. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
  634. package/dist/v2/patterns/FormikFile.d.ts +8 -8
  635. package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
  636. package/dist/v2/patterns/FormikFile.js.map +1 -1
  637. package/dist/v2/patterns/FormikInput.d.ts +41 -6
  638. package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
  639. package/dist/v2/patterns/FormikInput.js +49 -1
  640. package/dist/v2/patterns/FormikInput.js.map +1 -1
  641. package/dist/v2/patterns/FormikReferentielField.d.ts +8 -8
  642. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
  643. package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
  644. package/dist/v2/patterns/FormikSelect.d.ts +33 -12
  645. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
  646. package/dist/v2/patterns/FormikSelect.js +28 -2
  647. package/dist/v2/patterns/FormikSelect.js.map +1 -1
  648. package/dist/v2/patterns/FormikTextarea.d.ts +5 -5
  649. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
  650. package/dist/v2/patterns/FormikTextarea.js.map +1 -1
  651. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +7 -7
  652. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
  653. package/dist/v2/patterns/KeyboardShortcutsHelp.js +2 -6
  654. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
  655. package/dist/v2/patterns/NetworkErrorBanner.d.ts +4 -4
  656. package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -1
  657. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
  658. package/dist/v2/patterns/PageContent.d.ts +3 -3
  659. package/dist/v2/patterns/PageContent.d.ts.map +1 -1
  660. package/dist/v2/patterns/PageContent.js.map +1 -1
  661. package/dist/v2/patterns/ReferentielField.d.ts +49 -49
  662. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
  663. package/dist/v2/patterns/ReferentielField.js +2 -1
  664. package/dist/v2/patterns/ReferentielField.js.map +1 -1
  665. package/dist/v2/patterns/SaveFilterDialog.d.ts +10 -10
  666. package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -1
  667. package/dist/v2/patterns/SaveFilterDialog.js +9 -8
  668. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
  669. package/dist/v2/patterns/SavedFiltersMenu.d.ts +7 -7
  670. package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -1
  671. package/dist/v2/patterns/SavedFiltersMenu.js +9 -8
  672. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
  673. package/dist/v2/patterns/SkeletonPageShell.d.ts +7 -7
  674. package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -1
  675. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
  676. package/dist/v2/patterns/SortableHeader.d.ts +1 -1
  677. package/dist/v2/patterns/SortableHeader.d.ts.map +1 -1
  678. package/dist/v2/patterns/SortableHeader.js.map +1 -1
  679. package/dist/v2/patterns/Tour.d.ts +12 -12
  680. package/dist/v2/patterns/Tour.d.ts.map +1 -1
  681. package/dist/v2/patterns/Tour.js +9 -8
  682. package/dist/v2/patterns/Tour.js.map +1 -1
  683. package/dist/v2/patterns/_dataGridShared.d.ts +25 -6
  684. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
  685. package/dist/v2/patterns/_dataGridShared.js +37 -3
  686. package/dist/v2/patterns/_dataGridShared.js.map +1 -1
  687. package/dist/v2/patterns/_useColumnReorder.d.ts +1 -1
  688. package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -1
  689. package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
  690. package/dist/v2/patterns/_useColumnResize.d.ts +1 -1
  691. package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -1
  692. package/dist/v2/patterns/_useColumnResize.js.map +1 -1
  693. package/dist/v2/patterns/index.d.ts +27 -0
  694. package/dist/v2/patterns/index.d.ts.map +1 -1
  695. package/dist/v2/patterns/index.js.map +1 -1
  696. package/dist/v2/personalization/PersonalizationProvider.d.ts +9 -9
  697. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
  698. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
  699. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +1 -1
  700. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -1
  701. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
  702. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +1 -1
  703. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -1
  704. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
  705. package/dist/v2/personalization/capabilities/favoritesView.d.ts +3 -3
  706. package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -1
  707. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
  708. package/dist/v2/personalization/capabilities/savedFilters.d.ts +3 -3
  709. package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -1
  710. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
  711. package/dist/v2/personalization/createPersonalizationStore.d.ts +8 -8
  712. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
  713. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
  714. package/dist/v2/personalization/schema.d.ts +2 -2
  715. package/dist/v2/personalization/schema.d.ts.map +1 -1
  716. package/dist/v2/personalization/schema.js.map +1 -1
  717. package/dist/v2/personalization/types.d.ts +19 -19
  718. package/dist/v2/personalization/types.d.ts.map +1 -1
  719. package/dist/v2/personalization/types.js.map +1 -1
  720. package/dist/v2/referentiel/ReferentielProvider.d.ts +4 -4
  721. package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -1
  722. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
  723. package/dist/v2/referentiel/useReferentielOptions.d.ts +4 -4
  724. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
  725. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
  726. package/dist/v2/referentiel/useReferentielSearch.d.ts +3 -3
  727. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
  728. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
  729. package/dist/v2/theme/createPortnetTheme.d.ts +32 -7
  730. package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -1
  731. package/dist/v2/theme/createPortnetTheme.js +25 -1
  732. package/dist/v2/theme/createPortnetTheme.js.map +1 -1
  733. package/dist/v2/types/datagrid.d.ts +59 -59
  734. package/dist/v2/types/datagrid.d.ts.map +1 -1
  735. package/dist/v2/types/datagrid.js.map +1 -1
  736. package/dist/v2/utils/apiError.d.ts +65 -4
  737. package/dist/v2/utils/apiError.d.ts.map +1 -1
  738. package/dist/v2/utils/apiError.js +69 -6
  739. package/dist/v2/utils/apiError.js.map +1 -1
  740. package/dist/v2/utils/index.d.ts +1 -0
  741. package/dist/v2/utils/index.d.ts.map +1 -1
  742. package/dist/v2/utils/index.js +7 -0
  743. package/dist/v2/utils/index.js.map +1 -1
  744. package/dist/v2/utils/mergeLabels.d.ts +59 -0
  745. package/dist/v2/utils/mergeLabels.d.ts.map +1 -0
  746. package/dist/v2/utils/mergeLabels.js +93 -0
  747. package/dist/v2/utils/mergeLabels.js.map +1 -0
  748. package/package.json +23 -15
@@ -0,0 +1,102 @@
1
+ import * as React from "react";
2
+ import Box from "@mui/material/Box";
3
+ import Typography from "@mui/material/Typography";
4
+ import Button from "./Button";
5
+
6
+ /**
7
+ * EmptyState — Portnet UI v2
8
+ *
9
+ * Charter §04.3 · 3 variants required:
10
+ * - initial → primary CTA (e.g. "+ Nouveau titre")
11
+ * - filtered → "Réinitialiser filtres"
12
+ * - error → "Réessayer"
13
+ *
14
+ * Anti-pattern: generic clipart illustration. A single icon suffices (R-Em.2).
15
+ *
16
+ * <EmptyState
17
+ * icon={<DescriptionIcon />}
18
+ * title="Aucun titre d'importation"
19
+ * description="Créez votre premier titre pour commencer."
20
+ * action={{ label: "Nouveau titre", onClick: createNew }}
21
+ * />
22
+ */
23
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
+ function EmptyState(_ref) {
25
+ var _ref$variant = _ref.variant,
26
+ variant = _ref$variant === void 0 ? "initial" : _ref$variant,
27
+ icon = _ref.icon,
28
+ title = _ref.title,
29
+ description = _ref.description,
30
+ action = _ref.action;
31
+ var variantStyle = {
32
+ initial: {
33
+ iconColor: "var(--fg-subtle)"
34
+ },
35
+ filtered: {
36
+ iconColor: "var(--fg-subtle)"
37
+ },
38
+ error: {
39
+ iconColor: "var(--danger)"
40
+ }
41
+ }[variant] || {
42
+ iconColor: "var(--fg-subtle)"
43
+ };
44
+ var buttonVariant = variant === "error" ? "secondary" : "primary";
45
+ return /*#__PURE__*/_jsxs(Box, {
46
+ role: variant === "error" ? "alert" : undefined,
47
+ sx: {
48
+ display: "flex",
49
+ flexDirection: "column",
50
+ alignItems: "center",
51
+ textAlign: "center",
52
+ padding: "var(--s-9) var(--s-6)",
53
+ background: "var(--surface)",
54
+ border: "1px solid var(--border)",
55
+ borderRadius: "var(--r-lg)"
56
+ },
57
+ children: [icon && /*#__PURE__*/_jsx(Box, {
58
+ sx: {
59
+ // Icon halo size — visual element dimensions, not spacing.
60
+ // Intentionally literal (not promoted to a spacing token).
61
+ width: 48,
62
+ height: 48,
63
+ borderRadius: "var(--r-full)",
64
+ background: "var(--bg-subtle)",
65
+ display: "grid",
66
+ placeItems: "center",
67
+ color: variantStyle.iconColor,
68
+ marginBottom: "var(--s-3)",
69
+ "& svg": {
70
+ fontSize: 24
71
+ } // intrinsic icon size
72
+ },
73
+ children: icon
74
+ }), /*#__PURE__*/_jsx(Typography, {
75
+ component: "h3",
76
+ sx: {
77
+ fontSize: "var(--text-h4)",
78
+ fontWeight: "var(--fw-semibold)",
79
+ color: "var(--fg)",
80
+ marginBottom: "var(--s-1)",
81
+ lineHeight: "var(--lh-snug)"
82
+ },
83
+ children: title
84
+ }), description && /*#__PURE__*/_jsx(Typography, {
85
+ sx: {
86
+ fontSize: "var(--text-sm)",
87
+ color: "var(--fg-muted)",
88
+ // Readable measure (~50–60ch). Not a spacing-scale value.
89
+ maxWidth: 360,
90
+ marginBottom: "var(--s-3)"
91
+ },
92
+ children: description
93
+ }), action && /*#__PURE__*/_jsx(Button, {
94
+ variant: action.variant || buttonVariant,
95
+ icon: action.icon,
96
+ onClick: action.onClick,
97
+ children: action.label
98
+ })]
99
+ });
100
+ }
101
+ export default EmptyState;
102
+ //# sourceMappingURL=EmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.js","names":["React","Box","Typography","Button","jsx","_jsx","jsxs","_jsxs","EmptyState","_ref","_ref$variant","variant","icon","title","description","action","variantStyle","initial","iconColor","filtered","error","buttonVariant","role","undefined","sx","display","flexDirection","alignItems","textAlign","padding","background","border","borderRadius","children","width","height","placeItems","color","marginBottom","fontSize","component","fontWeight","lineHeight","maxWidth","onClick","label"],"sources":["../../../../src/lib/v2/components/EmptyState.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Button from \"./Button\";\r\nimport type { ButtonProps } from \"./Button\";\r\n\r\n/**\r\n * EmptyState — Portnet UI v2\r\n *\r\n * Charter §04.3 · 3 variants required:\r\n * - initial → primary CTA (e.g. \"+ Nouveau titre\")\r\n * - filtered → \"Réinitialiser filtres\"\r\n * - error → \"Réessayer\"\r\n *\r\n * Anti-pattern: generic clipart illustration. A single icon suffices (R-Em.2).\r\n *\r\n * <EmptyState\r\n * icon={<DescriptionIcon />}\r\n * title=\"Aucun titre d'importation\"\r\n * description=\"Créez votre premier titre pour commencer.\"\r\n * action={{ label: \"Nouveau titre\", onClick: createNew }}\r\n * />\r\n */\r\n\r\nexport type EmptyStateVariant = \"initial\" | \"filtered\" | \"error\";\r\n\r\nexport interface EmptyStateAction {\r\n label: React.ReactNode;\r\n onClick?: (() => void) | undefined;\r\n icon?: React.ReactNode | undefined;\r\n variant?: ButtonProps[\"variant\"] | undefined;\r\n}\r\n\r\nexport interface EmptyStateProps {\r\n variant?: EmptyStateVariant | undefined;\r\n icon?: React.ReactNode | undefined;\r\n title: React.ReactNode;\r\n description?: React.ReactNode | undefined;\r\n action?: EmptyStateAction | undefined;\r\n}\r\n\r\nfunction EmptyState({\r\n variant = \"initial\",\r\n icon,\r\n title,\r\n description,\r\n action,\r\n}: EmptyStateProps) {\r\n const variantStyle = {\r\n initial: { iconColor: \"var(--fg-subtle)\" },\r\n filtered: { iconColor: \"var(--fg-subtle)\" },\r\n error: { iconColor: \"var(--danger)\" },\r\n }[variant] || { iconColor: \"var(--fg-subtle)\" };\r\n\r\n const buttonVariant = variant === \"error\" ? \"secondary\" : \"primary\";\r\n\r\n return (\r\n <Box\r\n role={variant === \"error\" ? \"alert\" : undefined}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n textAlign: \"center\",\r\n padding: \"var(--s-9) var(--s-6)\",\r\n background: \"var(--surface)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-lg)\",\r\n }}\r\n >\r\n {icon && (\r\n <Box\r\n sx={{\r\n // Icon halo size — visual element dimensions, not spacing.\r\n // Intentionally literal (not promoted to a spacing token).\r\n width: 48,\r\n height: 48,\r\n borderRadius: \"var(--r-full)\",\r\n background: \"var(--bg-subtle)\",\r\n display: \"grid\",\r\n placeItems: \"center\",\r\n color: variantStyle.iconColor,\r\n marginBottom: \"var(--s-3)\",\r\n \"& svg\": { fontSize: 24 }, // intrinsic icon size\r\n }}\r\n >\r\n {icon}\r\n </Box>\r\n )}\r\n <Typography\r\n component=\"h3\"\r\n sx={{\r\n fontSize: \"var(--text-h4)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n marginBottom: \"var(--s-1)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n {description && (\r\n <Typography\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-muted)\",\r\n // Readable measure (~50–60ch). Not a spacing-scale value.\r\n maxWidth: 360,\r\n marginBottom: \"var(--s-3)\",\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n {action && (\r\n <Button variant={action.variant || buttonVariant} icon={action.icon} onClick={action.onClick}>\r\n {action.label}\r\n </Button>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default EmptyState;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,127 @@
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 = ["pressed", "onChange", "size", "disabled", "labels", "sx", "aria-label"];
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 _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; }
9
+ 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; }
10
+ import * as React from "react";
11
+ import IconButton from "@mui/material/IconButton";
12
+ import StarRoundedIcon from "@mui/icons-material/StarRounded";
13
+ import StarBorderRoundedIcon from "@mui/icons-material/StarBorderRounded";
14
+ import { mergeLabels } from "../utils/mergeLabels";
15
+
16
+ /**
17
+ * FavoriteToggle - Portnet UI v2
18
+ *
19
+ * Charter §03 · presentational ☆/★ follow ("suivi") toggle. A CONTROLLED
20
+ * `<button aria-pressed>` with a star glyph. The glyph is decorative
21
+ * (MUI SvgIcon is aria-hidden by default); state is conveyed by
22
+ * `aria-pressed` AND by glyph SHAPE (outline ☆ vs filled ★), so it never
23
+ * relies on colour alone (WCAG 1.4.1 Use of Color).
24
+ *
25
+ * Presentational and provider-FREE by design — it keeps the leaf-vs-
26
+ * personalization boundary clean and stays usable outside the foundation.
27
+ * Wire it to the favorites capability:
28
+ *
29
+ * const { isFavorite, toggle } = useIsFavorite("ti:list", row.id);
30
+ * <FavoriteToggle pressed={isFavorite} onChange={toggle} size="sm" />
31
+ *
32
+ * …or drive it from any state:
33
+ *
34
+ * <FavoriteToggle pressed={on} onChange={(next) => setOn(next)} />
35
+ *
36
+ * Touch target: md (default) = 44px (WCAG 2.5.5 AAA); sm = 32px for dense
37
+ * DataGrid rows (meets 2.5.8 AA ≥ 24px, with headroom); lg = 48px; xs =
38
+ * 24px — the WCAG 2.5.8 AA floor exactly, with NO headroom left. Reserve
39
+ * xs for genuinely space-constrained columns where sm's 32px still
40
+ * doesn't fit (e.g. a compact favorites column under a table's
41
+ * table-layout:auto, where an explicit column width can't shrink the
42
+ * cell below the toggle's own intrinsic box) — don't reach for it over
43
+ * sm by default. The toggle renders itself unconditionally; the DataGrid
44
+ * follow column (makeFavoriteColumn) wraps it with the Gmail-style hover
45
+ * reveal for unfollowed rows.
46
+ *
47
+ * Localisation (FR / EN / AR):
48
+ * <FavoriteToggle labels={{ addFavorite: "Follow",
49
+ * removeFavorite: "Unfollow" }} />
50
+ */
51
+ import { jsx as _jsx } from "react/jsx-runtime";
52
+ var DEFAULT_LABELS = Object.freeze({
53
+ addFavorite: "Suivre",
54
+ removeFavorite: "Ne plus suivre"
55
+ });
56
+ // Box = interactive hit area (px, like OverflowMenu's minWidth); glyph =
57
+ // icon font-size inherited by the SvgIcon via fontSize="inherit".
58
+ var SIZE_MAP = Object.freeze({
59
+ xs: Object.freeze({
60
+ box: 24,
61
+ glyph: 16
62
+ }),
63
+ sm: Object.freeze({
64
+ box: 32,
65
+ glyph: 20
66
+ }),
67
+ md: Object.freeze({
68
+ box: 44,
69
+ glyph: 24
70
+ }),
71
+ lg: Object.freeze({
72
+ box: 48,
73
+ glyph: 28
74
+ })
75
+ });
76
+ var FavoriteToggle = /*#__PURE__*/React.forwardRef(function FavoriteToggle(_ref, ref) {
77
+ var _ref$pressed = _ref.pressed,
78
+ pressed = _ref$pressed === void 0 ? false : _ref$pressed,
79
+ onChange = _ref.onChange,
80
+ _ref$size = _ref.size,
81
+ size = _ref$size === void 0 ? "md" : _ref$size,
82
+ disabled = _ref.disabled,
83
+ labels = _ref.labels,
84
+ sx = _ref.sx,
85
+ ariaLabel = _ref["aria-label"],
86
+ rest = _objectWithoutProperties(_ref, _excluded);
87
+ var L = mergeLabels(DEFAULT_LABELS, labels);
88
+ var dims = SIZE_MAP[size] || SIZE_MAP.md;
89
+ // Toggle-button convention: the accessible name describes the ACTION
90
+ // activation performs; aria-pressed conveys the current state. Hosts can
91
+ // override with a richer per-row name via the `aria-label` prop.
92
+ var computedAria = ariaLabel || (pressed ? L.removeFavorite : L.addFavorite);
93
+ var handleClick = function handleClick(e) {
94
+ if (disabled) return;
95
+ if (typeof onChange === "function") onChange(!pressed, e);
96
+ };
97
+ var Star = pressed ? StarRoundedIcon : StarBorderRoundedIcon;
98
+ return /*#__PURE__*/_jsx(IconButton, _objectSpread(_objectSpread({
99
+ ref: ref,
100
+ onClick: handleClick,
101
+ disabled: disabled,
102
+ "aria-pressed": !!pressed,
103
+ "aria-label": computedAria,
104
+ sx: _objectSpread({
105
+ width: dims.box,
106
+ height: dims.box,
107
+ fontSize: dims.glyph,
108
+ color: pressed ? "var(--accent)" : "var(--fg-muted)",
109
+ "&:hover": {
110
+ color: pressed ? "var(--accent)" : "var(--fg)"
111
+ },
112
+ // Reuse the canonical focus halo token (same as Switch / R-AI.1).
113
+ "&.Mui-focusVisible": {
114
+ boxShadow: "var(--shadow-focus)"
115
+ },
116
+ "@media (prefers-reduced-motion: reduce)": {
117
+ transition: "none"
118
+ }
119
+ }, sx)
120
+ }, rest), {}, {
121
+ children: /*#__PURE__*/_jsx(Star, {
122
+ fontSize: "inherit"
123
+ })
124
+ }));
125
+ });
126
+ export default FavoriteToggle;
127
+ //# sourceMappingURL=FavoriteToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FavoriteToggle.js","names":["React","IconButton","StarRoundedIcon","StarBorderRoundedIcon","mergeLabels","jsx","_jsx","DEFAULT_LABELS","Object","freeze","addFavorite","removeFavorite","SIZE_MAP","xs","box","glyph","sm","md","lg","FavoriteToggle","forwardRef","_ref","ref","_ref$pressed","pressed","onChange","_ref$size","size","disabled","labels","sx","ariaLabel","rest","_objectWithoutProperties","_excluded","L","dims","computedAria","handleClick","e","Star","_objectSpread","onClick","width","height","fontSize","color","boxShadow","transition","children"],"sources":["../../../../src/lib/v2/components/FavoriteToggle.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport type { IconButtonProps } from \"@mui/material/IconButton\";\r\nimport StarRoundedIcon from \"@mui/icons-material/StarRounded\";\r\nimport StarBorderRoundedIcon from \"@mui/icons-material/StarBorderRounded\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * FavoriteToggle - Portnet UI v2\r\n *\r\n * Charter §03 · presentational ☆/★ follow (\"suivi\") toggle. A CONTROLLED\r\n * `<button aria-pressed>` with a star glyph. The glyph is decorative\r\n * (MUI SvgIcon is aria-hidden by default); state is conveyed by\r\n * `aria-pressed` AND by glyph SHAPE (outline ☆ vs filled ★), so it never\r\n * relies on colour alone (WCAG 1.4.1 Use of Color).\r\n *\r\n * Presentational and provider-FREE by design — it keeps the leaf-vs-\r\n * personalization boundary clean and stays usable outside the foundation.\r\n * Wire it to the favorites capability:\r\n *\r\n * const { isFavorite, toggle } = useIsFavorite(\"ti:list\", row.id);\r\n * <FavoriteToggle pressed={isFavorite} onChange={toggle} size=\"sm\" />\r\n *\r\n * …or drive it from any state:\r\n *\r\n * <FavoriteToggle pressed={on} onChange={(next) => setOn(next)} />\r\n *\r\n * Touch target: md (default) = 44px (WCAG 2.5.5 AAA); sm = 32px for dense\r\n * DataGrid rows (meets 2.5.8 AA ≥ 24px, with headroom); lg = 48px; xs =\r\n * 24px — the WCAG 2.5.8 AA floor exactly, with NO headroom left. Reserve\r\n * xs for genuinely space-constrained columns where sm's 32px still\r\n * doesn't fit (e.g. a compact favorites column under a table's\r\n * table-layout:auto, where an explicit column width can't shrink the\r\n * cell below the toggle's own intrinsic box) — don't reach for it over\r\n * sm by default. The toggle renders itself unconditionally; the DataGrid\r\n * follow column (makeFavoriteColumn) wraps it with the Gmail-style hover\r\n * reveal for unfollowed rows.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <FavoriteToggle labels={{ addFavorite: \"Follow\",\r\n * removeFavorite: \"Unfollow\" }} />\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n addFavorite: \"Suivre\",\r\n removeFavorite: \"Ne plus suivre\",\r\n});\r\n\r\nexport type FavoriteToggleSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n\r\ninterface SizeDims {\r\n box: number;\r\n glyph: number;\r\n}\r\n\r\n// Box = interactive hit area (px, like OverflowMenu's minWidth); glyph =\r\n// icon font-size inherited by the SvgIcon via fontSize=\"inherit\".\r\nconst SIZE_MAP: Record<FavoriteToggleSize, SizeDims> = Object.freeze({\r\n xs: Object.freeze({ box: 24, glyph: 16 }),\r\n sm: Object.freeze({ box: 32, glyph: 20 }),\r\n md: Object.freeze({ box: 44, glyph: 24 }),\r\n lg: Object.freeze({ box: 48, glyph: 28 }),\r\n});\r\n\r\nexport interface FavoriteToggleLabels {\r\n addFavorite?: string | undefined;\r\n removeFavorite?: string | undefined;\r\n}\r\n\r\nexport interface FavoriteToggleProps\r\n extends Omit<IconButtonProps, \"onChange\" | \"size\"> {\r\n /** Current follow state. */\r\n pressed?: boolean | undefined;\r\n /** Activation handler: (nextPressed, event) => void. */\r\n onChange?: ((nextPressed: boolean, event: React.MouseEvent<HTMLButtonElement>) => void) | undefined;\r\n /** Touch-target size. */\r\n size?: FavoriteToggleSize | undefined;\r\n /** Localised action labels (FR default; EN/AR supported). */\r\n labels?: FavoriteToggleLabels | undefined;\r\n /** Explicit accessible name; overrides the labels-derived one. */\r\n \"aria-label\"?: string | undefined;\r\n}\r\n\r\nconst FavoriteToggle = React.forwardRef<HTMLButtonElement, FavoriteToggleProps>(\r\n function FavoriteToggle(\r\n {\r\n pressed = false,\r\n onChange,\r\n size = \"md\",\r\n disabled,\r\n labels,\r\n sx,\r\n \"aria-label\": ariaLabel,\r\n ...rest\r\n },\r\n ref\r\n ) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n const dims = SIZE_MAP[size] || SIZE_MAP.md;\r\n // Toggle-button convention: the accessible name describes the ACTION\r\n // activation performs; aria-pressed conveys the current state. Hosts can\r\n // override with a richer per-row name via the `aria-label` prop.\r\n const computedAria = ariaLabel || (pressed ? L.removeFavorite : L.addFavorite);\r\n\r\n const handleClick = function handleClick(e: React.MouseEvent<HTMLButtonElement>) {\r\n if (disabled) return;\r\n if (typeof onChange === \"function\") onChange(!pressed, e);\r\n };\r\n\r\n const Star = pressed ? StarRoundedIcon : StarBorderRoundedIcon;\r\n\r\n return (\r\n <IconButton\r\n ref={ref}\r\n onClick={handleClick}\r\n disabled={disabled}\r\n aria-pressed={!!pressed}\r\n aria-label={computedAria}\r\n sx={{\r\n width: dims.box,\r\n height: dims.box,\r\n fontSize: dims.glyph,\r\n color: pressed ? \"var(--accent)\" : \"var(--fg-muted)\",\r\n \"&:hover\": { color: pressed ? \"var(--accent)\" : \"var(--fg)\" },\r\n // Reuse the canonical focus halo token (same as Switch / R-AI.1).\r\n \"&.Mui-focusVisible\": { boxShadow: \"var(--shadow-focus)\" },\r\n \"@media (prefers-reduced-motion: reduce)\": { transition: \"none\" },\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n <Star fontSize=\"inherit\" />\r\n </IconButton>\r\n );\r\n }\r\n);\r\n\r\nexport default FavoriteToggle;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,197 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ import * as React from "react";
8
+ import FormControl from "@mui/material/FormControl";
9
+ import FormLabel from "@mui/material/FormLabel";
10
+ import FormHelperText from "@mui/material/FormHelperText";
11
+ import Box from "@mui/material/Box";
12
+ import FieldError from "./FieldError";
13
+
14
+ /**
15
+ * Field — Portnet UI v2
16
+ *
17
+ * Charter §03 · Component "Input · Field".
18
+ * Universal wrapper providing label / required marker / hint / error / a11y bindings
19
+ * for any form control (Input, Select, Textarea, Autocomplete, Combobox, …).
20
+ *
21
+ * Strict rules enforced:
22
+ * R-I.1 — Label is associated to the control via `htmlFor` / `id`.
23
+ * R-I.2 — Required adds the asterisk + `aria-required`.
24
+ * R-I.3 — Error: `aria-invalid` + `aria-describedby` linking the message.
25
+ * Field MERGES with the child's existing `aria-describedby` so a
26
+ * consumer-supplied external help id is never lost. The message
27
+ * itself is rendered by the shared `FieldError` primitive, which
28
+ * carries the R-4.1 MUST icon (gap G-18) — previously this component
29
+ * rendered a bare red `FormHelperText` with no icon, so the canonical
30
+ * field wrapper did not satisfy a MUST and every module inherited the
31
+ * gap on every form.
32
+ * R-I.4 — Validation in `blur`, not `change` (caller's responsibility).
33
+ * R-I.6 — Hint visible above error; never both at once.
34
+ *
35
+ * <Field label="Référence" required hint="Format AAAA-IM-NNNNN" error={errors.ref}>
36
+ * <Input value={value} onChange={onChange} />
37
+ * </Field>
38
+ *
39
+ * Grouping controls (RadioGroup / CheckboxGroup) — pass `group`:
40
+ * A native `<label htmlFor>` cannot name an ARIA group (only labelable
41
+ * elements can be `for`-targeted), so in `group` mode the label is rendered
42
+ * as a <span> with an id and the child group is associated via
43
+ * `aria-labelledby` instead. The child must forward `aria-labelledby`
44
+ * (and `aria-describedby`) onto its `role="group"`/`"radiogroup"` element.
45
+ *
46
+ * <Field label="Genre" group error={errors.genre}>
47
+ * <RadioGroup … />
48
+ * </Field>
49
+ */
50
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
51
+ function Field(_ref) {
52
+ var label = _ref.label,
53
+ _ref$required = _ref.required,
54
+ required = _ref$required === void 0 ? false : _ref$required,
55
+ hint = _ref.hint,
56
+ error = _ref.error,
57
+ htmlFor = _ref.htmlFor,
58
+ _ref$fullWidth = _ref.fullWidth,
59
+ fullWidth = _ref$fullWidth === void 0 ? true : _ref$fullWidth,
60
+ disabled = _ref.disabled,
61
+ _ref$group = _ref.group,
62
+ group = _ref$group === void 0 ? false : _ref$group,
63
+ children = _ref.children,
64
+ helpAdornment = _ref.helpAdornment,
65
+ sx = _ref.sx,
66
+ className = _ref.className;
67
+ // R-I.1 — useId provides SSR-safe, per-instance, stable IDs.
68
+ // Replaces the previous module-scoped counter (`let __uid = 0`) which broke
69
+ // hydration and Concurrent Mode.
70
+ var reactId = React.useId();
71
+ var auto = "pui-".concat(reactId.replace(/:/g, ""));
72
+ var inputId = htmlFor || auto;
73
+ var hintId = "".concat(inputId, "-h");
74
+ var errorId = "".concat(inputId, "-e");
75
+ var labelId = "".concat(inputId, "-l");
76
+ var hasError = !!error;
77
+ var child = React.Children.only(children);
78
+ // The wrapped control is polymorphic (Input/Select/NumberInput/Combobox/…);
79
+ // type only the props Field reads/merges, replacing React's `props: any`.
80
+ var childProps = child.props;
81
+
82
+ // R-I.3 — MERGE the child's existing aria-describedby with our hint/error
83
+ // ids. cloneElement replaces props, so without an explicit merge any
84
+ // consumer-supplied describedby was silently discarded.
85
+ var describedBy = [childProps["aria-describedby"], hint && !hasError ? hintId : null, hasError ? errorId : null].filter(Boolean).join(" ") || undefined;
86
+
87
+ // CC-6 — in group mode the label names the group via aria-labelledby.
88
+ // Merge with any consumer-supplied labelledby so it is never lost.
89
+ var labelledBy = group ? [childProps["aria-labelledby"], label ? labelId : null].filter(Boolean).join(" ") || undefined : undefined;
90
+ var enhanced = /*#__PURE__*/React.cloneElement(child, _objectSpread(_objectSpread({
91
+ id: childProps.id || inputId,
92
+ "aria-invalid": hasError ? "true" : undefined,
93
+ "aria-required": required ? "true" : undefined,
94
+ "aria-describedby": describedBy
95
+ }, group ? {
96
+ "aria-labelledby": labelledBy
97
+ } : {}), {}, {
98
+ // `error` / `disabled` are broadcast by FormControl via context for MUI
99
+ // inputs, but several v2 inputs (NumberInput, Combobox renderInput) are
100
+ // not pure MUI children and read the props directly — keep them explicit.
101
+ error: hasError,
102
+ disabled: disabled || childProps.disabled,
103
+ // Respect the child's explicit fullWidth when defined (e.g. a narrow
104
+ // inline filter input). Only fall back to Field's value when the child
105
+ // hasn't expressed an opinion.
106
+ fullWidth: childProps.fullWidth !== undefined ? childProps.fullWidth : fullWidth
107
+ }));
108
+
109
+ // R-I.6 — RTL-safe margin reset. `marginLeft: 0` only zeroes the LTR
110
+ // inline-start; in [dir="rtl"] the helper picks up MUI's default on
111
+ // the (now physical-right but logical-start) side and is mis-aligned.
112
+ // `marginInlineStart` resets the correct edge in both directions.
113
+ var helperResetSx = {
114
+ marginInlineStart: 0,
115
+ fontSize: "var(--text-xs)"
116
+ };
117
+ var LABEL_SX = {
118
+ display: "flex",
119
+ alignItems: "center",
120
+ gap: "var(--s-1)",
121
+ fontSize: "var(--text-xs, 12px)",
122
+ fontWeight: "var(--fw-semibold, 600)",
123
+ color: "var(--fg-muted)",
124
+ marginBottom: "var(--s-2)",
125
+ "&.Mui-focused": {
126
+ color: "var(--fg-muted)"
127
+ },
128
+ "&.Mui-error": {
129
+ color: "var(--fg-muted)"
130
+ }
131
+ };
132
+
133
+ // Shared label content (text + required marker + optional help adornment).
134
+ var labelContent = /*#__PURE__*/_jsxs(_Fragment, {
135
+ children: [label, required && /*#__PURE__*/_jsx(Box, {
136
+ component: "span",
137
+ "aria-hidden": "true",
138
+ sx: {
139
+ color: "var(--danger)",
140
+ fontWeight: "var(--fw-bold, 700)"
141
+ },
142
+ children: "*"
143
+ }), helpAdornment]
144
+ });
145
+ return /*#__PURE__*/_jsxs(FormControl, {
146
+ error: hasError,
147
+ required: required,
148
+ disabled: disabled,
149
+ fullWidth: fullWidth,
150
+ className: className,
151
+ sx: sx,
152
+ children: [label && (group ?
153
+ /*#__PURE__*/
154
+ // Group mode: render as a <span> carrying an id (no <label for>),
155
+ // referenced by the group's aria-labelledby.
156
+ _jsx(FormLabel, {
157
+ component: "span",
158
+ id: labelId,
159
+ required: false,
160
+ sx: LABEL_SX,
161
+ children: labelContent
162
+ }) : /*#__PURE__*/_jsx(FormLabel, {
163
+ htmlFor: inputId,
164
+ required: false /* we render the * ourselves */,
165
+ sx: LABEL_SX,
166
+ children: labelContent
167
+ })), enhanced, hint && !hasError && /*#__PURE__*/_jsx(FormHelperText, {
168
+ id: hintId,
169
+ sx: _objectSpread(_objectSpread({}, helperResetSx), {}, {
170
+ color: "var(--fg-subtle)"
171
+ }),
172
+ children: hint
173
+ }), hasError &&
174
+ /*#__PURE__*/
175
+ /*
176
+ * Rendered by the shared `FieldError` (gap G-18) rather than an inline
177
+ * `FormHelperText`: R-4.1 MUST requires the icon, and a host with a
178
+ * LIST-level error (a Formik array, an upload slot) has no single
179
+ * control to wrap in a `Field` and needs the exact same renderer
180
+ * standalone. One component, both paths, no drift.
181
+ *
182
+ * `marginTop: var(--s-1)` (4px) replaces `FormHelperText`'s hard-coded
183
+ * 3px default — same optical result, on the spacing scale (R-S.1).
184
+ * Dropping FormHelperText also removed a `color: … !important` that
185
+ * only existed to beat MUI's own `Mui-error` colour.
186
+ */
187
+ _jsx(FieldError, {
188
+ id: errorId,
189
+ sx: {
190
+ marginTop: "var(--s-1)"
191
+ },
192
+ children: error
193
+ })]
194
+ });
195
+ }
196
+ export default Field;
197
+ //# sourceMappingURL=Field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Field.js","names":["React","FormControl","FormLabel","FormHelperText","Box","FieldError","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Field","_ref","label","_ref$required","required","hint","error","htmlFor","_ref$fullWidth","fullWidth","disabled","_ref$group","group","children","helpAdornment","sx","className","reactId","useId","auto","concat","replace","inputId","hintId","errorId","labelId","hasError","child","Children","only","childProps","props","describedBy","filter","Boolean","join","undefined","labelledBy","enhanced","cloneElement","_objectSpread","id","helperResetSx","marginInlineStart","fontSize","LABEL_SX","display","alignItems","gap","fontWeight","color","marginBottom","labelContent","component","marginTop"],"sources":["../../../../src/lib/v2/components/Field.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport FieldError from \"./FieldError\";\r\n\r\n/**\r\n * Field — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Input · Field\".\r\n * Universal wrapper providing label / required marker / hint / error / a11y bindings\r\n * for any form control (Input, Select, Textarea, Autocomplete, Combobox, …).\r\n *\r\n * Strict rules enforced:\r\n * R-I.1 — Label is associated to the control via `htmlFor` / `id`.\r\n * R-I.2 — Required adds the asterisk + `aria-required`.\r\n * R-I.3 — Error: `aria-invalid` + `aria-describedby` linking the message.\r\n * Field MERGES with the child's existing `aria-describedby` so a\r\n * consumer-supplied external help id is never lost. The message\r\n * itself is rendered by the shared `FieldError` primitive, which\r\n * carries the R-4.1 MUST icon (gap G-18) — previously this component\r\n * rendered a bare red `FormHelperText` with no icon, so the canonical\r\n * field wrapper did not satisfy a MUST and every module inherited the\r\n * gap on every form.\r\n * R-I.4 — Validation in `blur`, not `change` (caller's responsibility).\r\n * R-I.6 — Hint visible above error; never both at once.\r\n *\r\n * <Field label=\"Référence\" required hint=\"Format AAAA-IM-NNNNN\" error={errors.ref}>\r\n * <Input value={value} onChange={onChange} />\r\n * </Field>\r\n *\r\n * Grouping controls (RadioGroup / CheckboxGroup) — pass `group`:\r\n * A native `<label htmlFor>` cannot name an ARIA group (only labelable\r\n * elements can be `for`-targeted), so in `group` mode the label is rendered\r\n * as a <span> with an id and the child group is associated via\r\n * `aria-labelledby` instead. The child must forward `aria-labelledby`\r\n * (and `aria-describedby`) onto its `role=\"group\"`/`\"radiogroup\"` element.\r\n *\r\n * <Field label=\"Genre\" group error={errors.genre}>\r\n * <RadioGroup … />\r\n * </Field>\r\n */\r\nexport interface FieldProps {\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n hint?: React.ReactNode | undefined;\r\n error?: React.ReactNode | undefined;\r\n htmlFor?: string | undefined;\r\n fullWidth?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n /**\r\n * The wrapped child is an ARIA group (RadioGroup / CheckboxGroup) rather than\r\n * a single labelable control. Associates the label via `aria-labelledby`\r\n * instead of `htmlFor` / `id`.\r\n */\r\n group?: boolean | undefined;\r\n /** Optional <FieldHelp> element rendered next to the label. */\r\n helpAdornment?: React.ReactNode | undefined;\r\n /** The single form-control element to wrap. */\r\n children: React.ReactElement;\r\n sx?: SxProps<Theme> | undefined;\r\n className?: string | undefined;\r\n}\r\n\r\nfunction Field({\r\n label,\r\n required = false,\r\n hint,\r\n error,\r\n htmlFor,\r\n fullWidth = true,\r\n disabled,\r\n group = false,\r\n children,\r\n helpAdornment, // optional <FieldHelp> element\r\n sx,\r\n className,\r\n}: FieldProps) {\r\n // R-I.1 — useId provides SSR-safe, per-instance, stable IDs.\r\n // Replaces the previous module-scoped counter (`let __uid = 0`) which broke\r\n // hydration and Concurrent Mode.\r\n const reactId = React.useId();\r\n const auto = `pui-${reactId.replace(/:/g, \"\")}`;\r\n const inputId = htmlFor || auto;\r\n const hintId = `${inputId}-h`;\r\n const errorId = `${inputId}-e`;\r\n const labelId = `${inputId}-l`;\r\n const hasError = !!error;\r\n\r\n const child = React.Children.only(children);\r\n // The wrapped control is polymorphic (Input/Select/NumberInput/Combobox/…);\r\n // type only the props Field reads/merges, replacing React's `props: any`.\r\n const childProps = child.props as {\r\n id?: string;\r\n disabled?: boolean;\r\n fullWidth?: boolean;\r\n \"aria-describedby\"?: string;\r\n \"aria-labelledby\"?: string;\r\n };\r\n\r\n // R-I.3 — MERGE the child's existing aria-describedby with our hint/error\r\n // ids. cloneElement replaces props, so without an explicit merge any\r\n // consumer-supplied describedby was silently discarded.\r\n const describedBy = [\r\n childProps[\"aria-describedby\"],\r\n hint && !hasError ? hintId : null,\r\n hasError ? errorId : null,\r\n ].filter(Boolean).join(\" \") || undefined;\r\n\r\n // CC-6 — in group mode the label names the group via aria-labelledby.\r\n // Merge with any consumer-supplied labelledby so it is never lost.\r\n const labelledBy = group\r\n ? [childProps[\"aria-labelledby\"], label ? labelId : null]\r\n .filter(Boolean)\r\n .join(\" \") || undefined\r\n : undefined;\r\n\r\n const enhanced = React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {\r\n id: childProps.id || inputId,\r\n \"aria-invalid\": hasError ? \"true\" : undefined,\r\n \"aria-required\": required ? \"true\" : undefined,\r\n \"aria-describedby\": describedBy,\r\n // Only in group mode — a single labelable control is named by the\r\n // htmlFor/id pair below, not by aria-labelledby.\r\n ...(group ? { \"aria-labelledby\": labelledBy } : {}),\r\n // `error` / `disabled` are broadcast by FormControl via context for MUI\r\n // inputs, but several v2 inputs (NumberInput, Combobox renderInput) are\r\n // not pure MUI children and read the props directly — keep them explicit.\r\n error: hasError,\r\n disabled: disabled || childProps.disabled,\r\n // Respect the child's explicit fullWidth when defined (e.g. a narrow\r\n // inline filter input). Only fall back to Field's value when the child\r\n // hasn't expressed an opinion.\r\n fullWidth: childProps.fullWidth !== undefined ? childProps.fullWidth : fullWidth,\r\n });\r\n\r\n // R-I.6 — RTL-safe margin reset. `marginLeft: 0` only zeroes the LTR\r\n // inline-start; in [dir=\"rtl\"] the helper picks up MUI's default on\r\n // the (now physical-right but logical-start) side and is mis-aligned.\r\n // `marginInlineStart` resets the correct edge in both directions.\r\n const helperResetSx = { marginInlineStart: 0, fontSize: \"var(--text-xs)\" };\r\n\r\n const LABEL_SX = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n fontSize: \"var(--text-xs, 12px)\",\r\n fontWeight: \"var(--fw-semibold, 600)\",\r\n color: \"var(--fg-muted)\",\r\n marginBottom: \"var(--s-2)\",\r\n \"&.Mui-focused\": { color: \"var(--fg-muted)\" },\r\n \"&.Mui-error\": { color: \"var(--fg-muted)\" },\r\n } as const;\r\n\r\n // Shared label content (text + required marker + optional help adornment).\r\n const labelContent = (\r\n <>\r\n {label}\r\n {required && (\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n sx={{ color: \"var(--danger)\", fontWeight: \"var(--fw-bold, 700)\" }}\r\n >\r\n *\r\n </Box>\r\n )}\r\n {helpAdornment}\r\n </>\r\n );\r\n\r\n return (\r\n <FormControl\r\n error={hasError}\r\n required={required}\r\n disabled={disabled}\r\n fullWidth={fullWidth}\r\n className={className}\r\n sx={sx}\r\n >\r\n {label &&\r\n (group ? (\r\n // Group mode: render as a <span> carrying an id (no <label for>),\r\n // referenced by the group's aria-labelledby.\r\n <FormLabel component=\"span\" id={labelId} required={false} sx={LABEL_SX}>\r\n {labelContent}\r\n </FormLabel>\r\n ) : (\r\n <FormLabel htmlFor={inputId} required={false /* we render the * ourselves */} sx={LABEL_SX}>\r\n {labelContent}\r\n </FormLabel>\r\n ))}\r\n\r\n {enhanced}\r\n\r\n {hint && !hasError && (\r\n <FormHelperText\r\n id={hintId}\r\n sx={{ ...helperResetSx, color: \"var(--fg-subtle)\" }}\r\n >\r\n {hint}\r\n </FormHelperText>\r\n )}\r\n\r\n {hasError && (\r\n /*\r\n * Rendered by the shared `FieldError` (gap G-18) rather than an inline\r\n * `FormHelperText`: R-4.1 MUST requires the icon, and a host with a\r\n * LIST-level error (a Formik array, an upload slot) has no single\r\n * control to wrap in a `Field` and needs the exact same renderer\r\n * standalone. One component, both paths, no drift.\r\n *\r\n * `marginTop: var(--s-1)` (4px) replaces `FormHelperText`'s hard-coded\r\n * 3px default — same optical result, on the spacing scale (R-S.1).\r\n * Dropping FormHelperText also removed a `color: … !important` that\r\n * only existed to beat MUI's own `Mui-error` colour.\r\n */\r\n <FieldError id={errorId} sx={{ marginTop: \"var(--s-1)\" }}>\r\n {error}\r\n </FieldError>\r\n )}\r\n </FormControl>\r\n );\r\n}\r\n\r\nexport default Field;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ import * as React from "react";
8
+ import Box from "@mui/material/Box";
9
+ import ErrorIcon from "@mui/icons-material/ErrorOutlined";
10
+
11
+ /**
12
+ * FieldError — Portnet UI v2
13
+ *
14
+ * Charter R-4.1 MUST: « Toute erreur de champ s'affiche SOUS le champ, en rouge,
15
+ * AVEC ICÔNE, max 1 phrase, verbe d'action. »
16
+ *
17
+ * ─────────────────────────────────────────────────────────────────────────────
18
+ * WHY THIS BELONGS IN THE LIBRARY (capability gap G-18)
19
+ *
20
+ * Two defects closed at once, and they were the same defect seen from both ends.
21
+ *
22
+ * 1. `Field` rendered its error message as a bare `FormHelperText` — red, under
23
+ * the field, one sentence, and NO ICON. R-4.1 is a MUST and the canonical
24
+ * field wrapper of the design system did not satisfy it, so every module
25
+ * inherited the gap on every form.
26
+ *
27
+ * 2. A field error is not always attached to a `Field`. A LIST-level error
28
+ * (`errors.articles`, `errors.autorisationPdf` — a Formik array or an upload
29
+ * slot) has no single control to wrap, and `Field` requires exactly one
30
+ * `children` element. Hosts therefore hand-rolled the block: addpe-fe's
31
+ * `InlineFieldAlert` reimplemented the icon + `role="alert"` + danger token
32
+ * recipe locally — and, ironically, was MORE charter-compliant than the
33
+ * shared component it could not use.
34
+ *
35
+ * Owning the renderer here means the two paths cannot drift: the error a user
36
+ * sees under an `<Input>` and the one under an articles table are the same
37
+ * component.
38
+ * ─────────────────────────────────────────────────────────────────────────────
39
+ *
40
+ * Used INSIDE `Field` (it supplies `id`, wired to the control's
41
+ * `aria-describedby`), and standalone by a host:
42
+ *
43
+ * {typeof errors.articles === "string" && (
44
+ * <FieldError sx={{ marginTop: "var(--s-2)" }}>{errors.articles}</FieldError>
45
+ * )}
46
+ *
47
+ * Accessibility
48
+ * - `role="alert"`: the element MOUNTS when the error appears, which is what
49
+ * makes a screen reader announce it. Do not render it permanently with empty
50
+ * content — an always-present live region announces nothing on change.
51
+ * - The icon is `aria-hidden`: it is redundant with the message, and R-Ar.2
52
+ * forbids a decorative icon carrying an accessible name.
53
+ * - Iconography is deliberately the SAME as `Banner`'s error variant
54
+ * (`ErrorOutlined`), so "something is wrong" reads identically whether it
55
+ * surfaces inline or in a banner.
56
+ *
57
+ * Colour: the message TEXT takes `--danger-fg`, the icon takes `--danger`. That
58
+ * split is not cosmetic and it is the rule `KPICard` already documents for its
59
+ * delta indicator: `--danger` is the VIVID UI colour, held to WCAG 1.4.11's 3:1
60
+ * non-text threshold, while `--danger-fg` is the TEXT colour, held to 1.4.3's
61
+ * 4.5:1. Using `--danger` for the message would render it at a ratio calibrated
62
+ * for icons and borders — which is what the module-local `InlineFieldAlert` this
63
+ * component replaced did, and what `Field`'s own error text did before it
64
+ * delegated here. Promoting that mistake into a shared component would have made
65
+ * it fleet-wide, on every field error of every module.
66
+ *
67
+ * No `!important` — the previous `FormHelperText` needed one to beat MUI's own
68
+ * `Mui-error` colour; rendering a plain Box removes the specificity fight.
69
+ */
70
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
71
+ function FieldError(_ref) {
72
+ var children = _ref.children,
73
+ id = _ref.id,
74
+ sx = _ref.sx;
75
+ return /*#__PURE__*/_jsxs(Box, {
76
+ role: "alert",
77
+ id: id,
78
+ sx: _objectSpread({
79
+ display: "flex",
80
+ // `flex-start`, not `center`: a message that wraps to two lines must
81
+ // keep its icon aligned with the FIRST line, not vertically centred
82
+ // against the whole block.
83
+ alignItems: "flex-start",
84
+ gap: "var(--s-1)",
85
+ // WCAG 1.4.3 — message text at the 4.5:1-calibrated token, NOT `--danger`
86
+ // (see the colour note in this file's header).
87
+ color: "var(--danger-fg)",
88
+ fontSize: "var(--text-xs)",
89
+ fontWeight: "var(--fw-medium)",
90
+ lineHeight: "var(--lh-normal)",
91
+ // RTL-safe: resets the logical inline-start edge, so the message is
92
+ // flush with the control in both directions.
93
+ marginInlineStart: 0
94
+ }, sx),
95
+ children: [/*#__PURE__*/_jsx(ErrorIcon, {
96
+ "aria-hidden": "true"
97
+ /* Test hook — the glyph has no role and no accessible name by design
98
+ * (R-Ar.2), so no semantic query reaches it. Same sanctioned escape
99
+ * hatch as FileCard's filecard-icon, and it guards the same contract:
100
+ * a decorative icon must not be announced. */,
101
+ "data-testid": "fielderror-icon",
102
+ sx: {
103
+ // --text-h3 is the 16px token; matches the message's optical scale.
104
+ fontSize: "var(--text-h3)",
105
+ flexShrink: 0,
106
+ // WCAG 1.4.11 — the glyph stays VIVID at the 3:1 non-text threshold,
107
+ // which is the whole point of keeping two danger tokens.
108
+ color: "var(--danger)"
109
+ }
110
+ // Optical alignment of the glyph with the first text line. Same
111
+ // rationale (and same 1px order of magnitude) as Banner's leading icon:
112
+ // a deliberate non-token value, not a spacing-scale concern.
113
+ ,
114
+ style: {
115
+ marginTop: 1
116
+ }
117
+ }), /*#__PURE__*/_jsx(Box, {
118
+ component: "span",
119
+ children: children
120
+ })]
121
+ });
122
+ }
123
+ export default FieldError;
124
+ //# sourceMappingURL=FieldError.js.map