@dnb/eufemia 10.24.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 (270) hide show
  1. package/CHANGELOG.md +17 -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 +5 -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 +5 -5
  8. package/cjs/components/autocomplete/Autocomplete.d.ts +0 -15
  9. package/cjs/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  10. package/cjs/components/autocomplete/AutocompleteDocs.js +293 -0
  11. package/cjs/components/autocomplete/AutocompleteDocs.js.map +1 -0
  12. package/cjs/components/dropdown/Dropdown.d.ts +0 -3
  13. package/cjs/components/input/InputDocs.js +2 -2
  14. package/cjs/components/input/InputDocs.js.map +1 -1
  15. package/cjs/extensions/forms/DataContext/At/At.js +6 -6
  16. package/cjs/extensions/forms/DataContext/At/At.js.map +1 -1
  17. package/cjs/extensions/forms/DataContext/Context.d.ts +5 -2
  18. package/cjs/extensions/forms/DataContext/Context.js +1 -0
  19. package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
  20. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  21. package/cjs/extensions/forms/DataContext/Provider/Provider.js +52 -26
  22. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  23. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +4 -4
  24. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  25. package/cjs/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  26. package/cjs/extensions/forms/Form/Handler/Handler.js +3 -3
  27. package/cjs/extensions/forms/Form/Handler/Handler.js.map +1 -1
  28. package/cjs/extensions/forms/StepsLayout/StepsLayout.js +27 -24
  29. package/cjs/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  30. package/cjs/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  31. package/cjs/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  32. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  33. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  34. package/cjs/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  35. package/cjs/extensions/forms/hooks/useFieldProps.js +82 -58
  36. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  37. package/cjs/extensions/forms/style/dnb-forms.css +1 -1
  38. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  39. package/cjs/fragments/drawer-list/DrawerList.d.ts +95 -1
  40. package/cjs/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  41. package/cjs/fragments/drawer-list/DrawerListDocs.js +188 -0
  42. package/cjs/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  43. package/cjs/shared/Eufemia.d.ts +1 -1
  44. package/cjs/shared/Eufemia.js +2 -2
  45. package/cjs/shared/Eufemia.js.map +1 -1
  46. package/cjs/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  47. package/cjs/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  48. package/cjs/style/core/scopes.scss +1 -1
  49. package/cjs/style/dnb-ui-basis.css +1 -1
  50. package/cjs/style/dnb-ui-basis.min.css +1 -1
  51. package/cjs/style/dnb-ui-body.css +1 -1
  52. package/cjs/style/dnb-ui-body.min.css +1 -1
  53. package/cjs/style/dnb-ui-components.css +7 -3
  54. package/cjs/style/dnb-ui-components.min.css +2 -2
  55. package/cjs/style/dnb-ui-core.css +1 -1
  56. package/cjs/style/dnb-ui-core.min.css +1 -1
  57. package/cjs/style/dnb-ui-extensions.css +1 -1
  58. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  59. package/cjs/style/dnb-ui-forms.css +1 -1
  60. package/cjs/style/dnb-ui-forms.min.css +1 -1
  61. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +8 -4
  62. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
  63. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  64. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  65. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  66. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  67. package/cjs/style/themes/theme-eiendom/properties.js +10 -10
  68. package/cjs/style/themes/theme-eiendom/properties.js.map +1 -1
  69. package/cjs/style/themes/theme-sbanken/properties.js +10 -10
  70. package/cjs/style/themes/theme-sbanken/properties.js.map +1 -1
  71. package/cjs/style/themes/theme-sbanken/properties.scss +10 -10
  72. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  73. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  74. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +13 -8
  75. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  76. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  77. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  78. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  79. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  80. package/cjs/style/themes/theme-ui/properties.js +10 -10
  81. package/cjs/style/themes/theme-ui/properties.js.map +1 -1
  82. package/cjs/style/themes/theme-ui/ui-theme-components.css +8 -4
  83. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +3 -3
  84. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  85. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  86. package/cjs/style/themes/theme-ui/ui-theme-forms.css +1 -1
  87. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  88. package/components/accordion/style/dnb-accordion.css +6 -2
  89. package/components/accordion/style/dnb-accordion.min.css +2 -2
  90. package/components/accordion/style/dnb-accordion.scss +8 -2
  91. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +5 -4
  92. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  93. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +5 -5
  94. package/components/autocomplete/Autocomplete.d.ts +0 -15
  95. package/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  96. package/components/autocomplete/AutocompleteDocs.js +285 -0
  97. package/components/autocomplete/AutocompleteDocs.js.map +1 -0
  98. package/components/dropdown/Dropdown.d.ts +0 -3
  99. package/components/input/InputDocs.js +2 -2
  100. package/components/input/InputDocs.js.map +1 -1
  101. package/es/components/accordion/style/dnb-accordion.css +6 -2
  102. package/es/components/accordion/style/dnb-accordion.min.css +2 -2
  103. package/es/components/accordion/style/dnb-accordion.scss +8 -2
  104. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +5 -4
  105. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  106. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +5 -5
  107. package/es/components/autocomplete/Autocomplete.d.ts +0 -15
  108. package/es/components/autocomplete/AutocompleteDocs.d.ts +3 -0
  109. package/es/components/autocomplete/AutocompleteDocs.js +285 -0
  110. package/es/components/autocomplete/AutocompleteDocs.js.map +1 -0
  111. package/es/components/dropdown/Dropdown.d.ts +0 -3
  112. package/es/components/input/InputDocs.js +2 -2
  113. package/es/components/input/InputDocs.js.map +1 -1
  114. package/es/extensions/forms/DataContext/At/At.js +7 -7
  115. package/es/extensions/forms/DataContext/At/At.js.map +1 -1
  116. package/es/extensions/forms/DataContext/Context.d.ts +5 -2
  117. package/es/extensions/forms/DataContext/Context.js +1 -0
  118. package/es/extensions/forms/DataContext/Context.js.map +1 -1
  119. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  120. package/es/extensions/forms/DataContext/Provider/Provider.js +51 -26
  121. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  122. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +4 -4
  123. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  124. package/es/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  125. package/es/extensions/forms/Form/Handler/Handler.js +3 -3
  126. package/es/extensions/forms/Form/Handler/Handler.js.map +1 -1
  127. package/es/extensions/forms/StepsLayout/StepsLayout.js +27 -24
  128. package/es/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  129. package/es/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  130. package/es/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  131. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  132. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  133. package/es/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  134. package/es/extensions/forms/hooks/useFieldProps.js +82 -58
  135. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  136. package/es/extensions/forms/style/dnb-forms.css +1 -1
  137. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  138. package/es/fragments/drawer-list/DrawerList.d.ts +95 -1
  139. package/es/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  140. package/es/fragments/drawer-list/DrawerListDocs.js +180 -0
  141. package/es/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  142. package/es/shared/Eufemia.d.ts +1 -1
  143. package/es/shared/Eufemia.js +2 -2
  144. package/es/shared/Eufemia.js.map +1 -1
  145. package/es/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  146. package/es/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  147. package/es/style/core/scopes.scss +1 -1
  148. package/es/style/dnb-ui-basis.css +1 -1
  149. package/es/style/dnb-ui-basis.min.css +1 -1
  150. package/es/style/dnb-ui-body.css +1 -1
  151. package/es/style/dnb-ui-body.min.css +1 -1
  152. package/es/style/dnb-ui-components.css +7 -3
  153. package/es/style/dnb-ui-components.min.css +2 -2
  154. package/es/style/dnb-ui-core.css +1 -1
  155. package/es/style/dnb-ui-core.min.css +1 -1
  156. package/es/style/dnb-ui-extensions.css +1 -1
  157. package/es/style/dnb-ui-extensions.min.css +1 -1
  158. package/es/style/dnb-ui-forms.css +1 -1
  159. package/es/style/dnb-ui-forms.min.css +1 -1
  160. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +8 -4
  161. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
  162. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  163. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  164. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  165. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  166. package/es/style/themes/theme-eiendom/properties.js +10 -10
  167. package/es/style/themes/theme-eiendom/properties.js.map +1 -1
  168. package/es/style/themes/theme-sbanken/properties.js +10 -10
  169. package/es/style/themes/theme-sbanken/properties.js.map +1 -1
  170. package/es/style/themes/theme-sbanken/properties.scss +10 -10
  171. package/es/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  172. package/es/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  173. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +13 -8
  174. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  175. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  176. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  177. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  178. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  179. package/es/style/themes/theme-ui/properties.js +10 -10
  180. package/es/style/themes/theme-ui/properties.js.map +1 -1
  181. package/es/style/themes/theme-ui/ui-theme-components.css +8 -4
  182. package/es/style/themes/theme-ui/ui-theme-components.min.css +3 -3
  183. package/es/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  184. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  185. package/es/style/themes/theme-ui/ui-theme-forms.css +1 -1
  186. package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  187. package/esm/dnb-ui-basis.min.mjs +1 -1
  188. package/esm/dnb-ui-components.min.mjs +1 -1
  189. package/esm/dnb-ui-elements.min.mjs +1 -1
  190. package/esm/dnb-ui-extensions.min.mjs +2 -2
  191. package/esm/dnb-ui-lib.min.mjs +1 -1
  192. package/extensions/forms/DataContext/At/At.js +7 -7
  193. package/extensions/forms/DataContext/At/At.js.map +1 -1
  194. package/extensions/forms/DataContext/Context.d.ts +5 -2
  195. package/extensions/forms/DataContext/Context.js +1 -0
  196. package/extensions/forms/DataContext/Context.js.map +1 -1
  197. package/extensions/forms/DataContext/Provider/Provider.d.ts +1 -5
  198. package/extensions/forms/DataContext/Provider/Provider.js +52 -26
  199. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  200. package/extensions/forms/DataContext/Provider/ProviderDocs.js +4 -4
  201. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  202. package/extensions/forms/Form/Handler/Handler.d.ts +1 -1
  203. package/extensions/forms/Form/Handler/Handler.js +3 -3
  204. package/extensions/forms/Form/Handler/Handler.js.map +1 -1
  205. package/extensions/forms/StepsLayout/StepsLayout.js +27 -24
  206. package/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  207. package/extensions/forms/StepsLayout/StepsLayoutDocs.js +1 -1
  208. package/extensions/forms/StepsLayout/StepsLayoutDocs.js.map +1 -1
  209. package/extensions/forms/StepsLayout/style/dnb-steps-layout.css +1 -1
  210. package/extensions/forms/StepsLayout/style/dnb-steps-layout.min.css +1 -1
  211. package/extensions/forms/StepsLayout/style/dnb-steps-layout.scss +1 -1
  212. package/extensions/forms/hooks/useFieldProps.js +82 -58
  213. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  214. package/extensions/forms/style/dnb-forms.css +1 -1
  215. package/extensions/forms/style/dnb-forms.min.css +1 -1
  216. package/fragments/drawer-list/DrawerList.d.ts +95 -1
  217. package/fragments/drawer-list/DrawerListDocs.d.ts +3 -0
  218. package/fragments/drawer-list/DrawerListDocs.js +180 -0
  219. package/fragments/drawer-list/DrawerListDocs.js.map +1 -0
  220. package/package.json +1 -1
  221. package/shared/Eufemia.d.ts +1 -1
  222. package/shared/Eufemia.js +2 -2
  223. package/shared/Eufemia.js.map +1 -1
  224. package/shared/helpers/runCssVersionMismatchWarning.js +2 -2
  225. package/shared/helpers/runCssVersionMismatchWarning.js.map +1 -1
  226. package/style/core/scopes.scss +1 -1
  227. package/style/dnb-ui-basis.css +1 -1
  228. package/style/dnb-ui-basis.min.css +1 -1
  229. package/style/dnb-ui-body.css +1 -1
  230. package/style/dnb-ui-body.min.css +1 -1
  231. package/style/dnb-ui-components.css +7 -3
  232. package/style/dnb-ui-components.min.css +2 -2
  233. package/style/dnb-ui-core.css +1 -1
  234. package/style/dnb-ui-core.min.css +1 -1
  235. package/style/dnb-ui-extensions.css +1 -1
  236. package/style/dnb-ui-extensions.min.css +1 -1
  237. package/style/dnb-ui-forms.css +1 -1
  238. package/style/dnb-ui-forms.min.css +1 -1
  239. package/style/themes/theme-eiendom/eiendom-theme-components.css +8 -4
  240. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
  241. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  242. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  243. package/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  244. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  245. package/style/themes/theme-eiendom/properties.js +10 -10
  246. package/style/themes/theme-eiendom/properties.js.map +1 -1
  247. package/style/themes/theme-sbanken/properties.js +10 -10
  248. package/style/themes/theme-sbanken/properties.js.map +1 -1
  249. package/style/themes/theme-sbanken/properties.scss +10 -10
  250. package/style/themes/theme-sbanken/sbanken-theme-basis.css +10 -10
  251. package/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
  252. package/style/themes/theme-sbanken/sbanken-theme-components.css +13 -8
  253. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  254. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  255. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  256. package/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  257. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  258. package/style/themes/theme-ui/properties.js +10 -10
  259. package/style/themes/theme-ui/properties.js.map +1 -1
  260. package/style/themes/theme-ui/ui-theme-components.css +8 -4
  261. package/style/themes/theme-ui/ui-theme-components.min.css +3 -3
  262. package/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  263. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  264. package/style/themes/theme-ui/ui-theme-forms.css +1 -1
  265. package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  266. package/umd/dnb-ui-basis.min.js +1 -1
  267. package/umd/dnb-ui-components.min.js +1 -1
  268. package/umd/dnb-ui-elements.min.js +1 -1
  269. package/umd/dnb-ui-extensions.min.js +2 -2
  270. package/umd/dnb-ui-lib.min.js +1 -1
