@portnet/ui 5.0.28 → 6.0.0

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 (736) hide show
  1. package/CHANGELOG.md +524 -0
  2. package/README.md +101 -38
  3. package/dist/index.d.ts +59 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +174 -203
  6. package/dist/index.js.map +1 -0
  7. package/dist/v2/__tests__/MobileRowCard.test.js +337 -0
  8. package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -0
  9. package/dist/v2/__tests__/apiError.test.js +182 -0
  10. package/dist/v2/__tests__/apiError.test.js.map +1 -0
  11. package/dist/v2/__tests__/banned-patterns.test.js +272 -0
  12. package/dist/v2/__tests__/banned-patterns.test.js.map +1 -0
  13. package/dist/v2/__tests__/contrast-palette.test.js +225 -0
  14. package/dist/v2/__tests__/contrast-palette.test.js.map +1 -0
  15. package/dist/v2/__tests__/cssVariables.test.js +158 -0
  16. package/dist/v2/__tests__/cssVariables.test.js.map +1 -0
  17. package/dist/v2/__tests__/labels-merge.test.js +153 -0
  18. package/dist/v2/__tests__/labels-merge.test.js.map +1 -0
  19. package/dist/v2/__tests__/locale-fallback.test.js +111 -0
  20. package/dist/v2/__tests__/locale-fallback.test.js.map +1 -0
  21. package/dist/v2/__tests__/useFocusTrap.test.js +517 -0
  22. package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -0
  23. package/dist/v2/components/Accordion.d.ts +56 -0
  24. package/dist/v2/components/Accordion.d.ts.map +1 -0
  25. package/dist/v2/components/Accordion.js +238 -0
  26. package/dist/v2/components/Accordion.js.map +1 -0
  27. package/dist/v2/components/ActionStrip.d.ts +67 -0
  28. package/dist/v2/components/ActionStrip.d.ts.map +1 -0
  29. package/dist/v2/components/ActionStrip.js +154 -0
  30. package/dist/v2/components/ActionStrip.js.map +1 -0
  31. package/dist/v2/components/Banner.d.ts +49 -0
  32. package/dist/v2/components/Banner.d.ts.map +1 -0
  33. package/dist/v2/components/Banner.js +183 -0
  34. package/dist/v2/components/Banner.js.map +1 -0
  35. package/dist/v2/components/Busy.d.ts +18 -0
  36. package/dist/v2/components/Busy.d.ts.map +1 -0
  37. package/dist/v2/components/Busy.js +104 -0
  38. package/dist/v2/components/Busy.js.map +1 -0
  39. package/dist/v2/components/Button.d.ts +36 -0
  40. package/dist/v2/components/Button.d.ts.map +1 -0
  41. package/dist/v2/components/Button.js +122 -0
  42. package/dist/v2/components/Button.js.map +1 -0
  43. package/dist/v2/components/CategoryTag.d.ts +45 -0
  44. package/dist/v2/components/CategoryTag.d.ts.map +1 -0
  45. package/dist/v2/components/CategoryTag.js +89 -0
  46. package/dist/v2/components/CategoryTag.js.map +1 -0
  47. package/dist/v2/components/Checkbox.d.ts +59 -0
  48. package/dist/v2/components/Checkbox.d.ts.map +1 -0
  49. package/dist/v2/components/Checkbox.js +134 -0
  50. package/dist/v2/components/Checkbox.js.map +1 -0
  51. package/dist/v2/components/Chip.d.ts +48 -0
  52. package/dist/v2/components/Chip.d.ts.map +1 -0
  53. package/dist/v2/components/Chip.js +131 -0
  54. package/dist/v2/components/Chip.js.map +1 -0
  55. package/dist/v2/components/Combobox.d.ts +134 -0
  56. package/dist/v2/components/Combobox.d.ts.map +1 -0
  57. package/dist/v2/components/Combobox.js +399 -0
  58. package/dist/v2/components/Combobox.js.map +1 -0
  59. package/dist/v2/components/CommandPalette.d.ts +36 -0
  60. package/dist/v2/components/CommandPalette.d.ts.map +1 -0
  61. package/dist/v2/components/CommandPalette.js +672 -0
  62. package/dist/v2/components/CommandPalette.js.map +1 -0
  63. package/dist/v2/components/ConfirmDialog.d.ts +23 -0
  64. package/dist/v2/components/ConfirmDialog.d.ts.map +1 -0
  65. package/dist/v2/components/ConfirmDialog.js +150 -0
  66. package/dist/v2/components/ConfirmDialog.js.map +1 -0
  67. package/dist/v2/components/DatePicker.d.ts +21 -0
  68. package/dist/v2/components/DatePicker.d.ts.map +1 -0
  69. package/dist/v2/components/DatePicker.js +207 -0
  70. package/dist/v2/components/DatePicker.js.map +1 -0
  71. package/dist/v2/components/DateRangePicker.d.ts +81 -0
  72. package/dist/v2/components/DateRangePicker.d.ts.map +1 -0
  73. package/dist/v2/components/DateRangePicker.js +295 -0
  74. package/dist/v2/components/DateRangePicker.js.map +1 -0
  75. package/dist/v2/components/DateTimePicker.d.ts +21 -0
  76. package/dist/v2/components/DateTimePicker.d.ts.map +1 -0
  77. package/dist/v2/components/DateTimePicker.js +189 -0
  78. package/dist/v2/components/DateTimePicker.js.map +1 -0
  79. package/dist/v2/components/Drawer.d.ts +34 -0
  80. package/dist/v2/components/Drawer.d.ts.map +1 -0
  81. package/dist/v2/components/Drawer.js +339 -0
  82. package/dist/v2/components/Drawer.js.map +1 -0
  83. package/dist/v2/components/Dropzone.d.ts +150 -0
  84. package/dist/v2/components/Dropzone.d.ts.map +1 -0
  85. package/dist/v2/components/Dropzone.js +539 -0
  86. package/dist/v2/components/Dropzone.js.map +1 -0
  87. package/dist/v2/components/EmptyState.d.ts +36 -0
  88. package/dist/v2/components/EmptyState.d.ts.map +1 -0
  89. package/dist/v2/components/EmptyState.js +112 -0
  90. package/dist/v2/components/EmptyState.js.map +1 -0
  91. package/dist/v2/components/FavoriteToggle.d.ts +22 -0
  92. package/dist/v2/components/FavoriteToggle.d.ts.map +1 -0
  93. package/dist/v2/components/FavoriteToggle.js +134 -0
  94. package/dist/v2/components/FavoriteToggle.js.map +1 -0
  95. package/dist/v2/components/Field.d.ts +58 -0
  96. package/dist/v2/components/Field.d.ts.map +1 -0
  97. package/dist/v2/components/Field.js +186 -0
  98. package/dist/v2/components/Field.js.map +1 -0
  99. package/dist/v2/components/FieldHelp.d.ts +54 -0
  100. package/dist/v2/components/FieldHelp.d.ts.map +1 -0
  101. package/dist/v2/components/FieldHelp.js +209 -0
  102. package/dist/v2/components/FieldHelp.js.map +1 -0
  103. package/dist/v2/components/FilterTab.d.ts +35 -0
  104. package/dist/v2/components/FilterTab.d.ts.map +1 -0
  105. package/dist/v2/components/FilterTab.js +144 -0
  106. package/dist/v2/components/FilterTab.js.map +1 -0
  107. package/dist/v2/components/ForbiddenPage.d.ts +40 -0
  108. package/dist/v2/components/ForbiddenPage.d.ts.map +1 -0
  109. package/dist/v2/components/ForbiddenPage.js +81 -0
  110. package/dist/v2/components/ForbiddenPage.js.map +1 -0
  111. package/dist/v2/components/FormGrid.d.ts +76 -0
  112. package/dist/v2/components/FormGrid.d.ts.map +1 -0
  113. package/dist/v2/components/FormGrid.js +177 -0
  114. package/dist/v2/components/FormGrid.js.map +1 -0
  115. package/dist/v2/components/FormikDisplay.d.ts +38 -0
  116. package/dist/v2/components/FormikDisplay.d.ts.map +1 -0
  117. package/dist/v2/components/FormikDisplay.js +125 -0
  118. package/dist/v2/components/FormikDisplay.js.map +1 -0
  119. package/dist/v2/components/Input.d.ts +62 -0
  120. package/dist/v2/components/Input.d.ts.map +1 -0
  121. package/dist/v2/components/Input.js +115 -0
  122. package/dist/v2/components/Input.js.map +1 -0
  123. package/dist/v2/components/KPICard.d.ts +22 -0
  124. package/dist/v2/components/KPICard.d.ts.map +1 -0
  125. package/dist/v2/components/KPICard.js +205 -0
  126. package/dist/v2/components/KPICard.js.map +1 -0
  127. package/dist/v2/components/KV.d.ts +25 -0
  128. package/dist/v2/components/KV.d.ts.map +1 -0
  129. package/dist/v2/components/KV.js +82 -0
  130. package/dist/v2/components/KV.js.map +1 -0
  131. package/dist/v2/components/KVGrid.d.ts +44 -0
  132. package/dist/v2/components/KVGrid.d.ts.map +1 -0
  133. package/dist/v2/components/KVGrid.js +73 -0
  134. package/dist/v2/components/KVGrid.js.map +1 -0
  135. package/dist/v2/components/Layout.d.ts +78 -0
  136. package/dist/v2/components/Layout.d.ts.map +1 -0
  137. package/dist/v2/components/Layout.js +284 -0
  138. package/dist/v2/components/Layout.js.map +1 -0
  139. package/dist/v2/components/MobileRowCard.d.ts +63 -0
  140. package/dist/v2/components/MobileRowCard.d.ts.map +1 -0
  141. package/dist/v2/components/MobileRowCard.js +321 -0
  142. package/dist/v2/components/MobileRowCard.js.map +1 -0
  143. package/dist/v2/components/Modal.d.ts +21 -0
  144. package/dist/v2/components/Modal.d.ts.map +1 -0
  145. package/dist/v2/components/Modal.js +281 -0
  146. package/dist/v2/components/Modal.js.map +1 -0
  147. package/dist/v2/components/NetworkErrorPage.d.ts +11 -0
  148. package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -0
  149. package/dist/v2/components/NetworkErrorPage.js +86 -0
  150. package/dist/v2/components/NetworkErrorPage.js.map +1 -0
  151. package/dist/v2/components/NotFoundPage.d.ts +9 -0
  152. package/dist/v2/components/NotFoundPage.d.ts.map +1 -0
  153. package/dist/v2/components/NotFoundPage.js +66 -0
  154. package/dist/v2/components/NotFoundPage.js.map +1 -0
  155. package/dist/v2/components/NumberInput.d.ts +83 -0
  156. package/dist/v2/components/NumberInput.d.ts.map +1 -0
  157. package/dist/v2/components/NumberInput.js +316 -0
  158. package/dist/v2/components/NumberInput.js.map +1 -0
  159. package/dist/v2/components/OverflowMenu.d.ts +55 -0
  160. package/dist/v2/components/OverflowMenu.d.ts.map +1 -0
  161. package/dist/v2/components/OverflowMenu.js +196 -0
  162. package/dist/v2/components/OverflowMenu.js.map +1 -0
  163. package/dist/v2/components/PdfViewer.d.ts +56 -0
  164. package/dist/v2/components/PdfViewer.d.ts.map +1 -0
  165. package/dist/v2/components/PdfViewer.js +132 -0
  166. package/dist/v2/components/PdfViewer.js.map +1 -0
  167. package/dist/v2/components/ProgressBar.d.ts +53 -0
  168. package/dist/v2/components/ProgressBar.d.ts.map +1 -0
  169. package/dist/v2/components/ProgressBar.js +209 -0
  170. package/dist/v2/components/ProgressBar.js.map +1 -0
  171. package/dist/v2/components/Radio.d.ts +78 -0
  172. package/dist/v2/components/Radio.d.ts.map +1 -0
  173. package/dist/v2/components/Radio.js +238 -0
  174. package/dist/v2/components/Radio.js.map +1 -0
  175. package/dist/v2/components/SectionHeader.d.ts +53 -0
  176. package/dist/v2/components/SectionHeader.d.ts.map +1 -0
  177. package/dist/v2/components/SectionHeader.js +140 -0
  178. package/dist/v2/components/SectionHeader.js.map +1 -0
  179. package/dist/v2/components/Segmented.d.ts +61 -0
  180. package/dist/v2/components/Segmented.d.ts.map +1 -0
  181. package/dist/v2/components/Segmented.js +261 -0
  182. package/dist/v2/components/Segmented.js.map +1 -0
  183. package/dist/v2/components/Select.d.ts +72 -0
  184. package/dist/v2/components/Select.d.ts.map +1 -0
  185. package/dist/v2/components/Select.js +382 -0
  186. package/dist/v2/components/Select.js.map +1 -0
  187. package/dist/v2/components/ServerErrorPage.d.ts +11 -0
  188. package/dist/v2/components/ServerErrorPage.d.ts.map +1 -0
  189. package/dist/v2/components/ServerErrorPage.js +82 -0
  190. package/dist/v2/components/ServerErrorPage.js.map +1 -0
  191. package/dist/v2/components/Skeleton.d.ts +56 -0
  192. package/dist/v2/components/Skeleton.d.ts.map +1 -0
  193. package/dist/v2/components/Skeleton.js +281 -0
  194. package/dist/v2/components/Skeleton.js.map +1 -0
  195. package/dist/v2/components/SkipLink.d.ts +30 -0
  196. package/dist/v2/components/SkipLink.d.ts.map +1 -0
  197. package/dist/v2/components/SkipLink.js +58 -0
  198. package/dist/v2/components/SkipLink.js.map +1 -0
  199. package/dist/v2/components/Spinner.d.ts +40 -0
  200. package/dist/v2/components/Spinner.d.ts.map +1 -0
  201. package/dist/v2/components/Spinner.js +76 -0
  202. package/dist/v2/components/Spinner.js.map +1 -0
  203. package/dist/v2/components/Status.d.ts +42 -0
  204. package/dist/v2/components/Status.d.ts.map +1 -0
  205. package/dist/v2/components/Status.js +71 -0
  206. package/dist/v2/components/Status.js.map +1 -0
  207. package/dist/v2/components/Stepper.d.ts +136 -0
  208. package/dist/v2/components/Stepper.d.ts.map +1 -0
  209. package/dist/v2/components/Stepper.js +415 -0
  210. package/dist/v2/components/Stepper.js.map +1 -0
  211. package/dist/v2/components/Switch.d.ts +30 -0
  212. package/dist/v2/components/Switch.d.ts.map +1 -0
  213. package/dist/v2/components/Switch.js +136 -0
  214. package/dist/v2/components/Switch.js.map +1 -0
  215. package/dist/v2/components/Tabs.d.ts +49 -0
  216. package/dist/v2/components/Tabs.d.ts.map +1 -0
  217. package/dist/v2/components/Tabs.js +160 -0
  218. package/dist/v2/components/Tabs.js.map +1 -0
  219. package/dist/v2/components/TelInput.d.ts +33 -0
  220. package/dist/v2/components/TelInput.d.ts.map +1 -0
  221. package/dist/v2/components/TelInput.js +282 -0
  222. package/dist/v2/components/TelInput.js.map +1 -0
  223. package/dist/v2/components/Textarea.d.ts +23 -0
  224. package/dist/v2/components/Textarea.d.ts.map +1 -0
  225. package/dist/v2/components/Textarea.js +80 -0
  226. package/dist/v2/components/Textarea.js.map +1 -0
  227. package/dist/v2/components/TimePicker.d.ts +21 -0
  228. package/dist/v2/components/TimePicker.d.ts.map +1 -0
  229. package/dist/v2/components/TimePicker.js +141 -0
  230. package/dist/v2/components/TimePicker.js.map +1 -0
  231. package/dist/v2/components/Toast.d.ts +32 -0
  232. package/dist/v2/components/Toast.d.ts.map +1 -0
  233. package/dist/v2/components/Toast.js +384 -0
  234. package/dist/v2/components/Toast.js.map +1 -0
  235. package/dist/v2/components/Tooltip.d.ts +9 -0
  236. package/dist/v2/components/Tooltip.d.ts.map +1 -0
  237. package/dist/v2/components/Tooltip.js +169 -0
  238. package/dist/v2/components/Tooltip.js.map +1 -0
  239. package/dist/v2/components/_ErrorPageBody.d.ts +48 -0
  240. package/dist/v2/components/_ErrorPageBody.d.ts.map +1 -0
  241. package/dist/v2/components/_ErrorPageBody.js +96 -0
  242. package/dist/v2/components/_ErrorPageBody.js.map +1 -0
  243. package/dist/v2/components/_pickerShared.d.ts +47 -0
  244. package/dist/v2/components/_pickerShared.d.ts.map +1 -0
  245. package/dist/v2/components/_pickerShared.js +68 -0
  246. package/dist/v2/components/_pickerShared.js.map +1 -0
  247. package/dist/v2/components/index.d.ts +83 -0
  248. package/dist/v2/components/index.d.ts.map +1 -0
  249. package/dist/v2/components/index.js +477 -0
  250. package/dist/v2/components/index.js.map +1 -0
  251. package/dist/v2/hooks/index.d.ts +11 -0
  252. package/dist/v2/hooks/index.d.ts.map +1 -0
  253. package/dist/v2/hooks/index.js +85 -0
  254. package/dist/v2/hooks/index.js.map +1 -0
  255. package/dist/v2/hooks/useDelayedFlag.d.ts +22 -0
  256. package/dist/v2/hooks/useDelayedFlag.d.ts.map +1 -0
  257. package/dist/v2/hooks/useDelayedFlag.js +60 -0
  258. package/dist/v2/hooks/useDelayedFlag.js.map +1 -0
  259. package/dist/v2/hooks/useDensity.d.ts +23 -0
  260. package/dist/v2/hooks/useDensity.d.ts.map +1 -0
  261. package/dist/v2/hooks/useDensity.js +124 -0
  262. package/dist/v2/hooks/useDensity.js.map +1 -0
  263. package/dist/v2/hooks/useFocusFirstError.d.ts +121 -0
  264. package/dist/v2/hooks/useFocusFirstError.d.ts.map +1 -0
  265. package/dist/v2/hooks/useFocusFirstError.js +203 -0
  266. package/dist/v2/hooks/useFocusFirstError.js.map +1 -0
  267. package/dist/v2/hooks/useFocusTrap.d.ts +3 -0
  268. package/dist/v2/hooks/useFocusTrap.d.ts.map +1 -0
  269. package/dist/v2/hooks/useFocusTrap.js +207 -0
  270. package/dist/v2/hooks/useFocusTrap.js.map +1 -0
  271. package/dist/v2/hooks/useFormAutoSave.d.ts +42 -0
  272. package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -0
  273. package/dist/v2/hooks/useFormAutoSave.js +186 -0
  274. package/dist/v2/hooks/useFormAutoSave.js.map +1 -0
  275. package/dist/v2/hooks/useFormCompletionProgress.d.ts +52 -0
  276. package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -0
  277. package/dist/v2/hooks/useFormCompletionProgress.js +136 -0
  278. package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -0
  279. package/dist/v2/hooks/useResolvedDensity.d.ts +31 -0
  280. package/dist/v2/hooks/useResolvedDensity.d.ts.map +1 -0
  281. package/dist/v2/hooks/useResolvedDensity.js +50 -0
  282. package/dist/v2/hooks/useResolvedDensity.js.map +1 -0
  283. package/dist/v2/hooks/useSortedRows.d.ts +25 -0
  284. package/dist/v2/hooks/useSortedRows.d.ts.map +1 -0
  285. package/dist/v2/hooks/useSortedRows.js +38 -0
  286. package/dist/v2/hooks/useSortedRows.js.map +1 -0
  287. package/dist/v2/hooks/useTabLoading.d.ts +39 -0
  288. package/dist/v2/hooks/useTabLoading.d.ts.map +1 -0
  289. package/dist/v2/hooks/useTabLoading.js +85 -0
  290. package/dist/v2/hooks/useTabLoading.js.map +1 -0
  291. package/dist/v2/index.d.ts +115 -0
  292. package/dist/v2/index.d.ts.map +1 -0
  293. package/dist/v2/index.js +1127 -0
  294. package/dist/v2/index.js.map +1 -0
  295. package/dist/v2/modalContext.d.ts +96 -0
  296. package/dist/v2/modalContext.d.ts.map +1 -0
  297. package/dist/v2/modalContext.js +113 -0
  298. package/dist/v2/modalContext.js.map +1 -0
  299. package/dist/v2/models/favorite.d.ts +14 -0
  300. package/dist/v2/models/favorite.d.ts.map +1 -0
  301. package/dist/v2/models/favorite.js +6 -0
  302. package/dist/v2/models/favorite.js.map +1 -0
  303. package/dist/v2/models/index.d.ts +11 -0
  304. package/dist/v2/models/index.d.ts.map +1 -0
  305. package/dist/v2/models/index.js +50 -0
  306. package/dist/v2/models/index.js.map +1 -0
  307. package/dist/v2/models/personalization.d.ts +65 -0
  308. package/dist/v2/models/personalization.d.ts.map +1 -0
  309. package/dist/v2/models/personalization.js +6 -0
  310. package/dist/v2/models/personalization.js.map +1 -0
  311. package/dist/v2/models/referentiel.d.ts +67 -0
  312. package/dist/v2/models/referentiel.d.ts.map +1 -0
  313. package/dist/v2/models/referentiel.js +6 -0
  314. package/dist/v2/models/referentiel.js.map +1 -0
  315. package/dist/v2/models/savedFilter.d.ts +22 -0
  316. package/dist/v2/models/savedFilter.d.ts.map +1 -0
  317. package/dist/v2/models/savedFilter.js +6 -0
  318. package/dist/v2/models/savedFilter.js.map +1 -0
  319. package/dist/v2/patterns/ActionBar.d.ts +137 -0
  320. package/dist/v2/patterns/ActionBar.d.ts.map +1 -0
  321. package/dist/v2/patterns/ActionBar.js +601 -0
  322. package/dist/v2/patterns/ActionBar.js.map +1 -0
  323. package/dist/v2/patterns/BulkActionBar.d.ts +63 -0
  324. package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -0
  325. package/dist/v2/patterns/BulkActionBar.js +153 -0
  326. package/dist/v2/patterns/BulkActionBar.js.map +1 -0
  327. package/dist/v2/patterns/CollapsibleDataGrid.d.ts +62 -0
  328. package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -0
  329. package/dist/v2/patterns/CollapsibleDataGrid.js +306 -0
  330. package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -0
  331. package/dist/v2/patterns/ColumnsToggle.d.ts +55 -0
  332. package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -0
  333. package/dist/v2/patterns/ColumnsToggle.js +314 -0
  334. package/dist/v2/patterns/ColumnsToggle.js.map +1 -0
  335. package/dist/v2/patterns/DataGrid.d.ts +7 -0
  336. package/dist/v2/patterns/DataGrid.d.ts.map +1 -0
  337. package/dist/v2/patterns/DataGrid.js +834 -0
  338. package/dist/v2/patterns/DataGrid.js.map +1 -0
  339. package/dist/v2/patterns/DataGridSettingsMenu.d.ts +68 -0
  340. package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -0
  341. package/dist/v2/patterns/DataGridSettingsMenu.js +381 -0
  342. package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -0
  343. package/dist/v2/patterns/DataGridToolbar.d.ts +81 -0
  344. package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -0
  345. package/dist/v2/patterns/DataGridToolbar.js +255 -0
  346. package/dist/v2/patterns/DataGridToolbar.js.map +1 -0
  347. package/dist/v2/patterns/DataGridVirtualized.d.ts +76 -0
  348. package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -0
  349. package/dist/v2/patterns/DataGridVirtualized.js +528 -0
  350. package/dist/v2/patterns/DataGridVirtualized.js.map +1 -0
  351. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +46 -0
  352. package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -0
  353. package/dist/v2/patterns/DeleteResourceConfirmDialog.js +77 -0
  354. package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
  355. package/dist/v2/patterns/FavoriteColumn.d.ts +72 -0
  356. package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -0
  357. package/dist/v2/patterns/FavoriteColumn.js +171 -0
  358. package/dist/v2/patterns/FavoriteColumn.js.map +1 -0
  359. package/dist/v2/patterns/FavoritesFilter.d.ts +51 -0
  360. package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -0
  361. package/dist/v2/patterns/FavoritesFilter.js +97 -0
  362. package/dist/v2/patterns/FavoritesFilter.js.map +1 -0
  363. package/dist/v2/patterns/FormErrorSummary.d.ts +39 -0
  364. package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -0
  365. package/dist/v2/patterns/FormErrorSummary.js +111 -0
  366. package/dist/v2/patterns/FormErrorSummary.js.map +1 -0
  367. package/dist/v2/patterns/FormPageShell.d.ts +55 -0
  368. package/dist/v2/patterns/FormPageShell.d.ts.map +1 -0
  369. package/dist/v2/patterns/FormPageShell.js +133 -0
  370. package/dist/v2/patterns/FormPageShell.js.map +1 -0
  371. package/dist/v2/patterns/FormSection.d.ts +53 -0
  372. package/dist/v2/patterns/FormSection.d.ts.map +1 -0
  373. package/dist/v2/patterns/FormSection.js +162 -0
  374. package/dist/v2/patterns/FormSection.js.map +1 -0
  375. package/dist/v2/patterns/FormikCheckboxGroup.d.ts +51 -0
  376. package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -0
  377. package/dist/v2/patterns/FormikCheckboxGroup.js +117 -0
  378. package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -0
  379. package/dist/v2/patterns/FormikCombobox.d.ts +43 -0
  380. package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -0
  381. package/dist/v2/patterns/FormikCombobox.js +121 -0
  382. package/dist/v2/patterns/FormikCombobox.js.map +1 -0
  383. package/dist/v2/patterns/FormikDatePicker.d.ts +87 -0
  384. package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -0
  385. package/dist/v2/patterns/FormikDatePicker.js +177 -0
  386. package/dist/v2/patterns/FormikDatePicker.js.map +1 -0
  387. package/dist/v2/patterns/FormikErrorFocus.d.ts +59 -0
  388. package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -0
  389. package/dist/v2/patterns/FormikErrorFocus.js +83 -0
  390. package/dist/v2/patterns/FormikErrorFocus.js.map +1 -0
  391. package/dist/v2/patterns/FormikFile.d.ts +43 -0
  392. package/dist/v2/patterns/FormikFile.d.ts.map +1 -0
  393. package/dist/v2/patterns/FormikFile.js +156 -0
  394. package/dist/v2/patterns/FormikFile.js.map +1 -0
  395. package/dist/v2/patterns/FormikInput.d.ts +37 -0
  396. package/dist/v2/patterns/FormikInput.d.ts.map +1 -0
  397. package/dist/v2/patterns/FormikInput.js +87 -0
  398. package/dist/v2/patterns/FormikInput.js.map +1 -0
  399. package/dist/v2/patterns/FormikReferentielField.d.ts +33 -0
  400. package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -0
  401. package/dist/v2/patterns/FormikReferentielField.js +124 -0
  402. package/dist/v2/patterns/FormikReferentielField.js.map +1 -0
  403. package/dist/v2/patterns/FormikSelect.d.ts +40 -0
  404. package/dist/v2/patterns/FormikSelect.d.ts.map +1 -0
  405. package/dist/v2/patterns/FormikSelect.js +139 -0
  406. package/dist/v2/patterns/FormikSelect.js.map +1 -0
  407. package/dist/v2/patterns/FormikTextarea.d.ts +31 -0
  408. package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -0
  409. package/dist/v2/patterns/FormikTextarea.js +84 -0
  410. package/dist/v2/patterns/FormikTextarea.js.map +1 -0
  411. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +44 -0
  412. package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -0
  413. package/dist/v2/patterns/KeyboardShortcutsHelp.js +207 -0
  414. package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
  415. package/dist/v2/patterns/NetworkErrorBanner.d.ts +26 -0
  416. package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -0
  417. package/dist/v2/patterns/NetworkErrorBanner.js +82 -0
  418. package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -0
  419. package/dist/v2/patterns/PageContent.d.ts +40 -0
  420. package/dist/v2/patterns/PageContent.d.ts.map +1 -0
  421. package/dist/v2/patterns/PageContent.js +69 -0
  422. package/dist/v2/patterns/PageContent.js.map +1 -0
  423. package/dist/v2/patterns/ReferentielField.d.ts +118 -0
  424. package/dist/v2/patterns/ReferentielField.d.ts.map +1 -0
  425. package/dist/v2/patterns/ReferentielField.js +617 -0
  426. package/dist/v2/patterns/ReferentielField.js.map +1 -0
  427. package/dist/v2/patterns/SaveFilterDialog.d.ts +68 -0
  428. package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -0
  429. package/dist/v2/patterns/SaveFilterDialog.js +203 -0
  430. package/dist/v2/patterns/SaveFilterDialog.js.map +1 -0
  431. package/dist/v2/patterns/SavedFiltersMenu.d.ts +74 -0
  432. package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -0
  433. package/dist/v2/patterns/SavedFiltersMenu.js +412 -0
  434. package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -0
  435. package/dist/v2/patterns/SkeletonPageShell.d.ts +76 -0
  436. package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -0
  437. package/dist/v2/patterns/SkeletonPageShell.js +347 -0
  438. package/dist/v2/patterns/SkeletonPageShell.js.map +1 -0
  439. package/dist/v2/patterns/SortableHeader.d.ts +47 -0
  440. package/dist/v2/patterns/SortableHeader.d.ts.map +1 -0
  441. package/dist/v2/patterns/SortableHeader.js +193 -0
  442. package/dist/v2/patterns/SortableHeader.js.map +1 -0
  443. package/dist/v2/patterns/Tour.d.ts +55 -0
  444. package/dist/v2/patterns/Tour.d.ts.map +1 -0
  445. package/dist/v2/patterns/Tour.js +473 -0
  446. package/dist/v2/patterns/Tour.js.map +1 -0
  447. package/dist/v2/patterns/_dataGridShared.d.ts +125 -0
  448. package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -0
  449. package/dist/v2/patterns/_dataGridShared.js +406 -0
  450. package/dist/v2/patterns/_dataGridShared.js.map +1 -0
  451. package/dist/v2/patterns/_sort.d.ts +22 -0
  452. package/dist/v2/patterns/_sort.d.ts.map +1 -0
  453. package/dist/v2/patterns/_sort.js +118 -0
  454. package/dist/v2/patterns/_sort.js.map +1 -0
  455. package/dist/v2/patterns/_useColumnReorder.d.ts +69 -0
  456. package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -0
  457. package/dist/v2/patterns/_useColumnReorder.js +264 -0
  458. package/dist/v2/patterns/_useColumnReorder.js.map +1 -0
  459. package/dist/v2/patterns/_useColumnResize.d.ts +49 -0
  460. package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -0
  461. package/dist/v2/patterns/_useColumnResize.js +198 -0
  462. package/dist/v2/patterns/_useColumnResize.js.map +1 -0
  463. package/dist/v2/patterns/index.d.ts +62 -0
  464. package/dist/v2/patterns/index.d.ts.map +1 -0
  465. package/dist/v2/patterns/index.js +246 -0
  466. package/dist/v2/patterns/index.js.map +1 -0
  467. package/dist/v2/personalization/PersonalizationProvider.d.ts +80 -0
  468. package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -0
  469. package/dist/v2/personalization/PersonalizationProvider.js +177 -0
  470. package/dist/v2/personalization/PersonalizationProvider.js.map +1 -0
  471. package/dist/v2/personalization/adapters/_storageKey.d.ts +35 -0
  472. package/dist/v2/personalization/adapters/_storageKey.d.ts.map +1 -0
  473. package/dist/v2/personalization/adapters/_storageKey.js +69 -0
  474. package/dist/v2/personalization/adapters/_storageKey.js.map +1 -0
  475. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +31 -0
  476. package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -0
  477. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +128 -0
  478. package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
  479. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +25 -0
  480. package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -0
  481. package/dist/v2/personalization/adapters/createMemoryAdapter.js +76 -0
  482. package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
  483. package/dist/v2/personalization/adapters/index.d.ts +10 -0
  484. package/dist/v2/personalization/adapters/index.d.ts.map +1 -0
  485. package/dist/v2/personalization/adapters/index.js +21 -0
  486. package/dist/v2/personalization/adapters/index.js.map +1 -0
  487. package/dist/v2/personalization/capabilities/favorites.d.ts +53 -0
  488. package/dist/v2/personalization/capabilities/favorites.d.ts.map +1 -0
  489. package/dist/v2/personalization/capabilities/favorites.js +223 -0
  490. package/dist/v2/personalization/capabilities/favorites.js.map +1 -0
  491. package/dist/v2/personalization/capabilities/favoritesView.d.ts +58 -0
  492. package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -0
  493. package/dist/v2/personalization/capabilities/favoritesView.js +121 -0
  494. package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -0
  495. package/dist/v2/personalization/capabilities/index.d.ts +16 -0
  496. package/dist/v2/personalization/capabilities/index.d.ts.map +1 -0
  497. package/dist/v2/personalization/capabilities/index.js +69 -0
  498. package/dist/v2/personalization/capabilities/index.js.map +1 -0
  499. package/dist/v2/personalization/capabilities/savedFilters.d.ts +61 -0
  500. package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -0
  501. package/dist/v2/personalization/capabilities/savedFilters.js +297 -0
  502. package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -0
  503. package/dist/v2/personalization/createPersonalizationStore.d.ts +76 -0
  504. package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -0
  505. package/dist/v2/personalization/createPersonalizationStore.js +475 -0
  506. package/dist/v2/personalization/createPersonalizationStore.js.map +1 -0
  507. package/dist/v2/personalization/index.d.ts +33 -0
  508. package/dist/v2/personalization/index.d.ts.map +1 -0
  509. package/dist/v2/personalization/index.js +111 -0
  510. package/dist/v2/personalization/index.js.map +1 -0
  511. package/dist/v2/personalization/personalizationContext.d.ts +78 -0
  512. package/dist/v2/personalization/personalizationContext.d.ts.map +1 -0
  513. package/dist/v2/personalization/personalizationContext.js +121 -0
  514. package/dist/v2/personalization/personalizationContext.js.map +1 -0
  515. package/dist/v2/personalization/schema.d.ts +60 -0
  516. package/dist/v2/personalization/schema.d.ts.map +1 -0
  517. package/dist/v2/personalization/schema.js +102 -0
  518. package/dist/v2/personalization/schema.js.map +1 -0
  519. package/dist/v2/personalization/types.d.ts +81 -0
  520. package/dist/v2/personalization/types.d.ts.map +1 -0
  521. package/dist/v2/personalization/types.js +6 -0
  522. package/dist/v2/personalization/types.js.map +1 -0
  523. package/dist/v2/referentiel/ReferentielProvider.d.ts +53 -0
  524. package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -0
  525. package/dist/v2/referentiel/ReferentielProvider.js +94 -0
  526. package/dist/v2/referentiel/ReferentielProvider.js.map +1 -0
  527. package/dist/v2/referentiel/index.d.ts +18 -0
  528. package/dist/v2/referentiel/index.d.ts.map +1 -0
  529. package/dist/v2/referentiel/index.js +44 -0
  530. package/dist/v2/referentiel/index.js.map +1 -0
  531. package/dist/v2/referentiel/useReferentielClient.d.ts +15 -0
  532. package/dist/v2/referentiel/useReferentielClient.d.ts.map +1 -0
  533. package/dist/v2/referentiel/useReferentielClient.js +46 -0
  534. package/dist/v2/referentiel/useReferentielClient.js.map +1 -0
  535. package/dist/v2/referentiel/useReferentielOptions.d.ts +40 -0
  536. package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -0
  537. package/dist/v2/referentiel/useReferentielOptions.js +177 -0
  538. package/dist/v2/referentiel/useReferentielOptions.js.map +1 -0
  539. package/dist/v2/referentiel/useReferentielSearch.d.ts +76 -0
  540. package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -0
  541. package/dist/v2/referentiel/useReferentielSearch.js +140 -0
  542. package/dist/v2/referentiel/useReferentielSearch.js.map +1 -0
  543. package/dist/v2/styles/base.css +425 -0
  544. package/dist/v2/styles/css.d.ts +10 -0
  545. package/dist/v2/styles/index.d.ts +12 -0
  546. package/dist/v2/styles/index.d.ts.map +1 -0
  547. package/dist/v2/styles/index.js +4 -0
  548. package/dist/v2/styles/index.js.map +1 -0
  549. package/dist/v2/theme/_brand.d.ts +29 -0
  550. package/dist/v2/theme/_brand.d.ts.map +1 -0
  551. package/dist/v2/theme/_brand.js +69 -0
  552. package/dist/v2/theme/_brand.js.map +1 -0
  553. package/dist/v2/theme/_brandSecondary.d.ts +26 -0
  554. package/dist/v2/theme/_brandSecondary.d.ts.map +1 -0
  555. package/dist/v2/theme/_brandSecondary.js +65 -0
  556. package/dist/v2/theme/_brandSecondary.js.map +1 -0
  557. package/dist/v2/theme/createPortnetTheme.d.ts +50 -0
  558. package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -0
  559. package/dist/v2/theme/createPortnetTheme.js +529 -0
  560. package/dist/v2/theme/createPortnetTheme.js.map +1 -0
  561. package/dist/v2/theme/cssVariables.d.ts +41 -0
  562. package/dist/v2/theme/cssVariables.d.ts.map +1 -0
  563. package/dist/v2/theme/cssVariables.js +205 -0
  564. package/dist/v2/theme/cssVariables.js.map +1 -0
  565. package/dist/v2/theme/index.d.ts +33 -0
  566. package/dist/v2/theme/index.d.ts.map +1 -0
  567. package/dist/v2/theme/index.js +60 -0
  568. package/dist/v2/theme/index.js.map +1 -0
  569. package/dist/v2/tokens/breakpoints.d.ts +74 -0
  570. package/dist/v2/tokens/breakpoints.d.ts.map +1 -0
  571. package/dist/v2/tokens/breakpoints.js +114 -0
  572. package/dist/v2/tokens/breakpoints.js.map +1 -0
  573. package/dist/v2/tokens/colors.d.ts +228 -0
  574. package/dist/v2/tokens/colors.d.ts.map +1 -0
  575. package/dist/v2/tokens/colors.js +225 -0
  576. package/dist/v2/tokens/colors.js.map +1 -0
  577. package/dist/v2/tokens/density.d.ts +142 -0
  578. package/dist/v2/tokens/density.d.ts.map +1 -0
  579. package/dist/v2/tokens/density.js +111 -0
  580. package/dist/v2/tokens/density.js.map +1 -0
  581. package/dist/v2/tokens/index.d.ts +556 -0
  582. package/dist/v2/tokens/index.d.ts.map +1 -0
  583. package/dist/v2/tokens/index.js +313 -0
  584. package/dist/v2/tokens/index.js.map +1 -0
  585. package/dist/v2/tokens/motion.d.ts +85 -0
  586. package/dist/v2/tokens/motion.d.ts.map +1 -0
  587. package/dist/v2/tokens/motion.js +94 -0
  588. package/dist/v2/tokens/motion.js.map +1 -0
  589. package/dist/v2/tokens/radius.d.ts +18 -0
  590. package/dist/v2/tokens/radius.d.ts.map +1 -0
  591. package/dist/v2/tokens/radius.js +28 -0
  592. package/dist/v2/tokens/radius.js.map +1 -0
  593. package/dist/v2/tokens/shadows.d.ts +25 -0
  594. package/dist/v2/tokens/shadows.d.ts.map +1 -0
  595. package/dist/v2/tokens/shadows.js +46 -0
  596. package/dist/v2/tokens/shadows.js.map +1 -0
  597. package/dist/v2/tokens/spacing.d.ts +38 -0
  598. package/dist/v2/tokens/spacing.d.ts.map +1 -0
  599. package/dist/v2/tokens/spacing.js +57 -0
  600. package/dist/v2/tokens/spacing.js.map +1 -0
  601. package/dist/v2/tokens/state.d.ts +40 -0
  602. package/dist/v2/tokens/state.d.ts.map +1 -0
  603. package/dist/v2/tokens/state.js +47 -0
  604. package/dist/v2/tokens/state.js.map +1 -0
  605. package/dist/v2/tokens/statusPalette.d.ts +54 -0
  606. package/dist/v2/tokens/statusPalette.d.ts.map +1 -0
  607. package/dist/v2/tokens/statusPalette.js +72 -0
  608. package/dist/v2/tokens/statusPalette.js.map +1 -0
  609. package/dist/v2/tokens/tokens.json +153 -0
  610. package/dist/v2/tokens/typography.d.ts +206 -0
  611. package/dist/v2/tokens/typography.d.ts.map +1 -0
  612. package/dist/v2/tokens/typography.js +155 -0
  613. package/dist/v2/tokens/typography.js.map +1 -0
  614. package/dist/v2/tokens/zIndex.d.ts +33 -0
  615. package/dist/v2/tokens/zIndex.d.ts.map +1 -0
  616. package/dist/v2/tokens/zIndex.js +50 -0
  617. package/dist/v2/tokens/zIndex.js.map +1 -0
  618. package/dist/v2/types/common.d.ts +24 -0
  619. package/dist/v2/types/common.d.ts.map +1 -0
  620. package/dist/v2/types/common.js +6 -0
  621. package/dist/v2/types/common.js.map +1 -0
  622. package/dist/v2/types/datagrid.d.ts +131 -0
  623. package/dist/v2/types/datagrid.d.ts.map +1 -0
  624. package/dist/v2/types/datagrid.js +6 -0
  625. package/dist/v2/types/datagrid.js.map +1 -0
  626. package/dist/v2/types/index.d.ts +11 -0
  627. package/dist/v2/types/index.d.ts.map +1 -0
  628. package/dist/v2/types/index.js +28 -0
  629. package/dist/v2/types/index.js.map +1 -0
  630. package/dist/v2/utils/apiError.d.ts +90 -0
  631. package/dist/v2/utils/apiError.d.ts.map +1 -0
  632. package/dist/v2/utils/apiError.js +227 -0
  633. package/dist/v2/utils/apiError.js.map +1 -0
  634. package/dist/v2/utils/contrast.d.ts +68 -0
  635. package/dist/v2/utils/contrast.d.ts.map +1 -0
  636. package/dist/v2/utils/contrast.js +167 -0
  637. package/dist/v2/utils/contrast.js.map +1 -0
  638. package/dist/v2/utils/cx.d.ts +9 -0
  639. package/dist/v2/utils/cx.d.ts.map +1 -0
  640. package/dist/v2/utils/cx.js +45 -0
  641. package/dist/v2/utils/cx.js.map +1 -0
  642. package/dist/v2/utils/fileDownload.d.ts +94 -0
  643. package/dist/v2/utils/fileDownload.d.ts.map +1 -0
  644. package/dist/v2/utils/fileDownload.js +236 -0
  645. package/dist/v2/utils/fileDownload.js.map +1 -0
  646. package/dist/v2/utils/fmtMoney.d.ts +28 -0
  647. package/dist/v2/utils/fmtMoney.d.ts.map +1 -0
  648. package/dist/v2/utils/fmtMoney.js +84 -0
  649. package/dist/v2/utils/fmtMoney.js.map +1 -0
  650. package/dist/v2/utils/index.d.ts +8 -0
  651. package/dist/v2/utils/index.d.ts.map +1 -0
  652. package/dist/v2/utils/index.js +90 -0
  653. package/dist/v2/utils/index.js.map +1 -0
  654. package/dist/v2/utils/networkStatus.d.ts +88 -0
  655. package/dist/v2/utils/networkStatus.d.ts.map +1 -0
  656. package/dist/v2/utils/networkStatus.js +121 -0
  657. package/dist/v2/utils/networkStatus.js.map +1 -0
  658. package/package.json +191 -76
  659. package/dist/api/guideApi.js +0 -12
  660. package/dist/api/guideImageService.js +0 -119
  661. package/dist/api/reclamationApi.js +0 -102
  662. package/dist/assets/guides/FAQ.json +0 -118
  663. package/dist/assets/guides/index.js +0 -11
  664. package/dist/assets/images/tijariaLogo.ico +0 -0
  665. package/dist/components/buttons/PuiButton.js +0 -217
  666. package/dist/components/buttons/PuiIconButton.js +0 -98
  667. package/dist/components/common/PuiAlertContext.js +0 -12
  668. package/dist/components/common/PuiHelpWidgetContext.js +0 -17
  669. package/dist/components/common/StyledMuiButton.js +0 -48
  670. package/dist/components/common/StyledMuiTextField.js +0 -180
  671. package/dist/components/inputs/PuiAutocomplete.js +0 -352
  672. package/dist/components/inputs/PuiCheckbox.js +0 -308
  673. package/dist/components/inputs/PuiCheckboxGroup.js +0 -215
  674. package/dist/components/inputs/PuiCheckboxItem.js +0 -162
  675. package/dist/components/inputs/PuiDateField.js +0 -280
  676. package/dist/components/inputs/PuiDateTimeField.js +0 -276
  677. package/dist/components/inputs/PuiFileField.js +0 -265
  678. package/dist/components/inputs/PuiRadioGroup.js +0 -197
  679. package/dist/components/inputs/PuiRadioItem.js +0 -100
  680. package/dist/components/inputs/PuiSelect.js +0 -427
  681. package/dist/components/inputs/PuiTextField.js +0 -263
  682. package/dist/components/others/PuiBadge.js +0 -58
  683. package/dist/components/others/PuiChip.js +0 -150
  684. package/dist/components/others/PuiDialog.js +0 -102
  685. package/dist/components/others/PuiFormikForm.js +0 -70
  686. package/dist/components/others/PuiGrid.js +0 -23
  687. package/dist/components/others/PuiIcon.js +0 -92
  688. package/dist/components/others/PuiLoadingBackdrop.js +0 -32
  689. package/dist/components/others/PuiMainContainer.js +0 -41
  690. package/dist/components/others/PuiNavigation.js +0 -68
  691. package/dist/components/others/PuiSection.js +0 -187
  692. package/dist/components/others/PuiTooltip.js +0 -86
  693. package/dist/components/providers/PuiAlertProvider.js +0 -134
  694. package/dist/components/providers/PuiHelpWidgetProvider.js +0 -91
  695. package/dist/components/providers/PuiLocalizationProvider.js +0 -34
  696. package/dist/components/referentiel/common/ReferetielContext.js +0 -12
  697. package/dist/components/referentiel/common/constants/specificReferentielsApis.js +0 -22
  698. package/dist/components/referentiel/common/constants/specificReferentielsBaseColumns.js +0 -691
  699. package/dist/components/referentiel/common/constants/specificReferentielsBaseFilters.js +0 -598
  700. package/dist/components/referentiel/common/constants/specificReferentielsInitialValues.js +0 -80
  701. package/dist/components/referentiel/common/constants/specificReferentielsKeys.js +0 -18
  702. package/dist/components/referentiel/common/constants/specificReferentielsTitles.js +0 -22
  703. package/dist/components/referentiel/common/constants/specificReferentielsValidationSchemas.js +0 -85
  704. package/dist/components/referentiel/components/PuiBasePopupReferentielField.js +0 -356
  705. package/dist/components/referentiel/components/PuiCustomPopupReferentielField.js +0 -181
  706. package/dist/components/referentiel/components/PuiSimplePopupReferentielField.js +0 -325
  707. package/dist/components/referentiel/components/PuiSimpleReferentielField.js +0 -203
  708. package/dist/components/referentiel/components/PuiSpecificReferentielField.js +0 -352
  709. package/dist/components/referentiel/providers/PuiReferentielProvider.js +0 -66
  710. package/dist/components/tab/PuiTab.js +0 -25
  711. package/dist/components/tab/PuiTabs.js +0 -148
  712. package/dist/components/table/PuiTable.js +0 -643
  713. package/dist/components/table/PuiTableAction.js +0 -75
  714. package/dist/components/typography/PuiDefinition.js +0 -42
  715. package/dist/components/typography/PuiIndication.js +0 -80
  716. package/dist/components/typography/PuiMainTitle.js +0 -144
  717. package/dist/components/ui/dialogs/PuiSearchDialog.js +0 -106
  718. package/dist/components/ui/pages/errors/PuiErrorBasePage.js +0 -73
  719. package/dist/components/ui/pages/errors/PuiForbiddenErrorPage.js +0 -36
  720. package/dist/components/ui/pages/errors/PuiNetworkErrorPage.js +0 -36
  721. package/dist/components/ui/pages/errors/PuiNotFoundErrorPage.js +0 -30
  722. package/dist/components/ui/pages/errors/PuiServerErrorPage.js +0 -37
  723. package/dist/components/ui/pages/general/PuiDefaultPage.js +0 -68
  724. package/dist/components/ui/pages/general/PuiSearchPage.js +0 -203
  725. package/dist/components/widgets/GuideImage.js +0 -251
  726. package/dist/components/widgets/PuiHelpWidget.js +0 -4167
  727. package/dist/config/apperance.js +0 -26
  728. package/dist/config/mapping.js +0 -26
  729. package/dist/config/referentiel.js +0 -10
  730. package/dist/general/yupValidationErrors.js +0 -8
  731. package/dist/hooks/useAlert.js +0 -19
  732. package/dist/hooks/useAxios.js +0 -23
  733. package/dist/hooks/useQuery.js +0 -21
  734. package/dist/hooks/useReclamation.js +0 -100
  735. package/dist/styles/ReclamationFormModal.css +0 -629
  736. package/dist/styles/help-widget.css +0 -621
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = useFocusFirstError;
7
+ exports.focusFieldByName = focusFieldByName;
8
+ var _react = require("react");
9
+ /**
10
+ * useFocusFirstError — Portnet UI v2
11
+ *
12
+ * Charter §05.3 R-F.3 MUST — "Submit form échoué → focus sur premier champ
13
+ * en erreur". Charter §04.1 R-FV.3 MUST — "Scroll auto vers premier champ
14
+ * en erreur + focus". Both are the same behaviour; this is it, once.
15
+ *
16
+ * Formik-FREE on purpose, exactly like useFormAutoSave: the caller passes
17
+ * `errors`, `submitCount` and the rendered field order as plain values.
18
+ * Formik coupling belongs in patterns/ — use <FormikErrorFocus /> when the
19
+ * form is a Formik form and this hook directly when it is not (a manual
20
+ * "Ajouter" guard, a non-Formik dropzone section, a reducer-driven form).
21
+ *
22
+ * // Formik form — prefer the pattern, which wires this for you:
23
+ * <FormikErrorFocus order={["numeroFacture", "fournisseur", "dateFacture"]} />
24
+ *
25
+ * // Manual guard — call the imperative helper directly:
26
+ * const missing = requiredFields.filter((f) => !f.value);
27
+ * if (missing.length > 0) {
28
+ * missing.forEach((f) => setFieldError(f.name, REQUIRED));
29
+ * focusFieldByName(missing[0].name);
30
+ * return;
31
+ * }
32
+ *
33
+ * ── WHY THE `[id=]` LOOKUP COMES FIRST ──────────────────────────────
34
+ *
35
+ * Hosts have consistently written `[name="<field>"]`, which is wrong for
36
+ * most v2 fields. The Formik bridges wrap their control in Field, which
37
+ * does `htmlFor={htmlFor || name}` and then
38
+ * `cloneElement(child, { id: inputId })` — so the field NAME is published
39
+ * as the control's `id`, and whether it also appears as `name` depends
40
+ * entirely on which primitive is underneath. It does for Input/Textarea.
41
+ * It does not for Select, Combobox, DatePicker or ReferentielField.
42
+ *
43
+ * A `[name=]`-only selector therefore fails precisely on the compound
44
+ * fields, silently — the call runs, matches nothing, and the form reads as
45
+ * compliant. `[id=]` is guaranteed by the Field contract for every bridge,
46
+ * so it is tried first; `[name=]` and `[data-field=]` remain as fallbacks
47
+ * for hand-rolled controls that never went through Field.
48
+ *
49
+ * ── WHAT THIS DELIBERATELY DOES NOT DO ──────────────────────────────
50
+ *
51
+ * It does not focus a control it cannot see. A field inside a collapsed
52
+ * <details> (Accordion.Item) or a display:none branch has no client rects,
53
+ * and focusing it would scroll the page to an invisible target and strand
54
+ * the user with no visible focus ring. `focusFieldByName` returns false in
55
+ * that case and dev-warns rather than guessing — the inline error
56
+ * (role="alert" via Field) still carries the message, and R-FV.2's summary
57
+ * banner (FormErrorSummary) is the right affordance for reaching a field
58
+ * in a closed section.
59
+ *
60
+ * It also does not announce anything. Field already renders its error with
61
+ * role="alert"; a second live region would double-announce.
62
+ */
63
+
64
+ /** Options for the imperative helper. */
65
+
66
+ /**
67
+ * Focusable descendants, for the case where the resolved element is a
68
+ * wrapper rather than the control itself. Excludes tabindex="-1", which is
69
+ * programmatically focusable but deliberately out of the tab order — landing
70
+ * there would put the user somewhere Tab cannot return to.
71
+ */
72
+ var FOCUSABLE_WITHIN = 'input,select,textarea,button,[href],[tabindex]:not([tabindex="-1"])';
73
+
74
+ /**
75
+ * Escape a value for use inside an attribute selector.
76
+ *
77
+ * CSS.escape where available, with a manual quote/backslash escape as the
78
+ * fallback — same guard shape DataGrid uses for its reorder-grip lookup.
79
+ * Field names are developer-authored, so this is robustness rather than a
80
+ * sanitisation boundary.
81
+ */
82
+ function escapeAttributeValue(value) {
83
+ if (typeof window !== "undefined" && window.CSS && typeof window.CSS.escape === "function") {
84
+ return window.CSS.escape(value);
85
+ }
86
+ return value.replace(/["\\]/g, "\\$&");
87
+ }
88
+
89
+ /**
90
+ * Is this element something a user can actually be sent to?
91
+ *
92
+ * `getClientRects().length === 0` is what excludes a field inside a
93
+ * collapsed <details> or a display:none branch. offsetParent alone is not
94
+ * enough — it is also null for position:fixed elements, which are visible.
95
+ */
96
+ function isFocusableNow(el) {
97
+ if (!(el instanceof HTMLElement)) return false;
98
+ if (el.hasAttribute("disabled")) return false;
99
+ if (el.getAttribute("aria-hidden") === "true") return false;
100
+ if (el.getClientRects().length === 0) return false;
101
+ return true;
102
+ }
103
+
104
+ /**
105
+ * Focus the control registered under `name`, resolving it the way the v2
106
+ * Field contract publishes it.
107
+ *
108
+ * @returns true when a visible, enabled control was focused. False means
109
+ * nothing matched, or the match was hidden or disabled — the
110
+ * caller should keep its inline error and, ideally, render
111
+ * FormErrorSummary so the field is still reachable.
112
+ */
113
+ function focusFieldByName(name) {
114
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
115
+ if (typeof document === "undefined") return false;
116
+ if (!name) return false;
117
+ var escaped = escapeAttributeValue(name);
118
+
119
+ /* Order matters — see the `[id=]` note in the module docstring. */
120
+ var selectors = ["[id=\"".concat(escaped, "\"]"), "[name=\"".concat(escaped, "\"]"), "[data-field=\"".concat(escaped, "\"]")];
121
+ for (var _i = 0, _selectors = selectors; _i < _selectors.length; _i++) {
122
+ var selector = _selectors[_i];
123
+ var host = null;
124
+ try {
125
+ host = document.querySelector(selector);
126
+ } catch (_unused) {
127
+ /* Malformed selector — try the next shape rather than throwing into
128
+ the caller's validation branch. */
129
+ host = null;
130
+ }
131
+ if (host === null) continue;
132
+ var target = isFocusableNow(host) ? host : host.querySelector(FOCUSABLE_WITHIN);
133
+ if (!isFocusableNow(target)) continue;
134
+ if (options.scroll !== false) {
135
+ try {
136
+ target.scrollIntoView({
137
+ block: "center",
138
+ behavior: "auto"
139
+ });
140
+ } catch (_unused2) {
141
+ /* jsdom and older Safari lack the options overload. Focus below
142
+ still scrolls the control into view natively. */
143
+ }
144
+ }
145
+ target.focus();
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+
151
+ /**
152
+ * Move focus to the first field in error after each failed submit.
153
+ *
154
+ * Fires when `submitCount` increases AND an error is present. The two
155
+ * conditions are separate on purpose: Formik increments submitCount before
156
+ * async validation resolves, so on the render where the counter changes
157
+ * `errors` can still be empty. Marking the attempt handled only once an
158
+ * error is actually found lets the effect re-run when the errors land,
159
+ * without re-firing for the same attempt afterwards.
160
+ */
161
+ function useFocusFirstError(_ref) {
162
+ var errors = _ref.errors,
163
+ order = _ref.order,
164
+ _ref$submitCount = _ref.submitCount,
165
+ submitCount = _ref$submitCount === void 0 ? 0 : _ref$submitCount,
166
+ _ref$enabled = _ref.enabled,
167
+ enabled = _ref$enabled === void 0 ? true : _ref$enabled,
168
+ _ref$scroll = _ref.scroll,
169
+ scroll = _ref$scroll === void 0 ? true : _ref$scroll;
170
+ /** Highest submitCount already acted on. */
171
+ var handledRef = (0, _react.useRef)(0);
172
+ (0, _react.useEffect)(function () {
173
+ if (!enabled) return undefined;
174
+ if (submitCount <= handledRef.current) return undefined;
175
+ if (!errors) return undefined;
176
+ var names = order !== undefined && order.length > 0 ? order : Object.keys(errors);
177
+ var first = names.find(function (name) {
178
+ return Boolean(errors[name]);
179
+ });
180
+
181
+ /* No error yet: either validation is still in flight for this attempt,
182
+ or it passed. Leave handledRef alone so a later errors update for the
183
+ SAME attempt is still honoured. */
184
+ if (first === undefined) return undefined;
185
+ handledRef.current = submitCount;
186
+
187
+ /* One frame, so the inline errors have rendered and the target exists
188
+ and is measurable before it is focused and scrolled to. */
189
+ var frame = requestAnimationFrame(function () {
190
+ var focused = focusFieldByName(first, {
191
+ scroll: scroll
192
+ });
193
+ if (!focused && process.env["NODE_ENV"] !== "production") {
194
+ // eslint-disable-next-line no-console
195
+ console.warn("[v2.useFocusFirstError] Could not focus \"".concat(first, "\" \u2014 no visible, ") + "enabled control matched [id], [name] or [data-field]. Either the " + "field is in a collapsed section, or its control does not publish " + "the field name (a hand-rolled control that skips Field). R-F.3 is " + "NOT satisfied for this field; render FormErrorSummary (R-FV.2) so " + "it stays reachable.");
196
+ }
197
+ });
198
+ return function () {
199
+ return cancelAnimationFrame(frame);
200
+ };
201
+ }, [errors, order, submitCount, enabled, scroll]);
202
+ }
203
+ //# sourceMappingURL=useFocusFirstError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusFirstError.js","names":["_react","require","FOCUSABLE_WITHIN","escapeAttributeValue","value","window","CSS","escape","replace","isFocusableNow","el","HTMLElement","hasAttribute","getAttribute","getClientRects","length","focusFieldByName","name","options","arguments","undefined","document","escaped","selectors","concat","_i","_selectors","selector","host","querySelector","_unused","target","scroll","scrollIntoView","block","behavior","_unused2","focus","useFocusFirstError","_ref","errors","order","_ref$submitCount","submitCount","_ref$enabled","enabled","_ref$scroll","handledRef","useRef","useEffect","current","names","Object","keys","first","find","Boolean","frame","requestAnimationFrame","focused","process","env","console","warn","cancelAnimationFrame"],"sources":["../../../src/lib/v2/hooks/useFocusFirstError.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\r\n\r\n/**\r\n * useFocusFirstError — Portnet UI v2\r\n *\r\n * Charter §05.3 R-F.3 MUST — \"Submit form échoué → focus sur premier champ\r\n * en erreur\". Charter §04.1 R-FV.3 MUST — \"Scroll auto vers premier champ\r\n * en erreur + focus\". Both are the same behaviour; this is it, once.\r\n *\r\n * Formik-FREE on purpose, exactly like useFormAutoSave: the caller passes\r\n * `errors`, `submitCount` and the rendered field order as plain values.\r\n * Formik coupling belongs in patterns/ — use <FormikErrorFocus /> when the\r\n * form is a Formik form and this hook directly when it is not (a manual\r\n * \"Ajouter\" guard, a non-Formik dropzone section, a reducer-driven form).\r\n *\r\n * // Formik form — prefer the pattern, which wires this for you:\r\n * <FormikErrorFocus order={[\"numeroFacture\", \"fournisseur\", \"dateFacture\"]} />\r\n *\r\n * // Manual guard — call the imperative helper directly:\r\n * const missing = requiredFields.filter((f) => !f.value);\r\n * if (missing.length > 0) {\r\n * missing.forEach((f) => setFieldError(f.name, REQUIRED));\r\n * focusFieldByName(missing[0].name);\r\n * return;\r\n * }\r\n *\r\n * ── WHY THE `[id=]` LOOKUP COMES FIRST ──────────────────────────────\r\n *\r\n * Hosts have consistently written `[name=\"<field>\"]`, which is wrong for\r\n * most v2 fields. The Formik bridges wrap their control in Field, which\r\n * does `htmlFor={htmlFor || name}` and then\r\n * `cloneElement(child, { id: inputId })` — so the field NAME is published\r\n * as the control's `id`, and whether it also appears as `name` depends\r\n * entirely on which primitive is underneath. It does for Input/Textarea.\r\n * It does not for Select, Combobox, DatePicker or ReferentielField.\r\n *\r\n * A `[name=]`-only selector therefore fails precisely on the compound\r\n * fields, silently — the call runs, matches nothing, and the form reads as\r\n * compliant. `[id=]` is guaranteed by the Field contract for every bridge,\r\n * so it is tried first; `[name=]` and `[data-field=]` remain as fallbacks\r\n * for hand-rolled controls that never went through Field.\r\n *\r\n * ── WHAT THIS DELIBERATELY DOES NOT DO ──────────────────────────────\r\n *\r\n * It does not focus a control it cannot see. A field inside a collapsed\r\n * <details> (Accordion.Item) or a display:none branch has no client rects,\r\n * and focusing it would scroll the page to an invisible target and strand\r\n * the user with no visible focus ring. `focusFieldByName` returns false in\r\n * that case and dev-warns rather than guessing — the inline error\r\n * (role=\"alert\" via Field) still carries the message, and R-FV.2's summary\r\n * banner (FormErrorSummary) is the right affordance for reaching a field\r\n * in a closed section.\r\n *\r\n * It also does not announce anything. Field already renders its error with\r\n * role=\"alert\"; a second live region would double-announce.\r\n */\r\n\r\n/** Options for the imperative helper. */\r\nexport type FocusFieldOptions = {\r\n /**\r\n * Scroll the resolved control into view before focusing.\r\n *\r\n * `behavior: \"auto\"` always — never \"smooth\". R-Tg.2 caps animation at\r\n * 0.01 ms under prefers-reduced-motion, and a smooth scroll triggered by\r\n * a failed submit is exactly the motion that rule exists to suppress.\r\n *\r\n * @default true\r\n */\r\n scroll?: boolean | undefined;\r\n};\r\n\r\nexport type UseFocusFirstErrorOptions = {\r\n /**\r\n * Field name -> error. Formik's `errors` satisfies this directly.\r\n *\r\n * Only truthiness is read, so any error shape works (string, node,\r\n * nested object).\r\n */\r\n errors?: Readonly<Record<string, unknown>> | undefined;\r\n /**\r\n * Field names in RENDERED order — top-to-bottom as the user sees them.\r\n *\r\n * SUPPLY THIS. Without it the order falls back to `Object.keys(errors)`,\r\n * which is the order the validator happened to write its keys in and has\r\n * no relationship to the layout; \"first field in error\" then means\r\n * \"whichever field Yup reached first\", which can be the last one on\r\n * screen.\r\n */\r\n order?: readonly string[] | undefined;\r\n /**\r\n * Submit attempt counter. Formik's `submitCount`.\r\n *\r\n * This is the TRIGGER: focus moves when it increases, never on an\r\n * ordinary re-render. Without it a persisting error would re-steal focus\r\n * every time the component re-rendered, which is worse than not moving\r\n * focus at all.\r\n */\r\n submitCount?: number | undefined;\r\n /** @default true */\r\n enabled?: boolean | undefined;\r\n /** @default true */\r\n scroll?: boolean | undefined;\r\n};\r\n\r\n/**\r\n * Focusable descendants, for the case where the resolved element is a\r\n * wrapper rather than the control itself. Excludes tabindex=\"-1\", which is\r\n * programmatically focusable but deliberately out of the tab order — landing\r\n * there would put the user somewhere Tab cannot return to.\r\n */\r\nconst FOCUSABLE_WITHIN =\r\n 'input,select,textarea,button,[href],[tabindex]:not([tabindex=\"-1\"])';\r\n\r\n/**\r\n * Escape a value for use inside an attribute selector.\r\n *\r\n * CSS.escape where available, with a manual quote/backslash escape as the\r\n * fallback — same guard shape DataGrid uses for its reorder-grip lookup.\r\n * Field names are developer-authored, so this is robustness rather than a\r\n * sanitisation boundary.\r\n */\r\nfunction escapeAttributeValue(value: string): string {\r\n if (\r\n typeof window !== \"undefined\" &&\r\n window.CSS &&\r\n typeof window.CSS.escape === \"function\"\r\n ) {\r\n return window.CSS.escape(value);\r\n }\r\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\r\n}\r\n\r\n/**\r\n * Is this element something a user can actually be sent to?\r\n *\r\n * `getClientRects().length === 0` is what excludes a field inside a\r\n * collapsed <details> or a display:none branch. offsetParent alone is not\r\n * enough — it is also null for position:fixed elements, which are visible.\r\n */\r\nfunction isFocusableNow(el: Element | null): el is HTMLElement {\r\n if (!(el instanceof HTMLElement)) return false;\r\n if (el.hasAttribute(\"disabled\")) return false;\r\n if (el.getAttribute(\"aria-hidden\") === \"true\") return false;\r\n if (el.getClientRects().length === 0) return false;\r\n return true;\r\n}\r\n\r\n/**\r\n * Focus the control registered under `name`, resolving it the way the v2\r\n * Field contract publishes it.\r\n *\r\n * @returns true when a visible, enabled control was focused. False means\r\n * nothing matched, or the match was hidden or disabled — the\r\n * caller should keep its inline error and, ideally, render\r\n * FormErrorSummary so the field is still reachable.\r\n */\r\nexport function focusFieldByName(\r\n name: string,\r\n options: FocusFieldOptions = {}\r\n): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n if (!name) return false;\r\n\r\n const escaped = escapeAttributeValue(name);\r\n\r\n /* Order matters — see the `[id=]` note in the module docstring. */\r\n const selectors = [\r\n `[id=\"${escaped}\"]`,\r\n `[name=\"${escaped}\"]`,\r\n `[data-field=\"${escaped}\"]`,\r\n ];\r\n\r\n for (const selector of selectors) {\r\n let host: Element | null = null;\r\n try {\r\n host = document.querySelector(selector);\r\n } catch {\r\n /* Malformed selector — try the next shape rather than throwing into\r\n the caller's validation branch. */\r\n host = null;\r\n }\r\n if (host === null) continue;\r\n\r\n const target = isFocusableNow(host)\r\n ? host\r\n : host.querySelector(FOCUSABLE_WITHIN);\r\n\r\n if (!isFocusableNow(target)) continue;\r\n\r\n if (options.scroll !== false) {\r\n try {\r\n target.scrollIntoView({ block: \"center\", behavior: \"auto\" });\r\n } catch {\r\n /* jsdom and older Safari lack the options overload. Focus below\r\n still scrolls the control into view natively. */\r\n }\r\n }\r\n\r\n target.focus();\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Move focus to the first field in error after each failed submit.\r\n *\r\n * Fires when `submitCount` increases AND an error is present. The two\r\n * conditions are separate on purpose: Formik increments submitCount before\r\n * async validation resolves, so on the render where the counter changes\r\n * `errors` can still be empty. Marking the attempt handled only once an\r\n * error is actually found lets the effect re-run when the errors land,\r\n * without re-firing for the same attempt afterwards.\r\n */\r\nexport default function useFocusFirstError({\r\n errors,\r\n order,\r\n submitCount = 0,\r\n enabled = true,\r\n scroll = true,\r\n}: UseFocusFirstErrorOptions): void {\r\n /** Highest submitCount already acted on. */\r\n const handledRef = useRef(0);\r\n\r\n useEffect(() => {\r\n if (!enabled) return undefined;\r\n if (submitCount <= handledRef.current) return undefined;\r\n if (!errors) return undefined;\r\n\r\n const names =\r\n order !== undefined && order.length > 0 ? order : Object.keys(errors);\r\n\r\n const first = names.find((name) => Boolean(errors[name]));\r\n\r\n /* No error yet: either validation is still in flight for this attempt,\r\n or it passed. Leave handledRef alone so a later errors update for the\r\n SAME attempt is still honoured. */\r\n if (first === undefined) return undefined;\r\n\r\n handledRef.current = submitCount;\r\n\r\n /* One frame, so the inline errors have rendered and the target exists\r\n and is measurable before it is focused and scrolled to. */\r\n const frame = requestAnimationFrame(() => {\r\n const focused = focusFieldByName(first, { scroll });\r\n\r\n if (!focused && process.env[\"NODE_ENV\"] !== \"production\") {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[v2.useFocusFirstError] Could not focus \"${first}\" — no visible, ` +\r\n \"enabled control matched [id], [name] or [data-field]. Either the \" +\r\n \"field is in a collapsed section, or its control does not publish \" +\r\n \"the field name (a hand-rolled control that skips Field). R-F.3 is \" +\r\n \"NOT satisfied for this field; render FormErrorSummary (R-FV.2) so \" +\r\n \"it stays reachable.\"\r\n );\r\n }\r\n });\r\n\r\n return () => cancelAnimationFrame(frame);\r\n }, [errors, order, submitCount, enabled, scroll]);\r\n}\r\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AA+CA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,gBAAgB,GACpB,qEAAqE;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,oBAAoBA,CAACC,KAAa,EAAU;EACnD,IACE,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,CAACC,GAAG,IACV,OAAOD,MAAM,CAACC,GAAG,CAACC,MAAM,KAAK,UAAU,EACvC;IACA,OAAOF,MAAM,CAACC,GAAG,CAACC,MAAM,CAACH,KAAK,CAAC;EACjC;EACA,OAAOA,KAAK,CAACI,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAACC,EAAkB,EAAqB;EAC7D,IAAI,EAAEA,EAAE,YAAYC,WAAW,CAAC,EAAE,OAAO,KAAK;EAC9C,IAAID,EAAE,CAACE,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK;EAC7C,IAAIF,EAAE,CAACG,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK;EAC3D,IAAIH,EAAE,CAACI,cAAc,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;EAClD,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAC9BC,IAAY,EAEH;EAAA,IADTC,OAA0B,GAAAC,SAAA,CAAAJ,MAAA,QAAAI,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;EAE/B,IAA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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { type RefObject } from "react";
2
+ export default function useFocusTrap<T extends HTMLElement = HTMLElement>(ref: RefObject<T | null>, isActive: boolean): void;
3
+ //# sourceMappingURL=useFocusTrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/hooks/useFocusTrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA0IlD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,EACxB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAgGN"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = useFocusTrap;
7
+ var _react = require("react");
8
+ /**
9
+ * useFocusTrap — Portnet UI v2
10
+ *
11
+ * Traps Tab / Shift+Tab inside `ref` while `isActive`.
12
+ * On activation, focuses the first `[autofocus]` / `[data-autofocus]`
13
+ * descendant if present, otherwise the first focusable child.
14
+ * On deactivation, restores focus to the element that previously held
15
+ * it (only if still in the DOM).
16
+ *
17
+ * WCAG 2.4.3, charter R-F.2.
18
+ *
19
+ * Implementation notes
20
+ * - Keydown listener attached to `document` in capture phase. If
21
+ * focus has somehow escaped the container, the next Tab is caught
22
+ * and warped back inside.
23
+ * - NESTED TRAPS — only the topmost trap on `trapStack` intercepts
24
+ * Tab. Outer traps stay registered and resume duty when the inner
25
+ * trap unmounts. This makes ConfirmDialog-in-Drawer-in-Modal
26
+ * flows behave correctly.
27
+ * - Focusable elements are filtered to exclude those inside
28
+ * aria-hidden / inert / hidden / display:none subtrees, even
29
+ * though querySelectorAll happily returns them.
30
+ * - BOUNDARY SCOPE — Tab is intercepted only at the cycle edges
31
+ * (Tab on `last`, Shift+Tab on `first`) plus the escaped-focus
32
+ * recovery path. Mid-cycle moves are deliberately left to the
33
+ * browser's native tab order.
34
+ *
35
+ * Consequence worth knowing: the filter above decides what counts
36
+ * as `first` / `last`, so the trap never DELIVERS focus into a
37
+ * filtered element — but it cannot stop the browser tabbing into
38
+ * one mid-cycle. `hidden` and `inert` are unaffected (both remove
39
+ * an element from the native tab order); `aria-hidden` is NOT, as
40
+ * per spec it annotates only the accessibility tree. So a
41
+ * focusable control inside `aria-hidden="true"` IS still reachable
42
+ * by Tab — that is a content defect (axe `aria-hidden-focus`), and
43
+ * the fix is `inert` on the subtree, not more interception here.
44
+ *
45
+ * Full per-Tab interception would close that gap, at the cost of
46
+ * taking over native traversal for every Modal / Drawer /
47
+ * ConfirmDialog in the fleet — which also breaks radio-group
48
+ * roving tabindex and any positive `tabindex` ordering. Not done
49
+ * without a browser-level test bed. See the aria-hidden case in
50
+ * __tests__/useFocusTrap.test.tsx.
51
+ * - Cleanup never calls focus() on an unmounted or detached
52
+ * trigger and cancels the initial-focus rAF.
53
+ *
54
+ * Escape handling is INTENTIONALLY OUT OF SCOPE — the consumer (Modal,
55
+ * Drawer, ConfirmDialog) is responsible for closing on Escape per
56
+ * R-F.1. Mixing concerns here would force every trap user to opt out.
57
+ *
58
+ * @param ref The container ref to trap focus inside. Accepts a
59
+ * nullable `current` (`RefObject<T | null>`) so callers
60
+ * can pass `useRef<HTMLElement>(null)` directly without a
61
+ * cast — the effect no-ops until `current` is populated.
62
+ * @param isActive Whether the trap is currently on.
63
+ */
64
+
65
+ var FOCUSABLE_SELECTORS = ["a[href]", "button:not(:disabled)", "input:not(:disabled)", "select:not(:disabled)", "textarea:not(:disabled)", '[tabindex]:not([tabindex="-1"])', '[contenteditable]:not([contenteditable="false"])', "audio[controls]", "video[controls]"].join(", ");
66
+ var AUTOFOCUS_SELECTORS = "[autofocus], [data-autofocus]";
67
+
68
+ /**
69
+ * Module-level stack of active trap containers. Only the LAST entry
70
+ * (innermost trap) intercepts Tab; outer traps stay registered but
71
+ * pass-through. Cleanup pops by reference to tolerate out-of-order
72
+ * unmount sequences (portal teardown, hot-replace).
73
+ */
74
+ var trapStack = [];
75
+
76
+ /**
77
+ * Is `container` the INNERMOST active trap?
78
+ *
79
+ * ⚠ DO NOT REPLACE THIS WITH `trapStack[trapStack.length - 1] === container`.
80
+ *
81
+ * Stack POSITION does not track nesting depth. React runs CHILD effects before
82
+ * PARENT effects, so when an outer and an inner trap mount in the SAME commit
83
+ * (Modal rendering a ConfirmDialog, Drawer with a nested trap) the INNER trap is
84
+ * pushed FIRST and the OUTER one LAST — making the last entry the OUTERMOST trap,
85
+ * the exact opposite of the intent.
86
+ *
87
+ * Push order only happens to match nesting when the traps mount at different
88
+ * times, which is the common case and why the bug stayed hidden. The
89
+ * simultaneous-mount path gave Tab duty to the trap BEHIND the dialog the user
90
+ * was looking at (R-M.2 / R-F.2).
91
+ *
92
+ * Containment is order-independent: a trap is innermost when no other active
93
+ * trap lives inside it. Correct for both mount orderings, and for unmount — once
94
+ * the inner trap pops, the outer contains nothing and resumes duty.
95
+ */
96
+ function isInnermostTrap(container) {
97
+ return !trapStack.some(function (other) {
98
+ return other !== container && container.contains(other);
99
+ });
100
+ }
101
+
102
+ /**
103
+ * True iff the element is rendered AND not inside an aria-hidden /
104
+ * inert / hidden / display:none ancestor. querySelectorAll picks
105
+ * those up indiscriminately, so re-filter at use time.
106
+ */
107
+ function isVisuallyFocusable(el) {
108
+ if (!el) return false;
109
+ if ("disabled" in el && el.disabled) return false;
110
+ if (el.getAttribute && el.getAttribute("aria-disabled") === "true") return false;
111
+ // Cheap visibility test — covers display:none and visibility:hidden.
112
+ // Note: elements with `display: contents` may report 0 rects but have
113
+ // focusable descendants; the descendants themselves still match if
114
+ // they have their own boxes, so this filter is a reasonable trade-off.
115
+ if (typeof el.getClientRects === "function" && el.getClientRects().length === 0) {
116
+ return false;
117
+ }
118
+ // Walk ancestors for hidden / aria-hidden / inert.
119
+ var node = el;
120
+ while (node && node !== document.body) {
121
+ if (node.hasAttribute && (node.hasAttribute("inert") || node.hasAttribute("hidden") || node.getAttribute("aria-hidden") === "true")) {
122
+ return false;
123
+ }
124
+ node = node.parentElement;
125
+ }
126
+ return true;
127
+ }
128
+ function useFocusTrap(ref, isActive) {
129
+ (0, _react.useEffect)(function () {
130
+ if (!isActive || !ref.current) return undefined;
131
+ var container = ref.current;
132
+ trapStack.push(container);
133
+ var getFocusable = function getFocusable() {
134
+ return Array.from(container.querySelectorAll(FOCUSABLE_SELECTORS)).filter(isVisuallyFocusable);
135
+ };
136
+ var trigger = document.activeElement;
137
+
138
+ // Initial focus, deferred to next frame so React has finished
139
+ // painting any conditional content. Cancellation handle stored
140
+ // so unmount-within-same-frame cannot leak a stale .focus() call.
141
+ var rafId = requestAnimationFrame(function () {
142
+ /* Only the innermost trap claims initial focus — same predicate as `trap()`
143
+ * below, so keyboard duty and initial focus can never disagree.
144
+ *
145
+ * Initial focus was previously unguarded: every trap focused on
146
+ * activation regardless of nesting, so on simultaneous mount the outer
147
+ * trap's rAF fired last and overwrote the inner trap's focus. */
148
+ if (!isInnermostTrap(container)) return;
149
+ var explicit = container.querySelector(AUTOFOCUS_SELECTORS);
150
+ var target = explicit && isVisuallyFocusable(explicit) ? explicit : getFocusable()[0];
151
+ if (target && typeof target.focus === "function") target.focus();
152
+ });
153
+ var trap = function trap(e) {
154
+ if (e.key !== "Tab") return;
155
+ // Only the innermost trap acts. Outer traps stay registered and defer.
156
+ // Containment, NOT stack position — see isInnermostTrap.
157
+ if (!isInnermostTrap(container)) return;
158
+ var els = getFocusable();
159
+ if (!els.length) {
160
+ // Pathological case (no focusable inside): swallow Tab so
161
+ // focus cannot escape into the page behind the trap.
162
+ e.preventDefault();
163
+ return;
164
+ }
165
+ var first = els[0];
166
+ var last = els[els.length - 1];
167
+ if (!first || !last) return;
168
+ var active = document.activeElement;
169
+
170
+ // Recovery: if focus is currently OUTSIDE the container, warp it
171
+ // back to the first focusable. Without this, an escaped focus
172
+ // (mount race, programmatic blur, SR virtual cursor) leaks Tab
173
+ // navigation to the page behind the trap.
174
+ if (!container.contains(active)) {
175
+ e.preventDefault();
176
+ first.focus();
177
+ return;
178
+ }
179
+ if (e.shiftKey && active === first) {
180
+ e.preventDefault();
181
+ last.focus();
182
+ } else if (!e.shiftKey && active === last) {
183
+ e.preventDefault();
184
+ first.focus();
185
+ }
186
+ };
187
+ document.addEventListener("keydown", trap, true);
188
+ return function () {
189
+ cancelAnimationFrame(rafId);
190
+
191
+ // Pop by reference (NOT by index) — tolerates out-of-order
192
+ // unmount sequences during portal teardown or hot-replace.
193
+ var idx = trapStack.lastIndexOf(container);
194
+ if (idx >= 0) trapStack.splice(idx, 1);
195
+ document.removeEventListener("keydown", trap, true);
196
+
197
+ // Restore focus only if the trigger is still mounted, focusable,
198
+ // and not currently disabled. Calling .focus() on a detached or
199
+ // disabled node silently leaves focus on <body> with no visible
200
+ // indicator — actively user-hostile.
201
+ if (trigger && trigger !== document.body && "focus" in trigger && typeof trigger.focus === "function" && document.body.contains(trigger) && !("disabled" in trigger && trigger.disabled)) {
202
+ trigger.focus();
203
+ }
204
+ };
205
+ }, [isActive, ref]);
206
+ }
207
+ //# sourceMappingURL=useFocusTrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.js","names":["_react","require","FOCUSABLE_SELECTORS","join","AUTOFOCUS_SELECTORS","trapStack","isInnermostTrap","container","some","other","contains","isVisuallyFocusable","el","disabled","getAttribute","getClientRects","length","node","document","body","hasAttribute","parentElement","useFocusTrap","ref","isActive","useEffect","current","undefined","push","getFocusable","Array","from","querySelectorAll","filter","trigger","activeElement","rafId","requestAnimationFrame","explicit","querySelector","target","focus","trap","e","key","els","preventDefault","first","last","active","shiftKey","addEventListener","cancelAnimationFrame","idx","lastIndexOf","splice","removeEventListener"],"sources":["../../../src/lib/v2/hooks/useFocusTrap.ts"],"sourcesContent":["import { useEffect, type RefObject } from \"react\";\r\n\r\n/**\r\n * useFocusTrap — Portnet UI v2\r\n *\r\n * Traps Tab / Shift+Tab inside `ref` while `isActive`.\r\n * On activation, focuses the first `[autofocus]` / `[data-autofocus]`\r\n * descendant if present, otherwise the first focusable child.\r\n * On deactivation, restores focus to the element that previously held\r\n * it (only if still in the DOM).\r\n *\r\n * WCAG 2.4.3, charter R-F.2.\r\n *\r\n * Implementation notes\r\n * - Keydown listener attached to `document` in capture phase. If\r\n * focus has somehow escaped the container, the next Tab is caught\r\n * and warped back inside.\r\n * - NESTED TRAPS — only the topmost trap on `trapStack` intercepts\r\n * Tab. Outer traps stay registered and resume duty when the inner\r\n * trap unmounts. This makes ConfirmDialog-in-Drawer-in-Modal\r\n * flows behave correctly.\r\n * - Focusable elements are filtered to exclude those inside\r\n * aria-hidden / inert / hidden / display:none subtrees, even\r\n * though querySelectorAll happily returns them.\r\n * - BOUNDARY SCOPE — Tab is intercepted only at the cycle edges\r\n * (Tab on `last`, Shift+Tab on `first`) plus the escaped-focus\r\n * recovery path. Mid-cycle moves are deliberately left to the\r\n * browser's native tab order.\r\n *\r\n * Consequence worth knowing: the filter above decides what counts\r\n * as `first` / `last`, so the trap never DELIVERS focus into a\r\n * filtered element — but it cannot stop the browser tabbing into\r\n * one mid-cycle. `hidden` and `inert` are unaffected (both remove\r\n * an element from the native tab order); `aria-hidden` is NOT, as\r\n * per spec it annotates only the accessibility tree. So a\r\n * focusable control inside `aria-hidden=\"true\"` IS still reachable\r\n * by Tab — that is a content defect (axe `aria-hidden-focus`), and\r\n * the fix is `inert` on the subtree, not more interception here.\r\n *\r\n * Full per-Tab interception would close that gap, at the cost of\r\n * taking over native traversal for every Modal / Drawer /\r\n * ConfirmDialog in the fleet — which also breaks radio-group\r\n * roving tabindex and any positive `tabindex` ordering. Not done\r\n * without a browser-level test bed. See the aria-hidden case in\r\n * __tests__/useFocusTrap.test.tsx.\r\n * - Cleanup never calls focus() on an unmounted or detached\r\n * trigger and cancels the initial-focus rAF.\r\n *\r\n * Escape handling is INTENTIONALLY OUT OF SCOPE — the consumer (Modal,\r\n * Drawer, ConfirmDialog) is responsible for closing on Escape per\r\n * R-F.1. Mixing concerns here would force every trap user to opt out.\r\n *\r\n * @param ref The container ref to trap focus inside. Accepts a\r\n * nullable `current` (`RefObject<T | null>`) so callers\r\n * can pass `useRef<HTMLElement>(null)` directly without a\r\n * cast — the effect no-ops until `current` is populated.\r\n * @param isActive Whether the trap is currently on.\r\n */\r\n\r\nconst FOCUSABLE_SELECTORS = [\r\n \"a[href]\",\r\n \"button:not(:disabled)\",\r\n \"input:not(:disabled)\",\r\n \"select:not(:disabled)\",\r\n \"textarea:not(:disabled)\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n '[contenteditable]:not([contenteditable=\"false\"])',\r\n \"audio[controls]\",\r\n \"video[controls]\",\r\n].join(\", \");\r\n\r\nconst AUTOFOCUS_SELECTORS = \"[autofocus], [data-autofocus]\";\r\n\r\n/**\r\n * Module-level stack of active trap containers. Only the LAST entry\r\n * (innermost trap) intercepts Tab; outer traps stay registered but\r\n * pass-through. Cleanup pops by reference to tolerate out-of-order\r\n * unmount sequences (portal teardown, hot-replace).\r\n */\r\nconst trapStack: HTMLElement[] = [];\r\n\r\n/**\r\n * Is `container` the INNERMOST active trap?\r\n *\r\n * ⚠ DO NOT REPLACE THIS WITH `trapStack[trapStack.length - 1] === container`.\r\n *\r\n * Stack POSITION does not track nesting depth. React runs CHILD effects before\r\n * PARENT effects, so when an outer and an inner trap mount in the SAME commit\r\n * (Modal rendering a ConfirmDialog, Drawer with a nested trap) the INNER trap is\r\n * pushed FIRST and the OUTER one LAST — making the last entry the OUTERMOST trap,\r\n * the exact opposite of the intent.\r\n *\r\n * Push order only happens to match nesting when the traps mount at different\r\n * times, which is the common case and why the bug stayed hidden. The\r\n * simultaneous-mount path gave Tab duty to the trap BEHIND the dialog the user\r\n * was looking at (R-M.2 / R-F.2).\r\n *\r\n * Containment is order-independent: a trap is innermost when no other active\r\n * trap lives inside it. Correct for both mount orderings, and for unmount — once\r\n * the inner trap pops, the outer contains nothing and resumes duty.\r\n */\r\nfunction isInnermostTrap(container: HTMLElement): boolean {\r\n return !trapStack.some(\r\n (other) => other !== container && container.contains(other)\r\n );\r\n}\r\n\r\n/**\r\n * True iff the element is rendered AND not inside an aria-hidden /\r\n * inert / hidden / display:none ancestor. querySelectorAll picks\r\n * those up indiscriminately, so re-filter at use time.\r\n */\r\nfunction isVisuallyFocusable(el: Element | null): el is HTMLElement {\r\n if (!el) return false;\r\n if (\"disabled\" in el && el.disabled) return false;\r\n if (el.getAttribute && el.getAttribute(\"aria-disabled\") === \"true\") return false;\r\n // Cheap visibility test — covers display:none and visibility:hidden.\r\n // Note: elements with `display: contents` may report 0 rects but have\r\n // focusable descendants; the descendants themselves still match if\r\n // they have their own boxes, so this filter is a reasonable trade-off.\r\n if (typeof el.getClientRects === \"function\" && el.getClientRects().length === 0) {\r\n return false;\r\n }\r\n // Walk ancestors for hidden / aria-hidden / inert.\r\n let node: Element | null = el;\r\n while (node && node !== document.body) {\r\n if (node.hasAttribute && (\r\n node.hasAttribute(\"inert\") ||\r\n node.hasAttribute(\"hidden\") ||\r\n node.getAttribute(\"aria-hidden\") === \"true\"\r\n )) {\r\n return false;\r\n }\r\n node = node.parentElement;\r\n }\r\n return true;\r\n}\r\n\r\nexport default function useFocusTrap<T extends HTMLElement = HTMLElement>(\r\n ref: RefObject<T | null>,\r\n isActive: boolean\r\n): void {\r\n useEffect(() => {\r\n if (!isActive || !ref.current) return undefined;\r\n\r\n const container = ref.current;\r\n trapStack.push(container);\r\n\r\n const getFocusable = (): HTMLElement[] =>\r\n Array.from(container.querySelectorAll(FOCUSABLE_SELECTORS)).filter(isVisuallyFocusable);\r\n\r\n const trigger = document.activeElement;\r\n\r\n // Initial focus, deferred to next frame so React has finished\r\n // painting any conditional content. Cancellation handle stored\r\n // so unmount-within-same-frame cannot leak a stale .focus() call.\r\n const rafId = requestAnimationFrame(() => {\r\n /* Only the innermost trap claims initial focus — same predicate as `trap()`\r\n * below, so keyboard duty and initial focus can never disagree.\r\n *\r\n * Initial focus was previously unguarded: every trap focused on\r\n * activation regardless of nesting, so on simultaneous mount the outer\r\n * trap's rAF fired last and overwrote the inner trap's focus. */\r\n if (!isInnermostTrap(container)) return;\r\n\r\n const explicit = container.querySelector(AUTOFOCUS_SELECTORS);\r\n const target = (explicit && isVisuallyFocusable(explicit))\r\n ? explicit\r\n : getFocusable()[0];\r\n if (target && typeof target.focus === \"function\") target.focus();\r\n });\r\n\r\n const trap = (e: KeyboardEvent): void => {\r\n if (e.key !== \"Tab\") return;\r\n // Only the innermost trap acts. Outer traps stay registered and defer.\r\n // Containment, NOT stack position — see isInnermostTrap.\r\n if (!isInnermostTrap(container)) return;\r\n\r\n const els = getFocusable();\r\n if (!els.length) {\r\n // Pathological case (no focusable inside): swallow Tab so\r\n // focus cannot escape into the page behind the trap.\r\n e.preventDefault();\r\n return;\r\n }\r\n const first = els[0];\r\n const last = els[els.length - 1];\r\n if (!first || !last) return;\r\n const active = document.activeElement;\r\n\r\n // Recovery: if focus is currently OUTSIDE the container, warp it\r\n // back to the first focusable. Without this, an escaped focus\r\n // (mount race, programmatic blur, SR virtual cursor) leaks Tab\r\n // navigation to the page behind the trap.\r\n if (!container.contains(active)) {\r\n e.preventDefault();\r\n first.focus();\r\n return;\r\n }\r\n\r\n if (e.shiftKey && active === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && active === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", trap, true);\r\n\r\n return () => {\r\n cancelAnimationFrame(rafId);\r\n\r\n // Pop by reference (NOT by index) — tolerates out-of-order\r\n // unmount sequences during portal teardown or hot-replace.\r\n const idx = trapStack.lastIndexOf(container);\r\n if (idx >= 0) trapStack.splice(idx, 1);\r\n\r\n document.removeEventListener(\"keydown\", trap, true);\r\n\r\n // Restore focus only if the trigger is still mounted, focusable,\r\n // and not currently disabled. Calling .focus() on a detached or\r\n // disabled node silently leaves focus on <body> with no visible\r\n // indicator — actively user-hostile.\r\n if (\r\n trigger &&\r\n trigger !== document.body &&\r\n \"focus\" in trigger &&\r\n typeof trigger.focus === \"function\" &&\r\n document.body.contains(trigger) &&\r\n !(\"disabled\" in trigger && trigger.disabled)\r\n ) {\r\n trigger.focus();\r\n }\r\n };\r\n }, [isActive, ref]);\r\n}\r\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,mBAAmB,GAAG,CAC1B,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,kDAAkD,EAClD,iBAAiB,EACjB,iBAAiB,CAClB,CAACC,IAAI,CAAC,IAAI,CAAC;AAEZ,IAAMC,mBAAmB,GAAG,+BAA+B;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,SAAwB,GAAG,EAAE;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,SAAsB,EAAW;EACxD,OAAO,CAACF,SAAS,CAACG,IAAI,CACpB,UAACC,KAAK;IAAA,OAAKA,KAAK,KAAKF,SAAS,IAAIA,SAAS,CAACG,QAAQ,CAACD,KAAK,CAAC;EAAA,CAC7D,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,mBAAmBA,CAACC,EAAkB,EAAqB;EAClE,IAAI,CAACA,EAAE,EAAE,OAAO,KAAK;EACrB,IAAI,UAAU,IAAIA,EAAE,IAAIA,EAAE,CAACC,QAAQ,EAAE,OAAO,KAAK;EACjD,IAAID,EAAE,CAACE,YAAY,IAAIF,EAAE,CAACE,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK;EAChF;EACA;EACA;EACA;EACA,IAAI,OAAOF,EAAE,CAACG,cAAc,KAAK,UAAU,IAAIH,EAAE,CAACG,cAAc,CAAC,CAAC,CAACC,M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","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * useFormAutoSave — persist Formik (or any form) values to
3
+ * localStorage with debounced writes, and expose draft-restore
4
+ * affordances to the host. Pure orchestration; no UI.
5
+ *
6
+ * Usage:
7
+ * import { v2 } from "@portnet/ui";
8
+ * const { useFormAutoSave, Banner } = v2;
9
+ *
10
+ * const { hasDraft, lastSavedAt, restoreDraft, clearDraft } =
11
+ * useFormAutoSave({
12
+ * storageKey: `addpe:autorisation:draft:${id || "new"}`,
13
+ * values: formik.values,
14
+ * setValues: formik.setValues,
15
+ * enabled: !id, // CREATE only, not edit
16
+ * });
17
+ *
18
+ * Safety:
19
+ * - All localStorage access is try/catch-wrapped.
20
+ * - Empty-state values are skipped so we don't produce noise entries.
21
+ * - When a draft exists but hasn't been actioned (hasDraft=true),
22
+ * the debounced write is PAUSED to prevent overwriting the draft
23
+ * with empty initial values before the user decides to restore/ignore.
24
+ */
25
+ type FormAutoSaveOptions<Values> = {
26
+ storageKey: string;
27
+ values: Values;
28
+ /** Required if you call restoreDraft(). */
29
+ setValues?: (values: Values) => void;
30
+ enabled?: boolean;
31
+ debounceMs?: number;
32
+ initialEmptyCheck?: (values: Values) => boolean;
33
+ };
34
+ type FormAutoSaveResult = {
35
+ hasDraft: boolean;
36
+ lastSavedAt: Date | null;
37
+ restoreDraft: () => boolean;
38
+ clearDraft: () => void;
39
+ };
40
+ export default function useFormAutoSave<Values>({ storageKey, values, setValues, enabled, debounceMs, initialEmptyCheck, }: FormAutoSaveOptions<Values>): FormAutoSaveResult;
41
+ export {};
42
+ //# sourceMappingURL=useFormAutoSave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormAutoSave.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/hooks/useFormAutoSave.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,KAAK,mBAAmB,CAAC,MAAM,IAAI;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAM,EAAE,EAC9C,UAAU,EACV,MAAM,EACN,SAAS,EACT,OAAc,EACd,UAAgB,EAChB,iBAAqC,GACtC,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,kBAAkB,CA+HlD"}