@dnb/eufemia 10.23.0 → 10.25.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 (498) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/cjs/components/accordion/style/dnb-accordion.css +6 -2
  3. package/cjs/components/accordion/style/dnb-accordion.min.css +2 -2
  4. package/cjs/components/accordion/style/dnb-accordion.scss +8 -2
  5. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +23 -4
  6. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  7. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +25 -5
  8. package/cjs/components/anchor/Anchor.d.ts +1 -1
  9. package/cjs/components/anchor/Anchor.js +2 -2
  10. package/cjs/components/anchor/Anchor.js.map +1 -1
  11. package/cjs/components/anchor/style/anchor-mixins.scss +46 -3
  12. package/cjs/components/anchor/style/dnb-anchor.css +73 -4
  13. package/cjs/components/anchor/style/dnb-anchor.min.css +1 -1
  14. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  15. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  16. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  17. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  18. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  19. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  20. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  21. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  22. package/cjs/components/autocomplete/Autocomplete.d.ts +0 -15
  23. package/cjs/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  24. package/cjs/components/autocomplete/AutocompleteDocs.js +293 -0
  25. package/cjs/components/autocomplete/AutocompleteDocs.js.map +1 -0
  26. package/cjs/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  27. package/cjs/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  28. package/cjs/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  29. package/cjs/components/button/Button.js +1 -1
  30. package/cjs/components/button/Button.js.map +1 -1
  31. package/cjs/components/dropdown/Dropdown.d.ts +0 -3
  32. package/cjs/components/flex/style/dnb-flex.css +1 -1
  33. package/cjs/components/flex/style/dnb-flex.min.css +1 -1
  34. package/cjs/components/flex/style/flex-stack.scss +1 -1
  35. package/cjs/components/icon/style/dnb-icon.css +2 -2
  36. package/cjs/components/icon/style/dnb-icon.min.css +1 -1
  37. package/cjs/components/icon/style/dnb-icon.scss +1 -1
  38. package/cjs/components/input/Input.js +1 -1
  39. package/cjs/components/input/Input.js.map +1 -1
  40. package/cjs/components/input/InputDocs.js +2 -2
  41. package/cjs/components/input/InputDocs.js.map +1 -1
  42. package/cjs/components/table/style/dnb-table.css +6 -0
  43. package/cjs/components/table/style/dnb-table.min.css +1 -1
  44. package/cjs/components/table/style/table-th.scss +9 -25
  45. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  46. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  47. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  48. package/cjs/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  49. package/cjs/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  50. package/cjs/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  51. package/cjs/components/textarea/Textarea.d.ts +9 -0
  52. package/cjs/components/textarea/Textarea.js +21 -5
  53. package/cjs/components/textarea/Textarea.js.map +1 -1
  54. package/cjs/components/textarea/TextareaDocs.js +10 -0
  55. package/cjs/components/textarea/TextareaDocs.js.map +1 -1
  56. package/cjs/components/textarea/style/dnb-textarea.css +69 -26
  57. package/cjs/components/textarea/style/dnb-textarea.min.css +1 -1
  58. package/cjs/components/textarea/style/dnb-textarea.scss +83 -31
  59. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  60. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  61. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  62. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  63. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  64. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  65. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  66. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  67. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  68. package/cjs/extensions/forms/DataContext/At/At.js +6 -6
  69. package/cjs/extensions/forms/DataContext/At/At.js.map +1 -1
  70. package/cjs/extensions/forms/DataContext/Context.d.ts +5 -2
  71. package/cjs/extensions/forms/DataContext/Context.js +1 -0
  72. package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
  73. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  74. package/cjs/extensions/forms/DataContext/Provider/Provider.js +52 -26
  75. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  76. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +5 -5
  77. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  78. package/cjs/extensions/forms/Field/String/String.d.ts +6 -6
  79. package/cjs/extensions/forms/Field/String/String.js +13 -11
  80. package/cjs/extensions/forms/Field/String/String.js.map +1 -1
  81. package/cjs/extensions/forms/Form/Appearance/Appearance.js +3 -0
  82. package/cjs/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  83. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  84. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  85. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  86. package/cjs/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  87. package/cjs/extensions/forms/Form/Handler/Handler.js +3 -3
  88. package/cjs/extensions/forms/Form/Handler/Handler.js.map +1 -1
  89. package/cjs/extensions/forms/StepsLayout/Step/Step.js +2 -3
  90. package/cjs/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  91. package/cjs/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  92. package/cjs/extensions/forms/StepsLayout/StepsContext.js +6 -1
  93. package/cjs/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  94. package/cjs/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  95. package/cjs/extensions/forms/StepsLayout/StepsLayout.js +86 -50
  96. package/cjs/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  97. package/cjs/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  98. package/cjs/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  99. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  100. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  101. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  102. package/cjs/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  103. package/cjs/extensions/forms/StepsLayout/useStep.js +19 -0
  104. package/cjs/extensions/forms/StepsLayout/useStep.js.map +1 -0
  105. package/cjs/extensions/forms/hooks/useFieldProps.js +82 -58
  106. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  107. package/cjs/extensions/forms/style/dnb-forms.css +3 -3
  108. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  109. package/cjs/extensions/forms/types.d.ts +2 -2
  110. package/cjs/extensions/forms/types.js.map +1 -1
  111. package/cjs/extensions/forms/utils/ajv.js +6 -2
  112. package/cjs/extensions/forms/utils/ajv.js.map +1 -1
  113. package/cjs/fragments/drawer-list/DrawerList.d.ts +95 -1
  114. package/cjs/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  115. package/cjs/fragments/drawer-list/DrawerListDocs.js +188 -0
  116. package/cjs/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  117. package/cjs/shared/Eufemia.d.ts +1 -1
  118. package/cjs/shared/Eufemia.js +2 -2
  119. package/cjs/shared/Eufemia.js.map +1 -1
  120. package/cjs/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  121. package/cjs/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  122. package/cjs/style/core/scopes.scss +1 -1
  123. package/cjs/style/dnb-ui-basis.css +1 -1
  124. package/cjs/style/dnb-ui-basis.min.css +1 -1
  125. package/cjs/style/dnb-ui-body.css +1 -1
  126. package/cjs/style/dnb-ui-body.min.css +1 -1
  127. package/cjs/style/dnb-ui-components.css +160 -39
  128. package/cjs/style/dnb-ui-components.min.css +3 -3
  129. package/cjs/style/dnb-ui-core.css +1 -1
  130. package/cjs/style/dnb-ui-core.min.css +1 -1
  131. package/cjs/style/dnb-ui-extensions.css +3 -3
  132. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  133. package/cjs/style/dnb-ui-forms.css +3 -3
  134. package/cjs/style/dnb-ui-forms.min.css +1 -1
  135. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +178 -83
  136. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  137. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -3
  138. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  139. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +3 -3
  140. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  141. package/cjs/style/themes/theme-eiendom/properties.js +10 -10
  142. package/cjs/style/themes/theme-eiendom/properties.js.map +1 -1
  143. package/cjs/style/themes/theme-sbanken/properties.js +10 -10
  144. package/cjs/style/themes/theme-sbanken/properties.js.map +1 -1
  145. package/cjs/style/themes/theme-sbanken/properties.scss +10 -10
  146. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  147. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  148. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +204 -114
  149. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  150. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -3
  151. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  152. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +3 -3
  153. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  154. package/cjs/style/themes/theme-ui/properties.js +10 -10
  155. package/cjs/style/themes/theme-ui/properties.js.map +1 -1
  156. package/cjs/style/themes/theme-ui/ui-theme-components.css +178 -81
  157. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  158. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +3 -3
  159. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  160. package/cjs/style/themes/theme-ui/ui-theme-forms.css +3 -3
  161. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  162. package/cjs/style/themes/theme-ui/ui-theme-tags.css +37 -9
  163. package/cjs/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  164. package/components/accordion/style/dnb-accordion.css +6 -2
  165. package/components/accordion/style/dnb-accordion.min.css +2 -2
  166. package/components/accordion/style/dnb-accordion.scss +8 -2
  167. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +23 -4
  168. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  169. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +25 -5
  170. package/components/anchor/Anchor.d.ts +1 -1
  171. package/components/anchor/Anchor.js +2 -2
  172. package/components/anchor/Anchor.js.map +1 -1
  173. package/components/anchor/style/anchor-mixins.scss +46 -3
  174. package/components/anchor/style/dnb-anchor.css +73 -4
  175. package/components/anchor/style/dnb-anchor.min.css +1 -1
  176. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  177. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  178. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  179. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  180. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  181. package/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  182. package/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  183. package/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  184. package/components/autocomplete/Autocomplete.d.ts +0 -15
  185. package/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  186. package/components/autocomplete/AutocompleteDocs.js +285 -0
  187. package/components/autocomplete/AutocompleteDocs.js.map +1 -0
  188. package/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  189. package/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  190. package/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  191. package/components/button/Button.js +1 -1
  192. package/components/button/Button.js.map +1 -1
  193. package/components/dropdown/Dropdown.d.ts +0 -3
  194. package/components/flex/style/dnb-flex.css +1 -1
  195. package/components/flex/style/dnb-flex.min.css +1 -1
  196. package/components/flex/style/flex-stack.scss +1 -1
  197. package/components/icon/style/dnb-icon.css +2 -2
  198. package/components/icon/style/dnb-icon.min.css +1 -1
  199. package/components/icon/style/dnb-icon.scss +1 -1
  200. package/components/input/Input.js +1 -1
  201. package/components/input/Input.js.map +1 -1
  202. package/components/input/InputDocs.js +2 -2
  203. package/components/input/InputDocs.js.map +1 -1
  204. package/components/table/style/dnb-table.css +6 -0
  205. package/components/table/style/dnb-table.min.css +1 -1
  206. package/components/table/style/table-th.scss +9 -25
  207. package/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  208. package/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  209. package/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  210. package/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  211. package/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  212. package/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  213. package/components/textarea/Textarea.d.ts +9 -0
  214. package/components/textarea/Textarea.js +21 -5
  215. package/components/textarea/Textarea.js.map +1 -1
  216. package/components/textarea/TextareaDocs.js +10 -0
  217. package/components/textarea/TextareaDocs.js.map +1 -1
  218. package/components/textarea/style/dnb-textarea.css +69 -26
  219. package/components/textarea/style/dnb-textarea.min.css +1 -1
  220. package/components/textarea/style/dnb-textarea.scss +83 -31
  221. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  222. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  223. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  224. package/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  225. package/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  226. package/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  227. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  228. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  229. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  230. package/es/components/accordion/style/dnb-accordion.css +6 -2
  231. package/es/components/accordion/style/dnb-accordion.min.css +2 -2
  232. package/es/components/accordion/style/dnb-accordion.scss +8 -2
  233. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +23 -4
  234. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  235. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +25 -5
  236. package/es/components/anchor/Anchor.d.ts +1 -1
  237. package/es/components/anchor/Anchor.js +2 -2
  238. package/es/components/anchor/Anchor.js.map +1 -1
  239. package/es/components/anchor/style/anchor-mixins.scss +46 -3
  240. package/es/components/anchor/style/dnb-anchor.css +73 -4
  241. package/es/components/anchor/style/dnb-anchor.min.css +1 -1
  242. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  243. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  244. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  245. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  246. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  247. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  248. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  249. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  250. package/es/components/autocomplete/Autocomplete.d.ts +0 -15
  251. package/es/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  252. package/es/components/autocomplete/AutocompleteDocs.js +285 -0
  253. package/es/components/autocomplete/AutocompleteDocs.js.map +1 -0
  254. package/es/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  255. package/es/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  256. package/es/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  257. package/es/components/button/Button.js +1 -1
  258. package/es/components/button/Button.js.map +1 -1
  259. package/es/components/dropdown/Dropdown.d.ts +0 -3
  260. package/es/components/flex/style/dnb-flex.css +1 -1
  261. package/es/components/flex/style/dnb-flex.min.css +1 -1
  262. package/es/components/flex/style/flex-stack.scss +1 -1
  263. package/es/components/icon/style/dnb-icon.css +2 -2
  264. package/es/components/icon/style/dnb-icon.min.css +1 -1
  265. package/es/components/icon/style/dnb-icon.scss +1 -1
  266. package/es/components/input/Input.js +1 -1
  267. package/es/components/input/Input.js.map +1 -1
  268. package/es/components/input/InputDocs.js +2 -2
  269. package/es/components/input/InputDocs.js.map +1 -1
  270. package/es/components/table/style/dnb-table.css +6 -0
  271. package/es/components/table/style/dnb-table.min.css +1 -1
  272. package/es/components/table/style/table-th.scss +9 -25
  273. package/es/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  274. package/es/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  275. package/es/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  276. package/es/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  277. package/es/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  278. package/es/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  279. package/es/components/textarea/Textarea.d.ts +9 -0
  280. package/es/components/textarea/Textarea.js +21 -5
  281. package/es/components/textarea/Textarea.js.map +1 -1
  282. package/es/components/textarea/TextareaDocs.js +10 -0
  283. package/es/components/textarea/TextareaDocs.js.map +1 -1
  284. package/es/components/textarea/style/dnb-textarea.css +69 -26
  285. package/es/components/textarea/style/dnb-textarea.min.css +1 -1
  286. package/es/components/textarea/style/dnb-textarea.scss +83 -31
  287. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  288. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  289. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  290. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  291. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  292. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  293. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  294. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  295. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  296. package/es/extensions/forms/DataContext/At/At.js +7 -7
  297. package/es/extensions/forms/DataContext/At/At.js.map +1 -1
  298. package/es/extensions/forms/DataContext/Context.d.ts +5 -2
  299. package/es/extensions/forms/DataContext/Context.js +1 -0
  300. package/es/extensions/forms/DataContext/Context.js.map +1 -1
  301. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  302. package/es/extensions/forms/DataContext/Provider/Provider.js +51 -26
  303. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  304. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +5 -5
  305. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  306. package/es/extensions/forms/Field/String/String.d.ts +6 -6
  307. package/es/extensions/forms/Field/String/String.js +13 -11
  308. package/es/extensions/forms/Field/String/String.js.map +1 -1
  309. package/es/extensions/forms/Form/Appearance/Appearance.js +3 -0
  310. package/es/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  311. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  312. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  313. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  314. package/es/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  315. package/es/extensions/forms/Form/Handler/Handler.js +3 -3
  316. package/es/extensions/forms/Form/Handler/Handler.js.map +1 -1
  317. package/es/extensions/forms/StepsLayout/Step/Step.js +2 -3
  318. package/es/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  319. package/es/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  320. package/es/extensions/forms/StepsLayout/StepsContext.js +6 -1
  321. package/es/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  322. package/es/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  323. package/es/extensions/forms/StepsLayout/StepsLayout.js +82 -49
  324. package/es/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  325. package/es/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  326. package/es/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  327. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  328. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  329. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  330. package/es/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  331. package/es/extensions/forms/StepsLayout/useStep.js +12 -0
  332. package/es/extensions/forms/StepsLayout/useStep.js.map +1 -0
  333. package/es/extensions/forms/hooks/useFieldProps.js +82 -58
  334. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  335. package/es/extensions/forms/style/dnb-forms.css +3 -3
  336. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  337. package/es/extensions/forms/types.d.ts +2 -2
  338. package/es/extensions/forms/types.js.map +1 -1
  339. package/es/extensions/forms/utils/ajv.js +6 -2
  340. package/es/extensions/forms/utils/ajv.js.map +1 -1
  341. package/es/fragments/drawer-list/DrawerList.d.ts +95 -1
  342. package/es/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  343. package/es/fragments/drawer-list/DrawerListDocs.js +180 -0
  344. package/es/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  345. package/es/shared/Eufemia.d.ts +1 -1
  346. package/es/shared/Eufemia.js +2 -2
  347. package/es/shared/Eufemia.js.map +1 -1
  348. package/es/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  349. package/es/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  350. package/es/style/core/scopes.scss +1 -1
  351. package/es/style/dnb-ui-basis.css +1 -1
  352. package/es/style/dnb-ui-basis.min.css +1 -1
  353. package/es/style/dnb-ui-body.css +1 -1
  354. package/es/style/dnb-ui-body.min.css +1 -1
  355. package/es/style/dnb-ui-components.css +160 -39
  356. package/es/style/dnb-ui-components.min.css +3 -3
  357. package/es/style/dnb-ui-core.css +1 -1
  358. package/es/style/dnb-ui-core.min.css +1 -1
  359. package/es/style/dnb-ui-extensions.css +3 -3
  360. package/es/style/dnb-ui-extensions.min.css +1 -1
  361. package/es/style/dnb-ui-forms.css +3 -3
  362. package/es/style/dnb-ui-forms.min.css +1 -1
  363. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +178 -83
  364. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  365. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -3
  366. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  367. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +3 -3
  368. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  369. package/es/style/themes/theme-eiendom/properties.js +10 -10
  370. package/es/style/themes/theme-eiendom/properties.js.map +1 -1
  371. package/es/style/themes/theme-sbanken/properties.js +10 -10
  372. package/es/style/themes/theme-sbanken/properties.js.map +1 -1
  373. package/es/style/themes/theme-sbanken/properties.scss +10 -10
  374. package/es/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  375. package/es/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  376. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +204 -114
  377. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  378. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -3
  379. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  380. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +3 -3
  381. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  382. package/es/style/themes/theme-ui/properties.js +10 -10
  383. package/es/style/themes/theme-ui/properties.js.map +1 -1
  384. package/es/style/themes/theme-ui/ui-theme-components.css +178 -81
  385. package/es/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  386. package/es/style/themes/theme-ui/ui-theme-extensions.css +3 -3
  387. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  388. package/es/style/themes/theme-ui/ui-theme-forms.css +3 -3
  389. package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  390. package/es/style/themes/theme-ui/ui-theme-tags.css +37 -9
  391. package/es/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  392. package/esm/dnb-ui-basis.min.mjs +1 -1
  393. package/esm/dnb-ui-components.min.mjs +1 -1
  394. package/esm/dnb-ui-elements.min.mjs +1 -1
  395. package/esm/dnb-ui-extensions.min.mjs +2 -2
  396. package/esm/dnb-ui-lib.min.mjs +1 -1
  397. package/extensions/forms/DataContext/At/At.js +7 -7
  398. package/extensions/forms/DataContext/At/At.js.map +1 -1
  399. package/extensions/forms/DataContext/Context.d.ts +5 -2
  400. package/extensions/forms/DataContext/Context.js +1 -0
  401. package/extensions/forms/DataContext/Context.js.map +1 -1
  402. package/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  403. package/extensions/forms/DataContext/Provider/Provider.js +52 -26
  404. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  405. package/extensions/forms/DataContext/Provider/ProviderDocs.js +5 -5
  406. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  407. package/extensions/forms/Field/String/String.d.ts +6 -6
  408. package/extensions/forms/Field/String/String.js +13 -11
  409. package/extensions/forms/Field/String/String.js.map +1 -1
  410. package/extensions/forms/Form/Appearance/Appearance.js +3 -0
  411. package/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  412. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  413. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  414. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  415. package/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  416. package/extensions/forms/Form/Handler/Handler.js +3 -3
  417. package/extensions/forms/Form/Handler/Handler.js.map +1 -1
  418. package/extensions/forms/StepsLayout/Step/Step.js +2 -3
  419. package/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  420. package/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  421. package/extensions/forms/StepsLayout/StepsContext.js +6 -1
  422. package/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  423. package/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  424. package/extensions/forms/StepsLayout/StepsLayout.js +85 -51
  425. package/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  426. package/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  427. package/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  428. package/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  429. package/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  430. package/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  431. package/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  432. package/extensions/forms/StepsLayout/useStep.js +13 -0
  433. package/extensions/forms/StepsLayout/useStep.js.map +1 -0
  434. package/extensions/forms/hooks/useFieldProps.js +82 -58
  435. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  436. package/extensions/forms/style/dnb-forms.css +3 -3
  437. package/extensions/forms/style/dnb-forms.min.css +1 -1
  438. package/extensions/forms/types.d.ts +2 -2
  439. package/extensions/forms/types.js.map +1 -1
  440. package/extensions/forms/utils/ajv.js +6 -2
  441. package/extensions/forms/utils/ajv.js.map +1 -1
  442. package/fragments/drawer-list/DrawerList.d.ts +95 -1
  443. package/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  444. package/fragments/drawer-list/DrawerListDocs.js +180 -0
  445. package/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  446. package/package.json +1 -1
  447. package/shared/Eufemia.d.ts +1 -1
  448. package/shared/Eufemia.js +2 -2
  449. package/shared/Eufemia.js.map +1 -1
  450. package/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  451. package/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  452. package/style/core/scopes.scss +1 -1
  453. package/style/dnb-ui-basis.css +1 -1
  454. package/style/dnb-ui-basis.min.css +1 -1
  455. package/style/dnb-ui-body.css +1 -1
  456. package/style/dnb-ui-body.min.css +1 -1
  457. package/style/dnb-ui-components.css +160 -39
  458. package/style/dnb-ui-components.min.css +3 -3
  459. package/style/dnb-ui-core.css +1 -1
  460. package/style/dnb-ui-core.min.css +1 -1
  461. package/style/dnb-ui-extensions.css +3 -3
  462. package/style/dnb-ui-extensions.min.css +1 -1
  463. package/style/dnb-ui-forms.css +3 -3
  464. package/style/dnb-ui-forms.min.css +1 -1
  465. package/style/themes/theme-eiendom/eiendom-theme-components.css +178 -83
  466. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  467. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -3
  468. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  469. package/style/themes/theme-eiendom/eiendom-theme-forms.css +3 -3
  470. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  471. package/style/themes/theme-eiendom/properties.js +10 -10
  472. package/style/themes/theme-eiendom/properties.js.map +1 -1
  473. package/style/themes/theme-sbanken/properties.js +10 -10
  474. package/style/themes/theme-sbanken/properties.js.map +1 -1
  475. package/style/themes/theme-sbanken/properties.scss +10 -10
  476. package/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  477. package/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  478. package/style/themes/theme-sbanken/sbanken-theme-components.css +204 -114
  479. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  480. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -3
  481. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  482. package/style/themes/theme-sbanken/sbanken-theme-forms.css +3 -3
  483. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  484. package/style/themes/theme-ui/properties.js +10 -10
  485. package/style/themes/theme-ui/properties.js.map +1 -1
  486. package/style/themes/theme-ui/ui-theme-components.css +178 -81
  487. package/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  488. package/style/themes/theme-ui/ui-theme-extensions.css +3 -3
  489. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  490. package/style/themes/theme-ui/ui-theme-forms.css +3 -3
  491. package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  492. package/style/themes/theme-ui/ui-theme-tags.css +37 -9
  493. package/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  494. package/umd/dnb-ui-basis.min.js +1 -1
  495. package/umd/dnb-ui-components.min.js +1 -1
  496. package/umd/dnb-ui-elements.min.js +1 -1
  497. package/umd/dnb-ui-extensions.min.js +3 -3
  498. package/umd/dnb-ui-lib.min.js +1 -1