@@ -84,6 +84,7 @@ export default function useFieldProps(props) {
84
84
  validateRequired
85
85
  });
86
86
  const {
87
+ handlePathChangeUnvalidated: handlePathChangeUnvalidatedDataContext,
87
88
  handlePathChange: handlePathChangeDataContext,
88
89
  updateDataValue: updateDataValueDataContext,
89
90
  validateData: validateDataDataContext,
@@ -155,22 +156,22 @@ export default function useFieldProps(props) {
155
156
  const asyncBehaviorIsEnabled = useMemo(() => {
156
157
  return isAsync(onChange) || isAsync(onChangeContext);
157
158
  }, [onChangeContext, onChange]);
158
- const validatedWithValue = useRef();
159
+ const validatedValue = useRef();
159
160
  const changeEventResultRef = useRef(null);
160
- const currentAsyncProcessRef = useRef(null);
161
- const setCurrentAsyncProcess = useCallback(name => {
162
- currentAsyncProcessRef.current = name;
161
+ const asyncProcessRef = useRef(null);
162
+ const defineAsyncProcess = useCallback(name => {
163
+ asyncProcessRef.current = name;
163
164
  }, []);
164
165
  const asyncBufferRef = useRef({});
165
166
  for (const key in asyncBufferRef.current) {
166
167
  const {
167
- fulfill,
168
- hasAsyncProcesses
168
+ resolve,
169
+ validateProcesses
169
170
  } = asyncBufferRef.current[key] || {};
170
- if ((hasAsyncProcesses === null || hasAsyncProcesses === void 0 ? void 0 : hasAsyncProcesses()) === false) {
171
+ if ((validateProcesses === null || validateProcesses === void 0 ? void 0 : validateProcesses()) === false) {
171
172
  delete asyncBufferRef.current[key];
172
- if (typeof fulfill === 'function') {
173
- window.requestAnimationFrame(fulfill);
173
+ if (typeof resolve === 'function') {
174
+ window.requestAnimationFrame(resolve);
174
175
  }
175
176
  }
176
177
  }
@@ -298,24 +299,33 @@ export default function useFieldProps(props) {
298
299
  }
299
300
  const runAsync = isAsync(validatorRef.current);
300
301
  if (runAsync) {
301
- setCurrentAsyncProcess('validator');
302
+ defineAsyncProcess('validator');
302
303
  setFieldState('validating');
303
304
  hideError();
304
305
  }
305
306
  const opts = _objectSpread(_objectSpread({}, contextErrorMessages), errorMessagesRef.current);
307
+ const tmpValue = valueRef.current;
306
308
  const result = await validatorRef.current(valueRef.current, opts);
307
- persistErrorState('gracefully', result);
308
- if (runAsync) {
309
- setFieldState(result instanceof Error ? 'error' : 'complete');
309
+ const unchangedValue = tmpValue === valueRef.current;
310
+ if (unchangedValue) {
311
+ persistErrorState('gracefully', result);
312
+ if (continuousValidation || runAsync) {
313
+ window.requestAnimationFrame(() => {
314
+ showError();
315
+ forceUpdate();
316
+ });
317
+ }
310
318
  }
311
- if (continuousValidation || runAsync) {
312
- window.requestAnimationFrame(() => {
313
- showError();
314
- forceUpdate();
315
- });
319
+ if (runAsync) {
320
+ defineAsyncProcess(undefined);
321
+ if (unchangedValue) {
322
+ setFieldState(result instanceof Error ? 'error' : 'complete');
323
+ } else {
324
+ setFieldState('pending');
325
+ }
316
326
  }
317
327
  return result;
318
- }, [contextErrorMessages, continuousValidation, hideError, persistErrorState, setCurrentAsyncProcess, setFieldState, showError]);
328
+ }, [contextErrorMessages, continuousValidation, hideError, persistErrorState, defineAsyncProcess, setFieldState, showError]);
319
329
  const callOnBlurValidator = useCallback(async function () {
320
330
  let {
321
331
  valueOverride = null
@@ -326,17 +336,18 @@ export default function useFieldProps(props) {
326
336
  const value = transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current, 'onBlurValidator');
327
337
  const runAsync = isAsync(onBlurValidatorRef.current);
328
338
  if (runAsync) {
329
- setCurrentAsyncProcess('onBlurValidator');
339
+ defineAsyncProcess('onBlurValidator');
330
340
  setFieldState('validating');
331
341
  }
332
342
  const result = await onBlurValidatorRef.current(value);
333
343
  persistErrorState('gracefully', result);
334
344
  if (runAsync) {
345
+ defineAsyncProcess(undefined);
335
346
  setFieldState(result instanceof Error ? 'error' : 'complete');
336
347
  }
337
348
  showError();
338
349
  forceUpdate();
339
- }, [persistErrorState, setCurrentAsyncProcess, setFieldState, showError]);
350
+ }, [persistErrorState, defineAsyncProcess, setFieldState, showError]);
340
351
  const validateValue = useCallback(async () => {
341
352
  const isProcessActive = startProcess();
342
353
  if (disabled) {
@@ -349,7 +360,7 @@ export default function useFieldProps(props) {
349
360
  }
350
361
  const value = valueRef.current;
351
362
  changeEventResultRef.current = null;
352
- validatedWithValue.current = null;
363
+ validatedValue.current = null;
353
364
  try {
354
365
  const requiredError = transformers.current.validateRequired(value, {
355
366
  emptyValue,
@@ -375,7 +386,7 @@ export default function useFieldProps(props) {
375
386
  if (isProcessActive()) {
376
387
  clearErrorState();
377
388
  }
378
- validatedWithValue.current = value;
389
+ validatedValue.current = value;
379
390
  } catch (error) {
380
391
  if (isProcessActive()) {
381
392
  persistErrorState('weak', error);
@@ -413,33 +424,31 @@ export default function useFieldProps(props) {
413
424
  const yieldAsyncProcess = useCallback(async _ref5 => {
414
425
  let {
415
426
  name,
416
- waitFor,
417
- withValidatedValueOf
427
+ waitFor
418
428
  } = _ref5;
419
429
  return new Promise(resolve => {
420
- const fulfill = () => {
421
- if (typeof withValidatedValueOf === 'undefined' || withValidatedValueOf === validatedWithValue.current) {
422
- resolve();
423
- }
424
- };
425
- const hasAsyncProcesses = () => {
426
- return waitFor.some(_ref6 => {
430
+ const validateProcesses = () => {
431
+ const result = waitFor.some(_ref6 => {
427
432
  let {
428
433
  processName,
429
- withStates
434
+ withStates,
435
+ withValue
430
436
  } = _ref6;
431
- return (processName ? processName === currentAsyncProcessRef.current : true) && withStates.some(state => {
437
+ const hasMatchingValue = withValue === validatedValue.current;
438
+ const result = (typeof withValue === 'undefined' ? false : !hasMatchingValue) || (processName ? processName === asyncProcessRef.current : true) && (withStates === null || withStates === void 0 ? void 0 : withStates.some(state => {
432
439
  return state === fieldStateRef.current;
433
- });
440
+ }));
441
+ return result;
434
442
  });
443
+ return result;
435
444
  };
436
- if (hasAsyncProcesses() === true) {
445
+ if (validateProcesses() === true) {
437
446
  asyncBufferRef.current[name] = {
438
- fulfill,
439
- hasAsyncProcesses
447
+ resolve,
448
+ validateProcesses
440
449
  };
441
450
  } else {
442
- fulfill();
451
+ resolve();
443
452
  setFieldState('pending');
444
453
  }
445
454
  });
@@ -464,6 +473,7 @@ export default function useFieldProps(props) {
464
473
  }]
465
474
  });
466
475
  }
476
+ defineAsyncProcess(undefined);
467
477
  if ((result === null || result === void 0 ? void 0 : result.success) === 'saved') {
468
478
  setFieldState('success');
469
479
  } else if (result !== null && result !== void 0 && result.error) {
@@ -471,7 +481,7 @@ export default function useFieldProps(props) {
471
481
  } else if (asyncBehaviorIsEnabled) {
472
482
  setFieldState('complete');
473
483
  }
474
- }, [asyncBehaviorIsEnabled, persistErrorState, setFieldState, showError, yieldAsyncProcess]);
484
+ }, [asyncBehaviorIsEnabled, defineAsyncProcess, persistErrorState, setFieldState, showError, yieldAsyncProcess]);
475
485
  const setEventResult = useCallback(result => {
476
486
  if (result instanceof Error) {
477
487
  result = {
@@ -485,37 +495,43 @@ export default function useFieldProps(props) {
485
495
  if (asyncBehaviorIsEnabled) {
486
496
  await yieldAsyncProcess({
487
497
  name: 'onChangeContext',
488
- withValidatedValueOf: valueRef.current,
489
498
  waitFor: [{
490
499
  processName: 'validator',
491
- withStates: ['validating', 'error']
500
+ withStates: ['validating', 'error'],
501
+ withValue: valueRef.current
492
502
  }, {
493
503
  processName: 'onBlurValidator',
494
- withStates: ['validating', 'error']
504
+ withStates: ['validating', 'error'],
505
+ withValue: valueRef.current
495
506
  }]
496
507
  });
497
508
  }
498
509
  if (path) {
499
510
  if (isAsync(onChangeContext)) {
500
- setCurrentAsyncProcess('onChangeContext');
501
- setEventResult(await (handlePathChangeDataContext === null || handlePathChangeDataContext === void 0 ? void 0 : handlePathChangeDataContext(path, valueRef.current)));
511
+ defineAsyncProcess('onChangeContext');
512
+ if (!hasError()) {
513
+ setEventResult(await (handlePathChangeDataContext === null || handlePathChangeDataContext === void 0 ? void 0 : handlePathChangeDataContext(path)));
514
+ } else {
515
+ setEventResult(null);
516
+ }
502
517
  } else {
503
- setEventResult(handlePathChangeDataContext === null || handlePathChangeDataContext === void 0 ? void 0 : handlePathChangeDataContext(path, valueRef.current));
518
+ setEventResult(handlePathChangeDataContext === null || handlePathChangeDataContext === void 0 ? void 0 : handlePathChangeDataContext(path));
504
519
  }
505
520
  }
506
521
  forceUpdate();
507
- }, [asyncBehaviorIsEnabled, path, yieldAsyncProcess, onChangeContext, setCurrentAsyncProcess, setEventResult, handlePathChangeDataContext]);
522
+ }, [asyncBehaviorIsEnabled, path, hasError, yieldAsyncProcess, onChangeContext, defineAsyncProcess, setEventResult, handlePathChangeDataContext]);
508
523
  const updateValue = useCallback(async newValue => {
509
524
  if (newValue === valueRef.current) {
510
525
  return;
511
526
  }
512
527
  valueRef.current = newValue;
528
+ handlePathChangeUnvalidatedDataContext(path, newValue);
513
529
  addToPool('validator', validateValue, isAsync(validatorRef.current));
514
530
  addToPool('onChangeContext', callOnChangeContext, isAsync(onChangeContext));
515
531
  await runPool(() => {
516
532
  handleError();
517
533
  });
518
- }, [addToPool, callOnChangeContext, handleError, onChangeContext, runPool, validateValue]);
534
+ }, [handlePathChangeUnvalidatedDataContext, path, addToPool, validateValue, callOnChangeContext, onChangeContext, runPool, handleError]);
519
535
  const handleChange = useCallback(async function (argFromInput) {
520
536
  let additionalArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
521
537
  const currentValue = valueRef.current;
@@ -540,20 +556,26 @@ export default function useFieldProps(props) {
540
556
  const args = getArgs();
541
557
  await yieldAsyncProcess({
542
558
  name: 'onChangeLocal',
543
- withValidatedValueOf: args[0],
544
559
  waitFor: [{
545
560
  processName: 'validator',
546
- withStates: ['validating', 'error']
561
+ withStates: ['validating', 'error'],
562
+ withValue: args[0]
547
563
  }, {
548
564
  processName: 'onBlurValidator',
549
- withStates: ['validating', 'error']
565
+ withStates: ['validating', 'error'],
566
+ withValue: args[0]
550
567
  }, {
551
568
  processName: 'onChangeContext',
552
- withStates: ['pending', 'error']
569
+ withStates: ['pending', 'error'],
570
+ withValue: args[0]
553
571
  }]
554
572
  });
555
- setCurrentAsyncProcess('onChangeLocal');
556
- setEventResult(await (onChange === null || onChange === void 0 ? void 0 : onChange.apply(_this, args)));
573
+ defineAsyncProcess('onChangeLocal');
574
+ if (!hasError()) {
575
+ setEventResult(await (onChange === null || onChange === void 0 ? void 0 : onChange.apply(_this, args)));
576
+ } else {
577
+ setEventResult(null);
578
+ }
557
579
  }, true);
558
580
  } else {
559
581
  setEventResult(onChange === null || onChange === void 0 ? void 0 : onChange.apply(_this, getArgs()));
@@ -564,7 +586,7 @@ export default function useFieldProps(props) {
564
586
  handleIterateElementChange === null || handleIterateElementChange === void 0 ? void 0 : handleIterateElementChange(iterateValuePath, valueRef.current);
565
587
  }
566
588
  });
567
- }, [addToPool, asyncBehaviorIsEnabled, handleIterateElementChange, hideError, itemPath, iterateElementIndex, onChange, runPool, setCurrentAsyncProcess, setEventResult, updateValue, yieldAsyncProcess]);
589
+ }, [addToPool, asyncBehaviorIsEnabled, handleIterateElementChange, hasError, hideError, itemPath, iterateElementIndex, onChange, runPool, defineAsyncProcess, setEventResult, updateValue, yieldAsyncProcess]);
568
590
  const handleFocus = useCallback(() => setHasFocus(true), [setHasFocus]);
569
591
  const handleBlur = useCallback(() => setHasFocus(false), [setHasFocus]);
570
592
  useMountEffect(() => {
@@ -616,8 +638,10 @@ export default function useFieldProps(props) {
616
638
  }, [dataContext.data, dataContext.id, path, props.value, updateDataValueDataContext, validateDataDataContext]);
617
639
  useEffect(() => {
618
640
  if (dataContext.showAllErrors) {
619
- showError();
620
- forceUpdate();
641
+ if (fieldStateRef.current !== 'validating') {
642
+ showError();
643
+ forceUpdate();
644
+ }
621
645
  }
622
646
  }, [dataContext.showAllErrors, showError]);
623
647
  useEffect(() => {
@@ -714,7 +738,7 @@ export default function useFieldProps(props) {
714
738
  info: !inFieldBlock ? infoRef.current : undefined,
715
739
  warning: !inFieldBlock ? warningRef.current : undefined,
716
740
  error: !inFieldBlock ? error : undefined,
717
- disabled: onBlurValidator && currentAsyncProcessRef.current === 'onBlurValidator' && fieldStateRef.current === 'validating' ? true : disabled,
741
+ disabled: onBlurValidator && asyncProcessRef.current === 'onBlurValidator' && fieldStateRef.current === 'validating' ? true : disabled,
718
742
  fieldState: resolveValidatingState(fieldStateRef.current)
719
743
  };
720
744
  const sharedData = useSharedState(id);