@rainbow-oh/yee-c 0.4.5 → 0.5.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 (104) hide show
  1. package/dist/cjs/Dialog/demo/basic.js +1 -1
  2. package/dist/cjs/Dialog/dialog.js +1 -1
  3. package/dist/cjs/Field/demo/validation.js +23 -3
  4. package/dist/cjs/Field/field.js +1 -1
  5. package/dist/cjs/Form/Field.js +1 -4
  6. package/dist/cjs/Form/Form.js +1 -1
  7. package/dist/cjs/Form/Group.js +36 -14
  8. package/dist/cjs/Form/List.js +23 -3
  9. package/dist/cjs/Form/demo/async-validate.d.ts +3 -0
  10. package/dist/cjs/Form/demo/async-validate.js +108 -0
  11. package/dist/cjs/Form/demo/virtual.js +1 -1
  12. package/dist/cjs/Form/form-store.d.ts +4 -4
  13. package/dist/cjs/Form/form-store.js +55 -25
  14. package/dist/cjs/Form/interface.d.ts +10 -7
  15. package/dist/cjs/Form/utils/validate.d.ts +23 -2
  16. package/dist/cjs/Form/utils/validate.js +59 -10
  17. package/dist/cjs/Select/demo/basic.js +1 -1
  18. package/dist/cjs/Select/demo/virtual.d.ts +3 -0
  19. package/dist/cjs/Select/demo/virtual.js +55 -0
  20. package/dist/cjs/Select/hooks/useSelectKeyboard.d.ts +7 -1
  21. package/dist/cjs/Select/hooks/useSelectKeyboard.js +16 -6
  22. package/dist/cjs/Select/interface.d.ts +44 -0
  23. package/dist/cjs/Select/option.js +3 -2
  24. package/dist/cjs/Select/options.js +115 -15
  25. package/dist/cjs/Select/select.js +20 -4
  26. package/dist/cjs/Select/style/index.less +17 -0
  27. package/dist/cjs/Table/style/index.less +19 -0
  28. package/dist/cjs/hooks/index.d.ts +2 -1
  29. package/dist/cjs/hooks/index.js +3 -1
  30. package/dist/cjs/hooks/useVirtualList.d.ts +71 -0
  31. package/dist/cjs/hooks/useVirtualList.js +117 -0
  32. package/dist/cjs/style/themes.css +1 -1
  33. package/dist/cjs/style/variables.css +1 -1
  34. package/dist/cjs/version.d.ts +1 -1
  35. package/dist/cjs/version.js +1 -1
  36. package/dist/esm/Dialog/demo/basic.js +1 -1
  37. package/dist/esm/Dialog/dialog.js +1 -1
  38. package/dist/esm/Field/demo/validation.js +30 -9
  39. package/dist/esm/Field/field.js +2 -1
  40. package/dist/esm/Form/Field.js +3 -4
  41. package/dist/esm/Form/Form.js +1 -1
  42. package/dist/esm/Form/Group.js +142 -53
  43. package/dist/esm/Form/List.js +61 -42
  44. package/dist/esm/Form/demo/async-validate.d.ts +3 -0
  45. package/dist/esm/Form/demo/async-validate.js +95 -0
  46. package/dist/esm/Form/demo/virtual.js +1 -1
  47. package/dist/esm/Form/form-store.d.ts +4 -4
  48. package/dist/esm/Form/form-store.js +187 -93
  49. package/dist/esm/Form/interface.d.ts +10 -7
  50. package/dist/esm/Form/utils/validate.d.ts +23 -2
  51. package/dist/esm/Form/utils/validate.js +122 -17
  52. package/dist/esm/Select/demo/basic.js +1 -1
  53. package/dist/esm/Select/demo/virtual.d.ts +3 -0
  54. package/dist/esm/Select/demo/virtual.js +38 -0
  55. package/dist/esm/Select/hooks/useSelectKeyboard.d.ts +7 -1
  56. package/dist/esm/Select/hooks/useSelectKeyboard.js +25 -9
  57. package/dist/esm/Select/interface.d.ts +44 -0
  58. package/dist/esm/Select/option.js +4 -2
  59. package/dist/esm/Select/options.js +132 -13
  60. package/dist/esm/Select/select.js +19 -4
  61. package/dist/esm/Select/style/index.less +17 -0
  62. package/dist/esm/Table/style/index.less +19 -0
  63. package/dist/esm/hooks/index.d.ts +2 -1
  64. package/dist/esm/hooks/index.js +2 -1
  65. package/dist/esm/hooks/useVirtualList.d.ts +71 -0
  66. package/dist/esm/hooks/useVirtualList.js +129 -0
  67. package/dist/esm/style/themes.css +1 -1
  68. package/dist/esm/style/variables.css +1 -1
  69. package/dist/esm/version.d.ts +1 -1
  70. package/dist/esm/version.js +1 -1
  71. package/dist/umd/yee-c.min.css +1 -1
  72. package/dist/umd/yee-c.min.js +1 -1
  73. package/package.json +1 -1
  74. package/src/Dialog/demo/basic.tsx +1 -1
  75. package/src/Dialog/dialog.tsx +1 -1
  76. package/src/Field/demo/validation.tsx +2 -2
  77. package/src/Field/field.tsx +2 -1
  78. package/src/Field/index.en-US.md +1 -1
  79. package/src/Field/index.zh-CN.md +1 -1
  80. package/src/Form/Field.tsx +3 -4
  81. package/src/Form/Form.tsx +1 -1
  82. package/src/Form/Group.tsx +15 -12
  83. package/src/Form/List.tsx +3 -3
  84. package/src/Form/demo/async-validate.tsx +71 -0
  85. package/src/Form/demo/virtual.tsx +1 -1
  86. package/src/Form/form-store.ts +37 -21
  87. package/src/Form/index.en-US.md +6 -5
  88. package/src/Form/index.zh-CN.md +6 -5
  89. package/src/Form/interface.ts +13 -7
  90. package/src/Form/utils/validate.ts +65 -13
  91. package/src/Select/demo/basic.tsx +1 -1
  92. package/src/Select/demo/virtual.tsx +25 -0
  93. package/src/Select/hooks/useSelectKeyboard.ts +30 -6
  94. package/src/Select/index.en-US.md +4 -0
  95. package/src/Select/index.zh-CN.md +4 -0
  96. package/src/Select/interface.ts +48 -2
  97. package/src/Select/option.tsx +2 -1
  98. package/src/Select/options.tsx +139 -8
  99. package/src/Select/select.tsx +23 -1
  100. package/src/Select/style/index.less +17 -0
  101. package/src/Table/style/index.less +19 -0
  102. package/src/hooks/index.ts +2 -0
  103. package/src/hooks/useVirtualList.ts +169 -0
  104. package/src/version.ts +1 -1