@@ -3,7 +3,7 @@
3
3
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
- import React, { useContext, useMemo } from 'react';
6
+ import React, { useCallback, useContext } from 'react';
7
7
  import pointer from 'json-pointer';
8
8
  import Context from '../Context';
9
9
  function At(props) {
@@ -15,19 +15,19 @@ function At(props) {
15
15
  const dataContext = useContext(Context);
16
16
  const {
17
17
  data: contextData,
18
- handlePathChange: contextHandlePathChange
18
+ handlePathChange: handlePathChangeDataContext
19
19
  } = dataContext;
20
20
  const data = contextData && pointer.has(contextData, path) ? pointer.get(contextData, path) : undefined;
21
- const handlePathChange = useMemo(() => contextHandlePathChange ? (changePath, value) => {
22
- contextHandlePathChange(`${path}${changePath}`, value);
23
- } : undefined, [contextHandlePathChange, path]);
21
+ const handlePathChange = useCallback((changePath, value) => {
22
+ handlePathChangeDataContext(`${path}${changePath}`, value);
23
+ }, [handlePathChangeDataContext, path]);
24
24
  if (iterate) {
25
25
  if (!Array.isArray(data)) {
26
26
  return null;
27
27
  }
28
28
  return React.createElement(React.Fragment, null, data.map((element, i) => {
29
- const handlePathChange = contextHandlePathChange ? (changePath, value) => {
30
- contextHandlePathChange(`${path}/${i}${changePath}`, value);
29
+ const handlePathChange = handlePathChangeDataContext ? (changePath, value) => {
30
+ handlePathChangeDataContext(`${path}/${i}${changePath}`, value);
31
31
  } : undefined;
32
32
  return React.createElement(Context.Provider, {
33
33
  key: `element${i}`,
@@ -1 +1 @@
1
- {"version":3,"file":"At.js","names":["React","useContext","useMemo","pointer","Context","At","props","path","iterate","children","dataContext","data","contextData","handlePathChange","contextHandlePathChange","has","get","undefined","changePath","value","Array","isArray","createElement","Fragment","map","element","i","Provider","key","_objectSpread","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/DataContext/At/At.tsx"],"sourcesContent":["import React, { useContext, useMemo } from 'react'\nimport pointer from 'json-pointer'\nimport type { ComponentProps } from '../../types'\nimport Context, { ContextState } from '../Context'\n\nexport type Props = ComponentProps & {\n /** JSON Pointer for where in the source dataset to point at in sub components */\n path?: string\n iterate?: boolean\n children?: React.ReactNode\n}\n\nfunction At(props: Props) {\n const { path = '/', iterate, children } = props\n const dataContext = useContext(Context)\n const { data: contextData, handlePathChange: contextHandlePathChange } =\n dataContext\n\n const data =\n contextData && pointer.has(contextData, path)\n ? pointer.get(contextData, path)\n : undefined\n\n const handlePathChange = useMemo(\n () =>\n (contextHandlePathChange\n ? (changePath, value) => {\n contextHandlePathChange(`${path}${changePath}`, value)\n }\n : undefined) as ContextState['handlePathChange'],\n [contextHandlePathChange, path]\n )\n\n if (iterate) {\n if (!Array.isArray(data)) {\n return null\n }\n return (\n <>\n {data.map((element, i) => {\n const handlePathChange = (\n contextHandlePathChange\n ? (changePath, value) => {\n contextHandlePathChange(\n `${path}/${i}${changePath}`,\n value\n )\n }\n : undefined\n ) as ContextState['handlePathChange']\n\n return (\n <Context.Provider\n key={`element${i}`}\n value={{\n ...dataContext,\n data: element,\n handlePathChange,\n }}\n >\n {children}\n </Context.Provider>\n )\n })}\n </>\n )\n }\n\n return (\n <Context.Provider\n value={{\n ...dataContext,\n data,\n handlePathChange,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nAt._supportsSpacingProps = true\nexport default At\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAClD,OAAOC,OAAO,MAAM,cAAc;AAElC,OAAOC,OAAO,MAAwB,YAAY;AASlD,SAASC,EAAEA,CAACC,KAAY,EAAE;EACxB,MAAM;IAAEC,IAAI,GAAG,GAAG;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGH,KAAK;EAC/C,MAAMI,WAAW,GAAGT,UAAU,CAACG,OAAO,CAAC;EACvC,MAAM;IAAEO,IAAI,EAAEC,WAAW;IAAEC,gBAAgB,EAAEC;EAAwB,CAAC,GACpEJ,WAAW;EAEb,MAAMC,IAAI,GACRC,WAAW,IAAIT,OAAO,CAACY,GAAG,CAACH,WAAW,EAAEL,IAAI,CAAC,GACzCJ,OAAO,CAACa,GAAG,CAACJ,WAAW,EAAEL,IAAI,CAAC,GAC9BU,SAAS;EAEf,MAAMJ,gBAAgB,GAAGX,OAAO,CAC9B,MACGY,uBAAuB,GACpB,CAACI,UAAU,EAAEC,KAAK,KAAK;IACrBL,uBAAuB,CAAE,GAAEP,IAAK,GAAEW,UAAW,EAAC,EAAEC,KAAK,CAAC;EACxD,CAAC,GACDF,SAA8C,EACpD,CAACH,uBAAuB,EAAEP,IAAI,CAChC,CAAC;EAED,IAAIC,OAAO,EAAE;IACX,IAAI,CAACY,KAAK,CAACC,OAAO,CAACV,IAAI,CAAC,EAAE;MACxB,OAAO,IAAI;IACb;IACA,OACEX,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QACGZ,IAAI,CAACa,GAAG,CAAC,CAACC,OAAO,EAAEC,CAAC,KAAK;MACxB,MAAMb,gBAAgB,GACpBC,uBAAuB,GACnB,CAACI,UAAU,EAAEC,KAAK,KAAK;QACrBL,uBAAuB,CACpB,GAAEP,IAAK,IAAGmB,CAAE,GAAER,UAAW,EAAC,EAC3BC,KACF,CAAC;MACH,CAAC,GACDF,SAC+B;MAErC,OACEjB,KAAA,CAAAsB,aAAA,CAAClB,OAAO,CAACuB,QAAQ;QACfC,GAAG,EAAG,UAASF,CAAE,EAAE;QACnBP,KAAK,EAAAU,aAAA,CAAAA,aAAA,KACAnB,WAAW;UACdC,IAAI,EAAEc,OAAO;UACbZ;QAAgB;MAChB,GAEDJ,QACe,CAAC;IAEvB,CAAC,CACD,CAAC;EAEP;EAEA,OACET,KAAA,CAAAsB,aAAA,CAAClB,OAAO,CAACuB,QAAQ;IACfR,KAAK,EAAAU,aAAA,CAAAA,aAAA,KACAnB,WAAW;MACdC,IAAI;MACJE;IAAgB;EAChB,GAEDJ,QACe,CAAC;AAEvB;AAEAJ,EAAE,CAACyB,qBAAqB,GAAG,IAAI;AAC/B,eAAezB,EAAE"}
1
+ {"version":3,"file":"At.js","names":["React","useCallback","useContext","pointer","Context","At","props","path","iterate","children","dataContext","data","contextData","handlePathChange","handlePathChangeDataContext","has","get","undefined","changePath","value","Array","isArray","createElement","Fragment","map","element","i","Provider","key","_objectSpread","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/DataContext/At/At.tsx"],"sourcesContent":["import React, { useCallback, useContext } from 'react'\nimport pointer from 'json-pointer'\nimport type { ComponentProps } from '../../types'\nimport Context, { ContextState } from '../Context'\n\nexport type Props = ComponentProps & {\n /** JSON Pointer for where in the source dataset to point at in sub components */\n path?: string\n iterate?: boolean\n children?: React.ReactNode\n}\n\nfunction At(props: Props) {\n const { path = '/', iterate, children } = props\n const dataContext = useContext(Context)\n const {\n data: contextData,\n handlePathChange: handlePathChangeDataContext,\n } = dataContext\n\n const data =\n contextData && pointer.has(contextData, path)\n ? pointer.get(contextData, path)\n : undefined\n\n const handlePathChange: ContextState['handlePathChange'] = useCallback(\n (changePath, value) => {\n handlePathChangeDataContext(`${path}${changePath}`, value)\n },\n [handlePathChangeDataContext, path]\n )\n\n if (iterate) {\n if (!Array.isArray(data)) {\n return null\n }\n return (\n <>\n {data.map((element, i) => {\n const handlePathChange = (\n handlePathChangeDataContext\n ? (changePath, value) => {\n handlePathChangeDataContext(\n `${path}/${i}${changePath}`,\n value\n )\n }\n : undefined\n ) as ContextState['handlePathChange']\n\n return (\n <Context.Provider\n key={`element${i}`}\n value={{\n ...dataContext,\n data: element,\n handlePathChange,\n }}\n >\n {children}\n </Context.Provider>\n )\n })}\n </>\n )\n }\n\n return (\n <Context.Provider\n value={{\n ...dataContext,\n data,\n handlePathChange,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nAt._supportsSpacingProps = true\nexport default At\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,UAAU,QAAQ,OAAO;AACtD,OAAOC,OAAO,MAAM,cAAc;AAElC,OAAOC,OAAO,MAAwB,YAAY;AASlD,SAASC,EAAEA,CAACC,KAAY,EAAE;EACxB,MAAM;IAAEC,IAAI,GAAG,GAAG;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGH,KAAK;EAC/C,MAAMI,WAAW,GAAGR,UAAU,CAACE,OAAO,CAAC;EACvC,MAAM;IACJO,IAAI,EAAEC,WAAW;IACjBC,gBAAgB,EAAEC;EACpB,CAAC,GAAGJ,WAAW;EAEf,MAAMC,IAAI,GACRC,WAAW,IAAIT,OAAO,CAACY,GAAG,CAACH,WAAW,EAAEL,IAAI,CAAC,GACzCJ,OAAO,CAACa,GAAG,CAACJ,WAAW,EAAEL,IAAI,CAAC,GAC9BU,SAAS;EAEf,MAAMJ,gBAAkD,GAAGZ,WAAW,CACpE,CAACiB,UAAU,EAAEC,KAAK,KAAK;IACrBL,2BAA2B,CAAE,GAAEP,IAAK,GAAEW,UAAW,EAAC,EAAEC,KAAK,CAAC;EAC5D,CAAC,EACD,CAACL,2BAA2B,EAAEP,IAAI,CACpC,CAAC;EAED,IAAIC,OAAO,EAAE;IACX,IAAI,CAACY,KAAK,CAACC,OAAO,CAACV,IAAI,CAAC,EAAE;MACxB,OAAO,IAAI;IACb;IACA,OACEX,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QACGZ,IAAI,CAACa,GAAG,CAAC,CAACC,OAAO,EAAEC,CAAC,KAAK;MACxB,MAAMb,gBAAgB,GACpBC,2BAA2B,GACvB,CAACI,UAAU,EAAEC,KAAK,KAAK;QACrBL,2BAA2B,CACxB,GAAEP,IAAK,IAAGmB,CAAE,GAAER,UAAW,EAAC,EAC3BC,KACF,CAAC;MACH,CAAC,GACDF,SAC+B;MAErC,OACEjB,KAAA,CAAAsB,aAAA,CAAClB,OAAO,CAACuB,QAAQ;QACfC,GAAG,EAAG,UAASF,CAAE,EAAE;QACnBP,KAAK,EAAAU,aAAA,CAAAA,aAAA,KACAnB,WAAW;UACdC,IAAI,EAAEc,OAAO;UACbZ;QAAgB;MAChB,GAEDJ,QACe,CAAC;IAEvB,CAAC,CACD,CAAC;EAEP;EAEA,OACET,KAAA,CAAAsB,aAAA,CAAClB,OAAO,CAACuB,QAAQ;IACfR,KAAK,EAAAU,aAAA,CAAAA,aAAA,KACAnB,WAAW;MACdC,IAAI;MACJE;IAAgB;EAChB,GAEDJ,QACe,CAAC;AAEvB;AAEAJ,EAAE,CAACyB,qBAAqB,GAAG,IAAI;AAC/B,eAAezB,EAAE"}
@@ -11,7 +11,9 @@ export type EventListenerCall = {
11
11
  callback: () => any;
12
12
  };
13
13
  export type FilterDataHandler<Data> = (data: Data, filter: FilterData) => Partial<Data>;
14
- export type FilterData = (path: Path, value: any, props: FieldProps) => boolean | undefined;
14
+ export type FilterData = (path: Path, value: any, props: FieldProps, internal: {
15
+ error: Error | undefined;
16
+ }) => boolean | undefined;
15
17
  export interface ContextState {
16
18
  id?: Identifier;
17
19
  hasContext: boolean;
@@ -21,7 +23,8 @@ export interface ContextState {
21
23
  errors?: Record<string, Error>;
22
24
  /** Will set autoComplete="on" on each nested Field.String and Field.Number */
23
25
  autoComplete?: boolean;
24
- handlePathChange: (path: Path, value: any) => EventReturnWithStateObject | unknown | Promise<EventReturnWithStateObject | unknown>;
26
+ handlePathChange: (path: Path, value?: any) => EventReturnWithStateObject | unknown | Promise<EventReturnWithStateObject | unknown>;
27
+ handlePathChangeUnvalidated: (path: Path, value: any) => void;
25
28
  updateDataValue: (path: Path, value: any) => void;
26
29
  setData: (data: any) => void;
27
30
  filterDataHandler: (data: any, filter: FilterData) => any;
@@ -7,6 +7,7 @@ export const defaultContextState = {
7
7
  disabled: undefined,
8
8
  submitState: undefined,
9
9
  handlePathChange: () => null,
10
+ handlePathChangeUnvalidated: () => null,
10
11
  updateDataValue: () => null,
11
12
  setData: () => null,
12
13
  filterDataHandler: () => null,
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","disabled","submitState","handlePathChange","updateDataValue","setData","filterDataHandler","validateData","handleSubmit","scrollToTop","showAllErrors","formState","setFormState","setFieldEventListener","handleSubmitCall","setShowAllErrors","mountedFieldPaths","handleMountField","handleUnMountField","hasErrors","hasFieldState","checkFieldStateFor","setFieldState","setFieldError","setProps","ajvInstance","contextErrorMessages","_isInsideFormElement","props","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n SubmitState,\n Path,\n EventStateObject,\n EventReturnWithStateObject,\n Identifier,\n FieldProps,\n FormError,\n} from '../types'\nimport { Props as ProviderProps } from './Provider'\n\ntype HandleSubmitProps = {\n formElement?: HTMLFormElement\n}\n\nexport type EventListenerCall = {\n path: Path\n type: 'onSubmit'\n callback: () => any\n}\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterData = (\n path: Path,\n value: any,\n props: FieldProps\n) => boolean | undefined\n\nexport interface ContextState {\n id?: Identifier\n hasContext: boolean\n /** The dataset for the form / form steps */\n data: any\n /** Should the form validate data before submitting? */\n errors?: Record<string, Error>\n /** Will set autoComplete=\"on\" on each nested Field.String and Field.Number */\n autoComplete?: boolean\n handlePathChange: (\n path: Path,\n value: any\n ) =>\n | EventReturnWithStateObject\n | unknown\n | Promise<EventReturnWithStateObject | unknown>\n updateDataValue: (path: Path, value: any) => void\n setData: (data: any) => void\n filterDataHandler: (data: any, filter: FilterData) => any\n validateData: () => void\n handleSubmit: (props?: HandleSubmitProps) => any\n scrollToTop: () => void\n // Error status\n showAllErrors: boolean\n setShowAllErrors: (showAllErrors: boolean) => void\n hasErrors: () => boolean\n hasFieldState: (state: SubmitState) => boolean\n checkFieldStateFor: (path: Path, state: SubmitState) => boolean\n setFieldState: (path: Path, fieldState: SubmitState) => void\n setFieldError: (path: Path, error: Error | FormError) => void\n // Mounted fields - Components telling the provider what fields is on screen at any time\n mountedFieldPaths: string[]\n handleMountField: (path: Path) => void\n handleUnMountField: (path: Path) => void\n formState: SubmitState\n setFormState?: (state: SubmitState) => void\n handleSubmitCall: ({\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n }: {\n onSubmit: () =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n enableAsyncBehaviour: boolean\n skipFieldValidation?: boolean\n skipErrorCheck?: boolean\n }) => void\n setFieldEventListener: (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => void\n setProps: (path: Path, props: any) => void\n ajvInstance: Ajv\n contextErrorMessages: CustomErrorMessagesWithPaths\n schema: AllJSONSchemaVersions\n disabled: boolean\n submitState: Partial<EventStateObject>\n _isInsideFormElement?: boolean\n props: ProviderProps<unknown>\n}\n\nexport const defaultContextState: ContextState = {\n hasContext: false,\n data: undefined,\n schema: undefined,\n disabled: undefined,\n submitState: undefined,\n handlePathChange: () => null,\n updateDataValue: () => null,\n setData: () => null,\n filterDataHandler: () => null,\n validateData: () => null,\n handleSubmit: () => null,\n scrollToTop: () => null,\n showAllErrors: false,\n formState: undefined,\n setFormState: () => null,\n setFieldEventListener: () => null,\n handleSubmitCall: () => null,\n setShowAllErrors: () => null,\n mountedFieldPaths: [],\n handleMountField: () => null,\n handleUnMountField: () => null,\n hasErrors: () => false,\n hasFieldState: () => false,\n checkFieldStateFor: () => false,\n setFieldState: () => null,\n setFieldError: () => null,\n setProps: () => null,\n ajvInstance: makeAjvInstance(),\n contextErrorMessages: undefined,\n _isInsideFormElement: false,\n props: null,\n}\n\nconst Context = React.createContext<ContextState>(defaultContextState)\n\nexport default Context\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAcC,eAAe,QAAQ,cAAc;AAmGnD,OAAO,MAAMC,mBAAiC,GAAG;EAC/CC,UAAU,EAAE,KAAK;EACjBC,IAAI,EAAEC,SAAS;EACfC,MAAM,EAAED,SAAS;EACjBE,QAAQ,EAAEF,SAAS;EACnBG,WAAW,EAAEH,SAAS;EACtBI,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,OAAO,EAAEA,CAAA,KAAM,IAAI;EACnBC,iBAAiB,EAAEA,CAAA,KAAM,IAAI;EAC7BC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,WAAW,EAAEA,CAAA,KAAM,IAAI;EACvBC,aAAa,EAAE,KAAK;EACpBC,SAAS,EAAEZ,SAAS;EACpBa,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,qBAAqB,EAAEA,CAAA,KAAM,IAAI;EACjCC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,iBAAiB,EAAE,EAAE;EACrBC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,kBAAkB,EAAEA,CAAA,KAAM,IAAI;EAC9BC,SAAS,EAAEA,CAAA,KAAM,KAAK;EACtBC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,kBAAkB,EAAEA,CAAA,KAAM,KAAK;EAC/BC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,QAAQ,EAAEA,CAAA,KAAM,IAAI;EACpBC,WAAW,EAAE9B,eAAe,CAAC,CAAC;EAC9B+B,oBAAoB,EAAE3B,SAAS;EAC/B4B,oBAAoB,EAAE,KAAK;EAC3BC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,OAAO,GAAGnC,KAAK,CAACoC,aAAa,CAAelC,mBAAmB,CAAC;AAEtE,eAAeiC,OAAO"}
1
+ {"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","disabled","submitState","handlePathChange","handlePathChangeUnvalidated","updateDataValue","setData","filterDataHandler","validateData","handleSubmit","scrollToTop","showAllErrors","formState","setFormState","setFieldEventListener","handleSubmitCall","setShowAllErrors","mountedFieldPaths","handleMountField","handleUnMountField","hasErrors","hasFieldState","checkFieldStateFor","setFieldState","setFieldError","setProps","ajvInstance","contextErrorMessages","_isInsideFormElement","props","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n SubmitState,\n Path,\n EventStateObject,\n EventReturnWithStateObject,\n Identifier,\n FieldProps,\n FormError,\n} from '../types'\nimport { Props as ProviderProps } from './Provider'\n\ntype HandleSubmitProps = {\n formElement?: HTMLFormElement\n}\n\nexport type EventListenerCall = {\n path: Path\n type: 'onSubmit'\n callback: () => any\n}\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterData = (\n path: Path,\n value: any,\n props: FieldProps,\n internal: {\n error: Error | undefined\n }\n) => boolean | undefined\n\nexport interface ContextState {\n id?: Identifier\n hasContext: boolean\n /** The dataset for the form / form steps */\n data: any\n /** Should the form validate data before submitting? */\n errors?: Record<string, Error>\n /** Will set autoComplete=\"on\" on each nested Field.String and Field.Number */\n autoComplete?: boolean\n handlePathChange: (\n path: Path,\n value?: any\n ) =>\n | EventReturnWithStateObject\n | unknown\n | Promise<EventReturnWithStateObject | unknown>\n handlePathChangeUnvalidated: (path: Path, value: any) => void\n updateDataValue: (path: Path, value: any) => void\n setData: (data: any) => void\n filterDataHandler: (data: any, filter: FilterData) => any\n validateData: () => void\n handleSubmit: (props?: HandleSubmitProps) => any\n scrollToTop: () => void\n // Error status\n showAllErrors: boolean\n setShowAllErrors: (showAllErrors: boolean) => void\n hasErrors: () => boolean\n hasFieldState: (state: SubmitState) => boolean\n checkFieldStateFor: (path: Path, state: SubmitState) => boolean\n setFieldState: (path: Path, fieldState: SubmitState) => void\n setFieldError: (path: Path, error: Error | FormError) => void\n // Mounted fields - Components telling the provider what fields is on screen at any time\n mountedFieldPaths: string[]\n handleMountField: (path: Path) => void\n handleUnMountField: (path: Path) => void\n formState: SubmitState\n setFormState?: (state: SubmitState) => void\n handleSubmitCall: ({\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n }: {\n onSubmit: () =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n enableAsyncBehaviour: boolean\n skipFieldValidation?: boolean\n skipErrorCheck?: boolean\n }) => void\n setFieldEventListener: (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => void\n setProps: (path: Path, props: any) => void\n ajvInstance: Ajv\n contextErrorMessages: CustomErrorMessagesWithPaths\n schema: AllJSONSchemaVersions\n disabled: boolean\n submitState: Partial<EventStateObject>\n _isInsideFormElement?: boolean\n props: ProviderProps<unknown>\n}\n\nexport const defaultContextState: ContextState = {\n hasContext: false,\n data: undefined,\n schema: undefined,\n disabled: undefined,\n submitState: undefined,\n handlePathChange: () => null,\n handlePathChangeUnvalidated: () => null,\n updateDataValue: () => null,\n setData: () => null,\n filterDataHandler: () => null,\n validateData: () => null,\n handleSubmit: () => null,\n scrollToTop: () => null,\n showAllErrors: false,\n formState: undefined,\n setFormState: () => null,\n setFieldEventListener: () => null,\n handleSubmitCall: () => null,\n setShowAllErrors: () => null,\n mountedFieldPaths: [],\n handleMountField: () => null,\n handleUnMountField: () => null,\n hasErrors: () => false,\n hasFieldState: () => false,\n checkFieldStateFor: () => false,\n setFieldState: () => null,\n setFieldError: () => null,\n setProps: () => null,\n ajvInstance: makeAjvInstance(),\n contextErrorMessages: undefined,\n _isInsideFormElement: false,\n props: null,\n}\n\nconst Context = React.createContext<ContextState>(defaultContextState)\n\nexport default Context\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAcC,eAAe,QAAQ,cAAc;AAuGnD,OAAO,MAAMC,mBAAiC,GAAG;EAC/CC,UAAU,EAAE,KAAK;EACjBC,IAAI,EAAEC,SAAS;EACfC,MAAM,EAAED,SAAS;EACjBE,QAAQ,EAAEF,SAAS;EACnBG,WAAW,EAAEH,SAAS;EACtBI,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,2BAA2B,EAAEA,CAAA,KAAM,IAAI;EACvCC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,OAAO,EAAEA,CAAA,KAAM,IAAI;EACnBC,iBAAiB,EAAEA,CAAA,KAAM,IAAI;EAC7BC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,WAAW,EAAEA,CAAA,KAAM,IAAI;EACvBC,aAAa,EAAE,KAAK;EACpBC,SAAS,EAAEb,SAAS;EACpBc,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,qBAAqB,EAAEA,CAAA,KAAM,IAAI;EACjCC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,iBAAiB,EAAE,EAAE;EACrBC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,kBAAkB,EAAEA,CAAA,KAAM,IAAI;EAC9BC,SAAS,EAAEA,CAAA,KAAM,KAAK;EACtBC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,kBAAkB,EAAEA,CAAA,KAAM,KAAK;EAC/BC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,QAAQ,EAAEA,CAAA,KAAM,IAAI;EACpBC,WAAW,EAAE/B,eAAe,CAAC,CAAC;EAC9BgC,oBAAoB,EAAE5B,SAAS;EAC/B6B,oBAAoB,EAAE,KAAK;EAC3BC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,OAAO,GAAGpC,KAAK,CAACqC,aAAa,CAAenC,mBAAmB,CAAC;AAEtE,eAAekC,OAAO"}
@@ -58,10 +58,6 @@ export interface Props<Data extends JsonObject> {
58
58
  * The result of the onSubmit function
59
59
  */
60
60
  result: unknown) => EventReturnWithStateObject | void | Promise<EventReturnWithStateObject | void>;
61
- /**
62
- * Shows an indicator on the current label during a field change.
63
- */
64
- enableAsyncChangeBehavior?: boolean;
65
61
  /**
66
62
  * Minimum time to display the submit indicator.
67
63
  */
@@ -69,7 +65,7 @@ export interface Props<Data extends JsonObject> {
69
65
  /**
70
66
  * The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission.
71
67
  */
72
- asyncBehaviorTimeout?: number;
68
+ asyncSubmitTimeout?: number;
73
69
  /**
74
70
  * Scroll to top on submit
75
71
  */
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5
- const _excluded = ["id", "defaultData", "data", "schema", "onChange", "onPathChange", "onSubmit", "onSubmitRequest", "onSubmitComplete", "scrollTopOnSubmit", "minimumAsyncBehaviorTime", "asyncBehaviorTimeout", "sessionStorageId", "ajvInstance", "filterData", "errorMessages", "children"];
5
+ const _excluded = ["id", "defaultData", "data", "schema", "onChange", "onPathChange", "onSubmit", "onSubmitRequest", "onSubmitComplete", "scrollTopOnSubmit", "minimumAsyncBehaviorTime", "asyncSubmitTimeout", "sessionStorageId", "ajvInstance", "filterData", "errorMessages", "children"];
6
6
  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; }
7
7
  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; }
8
8
  import React, { useRef, useMemo, useCallback, useReducer, useEffect } from 'react';
@@ -32,7 +32,7 @@ export default function Provider(props) {
32
32
  onSubmitComplete,
33
33
  scrollTopOnSubmit,
34
34
  minimumAsyncBehaviorTime,
35
- asyncBehaviorTimeout,
35
+ asyncSubmitTimeout,
36
36
  sessionStorageId,
37
37
  ajvInstance,
38
38
  filterData,
@@ -95,7 +95,7 @@ export default function Provider(props) {
95
95
  }, [executeAjvValidator]);
96
96
  const checkFieldStateFor = useCallback((path, state) => {
97
97
  var _errorsRef$current;
98
- return Boolean(state === 'error' ? ((_errorsRef$current = errorsRef.current) === null || _errorsRef$current === void 0 ? void 0 : _errorsRef$current[path]) instanceof Error || fieldErrorRef.current[path] : fieldStateRef.current[path] === state);
98
+ return Boolean(state === 'error' ? ((_errorsRef$current = errorsRef.current) === null || _errorsRef$current === void 0 ? void 0 : _errorsRef$current[path]) instanceof Error || fieldErrorRef.current[path] instanceof Error : fieldStateRef.current[path] === state);
99
99
  }, []);
100
100
  const hasFieldState = useCallback(state => {
101
101
  return mountedFieldPathsRef.current.some(path => {
@@ -106,7 +106,7 @@ export default function Provider(props) {
106
106
  return hasFieldState('error');
107
107
  }, [hasFieldState]);
108
108
  const setFieldError = useCallback((path, error) => {
109
- fieldErrorRef.current[path] = Boolean(error);
109
+ fieldErrorRef.current[path] = error;
110
110
  }, []);
111
111
  const setFieldState = useCallback((path, fieldState) => {
112
112
  if (fieldState !== fieldStateRef.current[path]) {
@@ -119,9 +119,12 @@ export default function Provider(props) {
119
119
  if (filter) {
120
120
  const filtered = _objectSpread({}, data);
121
121
  Object.entries(fieldPropsRef.current).forEach(_ref => {
122
+ var _fieldErrorRef$curren;
122
123
  let [path, props] = _ref;
123
124
  const exists = pointer.has(data, path);
124
- const result = filter(path, exists ? pointer.get(data, path) : undefined, props);
125
+ const result = filter(path, exists ? pointer.get(data, path) : undefined, props, {
126
+ error: (_fieldErrorRef$curren = fieldErrorRef.current) === null || _fieldErrorRef$curren === void 0 ? void 0 : _fieldErrorRef$curren[path]
127
+ });
125
128
  if (result === false && exists) {
126
129
  pointer.remove(filtered, path);
127
130
  }
@@ -228,23 +231,32 @@ export default function Provider(props) {
228
231
  internalDataRef.current = newData;
229
232
  forceUpdate();
230
233
  }, []);
231
- const handlePathChange = useCallback(async (path, value) => {
234
+ const handlePathChangeUnvalidated = useCallback(async (path, value) => {
232
235
  if (!path) {
233
236
  return null;
234
237
  }
238
+ updateDataValue(path, value);
235
239
  if (isAsync(onPathChange)) {
236
240
  await (onPathChange === null || onPathChange === void 0 ? void 0 : onPathChange(path, value));
237
241
  } else {
238
242
  onPathChange === null || onPathChange === void 0 ? void 0 : onPathChange(path, value);
239
243
  }
240
- const newData = updateDataValue(path, value);
244
+ }, [onPathChange, updateDataValue]);
245
+ const handlePathChange = useCallback(async function (path) {
246
+ let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_undefined_';
247
+ if (!path) {
248
+ return null;
249
+ }
250
+ if (value !== '_undefined_') {
251
+ handlePathChangeUnvalidated(path, value);
252
+ }
241
253
  showAllErrorsRef.current = false;
242
254
  validateData();
243
255
  if (isAsync(onChange)) {
244
- return await onChange(newData);
256
+ return await onChange(internalDataRef.current);
245
257
  }
246
- return onChange === null || onChange === void 0 ? void 0 : onChange(newData);
247
- }, [onChange, onPathChange, updateDataValue, validateData]);
258
+ return onChange === null || onChange === void 0 ? void 0 : onChange(internalDataRef.current);
259
+ }, [handlePathChangeUnvalidated, onChange, validateData]);
248
260
  const handleMountField = useCallback(path => {
249
261
  mountedFieldPathsRef.current = addListPath(mountedFieldPathsRef.current, path);
250
262
  }, []);
@@ -274,7 +286,7 @@ export default function Provider(props) {
274
286
  setSubmitState({
275
287
  error: undefined
276
288
  });
277
- const asyncBehaviorIsEnabled = !(skipErrorCheck ? false : hasErrors()) && (enableAsyncBehaviour || hasFieldWithAsyncValidator());
289
+ const asyncBehaviorIsEnabled = (skipErrorCheck ? true : !hasErrors() || hasFieldState('pending')) && (enableAsyncBehaviour || hasFieldWithAsyncValidator());
278
290
  if (asyncBehaviorIsEnabled) {
279
291
  setFormState('pending');
280
292
  }
@@ -320,15 +332,15 @@ export default function Provider(props) {
320
332
  window.requestAnimationFrame(() => {
321
333
  setFormState(undefined);
322
334
  });
323
- }
324
- if (!skipFieldValidation) {
325
- onSubmitContinueRef.current = () => {
326
- window.requestAnimationFrame(() => {
327
- handleSubmitCall(_objectSpread(_objectSpread({}, args), {}, {
328
- skipFieldValidation: true
329
- }));
330
- });
331
- };
335
+ if (!skipFieldValidation) {
336
+ onSubmitContinueRef.current = () => {
337
+ window.requestAnimationFrame(() => {
338
+ handleSubmitCall(_objectSpread(_objectSpread({}, args), {}, {
339
+ skipFieldValidation: true
340
+ }));
341
+ });
342
+ };
343
+ }
332
344
  }
333
345
  onSubmitRequest === null || onSubmitRequest === void 0 ? void 0 : onSubmitRequest();
334
346
  setShowAllErrors(true);
@@ -417,19 +429,29 @@ export default function Provider(props) {
417
429
  forceUpdate();
418
430
  }
419
431
  }, [schema, validateData, forceUpdate]);
432
+ const onTimeout = useCallback(() => {
433
+ setFormState(undefined);
434
+ setSubmitState({
435
+ info: undefined,
436
+ warning: undefined,
437
+ error: undefined
438
+ });
439
+ }, [setFormState, setSubmitState]);
420
440
  const {
421
441
  bufferedFormState: formState
422
442
  } = useFormStatusBuffer({
423
443
  formState: formStateRef.current,
424
444
  waitFor: hasFieldState('pending'),
425
445
  minimumAsyncBehaviorTime,
426
- asyncBehaviorTimeout
446
+ asyncSubmitTimeout,
447
+ onTimeout
427
448
  });
428
449
  const submitState = submitStateRef.current;
429
450
  const disabled = (_rest$disabled = rest === null || rest === void 0 ? void 0 : rest['disabled']) !== null && _rest$disabled !== void 0 ? _rest$disabled : formState === 'pending';
430
451
  return React.createElement(Context.Provider, {
431
452
  value: _objectSpread({
432
453
  handlePathChange,
454
+ handlePathChangeUnvalidated,
433
455
  handleSubmit,
434
456
  handleMountField,
435
457
  handleUnMountField,
@@ -479,7 +501,8 @@ function useFormStatusBuffer(props) {
479
501
  formState,
480
502
  waitFor,
481
503
  minimumAsyncBehaviorTime,
482
- asyncBehaviorTimeout
504
+ asyncSubmitTimeout,
505
+ onTimeout
483
506
  } = props || {};
484
507
  const [, forceUpdate] = useReducer(() => ({}), {});
485
508
  const stateRef = useRef();
@@ -515,7 +538,7 @@ function useFormStatusBuffer(props) {
515
538
  if (formState === 'complete') {
516
539
  hadCompleteRef.current = true;
517
540
  }
518
- if (formState === 'pending') {
541
+ if (formState === 'pending' && stateRef.current !== 'pending') {
519
542
  clear();
520
543
  nowRef.current = Date.now();
521
544
  hadCompleteRef.current = false;
@@ -535,13 +558,16 @@ function useFormStatusBuffer(props) {
535
558
  clear();
536
559
  }, delay + minimum);
537
560
  }
561
+ }
562
+ if (stateRef.current === 'pending') {
538
563
  timeoutRef.current.timeout = setTimeout(() => {
539
- nowRef.current = 0;
564
+ clear();
540
565
  setState(undefined);
541
- }, asyncBehaviorTimeout !== null && asyncBehaviorTimeout !== void 0 ? asyncBehaviorTimeout : 30000);
566
+ onTimeout === null || onTimeout === void 0 ? void 0 : onTimeout();
567
+ }, asyncSubmitTimeout !== null && asyncSubmitTimeout !== void 0 ? asyncSubmitTimeout : 30000);
542
568
  }
543
569
  return clear;
544
- }, [clear, minimumAsyncBehaviorTime, formState, setState, waitFor, asyncBehaviorTimeout]);
570
+ }, [clear, minimumAsyncBehaviorTime, formState, setState, waitFor, asyncSubmitTimeout, onTimeout]);
545
571
  return {
546
572
  bufferedFormState: stateRef.current
547
573
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","useEffect","pointer","makeAjvInstance","ajvErrorsToFormErrors","SharedProvider","useMountEffect","useUpdateEffect","isAsync","useSharedState","Context","structuredClone","useLayoutEffect","window","isArrayJsonPointer","Provider","props","_sharedAttachments$da","_rest$disabled","forceUpdate","id","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","scrollTopOnSubmit","minimumAsyncBehaviorTime","asyncBehaviorTimeout","sessionStorageId","ajvInstance","filterData","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","undefined","console","error","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","submitStateRef","setSubmitState","state","Object","assign","formStateRef","setFormState","formState","fieldErrorRef","fieldStateRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","executeAjvValidator","_ajvValidatorRef$curr","call","errors","validateData","checkFieldStateFor","path","_errorsRef$current","Boolean","Error","hasFieldState","some","hasErrors","setFieldError","setFieldState","fieldState","filterDataHandler","filter","arguments","length","filtered","_objectSpread","entries","fieldPropsRef","forEach","_ref","exists","has","result","get","remove","setProps","hasFieldWithAsyncValidator","validator","onBlurValidator","sharedData","sharedAttachments","setSharedData","set","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","update","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","_window$sessionStorag2","setItem","stringify","setData","handlePathChange","handleMountField","addListPath","handleUnMountField","_fieldPropsRef$curren","removeListPath","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmitCall","args","enableAsyncBehaviour","skipFieldValidation","skipErrorCheck","asyncBehaviorIsEnabled","type","callback","fieldEventListenersRef","includes","warning","info","requestAnimationFrame","onSubmitContinueRef","handleSubmit","formElement","opts","resetForm","_formElement$reset","reset","removeItem","clearData","completeResult","keys","setFieldEventListener","_ref2","p","t","push","_onSubmitContinueRef$","_ajvRef$current","compile","_ajvRef$current2","bufferedFormState","useFormStatusBuffer","waitFor","submitState","disabled","createElement","hasContext","mountedFieldPaths","paths","concat","thisPath","stateRef","nowRef","timeoutRef","setState","clear","key","clearTimeout","hadCompleteRef","isTest","process","env","NODE_ENV","minimum","setTimeout","Date","now","offset","Math","max","delay","complete","timeout"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useReducer,\n useEffect,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n SubmitState,\n Path,\n EventStateObject,\n OnSubmit,\n OnChange,\n EventReturnWithStateObject,\n} from '../../types'\nimport SharedProvider from '../../../../shared/Provider'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport useUpdateEffect from '../../../../shared/helpers/useUpdateEffect'\nimport { isAsync } from '../../../../shared/helpers/isAsync'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport Context, {\n ContextState,\n EventListenerCall,\n FilterData,\n} from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Partial<Data>\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Partial<Data>\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the internal data context based on your criteria: `(path, value, props) => !props?.disabled`. It will iterate on each data entry.\n */\n filterData?: FilterData\n /**\n * Change handler for the whole data set.\n * You can provide an async function to show an indicator on the current label during a field change.\n */\n onChange?: OnChange<Data>\n /**\n * Change handler for each value\n */\n onPathChange?: (\n path: Path,\n value: any\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Will emit on a form submit – if validation has passed.\n * You can provide an async function to shows a submit indicator during submit. All form elements will be disabled during the submit.\n */\n onSubmit?: OnSubmit\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Will be called when the onSubmit is finished and had not errors\n */\n onSubmitComplete?: (\n data: Data,\n /**\n * The result of the onSubmit function\n */\n result: unknown\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Shows an indicator on the current label during a field change.\n */\n enableAsyncChangeBehavior?: boolean\n /**\n * Minimum time to display the submit indicator.\n */\n minimumAsyncBehaviorTime?: number\n /**\n * The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission.\n */\n asyncBehaviorTimeout?: number\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>(\n props: Props<Data>\n) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n const {\n id,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n onSubmitComplete,\n scrollTopOnSubmit,\n minimumAsyncBehaviorTime,\n asyncBehaviorTimeout,\n sessionStorageId,\n ajvInstance,\n filterData,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n } = props\n\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<Path, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n const submitStateRef = useRef<Partial<EventStateObject>>({})\n const setSubmitState = useCallback((state: EventStateObject) => {\n Object.assign(submitStateRef.current, state)\n forceUpdate()\n }, [])\n\n // - Progress\n const formStateRef = useRef<SubmitState>()\n const setFormState = useCallback((formState: SubmitState) => {\n formStateRef.current = formState\n forceUpdate()\n }, [])\n\n // - States (e.g. error) reported by fields, based on their direct validation rules\n const fieldErrorRef = useRef<Record<Path, boolean>>({})\n const fieldStateRef = useRef<Record<Path, SubmitState>>({})\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Partial<Data>>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const executeAjvValidator = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors,\n internalDataRef.current\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n executeAjvValidator()\n forceUpdate()\n }, [executeAjvValidator])\n\n // - Error handling\n const checkFieldStateFor = useCallback(\n (path: Path, state: SubmitState) => {\n return Boolean(\n state === 'error'\n ? errorsRef.current?.[path] instanceof Error ||\n fieldErrorRef.current[path]\n : fieldStateRef.current[path] === state\n )\n },\n []\n )\n const hasFieldState = useCallback(\n (state: SubmitState) => {\n return mountedFieldPathsRef.current.some((path) => {\n return checkFieldStateFor(path, state)\n })\n },\n [checkFieldStateFor]\n )\n const hasErrors = useCallback(() => {\n return hasFieldState('error')\n }, [hasFieldState])\n\n /**\n * Sets the error state for a specific path\n */\n const setFieldError = useCallback(\n (path: Path, error: Error | FormError) => {\n fieldErrorRef.current[path] = Boolean(error)\n },\n []\n )\n\n /**\n * Sets the field state for a specific path\n */\n const setFieldState = useCallback(\n (path: Path, fieldState: SubmitState) => {\n if (fieldState !== fieldStateRef.current[path]) {\n // The state for the target value was changed\n fieldStateRef.current[path] = fieldState\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData) => {\n if (filter) {\n const filtered = { ...data }\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n const result = filter(\n path,\n exists ? pointer.get(data, path) : undefined,\n props\n )\n if (result === false && exists) {\n pointer.remove(filtered, path)\n }\n })\n\n return filtered\n }\n\n return data\n },\n [filterData]\n )\n const fieldPropsRef = useRef<Record<Path, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n fieldPropsRef.current[path] = props\n },\n []\n )\n const hasFieldWithAsyncValidator = useCallback(() => {\n for (const path in fieldPropsRef.current) {\n const props = fieldPropsRef.current[path]\n if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {\n return true\n }\n }\n\n return false\n }, [])\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterData']\n hasErrors?: ContextState['hasErrors']\n setShowAllErrors?: ContextState['setShowAllErrors']\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const setSharedData = sharedData.set\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n internalDataRef.current = useMemo(() => {\n // NB: \"sharedData.data\" is only available on a rerender.\n // Update the shared state, if initialData is given and no shared state is available.\n // We do almost the same later in a useLayoutEffect, but we need to do it here as well, so we set the data as early as possible.\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [data, id, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n executeAjvValidator()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({\n filterDataHandler,\n hasErrors,\n setShowAllErrors,\n })\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n extendAttachment,\n filterData,\n filterDataHandler,\n hasErrors,\n id,\n rerenderUseDataHook,\n setShowAllErrors,\n ])\n\n /**\n * Update the data set\n */\n const updateDataValue: ContextState['updateDataValue'] = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n internalDataRef.current = newData\n\n if (id) {\n // Will ensure that Form.getData() gets the correct data\n extendSharedData?.(newData)\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n\n if (sessionStorageId && typeof window !== 'undefined') {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(newData)\n )\n }\n\n forceUpdate()\n\n return newData\n },\n [\n id,\n sessionStorageId,\n extendSharedData,\n filterData,\n rerenderUseDataHook,\n ]\n )\n\n const setData = useCallback((newData: Data) => {\n internalDataRef.current = newData\n forceUpdate()\n }, [])\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: ContextState['handlePathChange'] = useCallback(\n async (path, value) => {\n if (!path) {\n return null\n }\n\n if (isAsync(onPathChange)) {\n await onPathChange?.(path, value)\n } else {\n onPathChange?.(path, value)\n }\n\n const newData = updateDataValue(path, value)\n\n showAllErrorsRef.current = false\n\n validateData()\n\n if (isAsync(onChange)) {\n return await onChange(newData as Data)\n }\n\n return onChange?.(newData as Data)\n },\n [onChange, onPathChange, updateDataValue, validateData]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n if (fieldPropsRef.current?.[path]) {\n delete fieldPropsRef.current[path]\n }\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Shared logic dedicated to submit the whole form\n */\n const handleSubmitCall = useCallback<ContextState['handleSubmitCall']>(\n async (args) => {\n const {\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n } = args\n\n setSubmitState({ error: undefined })\n\n const asyncBehaviorIsEnabled =\n !(skipErrorCheck ? false : hasErrors()) &&\n (enableAsyncBehaviour || hasFieldWithAsyncValidator())\n\n if (asyncBehaviorIsEnabled) {\n setFormState('pending')\n }\n\n // Just call the submit listeners \"once\", and not on the retry/recall\n if (!skipFieldValidation) {\n for (const {\n path,\n type,\n callback,\n } of fieldEventListenersRef.current) {\n if (\n type === 'onSubmit' &&\n mountedFieldPathsRef.current.includes(path)\n ) {\n // Call all submit listener callbacks (e.g. to validate fields)\n if (asyncBehaviorIsEnabled) {\n await callback()\n } else {\n callback()\n }\n }\n }\n }\n\n if (\n !(skipErrorCheck ? false : hasErrors()) &&\n !hasFieldState('pending') &&\n (skipFieldValidation ? true : !hasFieldState('error'))\n ) {\n let result: EventStateObject | unknown\n\n try {\n result = await onSubmit()\n\n if (result instanceof Error) {\n throw result\n }\n } catch (error) {\n result = { error }\n }\n\n const state = result as EventStateObject\n\n if (asyncBehaviorIsEnabled) {\n setFormState(state?.error ? 'abort' : 'complete')\n }\n\n // Force the state to be set by a custom status\n if (state?.['status']) {\n setFormState(state?.['status'])\n }\n\n if (state?.error || state?.warning || state?.info) {\n setSubmitState(state)\n }\n } else {\n if (asyncBehaviorIsEnabled) {\n window.requestAnimationFrame(() => {\n setFormState(undefined)\n })\n }\n\n if (!skipFieldValidation) {\n // Add a event listener to continue the submit after the pending state is resolved\n onSubmitContinueRef.current = () => {\n window.requestAnimationFrame(() => {\n // Do not call the validators again,\n // because we already did it in the first call\n // If they are async, we wait for them to finish anyway\n handleSubmitCall({ ...args, skipFieldValidation: true })\n })\n }\n }\n\n onSubmitRequest?.()\n\n setShowAllErrors(true)\n }\n\n return internalDataRef.current\n },\n [\n setSubmitState,\n hasErrors,\n hasFieldWithAsyncValidator,\n hasFieldState,\n setFormState,\n onSubmitRequest,\n setShowAllErrors,\n ]\n )\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n async ({ formElement = null } = {}) => {\n handleSubmitCall({\n enableAsyncBehaviour: isAsync(onSubmit),\n onSubmit: async () => {\n const args = filterDataHandler(internalDataRef.current as Data)\n const opts = {\n resetForm: () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n },\n clearData: () => {\n internalDataRef.current = {}\n if (id) {\n setSharedData?.({} as Data)\n } else {\n forceUpdate()\n }\n },\n }\n\n let result = undefined\n\n if (isAsync(onSubmit)) {\n result = await onSubmit(args, opts)\n } else {\n result = onSubmit?.(args, opts)\n }\n\n const completeResult = await onSubmitComplete?.(args, result)\n if (completeResult) {\n result =\n Object.keys(result).length > 0\n ? { ...result, ...completeResult }\n : completeResult\n }\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n\n return result\n },\n })\n },\n [\n filterDataHandler,\n handleSubmitCall,\n id,\n onSubmit,\n onSubmitComplete,\n scrollToTop,\n scrollTopOnSubmit,\n sessionStorageId,\n setSharedData,\n ]\n )\n\n // Collect listeners to be called during form submit\n const fieldEventListenersRef = useRef<Array<EventListenerCall>>([])\n const setFieldEventListener = useCallback(\n (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => {\n fieldEventListenersRef.current =\n fieldEventListenersRef.current.filter(({ path: p, type: t }) => {\n return !(p === path && t === type)\n })\n fieldEventListenersRef.current.push({ path, type, callback })\n },\n []\n )\n\n // Handle unresolved field states during async submit\n const onSubmitContinueRef = useRef<() => void>(null)\n if (!hasFieldState('pending')) {\n onSubmitContinueRef.current?.()\n onSubmitContinueRef.current = null\n }\n\n // - ajv validator routines\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n const { bufferedFormState: formState } = useFormStatusBuffer({\n formState: formStateRef.current,\n waitFor: hasFieldState('pending'),\n minimumAsyncBehaviorTime,\n asyncBehaviorTimeout,\n })\n\n const submitState = submitStateRef.current\n const disabled = rest?.['disabled'] ?? formState === 'pending'\n\n return (\n <Context.Provider\n value={{\n /** Method */\n handlePathChange,\n handleSubmit,\n handleMountField,\n handleUnMountField,\n handleSubmitCall,\n setFormState,\n setShowAllErrors,\n setFieldEventListener,\n setFieldState,\n setFieldError,\n setProps,\n hasErrors,\n hasFieldState,\n checkFieldStateFor,\n validateData,\n updateDataValue,\n setData,\n filterDataHandler,\n scrollToTop,\n\n /** State handling */\n schema,\n disabled,\n formState,\n submitState,\n contextErrorMessages,\n hasContext: true,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n mountedFieldPaths: mountedFieldPathsRef.current,\n ajvInstance: ajvRef.current,\n\n /** Additional */\n id,\n data: internalDataRef.current,\n props,\n ...rest,\n }}\n >\n <SharedProvider formElement={{ disabled }}>\n {children}\n </SharedProvider>\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nfunction addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nfunction removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n\ntype FormStatusBufferProps = {\n minimumAsyncBehaviorTime?: Props<unknown>['minimumAsyncBehaviorTime']\n asyncBehaviorTimeout?: Props<unknown>['asyncBehaviorTimeout']\n formState: ContextState['formState']\n waitFor: boolean\n}\n\nfunction useFormStatusBuffer(props: FormStatusBufferProps) {\n const {\n formState,\n waitFor,\n minimumAsyncBehaviorTime,\n asyncBehaviorTimeout,\n } = props || {}\n\n const [, forceUpdate] = useReducer(() => ({}), {})\n const stateRef = useRef<SubmitState>()\n const nowRef = useRef<number | null>(null)\n const timeoutRef = useRef<{\n complete?: NodeJS.Timeout | null\n reset?: NodeJS.Timeout | null\n timeout?: NodeJS.Timeout | null\n }>({})\n\n const setState = useCallback(\n (state: SubmitState) => {\n stateRef.current = state\n forceUpdate()\n },\n [forceUpdate]\n )\n\n const clear = useCallback(() => {\n for (const key in timeoutRef.current) {\n clearTimeout(timeoutRef.current[key])\n }\n }, [])\n\n const hadCompleteRef = useRef(false)\n\n useEffect(() => {\n // This offset is used to calculate the delay,\n // which ensures that the form state is displayed for at least minimumAsyncBehaviorTime duration.\n // If the form was 'pending' for less than minimumAsyncBehaviorTime,\n // the delay will be the remaining time to reach minimumAsyncBehaviorTime.\n const isTest = process.env.NODE_ENV === 'test'\n const minimum =\n minimumAsyncBehaviorTime ??\n // make it testable\n (isTest ? 1 : 1000)\n\n if (stateRef.current && formState === 'error') {\n clear()\n setState(undefined)\n return\n }\n\n if (formState === 'abort') {\n clear()\n setState('abort')\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n }, minimum)\n return\n }\n\n if (formState === 'complete') {\n hadCompleteRef.current = true\n }\n\n if (formState === 'pending') {\n clear()\n nowRef.current = Date.now()\n hadCompleteRef.current = false\n setState('pending')\n } else if (stateRef.current === 'pending') {\n const offset = Math.max(Date.now() - nowRef.current)\n const delay = isTest ? minimum : Math.max(minimum - offset, 0)\n\n if (!waitFor) {\n timeoutRef.current.complete = setTimeout(() => {\n if (hadCompleteRef.current) {\n setState('complete')\n }\n }, delay)\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n clear()\n }, delay + minimum)\n }\n\n timeoutRef.current.timeout = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n }, asyncBehaviorTimeout ?? 30000)\n }\n\n return clear\n }, [\n clear,\n minimumAsyncBehaviorTime,\n formState,\n setState,\n waitFor,\n asyncBehaviorTimeout,\n ])\n\n return { bufferedFormState: stateRef.current }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","useEffect","pointer","makeAjvInstance","ajvErrorsToFormErrors","SharedProvider","useMountEffect","useUpdateEffect","isAsync","useSharedState","Context","structuredClone","useLayoutEffect","window","isArrayJsonPointer","Provider","props","_sharedAttachments$da","_rest$disabled","forceUpdate","id","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","scrollTopOnSubmit","minimumAsyncBehaviorTime","asyncSubmitTimeout","sessionStorageId","ajvInstance","filterData","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","undefined","console","error","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","submitStateRef","setSubmitState","state","Object","assign","formStateRef","setFormState","formState","fieldErrorRef","fieldStateRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","executeAjvValidator","_ajvValidatorRef$curr","call","errors","validateData","checkFieldStateFor","path","_errorsRef$current","Boolean","Error","hasFieldState","some","hasErrors","setFieldError","setFieldState","fieldState","filterDataHandler","filter","arguments","length","filtered","_objectSpread","entries","fieldPropsRef","forEach","_ref","_fieldErrorRef$curren","exists","has","result","get","remove","setProps","hasFieldWithAsyncValidator","validator","onBlurValidator","sharedData","sharedAttachments","setSharedData","set","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","update","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","_window$sessionStorag2","setItem","stringify","setData","handlePathChangeUnvalidated","handlePathChange","handleMountField","addListPath","handleUnMountField","_fieldPropsRef$curren","removeListPath","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmitCall","args","enableAsyncBehaviour","skipFieldValidation","skipErrorCheck","asyncBehaviorIsEnabled","type","callback","fieldEventListenersRef","includes","warning","info","requestAnimationFrame","onSubmitContinueRef","handleSubmit","formElement","opts","resetForm","_formElement$reset","reset","removeItem","clearData","completeResult","keys","setFieldEventListener","_ref2","p","t","push","_onSubmitContinueRef$","_ajvRef$current","compile","_ajvRef$current2","onTimeout","bufferedFormState","useFormStatusBuffer","waitFor","submitState","disabled","createElement","hasContext","mountedFieldPaths","paths","concat","thisPath","stateRef","nowRef","timeoutRef","setState","clear","key","clearTimeout","hadCompleteRef","isTest","process","env","NODE_ENV","minimum","setTimeout","Date","now","offset","Math","max","delay","complete","timeout"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useReducer,\n useEffect,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n SubmitState,\n Path,\n EventStateObject,\n OnSubmit,\n OnChange,\n EventReturnWithStateObject,\n} from '../../types'\nimport SharedProvider from '../../../../shared/Provider'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport useUpdateEffect from '../../../../shared/helpers/useUpdateEffect'\nimport { isAsync } from '../../../../shared/helpers/isAsync'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport Context, {\n ContextState,\n EventListenerCall,\n FilterData,\n} from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Partial<Data>\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Partial<Data>\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the internal data context based on your criteria: `(path, value, props) => !props?.disabled`. It will iterate on each data entry.\n */\n filterData?: FilterData\n /**\n * Change handler for the whole data set.\n * You can provide an async function to show an indicator on the current label during a field change.\n */\n onChange?: OnChange<Data>\n /**\n * Change handler for each value\n */\n onPathChange?: (\n path: Path,\n value: any\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Will emit on a form submit – if validation has passed.\n * You can provide an async function to shows a submit indicator during submit. All form elements will be disabled during the submit.\n */\n onSubmit?: OnSubmit\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Will be called when the onSubmit is finished and had not errors\n */\n onSubmitComplete?: (\n data: Data,\n /**\n * The result of the onSubmit function\n */\n result: unknown\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Minimum time to display the submit indicator.\n */\n minimumAsyncBehaviorTime?: number\n /**\n * The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission.\n */\n asyncSubmitTimeout?: number\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>(\n props: Props<Data>\n) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n const {\n id,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n onSubmitComplete,\n scrollTopOnSubmit,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n sessionStorageId,\n ajvInstance,\n filterData,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n } = props\n\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<Path, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n const submitStateRef = useRef<Partial<EventStateObject>>({})\n const setSubmitState = useCallback((state: EventStateObject) => {\n Object.assign(submitStateRef.current, state)\n forceUpdate()\n }, [])\n\n // - Progress\n const formStateRef = useRef<SubmitState>()\n const setFormState = useCallback((formState: SubmitState) => {\n formStateRef.current = formState\n forceUpdate()\n }, [])\n\n // - States (e.g. error) reported by fields, based on their direct validation rules\n const fieldErrorRef = useRef<Record<Path, Error>>({})\n const fieldStateRef = useRef<Record<Path, SubmitState>>({})\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Partial<Data>>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const executeAjvValidator = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors,\n internalDataRef.current\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n executeAjvValidator()\n forceUpdate()\n }, [executeAjvValidator])\n\n // - Error handling\n const checkFieldStateFor = useCallback(\n (path: Path, state: SubmitState) => {\n return Boolean(\n state === 'error'\n ? errorsRef.current?.[path] instanceof Error ||\n fieldErrorRef.current[path] instanceof Error\n : fieldStateRef.current[path] === state\n )\n },\n []\n )\n const hasFieldState = useCallback(\n (state: SubmitState) => {\n return mountedFieldPathsRef.current.some((path) => {\n return checkFieldStateFor(path, state)\n })\n },\n [checkFieldStateFor]\n )\n const hasErrors = useCallback(() => {\n return hasFieldState('error')\n }, [hasFieldState])\n\n /**\n * Sets the error state for a specific path\n */\n const setFieldError = useCallback(\n (path: Path, error: Error | FormError) => {\n fieldErrorRef.current[path] = error\n },\n []\n )\n\n /**\n * Sets the field state for a specific path\n */\n const setFieldState = useCallback(\n (path: Path, fieldState: SubmitState) => {\n if (fieldState !== fieldStateRef.current[path]) {\n // The state for the target value was changed\n fieldStateRef.current[path] = fieldState\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData) => {\n if (filter) {\n const filtered = { ...data }\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n const result = filter(\n path,\n exists ? pointer.get(data, path) : undefined,\n props,\n {\n error: fieldErrorRef.current?.[path],\n }\n )\n if (result === false && exists) {\n pointer.remove(filtered, path)\n }\n })\n\n return filtered\n }\n\n return data\n },\n [filterData]\n )\n const fieldPropsRef = useRef<Record<Path, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n fieldPropsRef.current[path] = props\n },\n []\n )\n const hasFieldWithAsyncValidator = useCallback(() => {\n for (const path in fieldPropsRef.current) {\n const props = fieldPropsRef.current[path]\n if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {\n return true\n }\n }\n\n return false\n }, [])\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterData']\n hasErrors?: ContextState['hasErrors']\n setShowAllErrors?: ContextState['setShowAllErrors']\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const setSharedData = sharedData.set\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n internalDataRef.current = useMemo(() => {\n // NB: \"sharedData.data\" is only available on a rerender.\n // Update the shared state, if initialData is given and no shared state is available.\n // We do almost the same later in a useLayoutEffect, but we need to do it here as well, so we set the data as early as possible.\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [data, id, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n executeAjvValidator()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({\n filterDataHandler,\n hasErrors,\n setShowAllErrors,\n })\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n extendAttachment,\n filterData,\n filterDataHandler,\n hasErrors,\n id,\n rerenderUseDataHook,\n setShowAllErrors,\n ])\n\n /**\n * Update the data set\n */\n const updateDataValue: ContextState['updateDataValue'] = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n internalDataRef.current = newData\n\n if (id) {\n // Will ensure that Form.getData() gets the correct data\n extendSharedData?.(newData)\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n\n if (sessionStorageId && typeof window !== 'undefined') {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(newData)\n )\n }\n\n forceUpdate()\n\n return newData\n },\n [\n id,\n sessionStorageId,\n extendSharedData,\n filterData,\n rerenderUseDataHook,\n ]\n )\n\n const setData = useCallback((newData: Data) => {\n internalDataRef.current = newData\n forceUpdate()\n }, [])\n\n /**\n * Update the data set on user interaction (unvalidated)\n */\n const handlePathChangeUnvalidated: ContextState['handlePathChange'] =\n useCallback(\n async (path, value) => {\n if (!path) {\n return null\n }\n\n updateDataValue(path, value)\n\n if (isAsync(onPathChange)) {\n await onPathChange?.(path, value)\n } else {\n onPathChange?.(path, value)\n }\n },\n [onPathChange, updateDataValue]\n )\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: ContextState['handlePathChange'] = useCallback(\n async (path, value = '_undefined_') => {\n if (!path) {\n return null\n }\n\n if (value !== '_undefined_') {\n handlePathChangeUnvalidated(path, value)\n }\n\n showAllErrorsRef.current = false\n\n validateData()\n\n if (isAsync(onChange)) {\n return await onChange(internalDataRef.current as Data)\n }\n\n return onChange?.(internalDataRef.current as Data)\n },\n [handlePathChangeUnvalidated, onChange, validateData]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n if (fieldPropsRef.current?.[path]) {\n delete fieldPropsRef.current[path]\n }\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Shared logic dedicated to submit the whole form\n */\n const handleSubmitCall = useCallback<ContextState['handleSubmitCall']>(\n async (args) => {\n const {\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n } = args\n\n setSubmitState({ error: undefined })\n\n const asyncBehaviorIsEnabled =\n (skipErrorCheck\n ? true\n : // Don't enable async behaviour if we have errors, but when we have a pending state\n !hasErrors() || hasFieldState('pending')) &&\n (enableAsyncBehaviour || hasFieldWithAsyncValidator())\n\n if (asyncBehaviorIsEnabled) {\n setFormState('pending')\n }\n\n // Just call the submit listeners \"once\", and not on the retry/recall\n if (!skipFieldValidation) {\n for (const {\n path,\n type,\n callback,\n } of fieldEventListenersRef.current) {\n if (\n type === 'onSubmit' &&\n mountedFieldPathsRef.current.includes(path)\n ) {\n // Call all submit listener callbacks (e.g. to validate fields)\n if (asyncBehaviorIsEnabled) {\n await callback()\n } else {\n callback()\n }\n }\n }\n }\n\n if (\n !(skipErrorCheck ? false : hasErrors()) &&\n !hasFieldState('pending') &&\n (skipFieldValidation ? true : !hasFieldState('error'))\n ) {\n let result: EventStateObject | unknown\n\n try {\n result = await onSubmit()\n\n if (result instanceof Error) {\n throw result\n }\n } catch (error) {\n result = { error }\n }\n\n const state = result as EventStateObject\n\n if (asyncBehaviorIsEnabled) {\n setFormState(state?.error ? 'abort' : 'complete')\n }\n\n // Force the state to be set by a custom status\n if (state?.['status']) {\n setFormState(state?.['status'])\n }\n\n if (state?.error || state?.warning || state?.info) {\n setSubmitState(state)\n }\n } else {\n if (asyncBehaviorIsEnabled) {\n window.requestAnimationFrame(() => {\n setFormState(undefined)\n })\n\n if (!skipFieldValidation) {\n // Add a event listener to continue the submit after the pending state is resolved\n onSubmitContinueRef.current = () => {\n window.requestAnimationFrame(() => {\n // Do not call the validators again,\n // because we already did it in the first call\n // If they are async, we wait for them to finish anyway\n handleSubmitCall({ ...args, skipFieldValidation: true })\n })\n }\n }\n }\n\n onSubmitRequest?.()\n\n setShowAllErrors(true)\n }\n\n return internalDataRef.current\n },\n [\n setSubmitState,\n hasErrors,\n hasFieldWithAsyncValidator,\n hasFieldState,\n setFormState,\n onSubmitRequest,\n setShowAllErrors,\n ]\n )\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n async ({ formElement = null } = {}) => {\n handleSubmitCall({\n enableAsyncBehaviour: isAsync(onSubmit),\n onSubmit: async () => {\n const args = filterDataHandler(internalDataRef.current as Data)\n const opts = {\n resetForm: () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n },\n clearData: () => {\n internalDataRef.current = {}\n if (id) {\n setSharedData?.({} as Data)\n } else {\n forceUpdate()\n }\n },\n }\n\n let result = undefined\n\n if (isAsync(onSubmit)) {\n result = await onSubmit(args, opts)\n } else {\n result = onSubmit?.(args, opts)\n }\n\n const completeResult = await onSubmitComplete?.(args, result)\n if (completeResult) {\n result =\n Object.keys(result).length > 0\n ? { ...result, ...completeResult }\n : completeResult\n }\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n\n return result\n },\n })\n },\n [\n filterDataHandler,\n handleSubmitCall,\n id,\n onSubmit,\n onSubmitComplete,\n scrollToTop,\n scrollTopOnSubmit,\n sessionStorageId,\n setSharedData,\n ]\n )\n\n // Collect listeners to be called during form submit\n const fieldEventListenersRef = useRef<Array<EventListenerCall>>([])\n const setFieldEventListener = useCallback(\n (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => {\n fieldEventListenersRef.current =\n fieldEventListenersRef.current.filter(({ path: p, type: t }) => {\n return !(p === path && t === type)\n })\n fieldEventListenersRef.current.push({ path, type, callback })\n },\n []\n )\n\n // Handle unresolved field states during async submit\n const onSubmitContinueRef = useRef<() => void>(null)\n if (!hasFieldState('pending')) {\n onSubmitContinueRef.current?.()\n onSubmitContinueRef.current = null\n }\n\n // - ajv validator routines\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n const onTimeout = useCallback(() => {\n setFormState(undefined)\n setSubmitState({\n info: undefined,\n warning: undefined,\n error: undefined,\n })\n }, [setFormState, setSubmitState])\n\n const { bufferedFormState: formState } = useFormStatusBuffer({\n formState: formStateRef.current,\n waitFor: hasFieldState('pending'),\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n })\n\n const submitState = submitStateRef.current\n const disabled = rest?.['disabled'] ?? formState === 'pending'\n\n return (\n <Context.Provider\n value={{\n /** Method */\n handlePathChange,\n handlePathChangeUnvalidated,\n handleSubmit,\n handleMountField,\n handleUnMountField,\n handleSubmitCall,\n setFormState,\n setShowAllErrors,\n setFieldEventListener,\n setFieldState,\n setFieldError,\n setProps,\n hasErrors,\n hasFieldState,\n checkFieldStateFor,\n validateData,\n updateDataValue,\n setData,\n filterDataHandler,\n scrollToTop,\n\n /** State handling */\n schema,\n disabled,\n formState,\n submitState,\n contextErrorMessages,\n hasContext: true,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n mountedFieldPaths: mountedFieldPathsRef.current,\n ajvInstance: ajvRef.current,\n\n /** Additional */\n id,\n data: internalDataRef.current,\n props,\n ...rest,\n }}\n >\n <SharedProvider formElement={{ disabled }}>\n {children}\n </SharedProvider>\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nfunction addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nfunction removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n\ntype FormStatusBufferProps = {\n minimumAsyncBehaviorTime?: Props<unknown>['minimumAsyncBehaviorTime']\n asyncSubmitTimeout?: Props<unknown>['asyncSubmitTimeout']\n formState: ContextState['formState']\n waitFor: boolean\n onTimeout: () => void\n}\n\nfunction useFormStatusBuffer(props: FormStatusBufferProps) {\n const {\n formState,\n waitFor,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n } = props || {}\n\n const [, forceUpdate] = useReducer(() => ({}), {})\n const stateRef = useRef<SubmitState>()\n const nowRef = useRef<number | null>(null)\n const timeoutRef = useRef<{\n complete?: NodeJS.Timeout | null\n reset?: NodeJS.Timeout | null\n timeout?: NodeJS.Timeout | null\n }>({})\n\n const setState = useCallback(\n (state: SubmitState) => {\n stateRef.current = state\n forceUpdate()\n },\n [forceUpdate]\n )\n\n const clear = useCallback(() => {\n for (const key in timeoutRef.current) {\n clearTimeout(timeoutRef.current[key])\n }\n }, [])\n\n const hadCompleteRef = useRef(false)\n\n useEffect(() => {\n // This offset is used to calculate the delay,\n // which ensures that the form state is displayed for at least minimumAsyncBehaviorTime duration.\n // If the form was 'pending' for less than minimumAsyncBehaviorTime,\n // the delay will be the remaining time to reach minimumAsyncBehaviorTime.\n const isTest = process.env.NODE_ENV === 'test'\n const minimum =\n minimumAsyncBehaviorTime ??\n // make it testable\n (isTest ? 1 : 1000)\n\n if (stateRef.current && formState === 'error') {\n clear()\n setState(undefined)\n return\n }\n\n if (formState === 'abort') {\n clear()\n setState('abort')\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n }, minimum)\n return\n }\n\n if (formState === 'complete') {\n hadCompleteRef.current = true\n }\n\n if (formState === 'pending' && stateRef.current !== 'pending') {\n clear()\n nowRef.current = Date.now()\n hadCompleteRef.current = false\n setState('pending')\n } else if (stateRef.current === 'pending') {\n const offset = Math.max(Date.now() - nowRef.current)\n const delay = isTest ? minimum : Math.max(minimum - offset, 0)\n\n if (!waitFor) {\n timeoutRef.current.complete = setTimeout(() => {\n if (hadCompleteRef.current) {\n setState('complete')\n }\n }, delay)\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n clear()\n }, delay + minimum)\n }\n }\n\n if (stateRef.current === 'pending') {\n timeoutRef.current.timeout = setTimeout(() => {\n clear()\n setState(undefined)\n onTimeout?.()\n }, asyncSubmitTimeout ?? 30000)\n }\n\n return clear\n }, [\n clear,\n minimumAsyncBehaviorTime,\n formState,\n setState,\n waitFor,\n asyncSubmitTimeout,\n onTimeout,\n ])\n\n return { bufferedFormState: stateRef.current }\n}\n"],"mappings":"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"}