@@ -0,0 +1,71 @@
1
+ import React from 'react';
2
+ export interface UseVirtualListOptions {
3
+ /**
4
+ * Total number of items in the list.
5
+ */
6
+ itemCount: number;
7
+ /**
8
+ * Fixed height of every item in pixels.
9
+ */
10
+ itemHeight: number;
11
+ /**
12
+ * Extra items rendered above and below the visible window
13
+ * to avoid white flashes while scrolling.
14
+ * @default 4
15
+ */
16
+ overscan?: number;
17
+ }
18
+ export interface UseVirtualListResult {
19
+ /**
20
+ * Inclusive start index of the render window (already includes overscan).
21
+ */
22
+ start: number;
23
+ /**
24
+ * Exclusive end index of the render window (already includes overscan).
25
+ */
26
+ end: number;
27
+ /**
28
+ * Vertical offset to apply to the rendered block, equal to `start * itemHeight`.
29
+ * Use it as `transform: translateY(offsetY)` or `top: offsetY`.
30
+ */
31
+ offsetY: number;
32
+ /**
33
+ * Total scrollable height, equal to `itemCount * itemHeight`.
34
+ * Apply it to the inner spacer element so the scrollbar matches the full list.
35
+ */
36
+ totalHeight: number;
37
+ /**
38
+ * Ref to bind to the scroll container element.
39
+ */
40
+ viewportRef: React.RefObject<HTMLDivElement | null>;
41
+ /**
42
+ * Stable scroll handler (rAF-throttled). Bind to the viewport's `onScroll`.
43
+ */
44
+ onScroll: () => void;
45
+ /**
46
+ * Scroll the viewport so that the item at `index` is visible.
47
+ * Used by keyboard navigation to replace `scrollIntoView`.
48
+ */
49
+ scrollToIndex: (index: number) => void;
50
+ }
51
+ /**
52
+ * Fixed-height virtual scrolling hook.
53
+ *
54
+ * Renders only the items inside the visible window (plus an `overscan` buffer)
55
+ * and keeps the DOM node count constant regardless of `itemCount`.
56
+ *
57
+ * Usage:
58
+ * const { start, end, offsetY, totalHeight, viewportRef, onScroll, scrollToIndex } =
59
+ * useVirtualList({ itemCount, itemHeight });
60
+ *
61
+ * <div ref={viewportRef} onScroll={onScroll} style={{ maxHeight: 200, overflowY: 'auto' }}>
62
+ * <div style={{ height: totalHeight, position: 'relative' }}>
63
+ * {items.slice(start, end).map((it, i) => (
64
+ * <div key={it.key} style={{ position: 'absolute', height: itemHeight, transform: `translateY(${offsetY + i * itemHeight}px)` }}>
65
+ * {it.content}
66
+ * </div>
67
+ * ))}
68
+ * </div>
69
+ * </div>
70
+ */
71
+ export default function useVirtualList({ itemCount, itemHeight, overscan, }: UseVirtualListOptions): UseVirtualListResult;
@@ -0,0 +1,117 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/hooks/useVirtualList.ts
30
+ var useVirtualList_exports = {};
31
+ __export(useVirtualList_exports, {
32
+ default: () => useVirtualList
33
+ });
34
+ module.exports = __toCommonJS(useVirtualList_exports);
35
+ var import_react = require("react");
36
+ var import_useEvent = __toESM(require("./useEvent"));
37
+ var import_useResizeObserver = __toESM(require("./useResizeObserver"));
38
+ function useVirtualList({
39
+ itemCount,
40
+ itemHeight,
41
+ overscan = 4
42
+ }) {
43
+ const [scrollTop, setScrollTop] = (0, import_react.useState)(0);
44
+ const [visibleHeight, setVisibleHeight] = (0, import_react.useState)(0);
45
+ const rafRef = (0, import_react.useRef)(null);
46
+ const { ref: viewportRef } = (0, import_useResizeObserver.default)((entries) => {
47
+ const entry = entries[0];
48
+ if (!entry)
49
+ return;
50
+ const h = entry.contentRect.height;
51
+ setVisibleHeight((prev) => prev === h ? prev : h);
52
+ });
53
+ const totalHeight = itemCount * itemHeight;
54
+ const readViewport = (0, import_useEvent.default)(() => {
55
+ const viewport = viewportRef.current;
56
+ if (!viewport)
57
+ return;
58
+ const top = viewport.scrollTop;
59
+ const h = viewport.clientHeight;
60
+ setScrollTop((prev) => prev === top ? prev : top);
61
+ setVisibleHeight((prev) => prev === h ? prev : h);
62
+ });
63
+ const onScroll = (0, import_useEvent.default)(() => {
64
+ if (rafRef.current !== null)
65
+ return;
66
+ rafRef.current = requestAnimationFrame(() => {
67
+ rafRef.current = null;
68
+ readViewport();
69
+ });
70
+ });
71
+ (0, import_react.useEffect)(
72
+ () => () => {
73
+ if (rafRef.current !== null) {
74
+ cancelAnimationFrame(rafRef.current);
75
+ }
76
+ },
77
+ []
78
+ );
79
+ (0, import_react.useEffect)(() => {
80
+ readViewport();
81
+ }, [readViewport]);
82
+ (0, import_react.useEffect)(() => {
83
+ const viewport = viewportRef.current;
84
+ if (!viewport)
85
+ return;
86
+ const maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
87
+ if (viewport.scrollTop > maxScroll) {
88
+ viewport.scrollTop = maxScroll;
89
+ setScrollTop(maxScroll);
90
+ }
91
+ }, [totalHeight, viewportRef]);
92
+ const scrollToIndex = (0, import_useEvent.default)((index) => {
93
+ const viewport = viewportRef.current;
94
+ if (!viewport)
95
+ return;
96
+ const maxScroll = Math.max(0, totalHeight - viewport.clientHeight);
97
+ const target = Math.min(Math.max(0, index * itemHeight), maxScroll);
98
+ if (viewport.scrollTop !== target) {
99
+ viewport.scrollTop = target;
100
+ }
101
+ readViewport();
102
+ });
103
+ const effectiveVisibleHeight = visibleHeight || itemHeight;
104
+ const visibleCount = Math.ceil(effectiveVisibleHeight / itemHeight);
105
+ const start = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
106
+ const end = Math.min(itemCount, start + visibleCount + overscan * 2);
107
+ const offsetY = start * itemHeight;
108
+ return {
109
+ start,
110
+ end,
111
+ offsetY,
112
+ totalHeight,
113
+ viewportRef,
114
+ onScroll,
115
+ scrollToIndex
116
+ };
117
+ }
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-07-06T02:29:25.236Z
4
+ * Generated on 2026-07-07T06:37:47.907Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-07-06T02:29:25.236Z
4
+ * Generated on 2026-07-07T06:37:47.907Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.4.5";
6
+ export declare const version = "0.5.0";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.4.5";
25
+ var version = "0.5.0";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -30,7 +30,7 @@ export default (function () {
30
30
  // form.resetFields();
31
31
  },
32
32
  onConfirm: function onConfirm() {
33
- return form.submit();
33
+ return void form.submit();
34
34
  }
35
35
  }, /*#__PURE__*/React.createElement(Form, {
36
36
  form: form,
@@ -116,7 +116,7 @@ var Dialog = function Dialog(baseprops) {
116
116
  useFocusManage(contentRef.current, delayOpen);
117
117
  var cls = clsx(prefixCls, _defineProperty(_defineProperty({}, "".concat(prefixCls, "-open"), delayOpen), "".concat(prefixCls, "-fullscreen"), fullscreen));
118
118
  var renderFooter = function renderFooter() {
119
- if (footer === false) {
119
+ if (footer === false || footer === null) {
120
120
  return null;
121
121
  }
122
122
  if (footer === true || footer === undefined) {
@@ -1,3 +1,7 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
1
5
  import { Button, Field, Input, useVirtualForm } from "../..";
2
6
  import React, { useLayoutEffect } from 'react';
3
7
  export default (function () {
@@ -7,15 +11,32 @@ export default (function () {
7
11
  useLayoutEffect(function () {
8
12
  createForm('validationForm');
9
13
  }, []);
10
- var handleSubmit = function handleSubmit() {
11
- var form = getForm('validationForm');
12
- console.log('form: ', form);
13
- var errors = form === null || form === void 0 ? void 0 : form.submit();
14
- console.log('errors: ', errors);
15
- if (errors && errors.length === 0) {
16
- console.log('Submit success:', form === null || form === void 0 ? void 0 : form.getFieldsValue());
17
- }
18
- };
14
+ var handleSubmit = /*#__PURE__*/function () {
15
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
16
+ var form, errors;
17
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
18
+ while (1) switch (_context.prev = _context.next) {
19
+ case 0:
20
+ form = getForm('validationForm');
21
+ console.log('form: ', form);
22
+ _context.next = 4;
23
+ return form === null || form === void 0 ? void 0 : form.submit();
24
+ case 4:
25
+ errors = _context.sent;
26
+ console.log('errors: ', errors);
27
+ if (errors && errors.length === 0) {
28
+ console.log('Submit success:', form === null || form === void 0 ? void 0 : form.getFieldsValue());
29
+ }
30
+ case 7:
31
+ case "end":
32
+ return _context.stop();
33
+ }
34
+ }, _callee);
35
+ }));
36
+ return function handleSubmit() {
37
+ return _ref.apply(this, arguments);
38
+ };
39
+ }();
19
40
  return /*#__PURE__*/React.createElement("div", {
20
41
  style: {
21
42
  maxWidth: 400
@@ -84,7 +84,8 @@ var Field = function Field(props) {
84
84
  forceUpdate();
85
85
  },
86
86
  onBlur: function onBlur(event) {
87
- validateField === null || validateField === void 0 || validateField(name, 'onBlur');
87
+ // Fire-and-forget async validation; store notifies onStoreChange on completion.
88
+ void (validateField === null || validateField === void 0 ? void 0 : validateField(name, 'onBlur'));
88
89
 
89
90
  // Call child component's onBlur
90
91
  if (children.props.onBlur) {
@@ -155,10 +155,9 @@ var Field = function Field(props) {
155
155
  },
156
156
  onBlur: function onBlur(event) {
157
157
  var _props$onBlur;
158
- var err = validateField === null || validateField === void 0 ? void 0 : validateField(normalizedName, 'onBlur');
159
- if (err.length) {
160
- forceUpdate();
161
- }
158
+ // Fire-and-forget; the store calls onStoreChange (→ forceUpdate) when
159
+ // the (possibly async) validation completes, so the error UI refreshes.
160
+ void (validateField === null || validateField === void 0 ? void 0 : validateField(normalizedName, 'onBlur'));
162
161
  props === null || props === void 0 || (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, event);
163
162
  }
164
163
  });
@@ -64,7 +64,7 @@ var Form = function Form(baseprops) {
64
64
  onSubmit: function onSubmit(e) {
65
65
  e.preventDefault();
66
66
  e.stopPropagation();
67
- formInstance.submit();
67
+ void formInstance.submit();
68
68
  },
69
69
  onReset: function onReset(e) {
70
70
  e.preventDefault();
@@ -2,6 +2,10 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
2
2
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
3
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
4
4
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
5
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
6
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
7
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
8
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
9
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
10
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
11
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -12,6 +16,7 @@ import clsx from 'clsx';
12
16
  import { AnimatePresence, motion } from 'motion/react';
13
17
  import React, { useContext, useEffect, useId, useMemo, useReducer, useRef } from 'react';
14
18
  import Grid from "../Grid";
19
+ import { runValidator } from "./utils/validate";
15
20
  import FieldContext from "./FieldContext";
16
21
  import FormContext from "./FormContext";
17
22
  var Group = function Group(props) {
@@ -52,50 +57,99 @@ var Group = function Group(props) {
52
57
  forceValidate = _useReducer4[1]; // eslint-disable-line @typescript-eslint/no-unused-vars
53
58
 
54
59
  // Group validation
55
- var _validate = function validate(force) {
56
- if (!required && (!rules || rules.length === 0)) return [];
57
-
58
- // Skip if not touched and not forced validation
59
- if (!force && !touchedRef.current) return [];
60
- var values = {};
61
- childNames.forEach(function (name) {
62
- values[name] = formInstance.getFieldValue(name);
63
- });
64
- var errors = [];
65
-
66
- // Required validation: error if any child field is empty
67
- if (required) {
68
- var hasEmpty = childNames.some(function (name) {
69
- return !values[name] && values[name] !== 0;
70
- });
71
- if (hasEmpty) {
72
- errors.push({
73
- name: childNames,
74
- status: 'error',
75
- value: values,
76
- message: "".concat(label || '', " is required")
77
- });
78
- }
79
- }
80
-
81
- // Custom rules validation
82
- if (rules) {
83
- rules.forEach(function (rule) {
84
- if (rule.validator) {
85
- var passed = rule.validator(values);
86
- if (!passed) {
87
- errors.push({
88
- name: childNames,
89
- status: 'error',
90
- value: values,
91
- message: rule.message || ''
60
+ var _validate = /*#__PURE__*/function () {
61
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(force) {
62
+ var values, errors, hasEmpty, _iterator, _step, rule, result, _ref2, _result$message;
63
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
64
+ while (1) switch (_context.prev = _context.next) {
65
+ case 0:
66
+ if (!(!required && (!rules || rules.length === 0))) {
67
+ _context.next = 2;
68
+ break;
69
+ }
70
+ return _context.abrupt("return", []);
71
+ case 2:
72
+ if (!(!force && !touchedRef.current)) {
73
+ _context.next = 4;
74
+ break;
75
+ }
76
+ return _context.abrupt("return", []);
77
+ case 4:
78
+ values = {};
79
+ childNames.forEach(function (name) {
80
+ values[name] = formInstance.getFieldValue(name);
92
81
  });
93
- }
82
+ errors = []; // Required validation: error if any child field is empty
83
+ if (required) {
84
+ hasEmpty = childNames.some(function (name) {
85
+ return !values[name] && values[name] !== 0;
86
+ });
87
+ if (hasEmpty) {
88
+ errors.push({
89
+ name: childNames,
90
+ status: 'error',
91
+ value: values,
92
+ message: "".concat(label || '', " is required")
93
+ });
94
+ }
95
+ }
96
+
97
+ // Custom rules validation (supports sync + async validators)
98
+ if (!rules) {
99
+ _context.next = 29;
100
+ break;
101
+ }
102
+ _iterator = _createForOfIteratorHelper(rules);
103
+ _context.prev = 10;
104
+ _iterator.s();
105
+ case 12:
106
+ if ((_step = _iterator.n()).done) {
107
+ _context.next = 21;
108
+ break;
109
+ }
110
+ rule = _step.value;
111
+ if (!rule.validator) {
112
+ _context.next = 19;
113
+ break;
114
+ }
115
+ _context.next = 17;
116
+ return runValidator(rule.validator, values);
117
+ case 17:
118
+ result = _context.sent;
119
+ if (!result.passed) {
120
+ errors.push({
121
+ name: childNames,
122
+ status: 'error',
123
+ value: values,
124
+ message: (_ref2 = (_result$message = result.message) !== null && _result$message !== void 0 ? _result$message : rule.message) !== null && _ref2 !== void 0 ? _ref2 : ''
125
+ });
126
+ }
127
+ case 19:
128
+ _context.next = 12;
129
+ break;
130
+ case 21:
131
+ _context.next = 26;
132
+ break;
133
+ case 23:
134
+ _context.prev = 23;
135
+ _context.t0 = _context["catch"](10);
136
+ _iterator.e(_context.t0);
137
+ case 26:
138
+ _context.prev = 26;
139
+ _iterator.f();
140
+ return _context.finish(26);
141
+ case 29:
142
+ return _context.abrupt("return", errors);
143
+ case 30:
144
+ case "end":
145
+ return _context.stop();
94
146
  }
95
- });
96
- }
97
- return errors;
98
- };
147
+ }, _callee, null, [[10, 23, 26, 29]]);
148
+ }));
149
+ return function validate(_x) {
150
+ return _ref.apply(this, arguments);
151
+ };
152
+ }();
99
153
 
100
154
  // Validation result state
101
155
  var _useReducer5 = useReducer(function (prev, next) {
@@ -104,17 +158,34 @@ var Group = function Group(props) {
104
158
  _useReducer6 = _slicedToArray(_useReducer5, 2),
105
159
  errors = _useReducer6[0],
106
160
  setErrors = _useReducer6[1];
107
- var runValidation = function runValidation() {
108
- var result = _validate(false);
109
- setErrors(result);
110
- };
161
+ var runValidation = /*#__PURE__*/function () {
162
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
163
+ var result;
164
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
165
+ while (1) switch (_context2.prev = _context2.next) {
166
+ case 0:
167
+ _context2.next = 2;
168
+ return _validate(false);
169
+ case 2:
170
+ result = _context2.sent;
171
+ setErrors(result);
172
+ case 4:
173
+ case "end":
174
+ return _context2.stop();
175
+ }
176
+ }, _callee2);
177
+ }));
178
+ return function runValidation() {
179
+ return _ref3.apply(this, arguments);
180
+ };
181
+ }();
111
182
 
112
183
  // Subscribe to child field changes
113
184
  useEffect(function () {
114
185
  var unsubscribes = childNames.map(function (name) {
115
186
  return formInstance.subscribe(name, function () {
116
187
  touchedRef.current = true;
117
- runValidation();
188
+ void runValidation();
118
189
  });
119
190
  });
120
191
  return function () {
@@ -127,12 +198,30 @@ var Group = function Group(props) {
127
198
  // Register group validator to FormStore
128
199
  useEffect(function () {
129
200
  var unregister = formInstance.registerGroupEntity(groupId, {
130
- validate: function validate(force) {
131
- var result = _validate(force);
132
- setErrors(result);
133
- forceUpdate();
134
- return result;
135
- },
201
+ validate: function () {
202
+ var _validate2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(force) {
203
+ var result;
204
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
205
+ while (1) switch (_context3.prev = _context3.next) {
206
+ case 0:
207
+ _context3.next = 2;
208
+ return _validate(force);
209
+ case 2:
210
+ result = _context3.sent;
211
+ setErrors(result);
212
+ forceUpdate();
213
+ return _context3.abrupt("return", result);
214
+ case 6:
215
+ case "end":
216
+ return _context3.stop();
217
+ }
218
+ }, _callee3);
219
+ }));
220
+ function validate(_x2) {
221
+ return _validate2.apply(this, arguments);
222
+ }
223
+ return validate;
224
+ }(),
136
225
  reset: function reset() {
137
226
  touchedRef.current = false;
138
227
  setErrors([]);