@schemx/vue 0.1.21 → 0.1.22
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.
- package/README.md +12 -12
- package/dist/components/FormGroup/index.d.ts +1 -1
- package/dist/components/FormItem/index.d.ts +1 -1
- package/dist/components/FormItem/index.d.ts.map +1 -1
- package/dist/hocs/index.d.ts +0 -1
- package/dist/hocs/index.d.ts.map +1 -1
- package/dist/hocs/withRemoteOptions.d.ts +3 -3
- package/dist/hocs/withRemoteOptions.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +5 -7
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useContext.d.ts +15 -3
- package/dist/hooks/useContext.d.ts.map +1 -1
- package/dist/hooks/useDictionary.d.ts +11 -4
- package/dist/hooks/useDictionary.d.ts.map +1 -1
- package/dist/hooks/useEffect.d.ts +1 -1
- package/dist/hooks/useField.d.ts +32 -1
- package/dist/hooks/useField.d.ts.map +1 -1
- package/dist/hooks/useForm.d.ts +4 -4
- package/dist/hooks/useForm.d.ts.map +1 -1
- package/dist/hooks/useViewSchemas.d.ts +1 -1
- package/dist/hooks/useWatch.d.ts +1 -1
- package/dist/index.cjs +6 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2591 -1081
- package/dist/index.mjs.map +1 -1
- package/dist/types/dictionary.d.ts +150 -0
- package/dist/types/dictionary.d.ts.map +1 -0
- package/dist/types/field.d.ts +1 -1
- package/dist/types/form.d.ts +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/dynamic.d.ts +1 -1
- package/dist/utils/helpers.d.ts +1 -1
- package/dist/utils/rendererProvider.d.ts +1 -1
- package/dist/utils/rulesProvider.d.ts +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/package.json +2 -2
- package/dist/hooks/useFieldContext.d.ts +0 -23
- package/dist/hooks/useFieldContext.d.ts.map +0 -1
- package/dist/index.umd.js +0 -2
- package/dist/index.umd.js.map +0 -1
package/dist/index.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../core/dist/index.mjs","../src/utils/rendererProvider.ts","../src/utils/rulesProvider.ts","../src/hooks/useForm.ts","../src/hooks/useField.ts","../src/hooks/useWatch.ts","../src/hooks/useDictionary.ts","../src/hooks/useContext.ts","../src/hooks/useStableRef.ts","../src/utils/equal.ts","../src/hooks/useFieldContext.ts","../src/utils/validation.ts","../src/utils/slot.ts","../src/components/FormGroup/index.tsx","../src/components/FormItem/index.tsx","../src/utils/helpers.ts","../src/form.vue","../src/hooks/useViewSchemas.ts","../src/form.ts","../src/hocs/withRemoteOptions.ts","../src/hooks/useEffect.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar i = Symbol.for(\"preact-signals\");\nfunction t() {\n if (!(s > 1)) {\n var i2, t2 = false;\n !function() {\n var i3 = c;\n c = void 0;\n while (void 0 !== i3) {\n if (i3.S.v === i3.v) i3.S.i = i3.i;\n i3 = i3.o;\n }\n }();\n while (void 0 !== h) {\n var n2 = h;\n h = void 0;\n v++;\n while (void 0 !== n2) {\n var r2 = n2.u;\n n2.u = void 0;\n n2.f &= -3;\n if (!(8 & n2.f) && w(n2)) try {\n n2.c();\n } catch (n3) {\n if (!t2) {\n i2 = n3;\n t2 = true;\n }\n }\n n2 = r2;\n }\n }\n v = 0;\n s--;\n if (t2) throw i2;\n } else s--;\n}\nfunction n(i2) {\n if (s > 0) return i2();\n e = ++u;\n s++;\n try {\n return i2();\n } finally {\n t();\n }\n}\nvar r = void 0;\nfunction o(i2) {\n var t2 = r;\n r = void 0;\n try {\n return i2();\n } finally {\n r = t2;\n }\n}\nvar h = void 0, s = 0, v = 0, u = 0, e = 0, c = void 0, d = 0;\nfunction a(i2) {\n if (void 0 !== r) {\n var t2 = i2.n;\n if (void 0 === t2 || t2.t !== r) {\n t2 = { i: 0, S: i2, p: r.s, n: void 0, t: r, e: void 0, x: void 0, r: t2 };\n if (void 0 !== r.s) r.s.n = t2;\n r.s = t2;\n i2.n = t2;\n if (32 & r.f) i2.S(t2);\n return t2;\n } else if (-1 === t2.i) {\n t2.i = 0;\n if (void 0 !== t2.n) {\n t2.n.p = t2.p;\n if (void 0 !== t2.p) t2.p.n = t2.n;\n t2.p = r.s;\n t2.n = void 0;\n r.s.n = t2;\n r.s = t2;\n }\n return t2;\n }\n }\n}\nfunction l(i2, t2) {\n this.v = i2;\n this.i = 0;\n this.n = void 0;\n this.t = void 0;\n this.l = 0;\n this.W = null == t2 ? void 0 : t2.watched;\n this.Z = null == t2 ? void 0 : t2.unwatched;\n this.name = null == t2 ? void 0 : t2.name;\n}\nl.prototype.brand = i;\nl.prototype.h = function() {\n return true;\n};\nl.prototype.S = function(i2) {\n var t2 = this, n2 = this.t;\n if (n2 !== i2 && void 0 === i2.e) {\n i2.x = n2;\n this.t = i2;\n if (void 0 !== n2) n2.e = i2;\n else o(function() {\n var i3;\n null == (i3 = t2.W) || i3.call(t2);\n });\n }\n};\nl.prototype.U = function(i2) {\n var t2 = this;\n if (void 0 !== this.t) {\n var n2 = i2.e, r2 = i2.x;\n if (void 0 !== n2) {\n n2.x = r2;\n i2.e = void 0;\n }\n if (void 0 !== r2) {\n r2.e = n2;\n i2.x = void 0;\n }\n if (i2 === this.t) {\n this.t = r2;\n if (void 0 === r2) o(function() {\n var i3;\n null == (i3 = t2.Z) || i3.call(t2);\n });\n }\n }\n};\nl.prototype.subscribe = function(i2) {\n var t2 = this;\n return j(function() {\n var n2 = t2.value, o2 = r;\n r = void 0;\n try {\n i2(n2);\n } finally {\n r = o2;\n }\n }, { name: \"sub\" });\n};\nl.prototype.valueOf = function() {\n return this.value;\n};\nl.prototype.toString = function() {\n return this.value + \"\";\n};\nl.prototype.toJSON = function() {\n return this.value;\n};\nl.prototype.peek = function() {\n var i2 = this;\n return o(function() {\n return i2.value;\n });\n};\nObject.defineProperty(l.prototype, \"value\", { get: function() {\n var i2 = a(this);\n if (void 0 !== i2) i2.i = this.i;\n return this.v;\n}, set: function(i2) {\n if (i2 !== this.v) {\n if (v > 100) throw new Error(\"Cycle detected\");\n !function(i3) {\n if (0 !== s && 0 === v) {\n if (i3.l !== e) {\n i3.l = e;\n c = { S: i3, v: i3.v, i: i3.i, o: c };\n }\n }\n }(this);\n this.v = i2;\n this.i++;\n d++;\n s++;\n try {\n for (var n2 = this.t; void 0 !== n2; n2 = n2.x) n2.t.N();\n } finally {\n t();\n }\n }\n} });\nfunction y(i2, t2) {\n return new l(i2, t2);\n}\nfunction w(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i) return true;\n return false;\n}\nfunction _(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) {\n var n2 = t2.S.n;\n if (void 0 !== n2) t2.r = n2;\n t2.S.n = t2;\n t2.i = -1;\n if (void 0 === t2.n) {\n i2.s = t2;\n break;\n }\n }\n}\nfunction b(i2) {\n var t2 = i2.s, n2 = void 0;\n while (void 0 !== t2) {\n var r2 = t2.p;\n if (-1 === t2.i) {\n t2.S.U(t2);\n if (void 0 !== r2) r2.n = t2.n;\n if (void 0 !== t2.n) t2.n.p = r2;\n } else n2 = t2;\n t2.S.n = t2.r;\n if (void 0 !== t2.r) t2.r = void 0;\n t2 = r2;\n }\n i2.s = n2;\n}\nfunction p(i2, t2) {\n l.call(this, void 0);\n this.x = i2;\n this.s = void 0;\n this.g = d - 1;\n this.f = 4;\n this.W = null == t2 ? void 0 : t2.watched;\n this.Z = null == t2 ? void 0 : t2.unwatched;\n this.name = null == t2 ? void 0 : t2.name;\n}\np.prototype = new l();\np.prototype.h = function() {\n this.f &= -3;\n if (1 & this.f) return false;\n if (32 == (36 & this.f)) return true;\n this.f &= -5;\n if (this.g === d) return true;\n this.g = d;\n this.f |= 1;\n if (this.i > 0 && !w(this)) {\n this.f &= -2;\n return true;\n }\n var i2 = r;\n try {\n _(this);\n r = this;\n var t2 = this.x();\n if (16 & this.f || this.v !== t2 || 0 === this.i) {\n this.v = t2;\n this.f &= -17;\n this.i++;\n }\n } catch (i3) {\n this.v = i3;\n this.f |= 16;\n this.i++;\n }\n r = i2;\n b(this);\n this.f &= -2;\n return true;\n};\np.prototype.S = function(i2) {\n if (void 0 === this.t) {\n this.f |= 36;\n for (var t2 = this.s; void 0 !== t2; t2 = t2.n) t2.S.S(t2);\n }\n l.prototype.S.call(this, i2);\n};\np.prototype.U = function(i2) {\n if (void 0 !== this.t) {\n l.prototype.U.call(this, i2);\n if (void 0 === this.t) {\n this.f &= -33;\n for (var t2 = this.s; void 0 !== t2; t2 = t2.n) t2.S.U(t2);\n }\n }\n};\np.prototype.N = function() {\n if (!(2 & this.f)) {\n this.f |= 6;\n for (var i2 = this.t; void 0 !== i2; i2 = i2.x) i2.t.N();\n }\n};\nObject.defineProperty(p.prototype, \"value\", { get: function() {\n if (1 & this.f) throw new Error(\"Cycle detected\");\n var i2 = a(this);\n this.h();\n if (void 0 !== i2) i2.i = this.i;\n if (16 & this.f) throw this.v;\n return this.v;\n} });\nfunction S(i2) {\n var n2 = i2.m;\n i2.m = void 0;\n if (\"function\" == typeof n2) {\n s++;\n var o2 = r;\n r = void 0;\n try {\n n2();\n } catch (t2) {\n i2.f &= -2;\n i2.f |= 8;\n m(i2);\n throw t2;\n } finally {\n r = o2;\n t();\n }\n }\n}\nfunction m(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) t2.S.U(t2);\n i2.x = void 0;\n i2.s = void 0;\n S(i2);\n}\nfunction x(i2) {\n if (r !== this) throw new Error(\"Out-of-order effect\");\n b(this);\n r = i2;\n this.f &= -2;\n if (8 & this.f) m(this);\n t();\n}\nfunction E(i2, t2) {\n this.x = i2;\n this.m = void 0;\n this.s = void 0;\n this.u = void 0;\n this.f = 32;\n this.name = null == t2 ? void 0 : t2.name;\n}\nE.prototype.c = function() {\n var i2 = this.S();\n try {\n if (8 & this.f) return;\n if (void 0 === this.x) return;\n var t2 = this.x();\n if (\"function\" == typeof t2) this.m = t2;\n } finally {\n i2();\n }\n};\nE.prototype.S = function() {\n if (1 & this.f) throw new Error(\"Cycle detected\");\n this.f |= 1;\n this.f &= -9;\n S(this);\n _(this);\n s++;\n var i2 = r;\n r = this;\n return x.bind(this, i2);\n};\nE.prototype.N = function() {\n if (!(2 & this.f)) {\n this.f |= 2;\n this.u = h;\n h = this;\n }\n};\nE.prototype.d = function() {\n this.f |= 8;\n if (!(1 & this.f)) m(this);\n};\nE.prototype.dispose = function() {\n this.d();\n};\nfunction j(i2, t2) {\n var n2 = new E(i2, t2);\n try {\n n2.c();\n } catch (i3) {\n n2.d();\n throw i3;\n }\n var r2 = n2.d.bind(n2);\n r2[Symbol.dispose] = r2;\n return r2;\n}\nfunction createSignal(value, options) {\n return y(value, options);\n}\nfunction isSymbol(value) {\n return typeof value === \"symbol\" || value instanceof Symbol;\n}\nconst globalThis_ = typeof globalThis === \"object\" && globalThis || typeof window === \"object\" && window || typeof self === \"object\" && self || typeof global === \"object\" && global || /* @__PURE__ */ function() {\n return this;\n}();\nfunction debounce(func, debounceMs, { signal, edges } = {}) {\n let pendingThis = void 0;\n let pendingArgs = null;\n const leading = edges != null && edges.includes(\"leading\");\n const trailing = edges == null || edges.includes(\"trailing\");\n const invoke = () => {\n if (pendingArgs !== null) {\n func.apply(pendingThis, pendingArgs);\n pendingThis = void 0;\n pendingArgs = null;\n }\n };\n const onTimerEnd = () => {\n if (trailing) invoke();\n cancel();\n };\n let timeoutId = null;\n const schedule = () => {\n if (timeoutId != null) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n timeoutId = null;\n onTimerEnd();\n }, debounceMs);\n };\n const cancelTimer = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n const cancel = () => {\n cancelTimer();\n pendingThis = void 0;\n pendingArgs = null;\n };\n const flush = () => {\n invoke();\n };\n const debounced = function(...args) {\n if (signal == null ? void 0 : signal.aborted) return;\n pendingThis = this;\n pendingArgs = args;\n const isFirstCall = timeoutId == null;\n schedule();\n if (leading && isFirstCall) invoke();\n };\n debounced.schedule = schedule;\n debounced.cancel = cancel;\n debounced.flush = flush;\n signal == null ? void 0 : signal.addEventListener(\"abort\", cancel, { once: true });\n return debounced;\n}\nfunction noop$1() {\n}\nfunction isPrimitive(value) {\n return value == null || typeof value !== \"object\" && typeof value !== \"function\";\n}\nfunction isTypedArray(x2) {\n return ArrayBuffer.isView(x2) && !(x2 instanceof DataView);\n}\nfunction isBuffer(x2) {\n return typeof globalThis_.Buffer !== \"undefined\" && globalThis_.Buffer.isBuffer(x2);\n}\nfunction getSymbols(object) {\n return Object.getOwnPropertySymbols(object).filter((symbol) => Object.prototype.propertyIsEnumerable.call(object, symbol));\n}\nfunction getTag(value) {\n if (value == null) return value === void 0 ? \"[object Undefined]\" : \"[object Null]\";\n return Object.prototype.toString.call(value);\n}\nconst regexpTag = \"[object RegExp]\";\nconst stringTag = \"[object String]\";\nconst numberTag = \"[object Number]\";\nconst booleanTag = \"[object Boolean]\";\nconst argumentsTag = \"[object Arguments]\";\nconst symbolTag = \"[object Symbol]\";\nconst dateTag = \"[object Date]\";\nconst mapTag = \"[object Map]\";\nconst setTag = \"[object Set]\";\nconst arrayTag = \"[object Array]\";\nconst functionTag = \"[object Function]\";\nconst arrayBufferTag = \"[object ArrayBuffer]\";\nconst objectTag = \"[object Object]\";\nconst errorTag = \"[object Error]\";\nconst dataViewTag = \"[object DataView]\";\nconst uint8ArrayTag = \"[object Uint8Array]\";\nconst uint8ClampedArrayTag = \"[object Uint8ClampedArray]\";\nconst uint16ArrayTag = \"[object Uint16Array]\";\nconst uint32ArrayTag = \"[object Uint32Array]\";\nconst bigUint64ArrayTag = \"[object BigUint64Array]\";\nconst int8ArrayTag = \"[object Int8Array]\";\nconst int16ArrayTag = \"[object Int16Array]\";\nconst int32ArrayTag = \"[object Int32Array]\";\nconst bigInt64ArrayTag = \"[object BigInt64Array]\";\nconst float32ArrayTag = \"[object Float32Array]\";\nconst float64ArrayTag = \"[object Float64Array]\";\nfunction cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = /* @__PURE__ */ new Map(), cloneValue = void 0) {\n const cloned = cloneValue == null ? void 0 : cloneValue(valueToClone, keyToClone, objectToClone, stack);\n if (cloned !== void 0) return cloned;\n if (isPrimitive(valueToClone)) return valueToClone;\n if (stack.has(valueToClone)) return stack.get(valueToClone);\n if (Array.isArray(valueToClone)) {\n const result = new Array(valueToClone.length);\n stack.set(valueToClone, result);\n for (let i2 = 0; i2 < valueToClone.length; i2++) result[i2] = cloneDeepWithImpl(valueToClone[i2], i2, objectToClone, stack, cloneValue);\n if (Object.hasOwn(valueToClone, \"index\")) result.index = valueToClone.index;\n if (Object.hasOwn(valueToClone, \"input\")) result.input = valueToClone.input;\n return result;\n }\n if (valueToClone instanceof Date) return new Date(valueToClone.getTime());\n if (valueToClone instanceof RegExp) {\n const result = new RegExp(valueToClone.source, valueToClone.flags);\n result.lastIndex = valueToClone.lastIndex;\n return result;\n }\n if (valueToClone instanceof Map) {\n const result = /* @__PURE__ */ new Map();\n stack.set(valueToClone, result);\n for (const [key, value] of valueToClone) result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));\n return result;\n }\n if (valueToClone instanceof Set) {\n const result = /* @__PURE__ */ new Set();\n stack.set(valueToClone, result);\n for (const value of valueToClone) result.add(cloneDeepWithImpl(value, void 0, objectToClone, stack, cloneValue));\n return result;\n }\n if (isBuffer(valueToClone)) return valueToClone.subarray();\n if (isTypedArray(valueToClone)) {\n const result = new (Object.getPrototypeOf(valueToClone)).constructor(valueToClone.length);\n stack.set(valueToClone, result);\n for (let i2 = 0; i2 < valueToClone.length; i2++) result[i2] = cloneDeepWithImpl(valueToClone[i2], i2, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof ArrayBuffer || typeof SharedArrayBuffer !== \"undefined\" && valueToClone instanceof SharedArrayBuffer) return valueToClone.slice(0);\n if (valueToClone instanceof DataView) {\n const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (typeof File !== \"undefined\" && valueToClone instanceof File) {\n const result = new File([valueToClone], valueToClone.name, { type: valueToClone.type });\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (typeof Blob !== \"undefined\" && valueToClone instanceof Blob) {\n const result = new Blob([valueToClone], { type: valueToClone.type });\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof Error) {\n const result = structuredClone(valueToClone);\n stack.set(valueToClone, result);\n result.message = valueToClone.message;\n result.name = valueToClone.name;\n result.stack = valueToClone.stack;\n result.cause = valueToClone.cause;\n result.constructor = valueToClone.constructor;\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof Boolean) {\n const result = new Boolean(valueToClone.valueOf());\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof Number) {\n const result = new Number(valueToClone.valueOf());\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof String) {\n const result = new String(valueToClone.valueOf());\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (typeof valueToClone === \"object\" && isCloneableObject(valueToClone)) {\n const result = Object.create(Object.getPrototypeOf(valueToClone));\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n return valueToClone;\n}\nfunction copyProperties(target, source, objectToClone = target, stack, cloneValue) {\n const keys = [...Object.keys(source), ...getSymbols(source)];\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\n if (descriptor == null || descriptor.writable) target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);\n }\n}\nfunction isCloneableObject(object) {\n switch (getTag(object)) {\n case argumentsTag:\n case arrayTag:\n case arrayBufferTag:\n case dataViewTag:\n case booleanTag:\n case dateTag:\n case float32ArrayTag:\n case float64ArrayTag:\n case int8ArrayTag:\n case int16ArrayTag:\n case int32ArrayTag:\n case mapTag:\n case numberTag:\n case objectTag:\n case regexpTag:\n case setTag:\n case stringTag:\n case symbolTag:\n case uint8ArrayTag:\n case uint8ClampedArrayTag:\n case uint16ArrayTag:\n case uint32ArrayTag:\n return true;\n default:\n return false;\n }\n}\nfunction cloneDeep(obj) {\n return cloneDeepWithImpl(obj, void 0, obj, /* @__PURE__ */ new Map(), void 0);\n}\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\") return false;\n const proto = Object.getPrototypeOf(value);\n if (!(proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null)) return false;\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isUnsafeProperty(key) {\n return key === \"__proto__\";\n}\nfunction pick(obj, keys) {\n const result = {};\n for (let i2 = 0; i2 < keys.length; i2++) {\n const key = keys[i2];\n if (Object.hasOwn(obj, key)) result[key] = obj[key];\n }\n return result;\n}\nfunction isEqualsSameValueZero(value, other) {\n return value === other || Number.isNaN(value) && Number.isNaN(other);\n}\nfunction isEqualWith(a2, b2, areValuesEqual) {\n return isEqualWithImpl(a2, b2, void 0, void 0, void 0, void 0, areValuesEqual);\n}\nfunction isEqualWithImpl(a2, b2, property, aParent, bParent, stack, areValuesEqual) {\n const result = areValuesEqual(a2, b2, property, aParent, bParent, stack);\n if (result !== void 0) return result;\n if (typeof a2 === typeof b2) switch (typeof a2) {\n case \"bigint\":\n case \"string\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return a2 === b2;\n case \"number\":\n return a2 === b2 || Object.is(a2, b2);\n case \"function\":\n return a2 === b2;\n case \"object\":\n return areObjectsEqual(a2, b2, stack, areValuesEqual);\n }\n return areObjectsEqual(a2, b2, stack, areValuesEqual);\n}\nfunction areObjectsEqual(a2, b2, stack, areValuesEqual) {\n if (Object.is(a2, b2)) return true;\n let aTag = getTag(a2);\n let bTag = getTag(b2);\n if (aTag === \"[object Arguments]\") aTag = objectTag;\n if (bTag === \"[object Arguments]\") bTag = objectTag;\n if (aTag !== bTag) return false;\n switch (aTag) {\n case stringTag:\n return a2.toString() === b2.toString();\n case numberTag:\n return isEqualsSameValueZero(a2.valueOf(), b2.valueOf());\n case booleanTag:\n case dateTag:\n case symbolTag:\n return Object.is(a2.valueOf(), b2.valueOf());\n case regexpTag:\n return a2.source === b2.source && a2.flags === b2.flags;\n case functionTag:\n return a2 === b2;\n }\n stack = stack ?? /* @__PURE__ */ new Map();\n const aStack = stack.get(a2);\n const bStack = stack.get(b2);\n if (aStack != null && bStack != null) return aStack === b2;\n stack.set(a2, b2);\n stack.set(b2, a2);\n try {\n switch (aTag) {\n case mapTag:\n if (a2.size !== b2.size) return false;\n for (const [key, value] of a2.entries()) if (!b2.has(key) || !isEqualWithImpl(value, b2.get(key), key, a2, b2, stack, areValuesEqual)) return false;\n return true;\n case setTag: {\n if (a2.size !== b2.size) return false;\n const aValues = Array.from(a2.values());\n const bValues = Array.from(b2.values());\n for (let i2 = 0; i2 < aValues.length; i2++) {\n const aValue = aValues[i2];\n const index = bValues.findIndex((bValue) => {\n return isEqualWithImpl(aValue, bValue, void 0, a2, b2, stack, areValuesEqual);\n });\n if (index === -1) return false;\n bValues.splice(index, 1);\n }\n return true;\n }\n case arrayTag:\n case uint8ArrayTag:\n case uint8ClampedArrayTag:\n case uint16ArrayTag:\n case uint32ArrayTag:\n case bigUint64ArrayTag:\n case int8ArrayTag:\n case int16ArrayTag:\n case int32ArrayTag:\n case bigInt64ArrayTag:\n case float32ArrayTag:\n case float64ArrayTag:\n if (isBuffer(a2) !== isBuffer(b2)) return false;\n if (a2.length !== b2.length) return false;\n for (let i2 = 0; i2 < a2.length; i2++) if (!isEqualWithImpl(a2[i2], b2[i2], i2, a2, b2, stack, areValuesEqual)) return false;\n return true;\n case arrayBufferTag:\n if (a2.byteLength !== b2.byteLength) return false;\n return areObjectsEqual(new Uint8Array(a2), new Uint8Array(b2), stack, areValuesEqual);\n case dataViewTag:\n if (a2.byteLength !== b2.byteLength || a2.byteOffset !== b2.byteOffset) return false;\n return areObjectsEqual(new Uint8Array(a2), new Uint8Array(b2), stack, areValuesEqual);\n case errorTag:\n return a2.name === b2.name && a2.message === b2.message;\n case objectTag: {\n if (!(areObjectsEqual(a2.constructor, b2.constructor, stack, areValuesEqual) || isPlainObject(a2) && isPlainObject(b2))) return false;\n const aKeys = [...Object.keys(a2), ...getSymbols(a2)];\n const bKeys = [...Object.keys(b2), ...getSymbols(b2)];\n if (aKeys.length !== bKeys.length) return false;\n for (let i2 = 0; i2 < aKeys.length; i2++) {\n const propKey = aKeys[i2];\n const aProp = a2[propKey];\n if (!Object.hasOwn(b2, propKey)) return false;\n const bProp = b2[propKey];\n if (!isEqualWithImpl(aProp, bProp, propKey, a2, b2, stack, areValuesEqual)) return false;\n }\n return true;\n }\n default:\n return false;\n }\n } finally {\n stack.delete(a2);\n stack.delete(b2);\n }\n}\nfunction isEqual(a2, b2) {\n return isEqualWith(a2, b2, noop$1);\n}\nfunction createFieldSignal(options) {\n const { value, initialValue, touched, pending } = options || {};\n const valueSignal = createSignal(\n value === void 0 ? void 0 : cloneDeep(value)\n );\n const initialSignal = createSignal(\n initialValue === void 0 ? void 0 : cloneDeep(initialValue)\n );\n const touchedSignal = createSignal(touched ?? false);\n const pendingSignal = createSignal(pending ?? false);\n const pendingMessageSignal = createSignal([]);\n const setValue = (next) => {\n valueSignal.value = next;\n };\n const setInitialValue = (next) => {\n initialSignal.value = next;\n };\n const setTouched = (next) => {\n touchedSignal.value = next;\n };\n const setPending = (next, message) => {\n pendingSignal.value = next;\n if (next) {\n if (message) {\n pendingMessageSignal.value = Array.isArray(message) ? message : [message];\n }\n } else {\n pendingMessageSignal.value = [];\n }\n };\n const reset = (next = initialSignal.peek()) => {\n valueSignal.value = cloneDeep(next);\n touchedSignal.value = false;\n pendingSignal.value = false;\n };\n const peek = () => {\n return {\n value: valueSignal.peek(),\n initialValue: initialSignal.peek(),\n touched: touchedSignal.peek(),\n pending: pendingSignal.peek(),\n pendingMessage: pendingMessageSignal.peek()\n };\n };\n return {\n value: valueSignal,\n initialValue: initialSignal,\n touched: touchedSignal,\n pending: pendingSignal,\n pendingMessage: pendingMessageSignal,\n setValue,\n setInitialValue,\n setTouched,\n setPending,\n reset,\n peek\n };\n}\nclass FieldSignalMapImpl {\n constructor(options = {}) {\n __publicField(this, \"records\", /* @__PURE__ */ new Map());\n __publicField(this, \"version\", createSignal(0));\n __publicField(this, \"normalizeKey\");\n this.normalizeKey = options.normalizeKey ?? defaultNormalizeFieldKey;\n }\n /**\n * 获取字段 key 的标准化字符串。\n */\n getKey(key) {\n return this.normalizeKey(key);\n }\n /**\n * 获取字段 signal。\n *\n * 读取缺失 key 时会订阅结构版本;后续 set 同 key 会触发 effect 重跑。\n *\n * @param key - 字段路径。\n * @returns 字段 signal;未创建时返回 undefined。\n */\n get(key) {\n const record = this.records.get(this.getKey(key));\n if (record) {\n return record.value;\n }\n void this.version.value;\n return void 0;\n }\n /**\n * 无依赖追踪地获取字段 signal。\n *\n * @param key - 字段路径。\n * @returns 字段 signal;未创建时返回 undefined。\n */\n peek(key) {\n var _a;\n return (_a = this.records.get(this.getKey(key))) == null ? void 0 : _a.value;\n }\n /**\n * 设置字段 signal。\n *\n * @param key - 字段路径。\n * @param value - 字段 signal。\n * @returns 当前映射实例,便于链式调用。\n */\n set(key, value) {\n const normalizedKey = this.getKey(key);\n const exists = this.records.has(normalizedKey);\n this.records.set(normalizedKey, { key, value });\n if (!exists) {\n this.version.value++;\n }\n return this;\n }\n /**\n * 判断字段是否存在。\n *\n * @param key - 字段路径。\n * @returns 字段 signal 是否已存在。\n */\n has(key) {\n return this.records.has(this.getKey(key));\n }\n /**\n * 删除字段 signal。\n *\n * @param key - 字段路径。\n * @returns 是否删除了已存在的字段 signal。\n */\n delete(key) {\n const normalizedKey = this.getKey(key);\n const record = this.records.get(normalizedKey);\n if (!record) return false;\n this.records.delete(normalizedKey);\n disposeSignal(record.value);\n this.version.value++;\n return true;\n }\n /**\n * 清空所有字段 signal。\n */\n clear() {\n if (this.records.size === 0) return;\n for (const record of this.records.values()) {\n disposeSignal(record.value);\n }\n this.records.clear();\n this.version.value++;\n }\n /**\n * 响应式遍历原始字段 key。\n *\n * @returns 原始字段 key 的迭代器。\n */\n keys() {\n void this.version.value;\n return Array.from(this.records.values(), (record) => record.key).values();\n }\n /**\n * 响应式遍历字段 signal。\n *\n * @returns 字段 signal 的迭代器。\n */\n values() {\n void this.version.value;\n return Array.from(this.records.values(), (record) => record.value).values();\n }\n /**\n * 响应式遍历 `[key, signal]`。\n *\n * @returns 原始字段 key 与字段 signal 的迭代器。\n */\n entries() {\n void this.version.value;\n return Array.from(\n this.records.values(),\n (record) => [record.key, record.value]\n ).values();\n }\n}\nfunction createFieldSignalMap(options = {}) {\n return new FieldSignalMapImpl(options);\n}\nfunction disposeSignal(signal) {\n signal.value.value = void 0;\n signal.initialValue.value = void 0;\n signal.touched.value = false;\n signal.pending.value = false;\n}\nfunction defaultNormalizeFieldKey(key) {\n if (Array.isArray(key)) {\n return key.map((part) => String(part)).join(\".\");\n }\n return String(key);\n}\nfunction createSignalEffect(fn) {\n return j(fn);\n}\nfunction createDebouncedSignalEffect(collect, run, wait = 16, options = {}) {\n const debouncedRun = debounce(run, wait, { edges: options.edges });\n let initialized = false;\n const disposeEffect = createSignalEffect(() => {\n const value = collect();\n if (!initialized && options.immediate) {\n initialized = true;\n run(value);\n return;\n }\n initialized = true;\n debouncedRun(value);\n });\n return () => {\n disposeEffect();\n debouncedRun.cancel();\n };\n}\nfunction batchUpdates(fn) {\n n(fn);\n}\nclass SignalMapImpl {\n constructor() {\n /** 每个 key 独占一个 signal,保证字段级更新能细粒度触发 */\n __publicField(this, \"signals\", /* @__PURE__ */ new Map());\n /**\n * 结构版本 signal,用于追踪“新 key 创建”事件。\n *\n * effect 读取缺失 key 时会依赖这个版本;之后创建该 key 会推进版本,\n * 让 effect 重新执行并订阅新 key 对应的 signal。\n */\n __publicField(this, \"version\", createSignal(0));\n }\n /**\n * 读取 key,并在 effect 内自动收集响应式依赖。\n *\n * @param key - 待读取的 key。\n * @returns key 对应的值;不存在时返回 undefined。\n */\n get(key) {\n const s2 = this.signals.get(key);\n if (s2) return s2.value;\n void this.version.value;\n return void 0;\n }\n /**\n * 写入 key;如果 key 不存在,则创建新的 signal。\n *\n * @param key - 待写入的 key。\n * @param value - 新值。\n * @returns 当前 SignalMap 实例,便于链式调用。\n */\n set(key, value) {\n const s2 = this.signals.get(key);\n if (s2) {\n s2.value = value;\n } else {\n this.signals.set(key, createSignal(value));\n this.version.value++;\n }\n return this;\n }\n /**\n * 无依赖追踪地读取 key。\n *\n * @param key - 待读取的 key。\n * @returns key 对应的值;不存在时返回 undefined。\n */\n peek(key) {\n var _a;\n return (_a = this.signals.get(key)) == null ? void 0 : _a.peek();\n }\n /**\n * 判断 key 是否存在。\n *\n * @param key - 待检查的 key。\n * @returns key 已存在时返回 true。\n */\n has(key) {\n return this.signals.has(key);\n }\n /**\n * 删除 key,并通知订阅旧 signal 或 map 结构的 effects。\n *\n * @param key - 待删除的 key。\n * @returns 成功删除时返回 true;key 不存在时返回 false。\n */\n delete(key) {\n const s2 = this.signals.get(key);\n if (!s2) return false;\n this.signals.delete(key);\n batchUpdates(() => {\n s2.value = void 0;\n this.version.value++;\n });\n return true;\n }\n /**\n * 清空所有 key,并通知订阅任意被删除 signal 的 effects。\n */\n clear() {\n if (this.signals.size === 0) return;\n const oldSignals = [...this.signals.values()];\n this.signals.clear();\n batchUpdates(() => {\n for (const s2 of oldSignals) {\n s2.value = void 0;\n }\n this.version.value++;\n });\n }\n /**\n * 遍历所有已注册 key。\n *\n * @returns key 迭代器。\n */\n keys() {\n void this.version.value;\n return this.signals.keys();\n }\n /**\n * 遍历所有值。\n *\n * @returns value 迭代器。\n */\n values() {\n void this.version.value;\n return Array.from(this.signals.values(), (signal) => signal.value).values();\n }\n /**\n * 遍历 key/value 对。\n *\n * @returns key/value entry 迭代器。\n */\n entries() {\n void this.version.value;\n return Array.from(\n this.signals.entries(),\n ([key, signal]) => [key, signal.value]\n ).values();\n }\n}\nfunction createSignalMap() {\n return new SignalMapImpl();\n}\nfunction isBaseSchema(schema) {\n return !isGroupSchema(schema) && !isDependencySchema(schema);\n}\nfunction isGroupSchema(schema) {\n return schema.componentType === \"group\";\n}\nfunction isDependencySchema(schema) {\n return schema.componentType === \"dependency\";\n}\nfunction isBaseResolvedSchema(schema) {\n return !isGroupResolvedSchema(schema) && !isDependencyResolvedSchema(schema);\n}\nfunction isGroupResolvedSchema(schema) {\n return schema.componentType === \"group\";\n}\nfunction isDependencyResolvedSchema(schema) {\n return schema.componentType === \"dependency\";\n}\nconst isLegalName = (schema) => Object.hasOwn(schema, \"name\") && [null, void 0, \"\"].every((i2) => i2 !== schema.name);\nconst isLegalComponentType = (schema) => Object.hasOwn(schema, \"componentType\") && typeof schema.componentType === \"string\";\nfunction getBaseFieldMissing(schema) {\n const missing = [];\n if (!isLegalName(schema)) missing.push(\"name\");\n if (!isLegalComponentType(schema)) missing.push(\"componentType\");\n return missing;\n}\nfunction getGroupFieldMissing(schema) {\n const missing = [];\n if (!isLegalComponentType(schema)) missing.push(\"componentType\");\n if (!Object.hasOwn(schema, \"children\") || !Array.isArray(schema.children))\n missing.push(\"children\");\n return missing;\n}\nfunction getDependencyFieldMissing(schema) {\n const missing = [];\n if (!isLegalComponentType(schema)) missing.push(\"componentType\");\n if (!Object.hasOwn(schema, \"to\") || !Array.isArray(schema.to)) missing.push(\"to\");\n if (typeof schema.renderer !== \"function\") missing.push(\"renderer\");\n return missing;\n}\nfunction buildWarnMessage(index, schema, missing) {\n const identifier = \"name\" in schema && schema.name || schema.componentType || \"unknown\";\n return `[schemx] schemas[${index}] (${String(identifier)}) 缺少必填项: ${missing.join(\", \")},已被过滤`;\n}\nfunction normalizeSchemas(schemas) {\n const result = [];\n const missings = [];\n for (let i2 = 0; i2 < schemas.length; i2++) {\n const schema = schemas[i2];\n let missing = [];\n if (isGroupSchema(schema)) {\n missing = getGroupFieldMissing(schema);\n if (missing.length > 0) {\n missings.push(buildWarnMessage(i2, schema, missing));\n continue;\n }\n result.push({\n ...schema,\n children: normalizeSchemas(schema.children)\n });\n } else if (isDependencySchema(schema)) {\n missing = getDependencyFieldMissing(schema);\n if (missing.length > 0) {\n missings.push(buildWarnMessage(i2, schema, missing));\n continue;\n }\n result.push(schema);\n } else if (isBaseSchema(schema)) {\n missing = getBaseFieldMissing(schema);\n if (missing.length > 0) {\n missings.push(buildWarnMessage(i2, schema, missing));\n continue;\n }\n result.push(schema);\n }\n }\n if (missings.length) console.warn(missings.join(\"\\n\"));\n return result;\n}\nfunction toString(value) {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) return value.map(toString).join(\",\");\n const result = String(value);\n if (result === \"0\" && Object.is(Number(value), -0)) return \"-0\";\n return result;\n}\nfunction toKey(value) {\n var _a;\n if (typeof value === \"string\" || typeof value === \"symbol\") return value;\n if (Object.is((_a = value == null ? void 0 : value.valueOf) == null ? void 0 : _a.call(value), -0)) return \"-0\";\n return String(value);\n}\nfunction toPath(deepKey) {\n if (Array.isArray(deepKey)) return deepKey.map(toKey);\n if (typeof deepKey === \"symbol\") return [deepKey];\n deepKey = toString(deepKey);\n const result = [];\n const length = deepKey.length;\n if (length === 0) return result;\n let index = 0;\n let key = \"\";\n let quoteChar = \"\";\n let bracket = false;\n if (deepKey.charCodeAt(0) === 46) {\n result.push(\"\");\n index++;\n }\n while (index < length) {\n const char = deepKey[index];\n if (quoteChar) if (char === \"\\\\\" && index + 1 < length) {\n index++;\n key += deepKey[index];\n } else if (char === quoteChar) quoteChar = \"\";\n else key += char;\n else if (bracket) if (char === '\"' || char === \"'\") quoteChar = char;\n else if (char === \"]\") {\n bracket = false;\n result.push(key);\n key = \"\";\n } else key += char;\n else if (char === \"[\") {\n bracket = true;\n if (key) {\n result.push(key);\n key = \"\";\n }\n } else if (char === \".\") {\n if (key) {\n result.push(key);\n key = \"\";\n }\n } else key += char;\n index++;\n }\n if (key) result.push(key);\n return result;\n}\nfunction isDeepKey(key) {\n switch (typeof key) {\n case \"number\":\n case \"symbol\":\n return false;\n case \"string\":\n return key.includes(\".\") || key.includes(\"[\") || key.includes(\"]\");\n }\n}\nfunction get(object, path, defaultValue) {\n if (object == null) return defaultValue;\n switch (typeof path) {\n case \"string\": {\n if (isUnsafeProperty(path)) return defaultValue;\n const result = object[path];\n if (result === void 0) if (isDeepKey(path)) return get(object, toPath(path), defaultValue);\n else return defaultValue;\n return result;\n }\n case \"number\":\n case \"symbol\": {\n if (typeof path === \"number\") path = toKey(path);\n const result = object[path];\n if (result === void 0) return defaultValue;\n return result;\n }\n default: {\n if (Array.isArray(path)) return getWithPath(object, path, defaultValue);\n if (Object.is(path == null ? void 0 : path.valueOf(), -0)) path = \"-0\";\n else path = String(path);\n if (isUnsafeProperty(path)) return defaultValue;\n const result = object[path];\n if (result === void 0) return defaultValue;\n return result;\n }\n }\n}\nfunction getWithPath(object, path, defaultValue) {\n if (path.length === 0) return defaultValue;\n let current = object;\n for (let index = 0; index < path.length; index++) {\n if (current == null) return defaultValue;\n if (isUnsafeProperty(path[index])) return defaultValue;\n current = current[path[index]];\n }\n if (current === void 0) return defaultValue;\n return current;\n}\nfunction isObject(value) {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\nconst IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length = Number.MAX_SAFE_INTEGER) {\n switch (typeof value) {\n case \"number\":\n return Number.isInteger(value) && value >= 0 && value < length;\n case \"symbol\":\n return false;\n case \"string\":\n return IS_UNSIGNED_INTEGER.test(value);\n }\n}\nconst regexIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst regexIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n if (Array.isArray(value)) return false;\n if (typeof value === \"number\" || typeof value === \"boolean\" || value == null || isSymbol(value)) return true;\n return typeof value === \"string\" && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value)) || object != null && Object.hasOwn(object, value);\n}\nconst assignValue = (object, key, value) => {\n const objValue = object[key];\n if (!(Object.hasOwn(object, key) && isEqualsSameValueZero(objValue, value)) || value === void 0 && !(key in object)) object[key] = value;\n};\nfunction updateWith(obj, path, updater, customizer) {\n if (obj == null && !isObject(obj)) return obj;\n let resolvedPath;\n if (isKey(path, obj)) resolvedPath = [path];\n else if (Array.isArray(path)) resolvedPath = path;\n else resolvedPath = toPath(path);\n const updateValue = updater(get(obj, resolvedPath));\n let current = obj;\n for (let i2 = 0; i2 < resolvedPath.length && current != null; i2++) {\n const key = toKey(resolvedPath[i2]);\n if (isUnsafeProperty(key)) continue;\n let newValue;\n if (i2 === resolvedPath.length - 1) newValue = updateValue;\n else {\n const objValue = current[key];\n const customizerResult = customizer == null ? void 0 : customizer(objValue, key, obj);\n newValue = customizerResult !== void 0 ? customizerResult : isObject(objValue) ? objValue : isIndex(resolvedPath[i2 + 1]) ? [] : {};\n }\n assignValue(current, key, newValue);\n current = current[key];\n }\n return obj;\n}\nfunction set(obj, path, value) {\n return updateWith(obj, path, () => value, () => void 0);\n}\nfunction getByPath(obj, path) {\n if (path === \"\" || Array.isArray(path) && path.length === 0) {\n return obj;\n }\n return get(obj, normalizeRuntimePath(path));\n}\nfunction setByPath(obj, path, value) {\n if (obj == null) return;\n set(obj, normalizeRuntimePath(path), value);\n}\nfunction collectObjectPathsByLeaf(obj, prefix = \"\") {\n const paths = [];\n for (const key of Object.keys(obj)) {\n const path = prefix ? `${prefix}.${key}` : key;\n const value = obj[key];\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n const itemPath = `${path}[${index}]`;\n if (item !== null && typeof item === \"object\") {\n paths.push(...collectObjectPathsByLeaf(item, itemPath));\n } else {\n paths.push(itemPath);\n }\n });\n } else if (value !== null && typeof value === \"object\") {\n paths.push(...collectObjectPathsByLeaf(value, path));\n } else {\n paths.push(path);\n }\n }\n return paths;\n}\nconst normalizeRuntimePath = (path) => {\n if (Array.isArray(path)) {\n return path.map((part) => typeof part === \"number\" ? part : String(part));\n }\n return path;\n};\nfunction withLock(fn) {\n let pending = null;\n return (...args) => {\n if (pending) return pending;\n pending = fn(...args).finally(() => {\n pending = null;\n });\n return pending;\n };\n}\nfunction diff(current, prev) {\n const changedValues = {};\n for (const key of Object.keys(current)) {\n if (!isEqual(current[key], prev[key])) {\n changedValues[key] = current[key];\n }\n }\n return changedValues;\n}\nconst defaultConfig = {\n /**\n * 是否展示必填的 * 号(静态默认值)\n *\n * 控制必填标记(红色星号)的显示。\n * 若未设置,会根据 `rules` 中的校验规则自动推断。\n */\n required: false,\n /**\n * 是否只读(静态默认值)\n *\n * 未设置时继承 FormContext 的全局 `readonly` 配置。\n */\n readonly: false,\n /**\n * 是否禁用(静态默认值)\n *\n * 未设置时继承 FormContext 的全局 `disabled` 配置。\n */\n disabled: false,\n /**\n * 是否可见(静态默认值)\n *\n * 不可见时字段不渲染,同时会清除校验规则和错误信息。\n */\n visible: true,\n /**\n * 标签图标\n *\n * 显示在 label 文本旁的图标标识。\n */\n labelIcon: \"\",\n /**\n * 标签对齐方式\n *\n * 未设置时继承 FormContext 的全局 `labelAlign` 配置。\n */\n labelAlign: \"left\",\n /**\n * 标签位置\n *\n * 未设置时继承 FormContext 的全局 `labelPosition` 配置。\n */\n labelPosition: \"left\",\n /**\n * 标签宽度\n *\n * 未设置时继承 FormContext 的全局 `labelWidth` 配置。\n */\n labelWidth: \"auto\",\n /**\n * 校验触发时机\n *\n * 支持单个或多个触发时机组合,如 `'change'`、`'blur'`、`['change', 'blur']`。\n * 未设置时继承 FormContext 的全局 `validationTrigger` 配置。\n */\n validationTrigger: \"blur\",\n /**\n * 是否在标签后显示冒号\n *\n * 未设置时继承 FormContext 的全局 `colon` 配置。\n */\n colon: true\n};\nconst defaultConfigKey = Object.keys(defaultConfig);\nclass ValidatorImpl {\n constructor() {\n /** 校验规则映射表:字段路径 → 规则条目 */\n __publicField(this, \"rules\", /* @__PURE__ */ new Map());\n /** 校验错误映射表:字段路径 → 错误信息数组(响应式) */\n __publicField(this, \"errors\", createSignalMap());\n }\n /**\n * 注册单个字段的校验规则。\n *\n * 支持传入单个 schema 或 schema 数组,多次调用会追加规则而非覆盖。\n *\n * @param path - 字段路径\n * @param rules - 单个或多个 StandardSchemaV1 校验 schema\n * @param defaultMessage - 可选,空值(undefined/null)时的默认错误提示\n *\n * @example\n * ```typescript\n * validator.register('email', emailSchema)\n * validator.register('name', [minLenSchema, maxLenSchema], '请输入姓名')\n * ```\n */\n register(path, rules, defaultMessage) {\n const schemas = Array.isArray(rules) ? rules : [rules];\n const existing = this.rules.get(path);\n if (existing) {\n existing.schemas.push(...schemas);\n if (defaultMessage) {\n existing.defaultMessage = defaultMessage;\n }\n } else {\n this.rules.set(path, { schemas, defaultMessage });\n }\n }\n /**\n * 注销单个字段的校验规则,同时清除该字段的错误信息。\n *\n * @param path - 字段路径\n *\n * @example\n * ```typescript\n * validator.unregister('email')\n * ```\n */\n unregister(path) {\n this.rules.delete(path);\n this.errors.delete(path);\n }\n /**\n * 获取指定字段的错误信息。\n *\n * @param path - 字段路径\n * @returns 错误信息数组,无错误时返回 undefined\n *\n * @example\n * ```typescript\n * validator.getFieldError('email') // => ['邮箱格式不正确']\n * ```\n */\n getFieldError(path) {\n return this.errors.get(path);\n }\n /**\n * 手动设置指定字段的错误信息。\n *\n * @param path - 字段路径\n * @param errors - 错误信息数组\n *\n * @example\n * ```typescript\n * validator.setFieldError('email', ['该邮箱已被注册'])\n * ```\n */\n setFieldError(path, errors) {\n this.errors.set(path, errors);\n }\n /**\n * 校验指定字段。\n *\n * 支持传入单个路径或路径数组,逐个校验后返回汇总结果。\n *\n * @param path - 字段路径或路径数组\n * @param latestValues - 当前表单全量值\n * @returns 校验结果\n *\n * @example\n * ```typescript\n * const result = await validator.validateField('email', formValues)\n * const result = await validator.validateField(['name', 'email'], formValues)\n *\n * if (!result.ok) console.log(result.error.errors)\n * ```\n */\n async validateField(path, latestValues) {\n const paths = Array.isArray(path) ? path : [path];\n this.reset(paths);\n let allValid = true;\n for (const p2 of paths) {\n const result = await this.validateSingleRule(p2, latestValues);\n if (!result.ok) allValid = false;\n }\n return this.buildResult(allValid, latestValues);\n }\n /**\n * 校验所有已注册规则的字段。\n *\n * 校验前清空所有错误,逐个校验后返回汇总结果。\n *\n * @param latestValues - 当前表单全量值\n * @returns 校验结果\n *\n * @example\n * ```typescript\n * const result = await validator.validate(formValues)\n * if (result.ok) submit(result.values)\n * ```\n */\n async validate(latestValues) {\n let allValid = true;\n this.reset();\n for (const path of this.rules.keys()) {\n const result = await this.validateSingleRule(path, latestValues);\n if (!result.ok) allValid = false;\n }\n return this.buildResult(allValid, latestValues);\n }\n /**\n * 重置所有字段的校验错误。\n *\n * 清空 errors 映射表,不影响已注册的校验规则。\n *\n * @param paths - 可选的字段路径数组;不传时重置所有已注册字段。\n *\n * @example\n * ```typescript\n * validator.resetErrors()\n * ```\n */\n reset(paths) {\n if (paths) {\n batchUpdates(() => {\n for (const key of paths) {\n this.errors.set(key, []);\n }\n });\n return;\n }\n batchUpdates(() => {\n for (const key of this.rules.keys()) {\n this.errors.set(key, []);\n }\n for (const key of [...this.errors.keys()]) {\n if (!this.rules.has(key)) {\n this.errors.delete(key);\n }\n }\n });\n }\n /**\n * 根据校验结果构建 ValidateResult 返回值。\n *\n * @param ok - 校验是否全部通过\n * @param latestValues - 当前表单全量值\n * @returns 统一的校验结果对象\n */\n buildResult(ok, latestValues) {\n if (ok) {\n return { ok: true, values: latestValues };\n }\n return {\n ok: false,\n error: {\n errors: Array.from(this.errors.keys()).map((field) => ({\n field,\n message: this.errors.peek(field) || []\n })),\n values: latestValues\n }\n };\n }\n /**\n * 记录字段错误并返回失败结果。\n *\n * @param path - 字段路径\n * @param messages - 错误信息数组\n * @param latestValues - 当前表单全量值\n * @returns 失败的校验结果\n */\n failResult(path, messages, latestValues) {\n this.errors.set(path, messages);\n return {\n ok: false,\n error: {\n errors: [{ field: path, message: messages }],\n values: latestValues\n }\n };\n }\n /**\n * 校验单个字段的所有规则。\n *\n * 依次执行该字段注册的所有 schema,遇到第一个失败即返回错误。\n * 若值为 undefined/null 且配置了 defaultMessage,直接返回失败结果。\n *\n * @param path - 字段路径\n * @param latestValues - 当前表单全量值\n * @returns 校验结果\n */\n async validateSingleRule(path, latestValues) {\n const entry = this.rules.get(path);\n if (!entry || entry.schemas.length === 0) {\n this.errors.delete(path);\n return { ok: true, values: latestValues };\n }\n const value = getByPath(latestValues, path);\n const allMessages = [];\n if ((value === void 0 || value === null) && entry.defaultMessage) {\n allMessages.push(entry.defaultMessage);\n }\n for (const schema of entry.schemas) {\n try {\n const result = await schema[\"~standard\"].validate(value);\n if (result.issues) {\n allMessages.push(...result.issues.map((i2) => i2.message));\n }\n } catch (error) {\n console.warn(`[Validator] 校验字段 \"${path}\" 时发生错误:`, error);\n allMessages.push(\"校验失败\");\n }\n }\n if (allMessages.length > 0) {\n return this.failResult(path, allMessages, latestValues);\n }\n this.errors.delete(path);\n return { ok: true, values: latestValues };\n }\n}\nfunction createValidator() {\n return new ValidatorImpl();\n}\nfunction createRequiredRule(schema) {\n const validate = (value) => {\n if (value === void 0 || value === null || value === \"\") {\n const label = (schema == null ? void 0 : schema.label) ?? \"\";\n return standardIssueResult(label ? `请输入${label}` : \"此项为必填项\");\n }\n return standardValueResult(value);\n };\n return buildStandardSchema(validate);\n}\nfunction createSelectRequiredRule(schema) {\n const validate = (value) => {\n if (value === void 0 || value === null || value === \"\" || Array.isArray(value) && value.length === 0) {\n const label = (schema == null ? void 0 : schema.label) ?? \"\";\n return standardIssueResult(label ? `请选择${label}` : \"此项为必选项\");\n }\n return standardValueResult(value);\n };\n return buildStandardSchema(validate);\n}\nfunction createUploadRequiredRule(schema) {\n const validate = (value) => {\n if (value === void 0 || value === null || Array.isArray(value) && value.length === 0) {\n const label = (schema == null ? void 0 : schema.label) ?? \"\";\n return standardIssueResult(label ? `请上传${label}` : \"此项为必传项\");\n }\n return standardValueResult(value);\n };\n return buildStandardSchema(validate);\n}\nconst buildStandardSchema = (validate) => {\n return {\n \"~standard\": {\n version: 1,\n vendor: \"schemx\",\n validate\n }\n };\n};\nconst standardIssueResult = (message) => {\n return {\n issues: [{ message }]\n };\n};\nconst standardValueResult = (value) => {\n return { value };\n};\nclass RendererRegistry {\n /**\n * 创建 Registry 实例。\n *\n * @param defaultType - 默认渲染器类型,未找到指定类型时回退使用\n */\n constructor(defaultType) {\n /** 渲染器存储 */\n __publicField(this, \"renderers\");\n /** 默认渲染器类型 */\n __publicField(this, \"defaultType\");\n this.renderers = /* @__PURE__ */ new Map();\n this.defaultType = defaultType;\n }\n /**\n * 注册渲染器。\n *\n * 默认会覆盖已存在的同名渲染器,可通过 `options.override` 控制。\n *\n * @param type - 渲染器类型标识\n * @param renderer - 组件\n * @param options - 注册选项\n *\n * @example\n * ```typescript\n * renderer.register('text', TextRenderer)\n * renderer.register('text', NewTextRenderer, { override: true })\n * ```\n */\n register(type, renderer, options) {\n if (this.renderers.has(type) && (options == null ? void 0 : options.override) === false) {\n console.warn(\n `[RendererRegistryType] RendererRegistry \"${type}\" already exists, skipping registration`\n );\n return;\n }\n this.renderers.set(type, renderer);\n }\n /**\n * 批量注册渲染器。\n *\n * 遍历映射对象逐个注册,已存在的同名渲染器会被直接覆盖。\n *\n * @param renderers - 类型到组件的映射对象\n *\n * @example\n * ```typescript\n * renderer.registerAll({\n * text: TextRenderer,\n * number: NumberRenderer,\n * date: DateRenderer,\n * })\n * ```\n */\n registerAll(renderers) {\n Object.entries(renderers).forEach(([type, renderer]) => {\n this.renderers.set(type, renderer);\n });\n }\n /**\n * 获取指定类型的渲染器组件。\n *\n * 未找到时自动回退到默认类型,默认类型也不存在则返回 undefined。\n *\n * @param type - 渲染器类型标识\n * @returns 对应的组件,未找到且无默认时返回 undefined\n *\n * @example\n * ```typescript\n * const renderer = renderer.getRenderer('text')\n * const fallback = renderer.getRenderer('unknown') // => 默认渲染器\n * ```\n */\n getRenderer(type) {\n let renderer = this.renderers.get(type);\n if (!renderer) {\n console.warn(\n `[RendererRegistryType] RendererRegistry \"${type}\" not found, falling back to default \"${this.defaultType}\"`\n );\n if (this.defaultType) renderer = this.renderers.get(this.defaultType);\n }\n return renderer;\n }\n /**\n * 检查渲染器是否已注册\n *\n * @param type - 渲染器类型标识\n * @returns 是否存在\n *\n * @example\n * ```typescript\n * renderer.hasRenderer('text') // => true\n * renderer.hasRenderer('custom') // => false\n * ```\n */\n hasRenderer(type) {\n return this.renderers.has(type);\n }\n /**\n * 移除渲染器\n *\n * 如果移除的是当前默认类型,会从剩余渲染器中智能选取新默认类型。\n * 若无剩余渲染器则默认类型设为空字符串。\n *\n * @param type - 渲染器类型标识\n * @returns 是否成功移除\n *\n * @example\n * ```typescript\n * renderer.unregister('date') // => true\n * renderer.unregister('nonexistent') // => false\n * ```\n */\n unregister(type) {\n const isDefault = type === this.defaultType;\n const deleted = this.renderers.delete(type);\n if (isDefault && deleted) {\n const firstKey = this.renderers.keys().next().value;\n if (firstKey) {\n console.warn(\n `[RendererRegistryType] Default renderer was removed, Please reset the default renderer.`\n );\n this.defaultType = firstKey;\n }\n }\n return deleted;\n }\n /**\n * 获取所有已注册的渲染器类型\n *\n * @returns 类型标识数组\n *\n * @example\n * ```typescript\n * renderer.getTypes() // => ['text', 'number', 'date']\n * ```\n */\n getTypes() {\n return Array.from(this.renderers.keys());\n }\n /**\n * 设置默认渲染器类型\n *\n * 当 getRenderer 找不到指定类型时,会回退到默认类型。\n * 设置的类型必须已注册,否则操作无效。\n *\n * @param type - 渲染器类型标识\n *\n * @example\n * ```typescript\n * renderer.setDefault('number')\n * renderer.getDefault() // => 'number'\n * ```\n */\n setDefault(type) {\n if (!this.renderers.has(type)) {\n console.warn(\n `[RendererRegistryType] Cannot set default to \"${type}\": renderer not registered`\n );\n return;\n }\n this.defaultType = type;\n }\n /**\n * 获取当前默认渲染器类型\n *\n * @returns 默认类型标识\n *\n * @example\n * ```typescript\n * renderer.getDefault() // => 'text'\n * ```\n */\n getDefault() {\n return this.defaultType;\n }\n /**\n * 清除所有已注册的渲染器并重置默认类型为 'text'。\n *\n * @example\n * ```typescript\n * renderer.clear()\n * renderer.size() // => 0\n * ```\n */\n clear() {\n this.renderers.clear();\n }\n /**\n * 获取已注册渲染器数量\n *\n * @returns 渲染器数量\n *\n * @example\n * ```typescript\n * renderer.size() // => 5\n * ```\n */\n size() {\n return this.renderers.size;\n }\n}\nfunction createRendererRegistry(defaultType) {\n return new RendererRegistry(defaultType);\n}\nclass ValidatorsRegistry {\n /**\n * 创建 ValidatorsRegistryType 实例。\n *\n * 创建空的规则注册中心。\n */\n constructor() {\n /** Validators 存储 */\n __publicField(this, \"validators\");\n this.validators = /* @__PURE__ */ new Map();\n }\n /**\n * 注册校验规则。\n *\n * 支持 StandardSchemaV1 实例或工厂函数。\n * 默认覆盖已存在的同名规则,可通过 `options.override` 控制。\n *\n * @param name - validators 名称\n * @param validators - StandardSchemaV1 实例或工厂函数\n * @param options - 注册选项\n *\n * @example\n * ```typescript\n * // 注册固定 validators\n * validatorRegistry.register('phone', phoneValidators)\n *\n * // 注册工厂函数\n * validatorRegistry.register('required', (schema) => createRequiredValidators(schema))\n * ```\n */\n register(name, validators, options) {\n if (this.validators.has(name) && (options == null ? void 0 : options.override) === false) {\n console.warn(`[ValidatorsRegistryType] Validators \"${name}\" 已存在,跳过注册`);\n return;\n }\n this.validators.set(name, validators);\n }\n /**\n * 批量注册校验规则。\n *\n * 遍历映射对象逐个注册,已存在的同名规则会被直接覆盖。\n *\n * @param validators - 名称到 validators/工厂的映射对象\n *\n * @example\n * ```typescript\n * validatorRegistry.registerAll({\n * phone: phoneValidators,\n * required: (schema) => createRequiredValidators(schema),\n * })\n * ```\n */\n registerAll(validators) {\n Object.entries(validators).forEach(([name, validators2]) => {\n this.validators.set(name, validators2);\n });\n }\n /**\n * 获取指定名称的原始注册条目。\n *\n * 返回 StandardSchemaV1 实例或工厂函数,不做解析。\n * 如需按字段 schema 自动解析字符串规则和工厂,请使用 {@link resolveValidatorsBySchema}。\n *\n * @param name - validators 名称\n * @returns 对应的注册条目,未找到时返回 undefined\n *\n * @example\n * ```typescript\n * const entry = validatorRegistry.get('phone')\n * ```\n */\n get(name) {\n return this.validators.get(name);\n }\n /**\n * 解析字段 schema 上声明的校验规则。\n *\n * 字符串规则会从注册表查找;若注册项是工厂函数,则传入完整字段 schema\n * 生成 StandardSchemaV1 实例。已经是 StandardSchemaV1 的规则会原样返回。\n *\n * @param schema - 含 validators 的字段 schema。\n * @returns 解析后的 StandardSchemaV1 实例数组。\n *\n * @example\n * ```typescript\n * // 固定 validators 直接返回\n * validatorRegistry.resolveValidatorsBySchema({\n * name: 'phone',\n * label: '手机号',\n * componentType: 'input',\n * validators: 'phone',\n * })\n *\n * // 工厂函数会被调用\n * validatorRegistry.resolveValidatorsBySchema({\n * name: 'username',\n * label: '用户名',\n * componentType: 'input',\n * validators: 'required',\n * })\n * ```\n */\n resolveValidatorsBySchema(schema) {\n const validators = (schema == null ? void 0 : schema.rules) ?? [];\n const validatorsList = Array.isArray(validators) ? validators : [validators];\n const resolved = [];\n for (const validators2 of validatorsList) {\n if (typeof validators2 === \"string\") {\n if (this.validators.has(validators2)) {\n const entry = this.validators.get(validators2);\n if (entry) {\n resolved.push(typeof entry === \"function\" ? entry(schema) : entry);\n }\n } else {\n console.warn(`[schemx] 未找到名为 \"${validators2}\" 的校验规则`);\n }\n } else {\n if (validators2) resolved.push(validators2);\n }\n }\n return resolved;\n }\n /**\n * 检查 validators 是否已注册。\n *\n * @param name - validators 名称\n * @returns 是否存在\n *\n * @example\n * ```typescript\n * validatorRegistry.has('phone') // => true\n * validatorRegistry.has('custom') // => false\n * ```\n */\n has(name) {\n return this.validators.has(name);\n }\n /**\n * 移除校验规则。\n *\n * @param name - validators 名称\n * @returns 是否成功移除\n *\n * @example\n * ```typescript\n * validatorRegistry.unregister('phone') // => true\n * ```\n */\n unregister(name) {\n return this.validators.delete(name);\n }\n /**\n * 获取所有已注册的 validators 名称。\n *\n * @returns validators 名称数组\n *\n * @example\n * ```typescript\n * validatorRegistry.getNames() // => ['phone', 'email', 'idCard']\n * ```\n */\n getNames() {\n return Array.from(this.validators.keys());\n }\n /**\n * 清除所有已注册的规则。\n *\n * @example\n * ```typescript\n * validatorRegistry.clear()\n * validatorRegistry.size() // => 0\n * ```\n */\n clear() {\n this.validators.clear();\n }\n /**\n * 获取已注册 validators 数量。\n *\n * @returns validators 数量\n *\n * @example\n * ```typescript\n * validatorRegistry.size() // => 3\n * ```\n */\n size() {\n return this.validators.size;\n }\n}\nfunction createValidatorsRegistry() {\n return new ValidatorsRegistry();\n}\nfunction createSchemas(schemas = []) {\n const source = createSignal(schemas);\n const getValue = () => {\n return source.value;\n };\n const peek = () => {\n return source.peek();\n };\n const set2 = (nextSchemas) => {\n source.value = nextSchemas;\n };\n const update = (updater) => {\n source.value = updater(source.peek());\n };\n const subscribe = (listener) => {\n let isInitialNotify = true;\n const unsubscribe = source.subscribe((value) => {\n if (isInitialNotify) {\n isInitialNotify = false;\n return;\n }\n listener(value);\n });\n return () => {\n unsubscribe();\n };\n };\n return {\n signal: source,\n get value() {\n return getValue();\n },\n peek,\n set: set2,\n update,\n subscribe\n };\n}\nfunction isSchemxSchemas(schemas) {\n if (!schemas || Array.isArray(schemas)) {\n return false;\n }\n const candidate = schemas;\n return typeof candidate.peek === \"function\" && typeof candidate.set === \"function\" && typeof candidate.update === \"function\" && typeof candidate.subscribe === \"function\";\n}\nclass CompileErrorImpl extends Error {\n constructor(message, schema) {\n super(message);\n /**\n * Schema key(如果可提取)。\n */\n __publicField(this, \"schemaKey\");\n /**\n * Schema name path。\n */\n __publicField(this, \"schemaName\");\n this.name = \"CompileError\";\n if (schema && \"name\" in schema) {\n this.schemaName = schema.name;\n }\n if (schema && \"key\" in schema && schema.key) {\n this.schemaKey = schema.key;\n }\n }\n}\nconst CompileError = CompileErrorImpl;\nfunction compileToDescriptors(schemas, options = {}, parentKey = \"\") {\n const descriptors = [];\n const normalized = normalizeSchemas(schemas);\n for (let i2 = 0; i2 < normalized.length; i2++) {\n const schema = normalized[i2];\n let descriptor = void 0;\n if (isGroupSchema(schema)) {\n descriptor = compileGroup(schema, i2, options, parentKey);\n } else if (isDependencySchema(schema)) {\n descriptor = compileDependencySlot(schema, i2, parentKey);\n } else {\n descriptor = compileField(schema, i2, options, parentKey);\n }\n descriptors.push(descriptor);\n }\n return descriptors;\n}\nfunction compileField(schema, index, options = {}, parentKey = \"\") {\n const key = schema.key ?? (parentKey ? `field:${parentKey}/${schema.name}` : `field:${schema.name}`);\n const normalizedSchema = buildNormalizedFieldSchema(schema, options);\n return {\n type: \"field\",\n key,\n name: schema.name,\n rendererType: schema.componentType,\n schema: normalizedSchema,\n dependencies: schema.dependencies\n };\n}\nfunction compileGroup(schema, index, options = {}, parentKey = \"\") {\n const key = schema.key ?? (parentKey ? `group:${parentKey}/${index}` : `group:${index}`);\n const { children: rawChildren, ...schemaWithoutChildren } = schema;\n const children = compileToDescriptors(rawChildren, options, key);\n return {\n type: \"group\",\n key,\n schema: {\n ...schemaWithoutChildren,\n key\n },\n children\n };\n}\nfunction compileDependencySlot(schema, index, parentKey = \"\") {\n const key = schema.key ?? (parentKey ? `dependency:${parentKey}/${index}` : `dependency:${index}`);\n if (!schema.to || schema.to.length === 0) {\n throw new CompileError(\"Dependency schema must have non-empty trigger fields\", schema);\n }\n const trigger = [...schema.to];\n const renderer = (formApi, abortSignal) => {\n const values = formApi.getValues();\n return schema.renderer(values, formApi, {\n abortSignal\n });\n };\n return {\n type: \"dependency\",\n key,\n trigger,\n renderer\n };\n}\nfunction buildNormalizedFieldSchema(schema, options = {}) {\n const {\n componentProps: cp,\n visible,\n readonly,\n disabled,\n required,\n placeholder,\n rules,\n validationTrigger,\n dependencies: _dependencies,\n ...rest\n } = schema;\n const mergedVisible = visible ?? defaultConfig.visible;\n const mergedReadonly = readonly ?? options.readonly ?? defaultConfig.readonly;\n const mergedDisabled = disabled ?? options.disabled ?? defaultConfig.disabled;\n const mergedAlign = mergedReadonly ? \"right\" : (cp == null ? void 0 : cp.align) ?? rest.contentAlign;\n const mergedPlaceholder = getPlaceholder(schema);\n const componentProps = {\n ...cp,\n readonly: mergedReadonly,\n disabled: mergedDisabled,\n placeholder: mergedPlaceholder,\n align: mergedAlign\n };\n const rulesArray = (Array.isArray(rules) ? rules : [rules]).filter(Boolean);\n const mergedRequired = required ?? (rulesArray.length > 0 || defaultConfig.required);\n const normalizedSchema = {\n ...rest ?? {},\n key: rest.key,\n name: rest.name,\n label: rest.label,\n componentType: rest.componentType,\n visible: mergedVisible,\n readonly: mergedReadonly,\n disabled: mergedDisabled,\n required: mergedRequired,\n placeholder: mergedPlaceholder,\n componentProps,\n labelIcon: rest.labelIcon || defaultConfig.labelIcon,\n labelAlign: rest.labelAlign || defaultConfig.labelAlign,\n labelPosition: rest.labelPosition || defaultConfig.labelPosition,\n labelWidth: rest.labelWidth || defaultConfig.labelWidth,\n colon: rest.colon ?? defaultConfig.colon,\n rules,\n validationTrigger: validationTrigger || defaultConfig.validationTrigger\n };\n if (Object.hasOwn(schema, \"initialValue\")) {\n normalizedSchema.initialValue = rest.initialValue;\n }\n if (mergedReadonly) {\n normalizedSchema.contentAlign = \"right\";\n normalizedSchema.labelPosition = \"left\";\n }\n return normalizedSchema;\n}\nfunction getPlaceholder(schema) {\n var _a;\n const existingplaceholder = ((_a = schema.componentProps) == null ? void 0 : _a.placeholder) ?? schema.placeholder;\n if (existingplaceholder == null) {\n return [\"input\", \"text\", \"textarea\"].includes(schema.componentType) ? `请输入${schema.label || schema.name}` : `请选择${schema.label || schema.name}`;\n }\n return existingplaceholder;\n}\nconst isFieldDescriptor = (descriptor) => {\n return descriptor.type === \"field\";\n};\nconst isGroupDescriptor = (descriptor) => {\n return descriptor.type === \"group\";\n};\nconst isDependencyDescriptor = (descriptor) => {\n return descriptor.type === \"dependency\";\n};\nfunction createFieldModel(descriptor) {\n return {\n snapshot: createSignal(createFieldModelSnapshot(descriptor))\n };\n}\nfunction updateFieldModel(model, descriptor, resolved) {\n const nextSnapshot = createFieldModelSnapshot(descriptor, resolved);\n if (isSameFieldModelSnapshot(model.snapshot.peek(), nextSnapshot)) {\n return;\n }\n model.snapshot.value = nextSnapshot;\n}\nfunction createFieldModelSnapshot(descriptor, resolved) {\n const schema = descriptor.schema;\n return {\n visible: (resolved == null ? void 0 : resolved.visible) ?? schema.visible ?? defaultConfig.visible,\n disabled: (resolved == null ? void 0 : resolved.disabled) ?? schema.disabled ?? defaultConfig.disabled,\n readonly: (resolved == null ? void 0 : resolved.readonly) ?? schema.readonly ?? defaultConfig.readonly,\n required: (resolved == null ? void 0 : resolved.required) ?? schema.required ?? defaultConfig.required,\n label: schema.label || \"\",\n rules: ((resolved == null ? void 0 : resolved.rules) ?? schema.rules) || [],\n placeholder: (resolved == null ? void 0 : resolved.placeholder) ?? schema.placeholder ?? getPlaceholder(schema),\n componentProps: ((resolved == null ? void 0 : resolved.componentProps) ?? schema.componentProps) || {}\n };\n}\nfunction isSameFieldModelSnapshot(current, next) {\n return current.visible === next.visible && current.disabled === next.disabled && current.readonly === next.readonly && current.required === next.required && current.label === next.label && isSameArrayOrValue(current.rules, next.rules) && current.placeholder === next.placeholder && isShallowEqualRecord(current.componentProps, next.componentProps);\n}\nfunction isSameArrayOrValue(current, next) {\n if (current === next) {\n return true;\n }\n if (!Array.isArray(current) || !Array.isArray(next)) {\n return false;\n }\n return current.length === next.length && current.every((value, index) => value === next[index]);\n}\nfunction isShallowEqualRecord(current, next) {\n if (current === next) {\n return true;\n }\n const currentKeys = Object.keys(current);\n const nextKeys = Object.keys(next);\n const currentRecord = current;\n const nextRecord = next;\n return currentKeys.length === nextKeys.length && currentKeys.every((key) => currentRecord[key] === nextRecord[key]);\n}\nfunction createDependenciesEffect(options) {\n const { descriptor, fieldModel, context, scope } = options;\n const base = descriptor.schema;\n const dependencies = descriptor.dependencies;\n if (dependencies == null || dependencies.triggerFields == null || dependencies.triggerFields.length === 0) {\n return;\n }\n let version = 0;\n const dispose = createSignalEffect(() => {\n const currentVersion = ++version;\n void context.formApi.getValues(dependencies.triggerFields);\n void context.scheduler.track(\n resolveDependencies(dependencies, base, context.formApi).then((resolvedProps) => {\n if (scope.disposed || currentVersion !== version) {\n return;\n }\n updateFieldModel(fieldModel, descriptor, resolvedProps);\n })\n );\n });\n scope.add(() => {\n version += 1;\n dispose();\n });\n}\nasync function resolveDependencies(dependencies, base, formApi) {\n const values = formApi.getValues();\n const [resolvedProps] = await Promise.all([\n resolveDependenciesProps(dependencies, base, values, formApi),\n runDependenciesTrigger(dependencies, values, formApi)\n ]);\n return resolvedProps;\n}\nasync function runDependenciesTrigger(dependencies, values, formApi) {\n if (!dependencies.trigger) {\n return;\n }\n try {\n await dependencies.trigger(values, formApi);\n } catch (error) {\n console.error(\"[schemx] trigger 执行错误:\", error);\n }\n}\nasync function resolveDependenciesProps(dependencies, base, values, formApi) {\n const [componentProps, placeholder, required, readonly, disabled, visible, rules] = await Promise.all([\n resolveDependenciesProp({\n condition: dependencies.componentProps,\n values,\n formApi,\n defaultValue: base.componentProps\n }),\n resolveDependenciesProp({\n condition: dependencies.placeholder,\n values,\n formApi,\n defaultValue: base.placeholder\n }),\n resolveDependenciesProp({\n condition: dependencies.required,\n values,\n formApi,\n defaultValue: base.required\n }),\n resolveDependenciesProp({\n condition: dependencies.readonly,\n values,\n formApi,\n defaultValue: base.readonly\n }),\n resolveDependenciesProp({\n condition: dependencies.disabled,\n values,\n formApi,\n defaultValue: base.disabled\n }),\n resolveDependenciesProp({\n condition: dependencies.visible,\n values,\n formApi,\n defaultValue: base.visible\n }),\n resolveDependenciesProp({\n condition: dependencies.rules,\n values,\n formApi,\n defaultValue: base.rules\n })\n ]);\n return {\n componentProps,\n placeholder,\n required,\n readonly,\n disabled,\n visible,\n rules\n };\n}\nasync function resolveDependenciesProp(options) {\n const { condition, values, formApi, defaultValue } = options;\n if (condition == null) {\n return defaultValue;\n }\n return resolveCondition(formApi, condition, values, defaultValue);\n}\nasync function resolveCondition(formApi, condition, formValues, defaultValue) {\n try {\n const result = await condition(formValues, formApi);\n return result ?? defaultValue;\n } catch (error) {\n console.error(\"[schemx] 解析动态属性时发生错误:\", error);\n return defaultValue;\n }\n}\nfunction createDependencyEffect(options) {\n var _a;\n const { node, descriptor, context } = options;\n const resourceScope = options.scope ?? node.scope.child();\n (_a = node.dependencySlot) == null ? void 0 : _a.dispose();\n const slot = {\n loading: createSignal(false),\n error: createSignal(null),\n version: createSignal(0),\n abortController: createSignal(null),\n run: async () => void 0,\n dispose: () => void 0\n };\n node.dependencyResourceScope = resourceScope;\n slot.run = () => {\n var _a2;\n if (resourceScope.disposed) return Promise.resolve();\n const currentDescriptor = node.descriptor;\n const currentVersion = slot.version.value + 1;\n slot.version.value = currentVersion;\n (_a2 = slot.abortController.value) == null ? void 0 : _a2.abort();\n const controller = new AbortController();\n slot.abortController.value = controller;\n slot.loading.value = true;\n slot.error.value = null;\n return context.scheduler.track(\n (async () => {\n try {\n const childSchemas = await Promise.resolve(\n currentDescriptor.renderer(context.formApi, controller.signal)\n );\n if (resourceScope.disposed || controller.signal.aborted || currentVersion !== slot.version.value) {\n return;\n }\n const descriptors = compileToDescriptors(\n childSchemas,\n context.defaultProps\n );\n context.commitChildren(node, descriptors);\n } catch (cause) {\n if (resourceScope.disposed || controller.signal.aborted || currentVersion !== slot.version.value) {\n return;\n }\n slot.error.value = normalizeError(cause);\n } finally {\n if (!resourceScope.disposed && !controller.signal.aborted && currentVersion === slot.version.value) {\n slot.loading.value = false;\n }\n }\n })()\n );\n };\n slot.dispose = () => {\n var _a2;\n slot.version.value += 1;\n (_a2 = slot.abortController.value) == null ? void 0 : _a2.abort();\n resourceScope.dispose();\n };\n resourceScope.add(() => {\n var _a2;\n (_a2 = slot.abortController.value) == null ? void 0 : _a2.abort();\n slot.abortController.value = null;\n if (node.dependencySlot === slot) {\n node.dependencySlot = null;\n }\n if (node.dependencyResourceScope === resourceScope) {\n node.dependencyResourceScope = null;\n }\n });\n if (descriptor.trigger.length > 0) {\n setupTriggerSubscription(\n descriptor.trigger,\n context.formApi,\n () => slot.run(),\n resourceScope\n );\n }\n node.dependencySlot = slot;\n void slot.run().catch((runError) => {\n console.error(\"DependencyEffectSlot initial run error:\", runError);\n });\n return slot;\n}\nfunction setupTriggerSubscription(triggers, formApi, run, scope) {\n let isFirstRun = true;\n let pendingRun = false;\n const disposeEffect = createSignalEffect(() => {\n void formApi.getValues(triggers);\n if (!isFirstRun && !pendingRun) {\n pendingRun = true;\n queueMicrotask(() => {\n pendingRun = false;\n if (scope.disposed) return;\n run().catch((runError) => {\n console.error(\"DependencyEffectSlot trigger run error:\", runError);\n });\n });\n }\n isFirstRun = false;\n });\n scope.add(disposeEffect);\n}\nfunction normalizeError(cause) {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\nclass RuntimeFieldRegistry {\n constructor() {\n __publicField(this, \"fields\", /* @__PURE__ */ new Map());\n }\n register(entry) {\n const key = entry.name;\n this.fields.set(key, entry);\n }\n unregister(name, node) {\n const key = name;\n const current = this.fields.get(key);\n if (node && (current == null ? void 0 : current.node) !== node) {\n return;\n }\n this.fields.delete(key);\n }\n get(name) {\n const key = name;\n return this.fields.get(key);\n }\n list() {\n return Array.from(this.fields.values());\n }\n}\nfunction createFieldRegistry() {\n return new RuntimeFieldRegistry();\n}\nfunction createValidationEffect(options) {\n const { name, fieldModel, scope, context } = options;\n const taskScheduler = context.scheduler;\n const registered = createSignal(false);\n const validating = createSignal(false);\n let registrationVersion = 0;\n const readValidationProps = () => {\n const snapshot = fieldModel.snapshot.value;\n return {\n visible: snapshot.visible,\n readonly: snapshot.readonly,\n disabled: snapshot.disabled,\n label: snapshot.label,\n rules: snapshot.rules\n };\n };\n const applyRegistration = (snapshot) => {\n const { visible, readonly, disabled, label, rules } = snapshot;\n if (!visible || readonly || disabled || !rules) {\n context.instance.unregisterRules(name);\n context.instance.setFieldError(name, []);\n registered.value = false;\n return;\n }\n context.instance.registerRules(name, rules, `${label}为必填项`);\n registered.value = true;\n };\n const scheduleRegistration = (snapshot) => {\n const currentVersion = ++registrationVersion;\n taskScheduler.schedule({\n id: `validation:${String(name)}`,\n priority: \"post\",\n scope,\n run: () => {\n if (scope.disposed || currentVersion !== registrationVersion) {\n return;\n }\n applyRegistration(snapshot);\n }\n });\n };\n scope.add(() => {\n registrationVersion += 1;\n context.instance.unregisterRules(name);\n context.instance.setFieldError(name, []);\n registered.value = false;\n });\n const disposeEffect = createSignalEffect(() => {\n scheduleRegistration(readValidationProps());\n });\n scope.add(disposeEffect);\n const validate = async () => {\n validating.value = true;\n try {\n const result = await context.instance.validateField(name);\n return result;\n } finally {\n validating.value = false;\n }\n };\n const dispose = () => {\n scope.dispose();\n };\n return {\n registered,\n validating,\n validate,\n dispose\n };\n}\nfunction createLifecycleBus(initialListener) {\n const listeners = /* @__PURE__ */ new Set();\n if (initialListener) {\n listeners.add(initialListener);\n }\n const emit = (run, ...args) => {\n for (const listener of Array.from(listeners)) {\n run(listener, ...args);\n }\n };\n const on = (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n };\n const emitMount = (node) => {\n emit((listener, currentNode) => {\n var _a, _b;\n (_a = listener.mount) == null ? void 0 : _a.call(listener, currentNode);\n (_b = listener.mounted) == null ? void 0 : _b.call(listener, currentNode);\n }, node);\n };\n const emitBeforeMount = (node) => {\n emit((listener, currentNode) => {\n var _a;\n (_a = listener.beforeMount) == null ? void 0 : _a.call(listener, currentNode);\n }, node);\n };\n const emitUpdate = (node, previousNode) => {\n emit(\n (listener, currentNode, currentPreviousNode) => {\n var _a;\n (_a = listener.update) == null ? void 0 : _a.call(listener, currentNode, currentPreviousNode);\n },\n node,\n previousNode\n );\n };\n const emitBeforeUpdate = (node, previousNode) => {\n emit(\n (listener, currentNode, currentPreviousNode) => {\n var _a;\n (_a = listener.beforeUpdate) == null ? void 0 : _a.call(listener, currentNode, currentPreviousNode);\n },\n node,\n previousNode\n );\n };\n const emitUpdated = (node, previousNode) => {\n emit(\n (listener, currentNode, currentPreviousNode) => {\n var _a;\n (_a = listener.updated) == null ? void 0 : _a.call(listener, currentNode, currentPreviousNode);\n },\n node,\n previousNode\n );\n };\n const emitBeforeUnmount = (node) => {\n emit((listener, currentNode) => {\n var _a;\n (_a = listener.beforeUnmount) == null ? void 0 : _a.call(listener, currentNode);\n }, node);\n };\n const emitUnmount = (node) => {\n emit((listener, currentNode) => {\n var _a, _b;\n (_a = listener.unmount) == null ? void 0 : _a.call(listener, currentNode);\n (_b = listener.unmounted) == null ? void 0 : _b.call(listener, currentNode);\n }, node);\n };\n const clear = () => {\n listeners.clear();\n };\n return {\n on,\n emitMount,\n emitBeforeMount,\n emitUpdate,\n emitBeforeUpdate,\n emitUpdated,\n emitBeforeUnmount,\n emitUnmount,\n clear\n };\n}\nconst createLifecycle = createLifecycleBus;\nfunction defaultGetChildren(node) {\n return node.children;\n}\nfunction findNodeBFS(tree, predicate, options = {}) {\n const getChildren = options.getChildren ?? defaultGetChildren;\n const queue = Array.isArray(tree) ? [...tree] : [tree];\n let index = 0;\n while (index < queue.length) {\n const node = queue[index];\n index++;\n if (predicate(node)) {\n return node;\n }\n const children = getChildren(node);\n if (children == null ? void 0 : children.length) {\n queue.push(...children);\n }\n }\n return void 0;\n}\nfunction hasDescriptor(node) {\n return node.type !== \"root\";\n}\nfunction isRootRuntimeNode(node) {\n return node.type === \"root\";\n}\nfunction isFieldRuntimeNode(node) {\n return (node == null ? void 0 : node.type) === \"field\";\n}\nfunction isGroupRuntimeNode(node) {\n return (node == null ? void 0 : node.type) === \"group\";\n}\nfunction isDependencyRuntimeNode(node) {\n return (node == null ? void 0 : node.type) === \"dependency\";\n}\nfunction isContainerRuntimeNode(node) {\n return node.type === \"root\" || node.type === \"group\" || node.type === \"dependency\";\n}\nfunction getChildRuntimeNodes(node) {\n if (isRootRuntimeNode(node) || isGroupRuntimeNode(node)) {\n return node.childNodes;\n }\n if (isDependencyRuntimeNode(node)) {\n return node.dynamicChildNodes;\n }\n return [];\n}\nfunction setChildRuntimeNodes(node, children) {\n if (isRootRuntimeNode(node) || isGroupRuntimeNode(node)) {\n node.childNodes = children;\n return;\n }\n if (isDependencyRuntimeNode(node)) {\n node.dynamicChildNodes = children;\n return;\n }\n}\nfunction findFieldRuntimeNode(root, name) {\n return findNodeBFS(\n root,\n (node) => isFieldRuntimeNode(node) && node.descriptor.name === name,\n {\n getChildren: (node) => getChildRuntimeNodes(node)\n }\n );\n}\nclass RuntimeReconciler {\n constructor(runtimeNodeManager) {\n /** 执行 RuntimeNode 创建、挂载、更新和销毁的生命周期管理器。 */\n __publicField(this, \"runtimeNodeManager\");\n this.runtimeNodeManager = runtimeNodeManager;\n }\n /**\n * 将容器 RuntimeNode 的子节点更新为目标 descriptor 列表。\n *\n * @param parentNode - 承载子节点的 RuntimeNode。\n * @param descriptors - 新一轮编译后的子节点描述符。\n * @returns 子节点结构是否发生可观测变化(新增、移除、类型变更或子树变动)。\n *\n * @remarks\n * 同 key 且同 type 的 RuntimeNode 会被复用;不同 type 即使 key 相同也会重建。\n * 新子节点会先提交到 parent,再销毁被移除的旧节点,避免 cleanup 或视图投影\n * 期间仍读取到过期结构。`viewRevision` 由外层 commit boundary 统一推进。\n */\n reconcileChildren(parentNode, descriptors) {\n return this.reconcileChildrenTree(parentNode, descriptors);\n }\n reconcileChildrenTree(parentNode, descriptors) {\n const previousByKey = new Map(\n getChildRuntimeNodes(parentNode).map((node) => [node.key, node])\n );\n const next = [];\n const groups = [];\n let changed = false;\n for (const descriptor of descriptors) {\n const existingNode = previousByKey.get(descriptor.key);\n if (existingNode && existingNode.type === descriptor.type) {\n previousByKey.delete(descriptor.key);\n existingNode.parent = parentNode;\n this.runtimeNodeManager.update(existingNode, descriptor);\n next.push(existingNode);\n if (isGroupDescriptor(descriptor)) {\n groups.push({ node: existingNode, descriptor });\n }\n continue;\n }\n changed = true;\n const node = this.runtimeNodeManager.create(descriptor, parentNode);\n this.runtimeNodeManager.mount(node);\n next.push(node);\n if (isGroupDescriptor(descriptor)) {\n groups.push({ node, descriptor });\n }\n }\n setChildRuntimeNodes(parentNode, next);\n for (const { node, descriptor } of groups) {\n if (isGroupDescriptor(descriptor)) {\n if (this.reconcileChildrenTree(node, descriptor.children)) {\n changed = true;\n }\n }\n }\n if (previousByKey.size > 0) {\n changed = true;\n }\n for (const removed of previousByKey.values()) {\n this.runtimeNodeManager.disposeTree(removed);\n }\n return changed;\n }\n}\nfunction createReconciler(runtimeNodeManager) {\n return new RuntimeReconciler(runtimeNodeManager);\n}\nfunction createScope() {\n let disposed = false;\n const cleanupRecords = [];\n const childScopes = [];\n const add = (cleanup) => {\n if (disposed) {\n runCleanup(cleanup);\n return createDisposedHandle();\n }\n const record = {\n cleanup,\n disposed: false\n };\n cleanupRecords.push(record);\n const disposeCleanup = () => {\n if (record.disposed) {\n return;\n }\n record.disposed = true;\n removeItem(cleanupRecords, record);\n runCleanup(record.cleanup);\n };\n return {\n get disposed() {\n return record.disposed;\n },\n dispose: disposeCleanup\n };\n };\n const child = () => {\n const childScope = createScope();\n childScopes.push(childScope);\n childScope.add(() => {\n removeItem(childScopes, childScope);\n });\n return childScope;\n };\n const disposeScope = () => {\n if (disposed) {\n return;\n }\n disposed = true;\n for (const childScope of childScopes.slice().reverse()) {\n childScope.dispose();\n }\n childScopes.length = 0;\n for (const record of cleanupRecords.slice().reverse()) {\n if (!record.disposed) {\n record.disposed = true;\n runCleanup(record.cleanup);\n }\n }\n cleanupRecords.length = 0;\n };\n return {\n get disposed() {\n return disposed;\n },\n add,\n child,\n dispose: disposeScope\n };\n}\nconst createDisposedHandle = () => {\n return {\n disposed: true,\n dispose: noop\n };\n};\nconst noop = () => {\n};\nconst removeItem = (items, item) => {\n const index = items.indexOf(item);\n if (index >= 0) {\n items.splice(index, 1);\n }\n};\nconst runCleanup = (cleanup) => {\n try {\n cleanup();\n } catch (error) {\n reportRuntimeCleanupError(error);\n }\n};\nfunction reportRuntimeCleanupError(error) {\n console.error(\"[Scope] Cleanup error:\", error);\n}\nclass DefaultRuntimeNodeManager {\n constructor(context) {\n /**\n * 下一个非 root RuntimeNode 的自增 id;root 固定使用 0。\n */\n __publicField(this, \"nextId\", 1);\n /**\n * 当前表单运行时上下文的延迟访问器。\n */\n __publicField(this, \"context\");\n /**\n * 表单实例,定义表单的所有操作方法\n */\n __publicField(this, \"instance\");\n /**\n * 字段运行时索引,用于按字段路径查找 model 与 RuntimeNode。\n */\n __publicField(this, \"fieldRegistry\");\n /**\n * RuntimeNode 生命周期事件总线。\n */\n __publicField(this, \"lifecycleBus\");\n this.context = context;\n this.fieldRegistry = context.fieldRegistry;\n this.instance = context.instance;\n this.lifecycleBus = context.lifecycleBus;\n }\n /**\n * 创建透明根 RuntimeNode。\n *\n * @returns root RuntimeNode,不对应任何表单 descriptor。\n */\n createRoot() {\n return {\n id: 0,\n key: \"schemx:root\",\n type: \"root\",\n parent: null,\n scope: createScope(),\n disposed: createSignal(false),\n mounted: createSignal(false),\n childNodes: []\n };\n }\n /**\n * 根据 descriptor 创建单个未挂载 RuntimeNode。\n *\n * @param descriptor - 编译后的表单节点描述符。\n * @param parent - 新 RuntimeNode 所属的容器 RuntimeNode。\n */\n create(descriptor, parent) {\n if (descriptor.type === \"field\") {\n return this.createField(descriptor, parent);\n }\n if (descriptor.type === \"group\") {\n return this.createGroup(descriptor, parent);\n }\n if (descriptor.type === \"dependency\") {\n return this.createDependency(descriptor, parent);\n }\n throwUnknownDescriptor(descriptor);\n }\n /**\n * 挂载单个 RuntimeNode 的运行期资源。\n *\n * @param node - 要挂载的 RuntimeNode。\n *\n * @remarks\n * Group RuntimeNode 只表示结构,不会创建领域资源;Field 和 Dependency 会在这里\n * 创建各自的模型、effect 与资源 scope。\n */\n mount(node) {\n if (!hasDescriptor(node)) {\n return;\n }\n this.lifecycleBus.emitBeforeMount(node);\n switch (node.type) {\n case \"field\":\n this.mountField(node);\n break;\n case \"group\":\n this.mountGroup(node);\n break;\n case \"dependency\":\n this.mountDependency(node);\n break;\n }\n node.mounted.value = true;\n this.lifecycleBus.emitMount(node);\n }\n /**\n * 更新单个 RuntimeNode 的 descriptor 快照和运行期资源。\n *\n * @param node - 要更新的 RuntimeNode。\n * @param next - 更新后的表单 descriptor。\n *\n * @remarks\n * descriptor 快照会先写入 RuntimeNode,再由具体 update 分支决定复用还是重启资源。\n * 结构层面的 children reconcile 不在这里处理。\n */\n update(node, next) {\n if (!hasDescriptor(node)) {\n return;\n }\n switch (node.type) {\n case \"field\": {\n if (!isFieldDescriptor(next)) {\n throwUnexpectedDescriptor(node, next);\n }\n const previousNode = createPreviousRuntimeNodeSnapshot(node);\n this.lifecycleBus.emitBeforeUpdate(node, previousNode);\n node.descriptor = next;\n this.updateField(node, previousNode);\n this.lifecycleBus.emitUpdate(node, previousNode);\n this.lifecycleBus.emitUpdated(node, previousNode);\n break;\n }\n case \"group\": {\n if (!isGroupDescriptor(next)) {\n throwUnexpectedDescriptor(node, next);\n }\n const previousNode = createPreviousRuntimeNodeSnapshot(node);\n this.lifecycleBus.emitBeforeUpdate(node, previousNode);\n node.descriptor = next;\n this.updateGroup(node, next);\n this.lifecycleBus.emitUpdate(node, previousNode);\n this.lifecycleBus.emitUpdated(node, previousNode);\n break;\n }\n case \"dependency\": {\n if (!isDependencyDescriptor(next)) {\n throwUnexpectedDescriptor(node, next);\n }\n const previousNode = createPreviousRuntimeNodeSnapshot(node);\n this.lifecycleBus.emitBeforeUpdate(node, previousNode);\n node.descriptor = next;\n this.updateDependency(node, previousNode);\n this.lifecycleBus.emitUpdate(node, previousNode);\n this.lifecycleBus.emitUpdated(node, previousNode);\n break;\n }\n }\n }\n /**\n * 卸载单个 RuntimeNode 的运行期资源。\n *\n * @param node - 要卸载的 RuntimeNode。\n *\n * @remarks\n * 这个方法不递归销毁子节点;需要销毁整棵子树时使用 `disposeTree`。\n */\n unmount(node) {\n if (!hasDescriptor(node)) {\n return;\n }\n switch (node.type) {\n case \"field\":\n this.unmountField(node);\n break;\n case \"group\":\n this.unmountGroup(node);\n break;\n case \"dependency\":\n this.unmountDependency(node);\n break;\n }\n node.mounted.value = false;\n }\n /**\n * 递归销毁 RuntimeNode 子树。\n *\n * @param node - 要销毁的子树根 RuntimeNode。\n *\n * @remarks\n * 销毁顺序是:标记 disposed、递归销毁 runtime 子节点、卸载自身领域资源、\n * 释放 RuntimeNode scope、断开 parent。这样可以确保子资源先于父资源释放。\n */\n disposeTree(node) {\n if (node.disposed.value) {\n return;\n }\n if (node.type !== \"root\") {\n this.lifecycleBus.emitBeforeUnmount(node);\n }\n node.disposed.value = true;\n if (isContainerRuntimeNode(node)) {\n for (const child of getChildRuntimeNodes(node)) {\n this.disposeTree(child);\n }\n setChildRuntimeNodes(node, []);\n }\n this.unmount(node);\n node.scope.dispose();\n node.parent = null;\n if (node.type !== \"root\") {\n this.lifecycleBus.emitUnmount(node);\n }\n }\n createField(descriptor, parent) {\n const fieldModel = createFieldModel(descriptor);\n const node = {\n id: this.nextId++,\n key: descriptor.key,\n type: descriptor.type,\n parent,\n scope: parent.scope.child(),\n disposed: createSignal(false),\n mounted: createSignal(false),\n descriptor,\n fieldModel,\n fieldResourceScope: null,\n fieldDependenciesScope: null\n };\n return node;\n }\n createGroup(descriptor, parent) {\n const node = {\n id: this.nextId++,\n key: descriptor.key,\n type: descriptor.type,\n parent,\n scope: parent.scope.child(),\n disposed: createSignal(false),\n mounted: createSignal(false),\n descriptor,\n childNodes: []\n };\n return node;\n }\n createDependency(descriptor, parent) {\n const node = {\n id: this.nextId++,\n key: descriptor.key,\n type: descriptor.type,\n parent,\n scope: parent.scope.child(),\n disposed: createSignal(false),\n mounted: createSignal(false),\n descriptor,\n dependencySlot: null,\n dependencyResourceScope: null,\n dynamicChildNodes: []\n };\n return node;\n }\n mountField(node) {\n const resourceScope = node.scope.child();\n const model = node.fieldModel;\n if (!model) {\n return;\n }\n this.initializeFieldValue(node);\n node.fieldResourceScope = resourceScope;\n this.fieldRegistry.register({\n name: node.descriptor.name,\n node,\n model\n });\n resourceScope.add(() => {\n this.fieldRegistry.unregister(node.descriptor.name, node);\n if (node.fieldResourceScope === resourceScope) {\n node.fieldResourceScope = null;\n }\n });\n this.mountFieldValidation(node, model, resourceScope);\n this.mountOrRestartFieldDependencies(node, model);\n }\n initializeFieldValue(node) {\n const { name, schema } = node.descriptor;\n if (!Object.hasOwn(schema, \"initialValue\") || this.instance.getFieldSnapshot(name) !== void 0) {\n return;\n }\n const values = {};\n setByPath(values, name, schema.initialValue);\n this.instance.setInitialValues(values);\n this.instance.setFieldValue(name, schema.initialValue);\n }\n mountGroup(_node) {\n }\n mountDependency(node) {\n createDependencyEffect({\n node,\n descriptor: node.descriptor,\n context: this.context\n });\n }\n updateField(node, previousNode) {\n const model = node.fieldModel;\n if (model && previousNode && previousNode.descriptor.name === node.descriptor.name) {\n updateFieldModel(model, node.descriptor);\n this.fieldRegistry.register({\n name: node.descriptor.name,\n node,\n model\n });\n this.mountOrRestartFieldDependencies(node, model);\n return;\n }\n this.unmountField(node);\n this.mountField(node);\n }\n updateGroup(_node, _descriptor) {\n }\n updateDependency(node, previousNode) {\n if (!node.dependencySlot || !previousNode || !isSameNamePathList(node.descriptor.trigger, previousNode == null ? void 0 : previousNode.descriptor.trigger)) {\n this.unmountDependency(node);\n this.mountDependency(node);\n }\n }\n mountFieldValidation(node, model = node.fieldModel, scope = node.fieldResourceScope) {\n if (!model || !scope) {\n return;\n }\n createValidationEffect({\n name: node.descriptor.name,\n fieldModel: model,\n context: this.context,\n scope\n });\n }\n mountOrRestartFieldDependencies(node, model = node.fieldModel) {\n var _a;\n (_a = node.fieldDependenciesScope) == null ? void 0 : _a.dispose();\n if (!model || !node.descriptor.dependencies) {\n node.fieldDependenciesScope = null;\n return;\n }\n const dependenciesScope = node.scope.child();\n node.fieldDependenciesScope = dependenciesScope;\n dependenciesScope.add(() => {\n if (node.fieldDependenciesScope === dependenciesScope) {\n node.fieldDependenciesScope = null;\n }\n });\n createDependenciesEffect({\n descriptor: node.descriptor,\n fieldModel: model,\n context: this.context,\n scope: dependenciesScope\n });\n }\n unmountField(node) {\n var _a, _b;\n (_a = node.fieldDependenciesScope) == null ? void 0 : _a.dispose();\n node.fieldDependenciesScope = null;\n (_b = node.fieldResourceScope) == null ? void 0 : _b.dispose();\n node.fieldResourceScope = null;\n }\n unmountGroup(_node) {\n }\n unmountDependency(node) {\n var _a;\n (_a = node.dependencyResourceScope) == null ? void 0 : _a.dispose();\n node.dependencyResourceScope = null;\n node.dependencySlot = null;\n }\n}\nfunction createRuntimeNodeManager(context) {\n return new DefaultRuntimeNodeManager(context);\n}\nfunction isSameNamePathList(a2, b2) {\n if (a2.length !== b2.length) {\n return false;\n }\n return a2.every((name, index) => name === b2[index]);\n}\nfunction createPreviousRuntimeNodeSnapshot(node) {\n return { ...node };\n}\nfunction throwUnknownDescriptor(descriptor) {\n throw new Error(`unknown type: ${descriptor.type ?? \"unknown\"}`);\n}\nfunction throwUnexpectedDescriptor(node, descriptor) {\n throw new Error(\n `unexpected descriptor type: node ${node.type} cannot update with ${descriptor.type}`\n );\n}\nconst PRIORITY_ORDER = [\"sync\", \"pre\", \"normal\", \"post\"];\nfunction createScheduler() {\n const queues = new Map(\n PRIORITY_ORDER.map((priority) => [priority, /* @__PURE__ */ new Map()])\n );\n const idleResolvers = /* @__PURE__ */ new Set();\n let pendingAsync = 0;\n let disposed = false;\n let currentFlush = null;\n const flush = async () => {\n if (disposed) {\n return;\n }\n if (currentFlush) {\n return currentFlush;\n }\n currentFlush = flushOnce().finally(() => {\n currentFlush = null;\n notifyIdleIfNeeded();\n });\n return currentFlush;\n };\n const flushOnce = async () => {\n var _a, _b;\n const batch = takeBatch();\n for (const task of batch) {\n if (disposed || ((_a = task.scope) == null ? void 0 : _a.disposed)) {\n continue;\n }\n try {\n const result = task.run();\n if (isPromiseLike(result)) {\n await track(result);\n }\n } catch (error) {\n (_b = task.onError) == null ? void 0 : _b.call(task, error);\n }\n }\n };\n const schedule = (task) => {\n var _a, _b;\n if (disposed || ((_a = task.scope) == null ? void 0 : _a.disposed)) {\n return;\n }\n (_b = queues.get(task.priority)) == null ? void 0 : _b.set(task.id, task);\n queueMicrotask(() => void flush());\n };\n const takeBatch = () => {\n const batch = [];\n for (const priority of PRIORITY_ORDER) {\n const queue = queues.get(priority);\n if (!queue) {\n continue;\n }\n batch.push(...queue.values());\n queue.clear();\n }\n return batch;\n };\n const track = async (promise) => {\n pendingAsync += 1;\n try {\n return await promise;\n } finally {\n pendingAsync -= 1;\n notifyIdleIfNeeded();\n }\n };\n const whenIdle = (timeout = 1e4) => {\n if (isIdle()) {\n return Promise.resolve(true);\n }\n return new Promise((resolve) => {\n const timeoutId = globalThis.setTimeout(() => {\n idleResolvers.delete(resolve);\n resolve(false);\n }, timeout);\n idleResolvers.add((idle) => {\n globalThis.clearTimeout(timeoutId);\n resolve(idle);\n });\n });\n };\n const isIdle = () => {\n return !currentFlush && pendingAsync === 0 && !hasQueuedTasks();\n };\n const hasQueuedTasks = () => {\n return Array.from(queues.values()).some((queue) => queue.size > 0);\n };\n const notifyIdleIfNeeded = () => {\n if (!isIdle()) {\n return;\n }\n const resolvers = Array.from(idleResolvers);\n idleResolvers.clear();\n resolvers.forEach((resolve) => resolve(true));\n };\n const dispose = () => {\n disposed = true;\n queues.forEach((queue) => queue.clear());\n notifyIdleIfNeeded();\n };\n return {\n schedule,\n flush,\n whenIdle,\n track,\n dispose\n };\n}\nconst isPromiseLike = (value) => {\n return value !== null && typeof value === \"object\" && \"then\" in value && typeof value.then === \"function\";\n};\nclass StoreImpl {\n /**\n * 创建 Store 实例。\n *\n * 对 initialValues 进行深拷贝,确保内部状态与外部引用隔离。\n * 为每个初始字段路径创建对应的 reactive value。\n *\n * @param options - 配置选项\n */\n constructor(options = {}) {\n /** 每个字段路径对应一个 FieldSignal */\n __publicField(this, \"fieldSignals\", createFieldSignalMap());\n /** 初始值 */\n __publicField(this, \"initialValues\");\n const initialValues = options.initialValues ?? {};\n this.initialValues = cloneDeep(initialValues);\n const paths = collectObjectPathsByLeaf(initialValues);\n for (const path of paths) {\n const value = getByPath(initialValues, path);\n this.fieldSignals.set(\n path,\n createFieldSignal({\n value,\n initialValue: value\n })\n );\n }\n }\n getOrCreateFieldSignal(path) {\n const initialValue = getByPath(this.initialValues, path);\n let signal = this.fieldSignals.peek(path);\n if (!signal) {\n signal = createFieldSignal({\n value: initialValue,\n initialValue\n });\n this.fieldSignals.set(path, signal);\n }\n return signal;\n }\n /**\n * 获取指定路径的字段值。\n *\n * 读取对应 reactive value,在 effect 中使用时自动收集依赖。\n *\n * @param path - 字段路径,支持嵌套路径如 'user.name'\n * @returns 字段当前值\n *\n * @example\n * ```typescript\n * store.getFieldValue('name') // => 'John'\n * store.getFieldValue('user.address') // => { city: 'Beijing', zip: '100000' }\n * ```\n */\n getFieldValue(path) {\n const signal = this.fieldSignals.get(path);\n return signal == null ? void 0 : signal.value.value;\n }\n /**\n * 设置指定路径的字段值。\n *\n * 直接写入对应 reactive value,自动触发依赖它的 effect。\n *\n * @param path - 字段路径\n * @param value - 要设置的值\n *\n * @example\n * ```typescript\n * store.setFieldValue('name', 'Jane')\n * store.setFieldValue('user.age', 30)\n * ```\n */\n setFieldValue(path, value) {\n const signal = this.getOrCreateFieldSignal(path);\n signal.setValue(value);\n signal.setTouched(!isEqual(value, signal.initialValue.peek()));\n }\n getFieldsValue(paths) {\n const result = {};\n const pathsArr = paths ?? this.fieldSignals.keys();\n for (const path of pathsArr) {\n setByPath(result, path, this.getFieldValue(path));\n }\n return result;\n }\n /**\n * 批量设置多个字段的值。\n *\n * 批量设置多个字段;每个字段写入都会更新对应 FieldSignal。\n *\n * @param values - 要设置的字段值对象\n *\n * @example\n * ```typescript\n * store.setFieldsValue({ name: 'Bob', age: 30 })\n * ```\n */\n setFieldsValue(values) {\n const paths = collectObjectPathsByLeaf(values);\n batchUpdates(() => {\n for (const path of paths) {\n this.setFieldValue(path, getByPath(values, path));\n }\n });\n }\n /**\n * 获取单个字段值的快照。\n *\n * 使用 signal.peek() 避免收集依赖,返回深拷贝的值。\n *\n * @param path - 字段路径\n *\n * @returns 该字段当前值的深拷贝\n *\n * @example\n * ```typescript\n * const name = store.getFieldSnapshot('name') // => 'John'(深拷贝)\n * ```\n */\n getFieldSnapshot(path) {\n const signal = this.fieldSignals.peek(path);\n return signal == null ? void 0 : signal.value.peek();\n }\n getFieldsSnapshot(paths) {\n const result = {};\n const pathsArr = paths ?? this.fieldSignals.keys();\n for (const path of pathsArr) {\n setByPath(result, path, this.getFieldSnapshot(path));\n }\n return result;\n }\n /**\n * 获取指定字段的初始值。\n *\n * @param path - 字段路径\n * @returns 字段初始值,不存在时返回 undefined\n *\n * @example\n * ```typescript\n * store.getInitialValue('name') // => 'John'\n * ```\n */\n getInitialValue(path) {\n const signal = this.fieldSignals.peek(path);\n if (signal) {\n return signal.initialValue.peek();\n }\n return getByPath(this.initialValues, path);\n }\n getInitialValues(paths) {\n if (paths === void 0) {\n return cloneDeep(this.initialValues);\n }\n const result = {};\n for (const path of paths) {\n setByPath(result, path, getByPath(this.initialValues, path));\n }\n return result;\n }\n /**\n * 设置指定字段的初始值。\n *\n * @param path - 字段路径\n * @param value - 要设置的初始值\n *\n * @example\n * ```typescript\n * store.setInitialValue('name', 'Bob')\n * ```\n */\n setInitialValue(path, value) {\n setByPath(this.initialValues, path, value);\n const signal = this.getOrCreateFieldSignal(path);\n signal.setInitialValue(value);\n signal.setTouched(!isEqual(signal.value.peek(), signal.initialValue.peek()));\n }\n /**\n * 批量设置多个字段的初始值。\n *\n * @param values - 要设置的字段值对象\n *\n * @example\n * ```typescript\n * store.setInitialValues({ name: 'Bob', age: 30 })\n * ```\n */\n setInitialValues(values) {\n const paths = collectObjectPathsByLeaf(values);\n if (!paths.length) return;\n batchUpdates(() => {\n for (const path of paths) {\n const next = getByPath(values, path);\n setByPath(this.initialValues, path, next);\n const signal = this.getOrCreateFieldSignal(path);\n signal.setInitialValue(next);\n signal.setTouched(!isEqual(signal.value.peek(), signal.initialValue.peek()));\n }\n });\n }\n /**\n * 检查指定字段是否被修改过。\n *\n * 通过深比较当前值与初始值判断。\n *\n * @param path - 字段路径\n * @returns 是否与初始值不同\n *\n * @example\n * ```typescript\n * store.setFieldValue('name', 'Jane')\n * store.isFieldTouched('name') // => true\n * ```\n */\n isFieldTouched(path) {\n var _a;\n return ((_a = this.fieldSignals.get(path)) == null ? void 0 : _a.touched.value) ?? false;\n }\n isFieldsTouched(paths) {\n const pathsArr = paths ?? [...this.fieldSignals.keys()];\n return paths === void 0 ? pathsArr.some((path) => this.isFieldTouched(path)) : pathsArr.every((path) => this.isFieldTouched(path));\n }\n /**\n * 获取所有被修改的字段路径。\n *\n * 遍历所有 reactive values,与初始值比较,收集不同的路径。\n *\n * @returns 被修改的字段路径数组\n *\n * @example\n * ```typescript\n * store.getTouchedFields() // => ['name', 'user.age']\n * ```\n */\n getTouchedFields() {\n const touchedFields = [];\n for (const [path, signal] of this.fieldSignals.entries()) {\n if (signal.touched.value) {\n touchedFields.push(path);\n }\n }\n return touchedFields;\n }\n /**\n * 设置字段的修改状态。\n *\n * @param path - 字段路径\n * @param touched - 是否被修改\n *\n * @example\n * ```typescript\n * store.setFieldTouched('name', true)\n * ```\n */\n setFieldTouched(path, touched) {\n this.getOrCreateFieldSignal(path).setTouched(touched);\n }\n /**\n * 批量设置字段的修改状态。\n *\n * @param paths - 要设置 touched 状态的字段路径数组\n * @param touched - 目标 touched 状态,默认 true\n *\n * @example\n * ```typescript\n * store.setFieldsTouched(['name', 'age'], true)\n * ```\n */\n setFieldsTouched(paths, touched = true) {\n batchUpdates(() => {\n for (const path of paths) {\n this.setFieldTouched(path, touched);\n }\n });\n }\n /**\n * 检查单个字段是否处于操作中。\n *\n * 读取对应 reactive value,在 effect 中使用时自动收集依赖。\n *\n * @param path - 字段路径\n * @returns 是否处于操作中\n *\n * @example\n * ```typescript\n * store.isFieldPending('avatar') // => true\n * ```\n */\n isFieldPending(path) {\n var _a;\n return ((_a = this.fieldSignals.get(path)) == null ? void 0 : _a.pending.value) ?? false;\n }\n isFieldsPending(paths) {\n const pathsArr = paths ?? [...this.fieldSignals.keys()];\n return pathsArr.every((path) => this.isFieldPending(path));\n }\n /**\n * 获取所有处于操作中的字段路径。\n *\n * 遍历字段 signal,收集 pending 为 true 的字段路径。\n * 无操作中字段时返回空数组。\n *\n * @returns 操作中的字段路径数组\n *\n * @example\n * ```typescript\n * store.getPendingFields() // => ['avatar', 'attachment']\n * ```\n */\n getPendingFields() {\n const fields = [];\n for (const [field, signal] of this.fieldSignals.entries()) {\n if (signal.pending.value) {\n fields.push({ field, message: signal.pendingMessage.peek() });\n }\n }\n return fields;\n }\n /**\n * 设置字段的操作中状态。\n *\n * 标记字段正在进行异步操作(如文件上传),\n * 校验和提交时会检查是否有字段处于操作中状态。\n * 取消操作中状态时删除对应 key,保持 map 干净。\n *\n * @param path - 字段路径\n * @param pending - 是否处于操作中\n * @param message - 可选的操作中提示信息。\n *\n * @example\n * ```typescript\n * store.setFieldPending('avatar', true) // 上传开始\n * store.setFieldPending('avatar', false) // 上传结束\n * ```\n */\n setFieldPending(path, pending, message) {\n this.getOrCreateFieldSignal(path).setPending(pending, message);\n }\n /**\n * 批量设置字段的操作中状态。\n *\n * @param paths - 要设置 pending 状态的字段路径数组\n * @param pending - 目标 pending 状态,默认 true\n * @param message - 可选的操作中提示信息。\n *\n * @example\n * ```typescript\n * store.setFieldsPending(['name', 'age'], true)\n * ```\n */\n setFieldsPending(paths, pending = true, message) {\n batchUpdates(() => {\n for (const path of paths) {\n this.setFieldPending(path, pending, message);\n }\n });\n }\n /**\n * 重置单个字段到初始值。\n *\n * @param path - 要重置的字段路径。\n *\n * @example\n * ```typescript\n * store.resetField('name')\n * ```\n */\n resetField(path) {\n this.getOrCreateFieldSignal(path).reset();\n }\n /**\n * 批量重置指定字段到初始值。\n *\n * @param paths - 要重置的字段路径数组。\n *\n * @example\n * ```typescript\n * store.resetFields(['name', 'age'])\n * ```\n */\n resetFields(paths) {\n batchUpdates(() => {\n for (const path of paths) {\n this.getOrCreateFieldSignal(path).reset();\n }\n });\n }\n /**\n * 重置表单到初始状态(diff 式更新)。\n *\n * 不传参时恢复到构造时的初始值,传入 values 时同时更新初始值。\n * 对比新旧路径集合:复用已有字段 signal、删除多余字段 signal、\n * 创建新字段 signal。\n *\n * @param values - 可选的新初始值;传入后会同时更新 initialValues baseline。\n *\n * @example\n * ```typescript\n * store.reset() // 恢复到构造时的初始值\n * store.reset({ name: 'New', age: 0 }) // 重置并更新初始值\n * ```\n */\n reset(values) {\n const resetValues = cloneDeep(values ?? this.initialValues);\n const nextPaths = collectObjectPathsByLeaf(resetValues);\n const nextPathSet = new Set(nextPaths);\n batchUpdates(() => {\n for (const path of this.fieldSignals.keys()) {\n if (!nextPathSet.has(path)) {\n this.fieldSignals.delete(path);\n }\n }\n for (const path of nextPaths) {\n const next = getByPath(resetValues, path);\n setByPath(this.initialValues, path, next);\n const signal = this.fieldSignals.peek(path);\n if (signal) {\n signal.setInitialValue(next);\n signal.reset(next);\n } else {\n this.fieldSignals.set(\n path,\n createFieldSignal({\n value: next,\n initialValue: next\n })\n );\n }\n }\n });\n }\n /**\n * 销毁 Store 实例。\n *\n * 清理所有字段 signal,释放资源。\n *\n * @example\n * ```typescript\n * store.destroy()\n * ```\n */\n destroy() {\n this.fieldSignals.clear();\n }\n}\nfunction createStore(options = {}) {\n return new StoreImpl(options);\n}\nconst MAX_DEPTH = 100;\nfunction buildViewSchemas(root) {\n if (!root) {\n return [];\n }\n return buildRuntimeNodeChildren(getChildRuntimeNodes(root), 1);\n}\nfunction buildRuntimeNodeChildren(nodes, depth) {\n if (depth > MAX_DEPTH) {\n throw new RangeError(\n `buildViewSchemas: max depth ${MAX_DEPTH} exceeded at depth ${depth}`\n );\n }\n const results = [];\n for (const node of nodes) {\n const schema = buildRuntimeNodeSchema(node, depth);\n if (schema === null) {\n continue;\n }\n if (Array.isArray(schema)) {\n for (const child of schema) {\n results.push(child);\n }\n continue;\n }\n results.push(schema);\n }\n return results;\n}\nfunction buildRuntimeNodeSchema(node, depth) {\n if (node.disposed.value) {\n return null;\n }\n if (isGroupRuntimeNode(node)) {\n return buildGroupViewSchema(node, depth);\n }\n if (isDependencyRuntimeNode(node)) {\n return buildDependencyRuntimeNode(node, depth);\n }\n if (isFieldRuntimeNode(node)) {\n return buildFieldViewSchema(node);\n }\n return null;\n}\nfunction buildFieldViewSchema(node) {\n const descriptor = node.descriptor;\n const model = node.fieldModel;\n if (!model) {\n console.warn(\n `[buildViewSchemas] skipping field node \"${node.key}\": no FieldModel resource`\n );\n return null;\n }\n if ((descriptor == null ? void 0 : descriptor.type) !== \"field\") {\n return null;\n }\n const schema = descriptor.schema;\n const snapshot = model.snapshot.value;\n return {\n ...schema,\n key: node.key,\n visible: snapshot.visible,\n label: snapshot.label,\n readonly: snapshot.readonly,\n disabled: snapshot.disabled,\n required: snapshot.required,\n placeholder: sanitizePlaceholder(snapshot.placeholder),\n componentProps: sanitizeComponentProps(snapshot.componentProps ?? {}),\n rules: snapshot.rules,\n validationTrigger: schema.validationTrigger,\n debug: buildDebugMeta(node)\n };\n}\nfunction buildGroupViewSchema(node, depth) {\n const children = buildRuntimeNodeChildren(\n getChildRuntimeNodes(node),\n depth + 1\n );\n const descriptor = node.descriptor;\n return {\n ...descriptor.schema,\n key: node.key,\n children,\n debug: buildDebugMeta(node)\n };\n}\nfunction buildDependencyRuntimeNode(node, depth) {\n return buildRuntimeNodeChildren(getChildRuntimeNodes(node), depth + 1);\n}\nfunction sanitizePlaceholder(value) {\n return value.length > 1e3 ? value.slice(0, 1e3) : value;\n}\nfunction sanitizeComponentProps(props, depth = 0) {\n if (depth > 10) {\n return {};\n }\n const result = {};\n for (const key of Object.keys(props)) {\n if (!isValidPropKey(key)) {\n continue;\n }\n const value = props[key];\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n result[key] = sanitizeComponentProps(value, depth + 1);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\nfunction isValidPropKey(key) {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return true;\n }\n if (/^[a-zA-Z0-9_-]+$/.test(key)) {\n return true;\n }\n return false;\n}\nfunction buildDebugMeta(node) {\n return {\n runtimeNodeId: node.id,\n runtimeNodeType: node.type,\n hasFieldModel: node.type === \"field\" && node.fieldModel !== void 0,\n hasDependencySlot: node.type === \"dependency\" && node.dependencySlot !== void 0\n };\n}\nfunction subscribeViewSchemas(root, revision, onChange) {\n let rootDisposed = false;\n const rootScope = root.scope;\n const disposeHandle = rootScope.add(() => {\n rootDisposed = true;\n });\n const disposeEffect = createDebouncedSignalEffect(\n () => {\n void revision.revision.value;\n return rootDisposed ? [] : buildViewSchemas(root);\n },\n (viewSchemas) => {\n try {\n onChange(viewSchemas);\n } catch (error) {\n console.error(\"[subscribeViewSchemas] onChange error:\", error);\n }\n },\n 16,\n { immediate: true, edges: [\"leading\", \"trailing\"] }\n );\n const unsubscribe = () => {\n disposeEffect();\n disposeHandle.dispose();\n rootDisposed = false;\n };\n return unsubscribe;\n}\nfunction createViewRevision() {\n const revision = createSignal(0);\n const bump = () => {\n revision.value += 1;\n };\n return {\n revision,\n bump\n };\n}\nclass CreateForm {\n constructor(options = {}) {\n /** 表单内部上下文,集中持有全局配置和运行时服务 */\n __publicField(this, \"context\");\n /** 用户传入的表单级回调集合 */\n __publicField(this, \"callbacks\");\n /** 表单状态存储,管理字段值、初始值和订阅 */\n __publicField(this, \"store\");\n /** 渲染器注册表,解析 schema.componentType 到具体渲染实现 */\n __publicField(this, \"rendererRegistry\");\n /** 校验规则注册表,解析字符串规则名称到 StandardSchema 或规则工厂 */\n __publicField(this, \"validatorRegistry\");\n /** 字段校验器,维护规则、错误状态和校验执行流程 */\n __publicField(this, \"validator\");\n /** Runtime node 的透明根节点,承载所有编译后的表单描述符节点 */\n __publicField(this, \"root\");\n /** 运行时异步调度器,用于追踪 dependency renderer 和字段动态依赖 */\n __publicField(this, \"scheduler\");\n /** 视图结构版本号,node 结构变化时推进以触发 ViewSchemas 重新构建 */\n __publicField(this, \"viewRevision\");\n /** descriptor 到 RuntimeNode tree 的协调器,负责创建、复用和销毁节点 */\n __publicField(this, \"reconciler\");\n /** 单个 RuntimeNode 生命周期执行器,负责挂载和释放运行期资源 */\n __publicField(this, \"runtimeNodeManager\");\n /** 字段 RuntimeNode 到字段模型的注册表,供表单 API 和视图投影读取 */\n __publicField(this, \"fieldRegistry\");\n /** 表单级资源作用域,统一管理回调 effect 等非 RuntimeNode 资源 */\n __publicField(this, \"scope\", createScope());\n /** root schema 的统一数据源 */\n __publicField(this, \"schemas\");\n /** 标记表单实例是否已销毁,保证 dispose 幂等 */\n __publicField(this, \"disposed\", false);\n /** node 生命周期事件总线,连接 reconciler 与字段资源挂载流程 */\n __publicField(this, \"lifecycleBus\");\n /**\n * 表单实例接口\n *\n * 定义表单的所有操作方法,是 useForm 返回值的基础接口。\n * SchemxInstance 类实现此接口,提供完整的表单操作能力。\n */\n __publicField(this, \"getFormInstance\", () => {\n return {\n setFieldValue: this.store.setFieldValue.bind(this.store),\n setFieldsValue: this.store.setFieldsValue.bind(this.store),\n getFieldValue: this.store.getFieldValue.bind(this.store),\n getFieldsValue: this.store.getFieldsValue.bind(this.store),\n getFieldSnapshot: this.store.getFieldSnapshot.bind(this.store),\n getFieldsSnapshot: this.store.getFieldsSnapshot.bind(this.store),\n getInitialValue: this.store.getInitialValue.bind(this.store),\n getInitialValues: this.store.getInitialValues.bind(this.store),\n setInitialValues: this.store.setInitialValues.bind(this.store),\n isFieldTouched: this.store.isFieldTouched.bind(this.store),\n setFieldTouched: this.store.setFieldTouched.bind(this.store),\n getTouchedFields: this.store.getTouchedFields.bind(this.store),\n setFieldPending: this.store.setFieldPending.bind(this.store),\n isFieldPending: this.store.isFieldPending.bind(this.store),\n getPendingFields: this.store.getPendingFields.bind(this.store),\n validateField: this.validateField.bind(this),\n validate: this.validate.bind(this),\n getFieldError: this.validator.getFieldError.bind(this.validator),\n setFieldError: this.validator.setFieldError.bind(this.validator),\n resetFields: this.store.resetFields.bind(this.store),\n reset: this.reset.bind(this),\n submit: this.submit.bind(this),\n registerRules: this.register.bind(this),\n unregisterRules: this.validator.unregister.bind(this.validator),\n effect: this.effect.bind(this),\n batch: this.batch.bind(this),\n setSchemas: this.setSchemas.bind(this),\n updateSchemas: this.updateSchemas.bind(this),\n updateDefaultProps: this.updateDefaultProps.bind(this),\n getViewRevision: () => this.viewRevision.revision.value,\n getViewSchemas: this.getViewSchemas.bind(this),\n subscribeViewSchemas: this.subscribeViewSchemas.bind(this),\n waitForDependencies: this.waitForIdle.bind(this),\n getRenderer: this.rendererRegistry.getRenderer.bind(this.rendererRegistry),\n registerRenderer: this.rendererRegistry.register.bind(this.rendererRegistry),\n hasRenderer: this.rendererRegistry.hasRenderer.bind(this.rendererRegistry),\n getValidator: this.validatorRegistry.get.bind(this.validatorRegistry),\n registerValidator: this.validatorRegistry.register.bind(this.validatorRegistry),\n hasValidator: this.validatorRegistry.has.bind(this.validatorRegistry),\n destroy: this.destroy.bind(this)\n };\n });\n /**\n * 表单 API,提供与表单交互的方法。\n *\n * 传递给动态渲染器,允许程序化操作表单。\n */\n __publicField(this, \"getFormApi\", () => {\n return {\n setValue: this.store.setFieldValue.bind(this.store),\n setValues: this.store.setFieldsValue.bind(this.store),\n getValue: this.store.getFieldValue.bind(this.store),\n getValues: this.store.getFieldsValue.bind(this.store),\n getSnapshots: this.store.getFieldsSnapshot.bind(this.store),\n setPending: this.store.setFieldPending.bind(this.store),\n isPending: this.store.isFieldPending.bind(this.store),\n setTouched: this.store.setFieldTouched.bind(this.store),\n isTouched: this.store.isFieldTouched.bind(this.store),\n getError: this.validator.getFieldError.bind(this.validator),\n setError: this.validator.setFieldError.bind(this.validator),\n resetFields: this.store.resetFields.bind(this.store),\n reset: this.reset.bind(this),\n validateField: this.validateField.bind(this),\n validate: this.validate.bind(this)\n };\n });\n /**\n * 校验所有已注册字段\n *\n * 校验前检查是否有字段处于操作中状态,有则直接返回失败结果。\n */\n __publicField(this, \"validate\", withLock(async () => {\n const pendingFields = this.store.getPendingFields();\n if (pendingFields.length > 0) {\n const defaultMessage = `存在正在操作中的字段: ${pendingFields.map((i2) => i2.field).join(\", \")},请等待完成后再提交`;\n console.warn(`[schemx] ${defaultMessage}`);\n return {\n ok: false,\n error: {\n errors: pendingFields.map(({ field, message }) => {\n const _message = message.length ? message : [\"字段正在处理中,请稍后重试\"];\n this.validator.setFieldError(field, _message);\n return {\n field,\n message: _message\n };\n }),\n values: this.store.getFieldsSnapshot()\n }\n };\n }\n const result = await this.validator.validate(this.store.getFieldsValue());\n return result;\n }));\n /**\n * 提交表单\n */\n __publicField(this, \"submit\", withLock(async () => {\n var _a, _b, _c, _d;\n const depsReady = await this.waitForIdle();\n if (!depsReady) {\n return;\n }\n const result = await this.validate();\n if (result.ok) {\n await ((_b = (_a = this.callbacks).onFinish) == null ? void 0 : _b.call(_a, result.values));\n } else {\n (_d = (_c = this.callbacks).onFinishFailed) == null ? void 0 : _d.call(_c, result.error);\n }\n }));\n /**\n * 唯一子节点提交边界。\n *\n * 所有结构输入先编译成 descriptor,再经由这里提交到某个 parent RuntimeNode。\n * Reconciler 只负责 node 结构;public commit 完成后由这里推进一次 viewRevision。\n */\n __publicField(this, \"commitChildren\", (parentNode, descriptors) => {\n const changed = this.reconciler.reconcileChildren(parentNode, descriptors);\n if (changed) {\n this.viewRevision.bump();\n }\n });\n var _a, _b;\n const {\n schemas: schemasInput,\n initialValues = {},\n modelValue,\n rendererRegistry,\n defaultRendererType,\n validatorRegistry,\n ...restOptions\n } = options;\n this.callbacks = {\n onValuesChange: options.onValuesChange,\n onFinish: options.onFinish,\n onFinishFailed: options.onFinishFailed,\n onFieldsChange: options.onFieldsChange\n };\n this.rendererRegistry = rendererRegistry ?? createRendererRegistry(defaultRendererType);\n this.validatorRegistry = validatorRegistry ?? createValidatorsRegistry();\n this.validator = createValidator();\n this.store = createStore({\n initialValues: { ...initialValues, ...modelValue ?? {} }\n });\n this.validatorRegistry.registerAll({\n required: createRequiredRule,\n selectRequired: createSelectRequiredRule,\n uploadRequired: createUploadRequiredRule\n });\n this.lifecycleBus = createLifecycleBus();\n this.scheduler = createScheduler();\n this.viewRevision = createViewRevision();\n this.fieldRegistry = createFieldRegistry();\n this.context = {\n defaultProps: pick(restOptions, defaultConfigKey),\n instance: this.getFormInstance(),\n formApi: this.getFormApi(),\n scheduler: this.scheduler,\n lifecycleBus: this.lifecycleBus,\n fieldRegistry: this.fieldRegistry,\n commitChildren: this.commitChildren\n };\n this.runtimeNodeManager = createRuntimeNodeManager(this.context);\n this.reconciler = createReconciler(this.runtimeNodeManager);\n this.root = this.runtimeNodeManager.createRoot();\n if (options.lifecycleHooks) {\n this.lifecycleBus.on(options.lifecycleHooks);\n }\n this.schemas = isSchemxSchemas(schemasInput) ? schemasInput : createSchemas(schemasInput ?? []);\n this.applySchemas(this.schemas.peek());\n const schemasDisposer = this.schemas.subscribe((nextSchemas) => {\n this.applySchemas(nextSchemas);\n });\n this.scope.add(schemasDisposer);\n if (((_a = this.callbacks) == null ? void 0 : _a.onValuesChange) || ((_b = this.callbacks) == null ? void 0 : _b.onFieldsChange)) {\n let prevSnapshot = this.store.getFieldsSnapshot();\n const valuesChangeDisposer = createSignalEffect(() => {\n var _a2, _b2, _c, _d;\n const latestValues = this.store.getFieldsValue();\n const latestSnapshot = this.store.getFieldsSnapshot();\n const changedValues = diff(latestSnapshot, prevSnapshot);\n const changedPaths = collectObjectPathsByLeaf(changedValues);\n if (changedPaths.length > 0) {\n (_b2 = (_a2 = this.callbacks).onValuesChange) == null ? void 0 : _b2.call(_a2, changedValues, latestSnapshot);\n (_d = (_c = this.callbacks).onFieldsChange) == null ? void 0 : _d.call(\n _c,\n changedPaths,\n collectObjectPathsByLeaf(latestValues)\n );\n }\n prevSnapshot = latestSnapshot;\n });\n this.scope.add(valuesChangeDisposer);\n }\n }\n /**\n * 注册字段校验规则\n */\n register(path, rules, defaultMessage) {\n const resolvedRules = [];\n const node = findFieldRuntimeNode(this.root, path);\n const schema = node == null ? void 0 : node.descriptor.schema;\n this.validator.unregister(path);\n const schemaWithRules = {\n ...schema,\n rules\n };\n resolvedRules.push(\n ...this.validatorRegistry.resolveValidatorsBySchema(schemaWithRules)\n );\n if (resolvedRules.length > 0) {\n this.validator.register(path, resolvedRules, defaultMessage);\n }\n }\n /**\n * 校验指定字段\n */\n async validateField(name) {\n const result = await this.validator.validateField(name, this.store.getFieldsValue());\n return result;\n }\n /**\n * 重置整个表单到初始值\n */\n reset() {\n this.store.reset();\n this.validator.reset();\n }\n /**\n * 创建 reactive effect。\n *\n * 回调内调用 getFieldValue / getFieldError 时自动追踪依赖,\n * 跨越 store 和 validator 的 reactive maps。\n * dispose 函数由 createForm 层面统一管理,destroy 时清理。\n */\n effect(fn) {\n const dispose = createSignalEffect(fn);\n const handle = this.scope.add(dispose);\n return () => {\n handle.dispose();\n };\n }\n /**\n * 批量更新,合并多次 reactive 写入。\n *\n * 将多次 reactive 写入合并为一次 effect 触发,\n * 跨越 store 和 validator 的 reactive maps。\n */\n batch(fn) {\n batchUpdates(fn);\n }\n /**\n * 替换 root schemas。\n */\n setSchemas(schemas) {\n if (this.disposed) {\n return;\n }\n this.schemas.set(schemas);\n }\n /**\n * 基于当前 root schemas 派生下一版 schemas。\n */\n updateSchemas(updater) {\n if (this.disposed) {\n return;\n }\n this.schemas.update(updater);\n }\n /**\n * 更新表单默认配置。\n *\n * 合并传入属性到当前 defaultProps,然后重新编译根 schemas 并 reconcile。\n * 字段级属性未设置时会回退到这些默认值。\n */\n updateDefaultProps(partial) {\n if (this.disposed) {\n return;\n }\n Object.assign(this.context.defaultProps, pick(partial, defaultConfigKey));\n this.applySchemas(this.schemas.peek());\n }\n /**\n * 将 schema source 的当前值提交到 runtime node。\n */\n applySchemas(schemas) {\n if (this.disposed) {\n return;\n }\n const previousRevision = this.viewRevision.revision.value;\n const descriptors = compileToDescriptors([...schemas], this.context.defaultProps);\n this.commitChildren(this.root, descriptors);\n if (this.viewRevision.revision.value === previousRevision) {\n this.viewRevision.bump();\n }\n }\n /**\n * 销毁表单实例\n *\n * 清除所有订阅回调和 effect,释放资源。通常在组件卸载时调用。\n */\n destroy() {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.scope.dispose();\n this.runtimeNodeManager.disposeTree(this.root);\n this.scheduler.dispose();\n this.store.destroy();\n }\n /**\n * 获取当前 ViewSchemas。\n */\n getViewSchemas() {\n return buildViewSchemas(this.root);\n }\n /**\n * 订阅 ViewSchemas 变化。\n */\n subscribeViewSchemas(callback) {\n return subscribeViewSchemas(this.root, this.viewRevision, callback);\n }\n /**\n * 等待内部异步任务完成。\n */\n waitForIdle(timeout = 1e4) {\n return this.scheduler.whenIdle(timeout);\n }\n}\nfunction createForm(options = {}) {\n return new CreateForm(options).getFormInstance();\n}\nfunction createField(form, name) {\n const getValue = () => form.getFieldValue(name);\n const setValue = (value) => {\n form.setFieldValue(name, value);\n };\n const getInitialValue = () => {\n return form.getInitialValue(name);\n };\n const setInitialValue = (value) => {\n const result = {};\n setByPath(result, name, value);\n form.setInitialValues(result);\n };\n const getValues = () => form.getFieldsValue();\n const getSnapshot = () => form.getFieldsSnapshot();\n const validate = () => {\n return form.validateField(name);\n };\n const getError = () => form.getFieldError(name);\n const setError = (errors) => {\n form.setFieldError(name, errors);\n };\n const clearError = () => {\n form.setFieldError(name, []);\n };\n const registerRules = (rules, defaultMessage) => {\n form.registerRules(name, rules, defaultMessage);\n };\n const unregisterRules = () => {\n form.unregisterRules(name);\n };\n const isTouched = () => form.isFieldTouched(name) ?? false;\n const reset = () => {\n form.resetFields([name]);\n };\n const setPending = (pending, message) => {\n form.setFieldPending(name, pending, message);\n };\n const isPending = () => form.isFieldPending(name) ?? false;\n const effect = (fn) => {\n return form.effect(fn);\n };\n return {\n getValue,\n setValue,\n getInitialValue,\n setInitialValue,\n getValues,\n getSnapshot,\n validate,\n getError,\n setError,\n clearError,\n registerRules,\n unregisterRules,\n isTouched,\n reset,\n setPending,\n isPending,\n effect\n };\n}\nfunction createEffect(callback) {\n let cleanup;\n let disposed = false;\n const dispose = createSignalEffect(() => {\n cleanup == null ? void 0 : cleanup();\n cleanup = void 0;\n const result = callback();\n if (typeof result === \"function\") {\n cleanup = result;\n }\n });\n const api = () => {\n if (disposed) return;\n disposed = true;\n dispose();\n cleanup == null ? void 0 : cleanup();\n cleanup = void 0;\n };\n return api;\n}\nconst createWatchField = (form, name, callback, options) => {\n let prev = form.getFieldSnapshot(name);\n let isFirst = true;\n const dispose = form.effect(() => {\n const current = form.getFieldValue(name);\n const latestSnapshot = form.getFieldsSnapshot();\n if (isFirst) {\n isFirst = false;\n if (options.immediate) {\n callback({ value: current, prevValue: void 0 }, latestSnapshot);\n }\n prev = current;\n return;\n }\n if (options.inequality && isEqual(current, prev)) return;\n callback({ value: current, prevValue: prev }, latestSnapshot);\n prev = current;\n });\n return dispose;\n};\nconst createWatchFields = (form, names, callback, options) => {\n let prevValues = form.getFieldsSnapshot(names);\n let isFirst = true;\n const dispose = form.effect(() => {\n const currentValues = form.getFieldsValue(names);\n const latestSnapshot = form.getFieldsSnapshot();\n if (isFirst) {\n isFirst = false;\n if (options.immediate) {\n callback(\n { changedPaths: names, changedValues: currentValues, prevValues: {} },\n latestSnapshot\n );\n }\n prevValues = { ...currentValues };\n return;\n }\n if (options.inequality && isEqual(currentValues, prevValues)) return;\n const changedValues = diff(currentValues, prevValues);\n const changedPaths = collectObjectPathsByLeaf(changedValues);\n callback({ changedPaths, changedValues, prevValues }, latestSnapshot);\n prevValues = { ...currentValues };\n });\n return dispose;\n};\nconst createWatchAll = (form, callback, options) => {\n let isFirst = true;\n let prevValues = form.getFieldsSnapshot();\n const dispose = form.effect(() => {\n const latestSnapshot = form.getFieldsSnapshot();\n if (isFirst) {\n isFirst = false;\n if (options.immediate) {\n callback(\n {\n changedPaths: [],\n changedValues: latestSnapshot,\n prevValues: {}\n },\n latestSnapshot\n );\n }\n prevValues = { ...latestSnapshot };\n return;\n }\n if (options.inequality && isEqual(latestSnapshot, prevValues)) return;\n const changedValues = diff(latestSnapshot, prevValues);\n const changedPaths = collectObjectPathsByLeaf(changedValues);\n callback({ changedPaths, changedValues, prevValues }, latestSnapshot);\n prevValues = { ...latestSnapshot };\n });\n return dispose;\n};\nfunction createWatch(form, nameOrNamesOrCallback, callbackOrOptions, maybeOptions) {\n if (typeof nameOrNamesOrCallback === \"function\") {\n return createWatchAll(\n form,\n nameOrNamesOrCallback,\n callbackOrOptions || {}\n );\n }\n if (typeof nameOrNamesOrCallback === \"string\" || typeof nameOrNamesOrCallback === \"number\") {\n return createWatchField(\n form,\n nameOrNamesOrCallback,\n callbackOrOptions,\n maybeOptions || {}\n );\n }\n return createWatchFields(\n form,\n nameOrNamesOrCallback,\n callbackOrOptions,\n maybeOptions || {}\n );\n}\nexport {\n collectObjectPathsByLeaf,\n createEffect,\n createField,\n createForm,\n createForm as createFormInstance,\n createLifecycle,\n createLifecycleBus,\n createRendererRegistry,\n createSchemas,\n createValidator,\n createValidatorsRegistry,\n createWatch,\n createWatchAll,\n createWatchField,\n createWatchFields,\n getByPath,\n isBaseResolvedSchema,\n isBaseSchema,\n isDependencySchema,\n isGroupResolvedSchema,\n isGroupSchema,\n isSchemxSchemas,\n setByPath\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * 全局渲染器注册实例\n *\n * 模块级单例,由 ES Module 保证全局唯一。\n * vant 等 UI 适配层通过 import 后调用 registerAll 注册渲染器,\n * useForm 内部自动使用此实例作为 fallback。\n *\n * @module utils/rendererProvider\n */\n\nimport {\n createRendererRegistry,\n type RendererRegistryType,\n type SchemxRendererKey,\n} from \"@schemx/core\"\n\n/**\n * 全局渲染器注册实例\n *\n * @example\n * ```ts\n * // UI 适配层注册渲染器\n * import { rendererRegistry } from '@schemx/vue'\n * rendererRegistry.registerAll({ input: InputRenderer, ... })\n *\n * // useForm 内部自动使用\n * // props 传入的 rendererRegistry 优先级更高\n * ```\n */\nexport const rendererRegistry: RendererRegistryType<SchemxRendererKey> =\n createRendererRegistry<SchemxRendererKey>(\"input\")\n","/**\n * 全局校验规则注册实例\n *\n * 模块级单例,由 ES Module 保证全局唯一。\n * UI 适配层通过 import 后调用 register/registerAll 注册自定义规则,\n * useForm 内部自动使用此实例作为 fallback。\n *\n * @module utils/rulesProvider\n */\n\nimport { createValidatorsRegistry, type ValidatorsRegistryType } from \"@schemx/core\"\n\n/**\n * 全局校验规则注册实例\n *\n * @example\n * ```ts\n * // 注册自定义规则\n * import { validatorRegistry } from '@schemx/vue'\n * validatorRegistry.register('phone', phoneRule)\n *\n * // useForm 内部自动使用\n * // props 传入的 validatorRegistry 优先级更高\n * ```\n */\nexport const validatorRegistry: ValidatorsRegistryType = createValidatorsRegistry()\n","/**\n * SchemxInstance - 表单实例核心类\n *\n * 组合 Store、Validator,提供统一的表单操作接口。\n * 实现 SchemxInstance 接口,作为 useForm 的底层实现。\n *\n * @module hooks/useForm\n *\n * @example\n * ```typescript\n * import { useForm } from './useForm'\n *\n * // 在 Vue 组件中使用\n * const form = useForm({\n * schemas: [...],\n * initialValues: { name: '', age: 0 },\n * onFinish: (values) => console.log(values),\n * })\n *\n * // 或直接创建实例(非组件场景)\n * const instance = createForm({ initialValues: { name: '' } })\n * ```\n */\nimport { computed, inject, onUnmounted, provide } from \"vue\"\n\nimport { createForm } from \"@schemx/core\"\n\nimport { rendererRegistry as globalRendererRegistry } from \"../utils/rendererProvider\"\nimport { validatorRegistry as globalRulesRegistry } from \"../utils/rulesProvider\"\n\nimport type { CreateFormOptions, NamePath, SchemxInstance, Values } from \"@schemx/core\"\n\n/** SchemxInstance 在 Vue provide/inject 中的注入 key */\nexport const SCHEMX_INSTANCE_KEY = Symbol(\"SCHEMX_INSTANCE\")\n/** @deprecated 请使用 SCHEMX_INSTANCE_KEY。保留给旧测试和旧适配代码兼容。 */\nexport const FORM_INSTANCE_KEY = SCHEMX_INSTANCE_KEY\n\n/**\n * useForm 配置选项\n *\n * 扩展 core 层的 CreateFormOptions,增加 Vue 层特有的 request 配置。\n *\n * @typeParam TValues - 表单值类型\n */\nexport interface UseFormOptions<TValues extends Values> extends CreateFormOptions<\n TValues,\n NamePath<TValues>\n> {}\n\n/**\n * 表单组合式函数\n *\n * 创建 SchemxInstance 并通过 Vue provide 注入到子组件树中,\n * 组件卸载时自动销毁实例。\n *\n * @typeParam TValues - 表单值类型\n *\n * @param options - 表单配置选项\n * @returns 表单实例(SchemxInstance 接口)\n *\n * @example\n * ```typescript\n * // 在 setup 中使用\n * const form = useForm({\n * initialValues: { name: '', email: '' },\n * onFinish: async (values) => {\n * await api.submit(values)\n * },\n * })\n *\n * form.setFieldValue('name', 'John')\n * ```\n */\nexport function useForm<TValues extends Values = Values>(\n options: UseFormOptions<TValues>\n): SchemxInstance<TValues> {\n const { ...formOptions } = options\n\n const mergedOptions: CreateFormOptions<TValues> = {\n ...formOptions,\n rendererRegistry: formOptions.rendererRegistry ?? globalRendererRegistry,\n validatorRegistry: formOptions.validatorRegistry ?? globalRulesRegistry,\n }\n\n const instance = computed(() => createForm<TValues>(mergedOptions))\n\n provide<SchemxInstance<TValues>>(SCHEMX_INSTANCE_KEY, instance.value)\n\n onUnmounted(() => {\n instance.value.destroy()\n })\n\n return instance.value\n}\n\n/**\n * 获取表单实例\n *\n * 在子组件中获取 useForm 创建的 SchemxInstance,\n * 可用于读写字段值、校验、订阅等操作。\n *\n * @typeParam TValues - 表单值类型\n * @returns 表单实例\n *\n * @throws Error 如果不在 schemx 提供的上下文中调用\n *\n * @example\n * ```ts\n * const form = useFormInstance()\n * form.setFieldValue('name', 'hello')\n * ```\n */\nexport function useFormInstance<\n TValues extends Values = Values,\n>(): SchemxInstance<TValues> {\n const instance = inject<SchemxInstance<TValues>>(SCHEMX_INSTANCE_KEY)\n\n if (!instance) {\n throw new Error(\"useFormInstance must be used within a Form\")\n }\n\n return instance\n}\n","/**\n * useField - 字段控制 Hook\n *\n * 基于 core 层的 {@link createField} 实现,\n * 通过 subscribe 回调将 Signal 变化桥接到 Vue 响应式系统。\n *\n * @module hooks/useField\n *\n * @remarks\n * core 层的 createField 封装了所有框架无关的字段操作逻辑,\n * useField 只负责:\n * 1. 从 Vue context 中获取 form 实例\n * 2. 创建 shallowRef 容器\n * 3. 通过 subscribe 将 Signal 变化同步到 shallowRef\n * 4. 包装 computed 只读状态\n * 5. 管理 onUnmounted 生命周期清理\n */\n\nimport { computed, onUnmounted, shallowRef } from \"vue\"\n\nimport { createField } from \"@schemx/core\"\n\nimport { FieldInstance } from \"../types/field\"\n\nimport { useFormInstance } from \"./useForm\"\n\nimport type { NamePath, SchemxInstance, Values } from \"@schemx/core\"\n\n/**\n * useField 针对 (form, name) 的缓存条目\n *\n * 通过引用计数确保同一 (form, name) 的多次 useField 调用\n * 共享同一份 shallowRef 和 effect 桥接,避免重复订阅。\n *\n * @typeParam TValues - 表单值类型\n */\ninterface FieldHookCacheEntry<TValues extends Values = Values> {\n /** 当前活跃的引用计数,归零时释放 dispose 并从缓存中移除 */\n refCount: number\n /** 共享的字段控制器实例(含 Vue Ref 包装) */\n result: FieldInstance<TValues>\n /** 取消 Signal effect 订阅并清理资源 */\n dispose: () => void\n}\n\n/** 模块级缓存:form 实例 → 字段名 → 缓存条目 */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst fieldHookCache = new WeakMap<any, Map<string, FieldHookCacheEntry>>()\n\n/**\n * 创建字段 hook 的响应式状态\n *\n * 从 createField 生成 FieldInstance,创建 shallowRef 容器\n * 并通过 field.effect 将 Signal 变化桥接到 Vue 响应式系统。\n */\nfunction createFieldHook<TValues extends Values = Values>(\n form: SchemxInstance<TValues>,\n name: NamePath<TValues>\n) {\n const field = createField<TValues>(form, name)\n\n const fieldValue = shallowRef(field.getValue())\n const fieldError = shallowRef(field.getError())\n const fieldPending = shallowRef(field.isPending())\n\n const dispose = field.effect(() => {\n fieldValue.value = field.getValue()\n fieldError.value = field.getError()\n\n fieldPending.value = field.isPending()\n })\n\n const error = computed(() => fieldError.value)\n\n const dirty = computed(() => {\n void fieldValue.value\n\n return field.isTouched()\n })\n\n const pending = computed(() => fieldPending.value)\n\n const result = {\n value: fieldValue,\n error,\n dirty,\n pending,\n ...field,\n getValue: () => fieldValue.value,\n }\n\n return { result, dispose }\n}\n\n/**\n * 获取单个字段的控制能力\n *\n * 通过 core 层 createField 提供字段操作方法,\n * 通过 subscribe 回调桥接 Signal 变化到 Vue shallowRef。\n *\n * @param name - 字段名(支持嵌套路径,如 'user.address.city')\n * @returns 字段状态和操作方法\n *\n * @example\n * ```typescript\n * const field = useField('username')\n *\n * // 响应式值(在 computed/watchEffect/template 中自动追踪)\n * field.getValue()\n *\n * // 响应式错误\n * field.error.value // string[] | undefined\n *\n * // 响应式脏状态\n * field.dirty.value // boolean\n *\n * // 响应式操作中状态\n * field.pending.value // boolean\n *\n * // 写入值\n * field.setValue('new value')\n *\n * // 校验\n * const result = await field.validate()\n * ```\n */\nexport const useField = <TValues extends Values = Values>(\n name: NamePath<TValues>\n): FieldInstance<TValues> => {\n const form = useFormInstance<TValues>()\n\n const key = name\n\n let formCache = fieldHookCache.get(form)\n\n if (!formCache) {\n formCache = new Map()\n fieldHookCache.set(form, formCache)\n }\n\n const cachedEntry = formCache.get(key) as FieldHookCacheEntry<TValues> | undefined\n\n let activeEntry: FieldHookCacheEntry<TValues>\n\n if (cachedEntry) {\n cachedEntry.refCount++\n activeEntry = cachedEntry\n } else {\n const { result, dispose } = createFieldHook<TValues>(form, name)\n\n activeEntry = {\n refCount: 1,\n result,\n dispose,\n }\n\n formCache.set(key, activeEntry as any)\n }\n\n onUnmounted(() => {\n if (--activeEntry.refCount <= 0) {\n activeEntry.dispose()\n formCache.delete(key)\n }\n })\n\n return activeEntry.result\n}\n\nexport default useField\n","/**\n * useWatch - 监听字段变化(Vue 组合式 API 版本)\n *\n * 基于 core 层的 {@link createWatch} 实现,\n * 自动通过 `useFormInstance` 获取 formContext,\n * 并在 `onUnmounted` 时自动取消监听,无需手动管理生命周期。\n *\n * 提供三种监听模式:\n * - 全局监听:`useWatch(callback, options?)` — 监听表单中任意字段变化\n * - 单字段监听:`useWatch(name, callback, options?)` — 监听指定字段变化\n * - 多字段监听:`useWatch(names, callback, options?)` — 监听一组字段变化\n *\n * 同时提供语义化的便捷方法:\n * - {@link useWatchField} — 单字段监听\n * - {@link useWatchFields} — 多字段监听\n * - {@link useWatchAll} — 全局监听\n *\n * @module hooks/useWatch\n *\n * @example\n * ```ts\n * // 全局监听\n * useWatch((snapshot) => {\n * console.log('form changed:', snapshot)\n * })\n *\n * // 单字段监听\n * useWatch('username', (current, prev) => {\n * console.log('username changed:', prev, '->', current)\n * }, { immediate: true })\n *\n * // 多字段监听\n * useWatch(['firstName', 'lastName'], (currentValues, prevValues) => {\n * console.log('name changed:', currentValues)\n * }, { inequality: true })\n * ```\n */\n\nimport { onUnmounted } from \"vue\"\n\nimport { createWatch } from \"@schemx/core\"\n\nimport { useFormInstance } from \"./useForm\"\n\nimport type { NamePath, Values } from \"@schemx/core\"\nimport type {\n CreateWatchOptions,\n WatchAllCallback,\n WatchFieldCallback,\n WatchFieldsCallback,\n} from \"@schemx/core\"\n\n/**\n * 监听所有字段变化\n *\n * @param callback - 全局变化回调\n * @param options - 监听选项\n * @returns 取消监听函数\n */\nexport function useWatch<T extends Values>(\n callback: WatchAllCallback<T>,\n options?: CreateWatchOptions\n): () => void\n/**\n * 监听单个字段变化\n *\n * @param name - 字段路径\n * @param callback - 单字段变化回调\n * @param options - 监听选项\n * @returns 取消监听函数\n */\nexport function useWatch<T extends Values>(\n name: NamePath<T>,\n callback: WatchFieldCallback<T>,\n options?: CreateWatchOptions\n): () => void\n/**\n * 监听多个字段变化\n *\n * @param names - 字段路径数组\n * @param callback - 多字段变化回调\n * @param options - 监听选项\n * @returns 取消监听函数\n */\nexport function useWatch<T extends Values>(\n names: NamePath<T>[],\n callback: WatchFieldsCallback<T>,\n options?: CreateWatchOptions\n): () => void\n/**\n * useWatch 实现 — 获取 form 实例后委托给 core 层的 createWatch\n */\nexport function useWatch<T extends Values>(\n nameOrNamesOrCallback: NamePath<T> | NamePath<T>[] | WatchAllCallback<T>,\n callbackOrOptions?: WatchFieldCallback<T> | WatchFieldsCallback<T> | CreateWatchOptions,\n maybeOptions?: CreateWatchOptions\n): () => void {\n const form = useFormInstance<T>()\n\n const dispose = (createWatch as any)(\n form,\n nameOrNamesOrCallback,\n callbackOrOptions,\n maybeOptions\n )\n\n onUnmounted(dispose)\n\n return dispose\n}\n\n/**\n * 监听单个字段变化的便捷方法\n *\n * 等价于 `useWatch(name, callback, options)`,语义更明确。\n * 自动绑定 formContext 并在组件卸载时取消监听。\n *\n * @param name - 要监听的字段路径\n * @param callback - 字段变化回调\n * @param options - 可选配置\n * @returns 取消监听函数\n */\nexport function useWatchField<T extends Values = Values>(\n name: NamePath<T>,\n callback: WatchFieldCallback<T>,\n options?: CreateWatchOptions\n): () => void {\n return useWatch<T>(name, callback, options)\n}\n\n/**\n * 监听多个字段变化的便捷方法\n *\n * 等价于 `useWatch(names, callback, options)`,语义更明确。\n * 自动绑定 formContext 并在组件卸载时取消监听。\n *\n * @param names - 要监听的字段路径数组\n * @param callback - 字段变化回调\n * @param options - 可选配置\n * @returns 取消监听函数\n */\nexport function useWatchFields<T extends Values>(\n names: NamePath<T>[],\n callback: WatchFieldsCallback<T>,\n options?: CreateWatchOptions\n): () => void {\n return useWatch<T>(names, callback, options)\n}\n\n/**\n * 监听所有字段变化的便捷方法\n *\n * 等价于 `useWatch(callback, options)`,语义更明确。\n * 自动绑定 formContext 并在组件卸载时取消监听。\n *\n * @param callback - 全局变化回调\n * @param options - 可选配置\n * @returns 取消监听函数\n */\nexport function useWatchAll<T extends Values = Values>(\n callback: WatchAllCallback<T>,\n options?: CreateWatchOptions\n): () => void {\n return useWatch(callback, options)\n}\n\nexport default useWatch\n","/**\n * useDictionary - 字典选项 Hook\n *\n * 通过 api 函数加载字典选项,支持完整的表单值泛型推导。\n * 自动在组件挂载时加载,支持通过 dependsOn 声明依赖字段,\n * 当依赖字段变化时自动重新请求。\n *\n * @module hooks/useDictionary\n */\n\nimport { onMounted, Ref, ref } from \"vue\"\n\nimport { useFormInstance } from \"./useForm\"\nimport { useWatchFields } from \"./useWatch\"\n\nimport type { NamePath, SchemxDictionary, Values } from \"@schemx/core\"\n\nexport type { SchemxDictionary, SchemxWithDictionary } from \"@schemx/core\"\n\n/**\n * useDictionary 返回值\n */\nexport interface UseDictOptionsReturn {\n /** 远程加载的字典选项列表(响应式) */\n list: Ref<any[]>\n /** 请求加载状态(响应式) */\n loading: Ref<boolean>\n /** 请求错误信息(响应式) */\n error: Ref<Error | undefined>\n /** 触发字典选项加载 */\n loadDict: () => Promise<void>\n /** 使用当前配置重新执行 api */\n refresh: () => Promise<void>\n /** 直接修改 list 的值,不触发 api 调用 */\n mutate: (data: any[]) => void\n}\n\n/**\n * 将未知抛出值规范化为 `Error` 实例\n *\n * @param err - 捕获的值(可能是任意类型)\n * @returns 包装原始值的 `Error` 对象\n */\nexport function normalizeError(err: unknown): Error {\n if (err instanceof Error) return err\n\n return new Error(String(err))\n}\n\n/**\n * 加载字典选项\n *\n * 通过 api 函数获取数据,支持完整的表单值泛型推导。\n * 自动在组件挂载时加载,支持依赖字段联动、竞态控制、\n * 重试、错误处理等能力。\n *\n * @typeParam TValues - 表单值类型\n * @param options - 字典配置选项\n * @param fieldName - 当前字段名,用于 resetOnDepsChange 时清空字段值\n * @returns 响应式选项列表、loading/error 状态及控制方法\n *\n * @example\n * ```ts\n * // 基础用法\n * const { list } = useDictionary({\n * api: async () => {\n * const res = await fetch('/api/options')\n * return res.json()\n * },\n * })\n *\n * // 依赖联动(带泛型)\n * const { list } = useDictionary<MyFormValues>({\n * api: async (values) => fetchCities(values.province),\n * dependsOn: ['province'],\n * shouldFetch: (values) => !!values.province,\n * resetOnDepsChange: true,\n * immediate: false,\n * }, 'city')\n * ```\n */\nexport const useDictionary = <\n TValues extends Values = Values,\n TName extends NamePath<TValues> = NamePath<TValues>,\n>(\n options: SchemxDictionary<TValues>,\n fieldName?: TName\n): UseDictOptionsReturn => {\n const instance = useFormInstance<TValues>()\n\n const list = ref<any[]>([])\n const loading = ref<boolean>(false)\n const error = ref<Error | undefined>(undefined)\n\n // 竞态控制:仅最新请求写入状态\n let requestCount = 0\n\n /**\n * 使用配置的 formatter 格式化原始响应数据\n */\n const format = async (res: any): Promise<any> => {\n if (typeof options?.formatter === \"function\") {\n return await options.formatter(res, instance)\n }\n\n return res\n }\n\n /**\n * 带重试的执行\n */\n const executeWithRetry = async (formValues: TValues): Promise<any> => {\n const maxRetries = options.retryCount ?? 0\n const retryDelay = options.retryInterval ?? 1000\n let lastError: Error = new Error(\"Unknown error\")\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await options.api(formValues, instance)\n } catch (err) {\n lastError = normalizeError(err)\n\n if (attempt < maxRetries) {\n await new Promise((r) => setTimeout(r, retryDelay))\n }\n }\n }\n\n throw lastError\n }\n\n /**\n * 执行 api 函数加载字典选项\n */\n const loadDict = async (): Promise<void> => {\n try {\n const formValues = instance.getFieldsValue()\n\n // shouldFetch 检查\n if (typeof options.shouldFetch === \"function\" && !options.shouldFetch(formValues)) {\n list.value = []\n loading.value = false\n\n return\n }\n\n loading.value = true\n error.value = undefined\n\n // 递增请求计数器用于竞态控制\n const currentCount = ++requestCount\n\n const res = await executeWithRetry(formValues)\n\n // 竞态检查:丢弃过期响应\n if (currentCount !== requestCount) return\n\n const formatted = await format(res)\n\n // 格式化后再次竞态检查(格式化可能是异步的)\n if (currentCount !== requestCount) return\n\n list.value = formatted\n error.value = undefined\n\n // onSuccess 回调\n if (typeof options.onSuccess === \"function\") {\n options.onSuccess(formatted, instance)\n }\n\n loading.value = false\n } catch (err) {\n const normalized = normalizeError(err)\n\n error.value = normalized\n list.value = []\n loading.value = false\n\n if (typeof options.onError === \"function\") {\n options.onError(normalized, instance)\n }\n }\n }\n\n const refresh = (): Promise<void> => loadDict()\n\n const mutate = (data: any[]): void => {\n list.value = data\n }\n\n // ========== 依赖字段监听 ==========\n if (options.dependsOn?.length) {\n useWatchFields(options.dependsOn, (_payload, latestSnapshot) => {\n // 1. 触发 onDepsChange 回调\n if (typeof options.onDepsChange === \"function\") {\n options.onDepsChange(latestSnapshot as TValues, instance)\n }\n\n // 2. 清空当前字段值\n if (options.resetOnDepsChange && fieldName) {\n instance.setFieldValue(fieldName, undefined)\n }\n\n // 3. 重新执行 api\n void loadDict()\n })\n }\n\n // ========== 挂载行为 ==========\n const immediate = options.immediate ?? true\n\n onMounted(() => {\n if (immediate) {\n void loadDict()\n }\n })\n\n return { list, loading, error, loadDict, refresh, mutate }\n}\n\nexport default useDictionary\n","/**\n * useContext - 表单上下文 Hook\n *\n * 提供表单上下文的创建与消费能力。\n * schemx 通过 createContext 注入全局配置,\n * 子组件通过 useContext 获取。\n *\n * @module hooks/useContext\n */\n\nimport { inject, provide } from \"vue\"\n\nimport type { SchemxFormProps } from \"../types\"\nimport type { Values } from \"@schemx/core\"\n\n/** FormContext 注入 key */\nexport const FORM_CONTEXT_KEY = Symbol(\"FormContext\")\n\n/**\n * 表单上下文属性\n *\n * 由 schemx 组件注入,包含表单级别的全局配置。\n *\n * @typeParam T - 表单值类型\n */\nexport interface FormContextProps<T extends Values = Values> extends Omit<\n SchemxFormProps<T>,\n | \"form\"\n | \"modelValue\"\n | \"rendererRegistry\"\n | \"defaultRendererType\"\n | \"rulesRegistery\"\n | \"onFinish\"\n | \"onFinishFailed\"\n | \"onValuesChange\"\n | \"onFieldsChange\"\n> {}\n\n/**\n * 创建并注入表单上下文\n *\n * 在 schemx 的 setup 中调用,将表单级别配置注入到子组件树中。\n *\n * @typeParam T - 表单值类型\n * @param props - 表单上下文属性\n */\nexport const createContext = <T extends Values = Values>(props: FormContextProps<T>) => {\n provide<FormContextProps<T>>(FORM_CONTEXT_KEY, props)\n}\n\n/**\n * 获取表单上下文配置\n *\n * 在子组件中获取 schemx 注入的全局配置(readonly、disabled、labelAlign 等)。\n *\n * @returns 表单上下文属性\n *\n * @throws Error 如果不在 schemx 提供的上下文中调用\n *\n * @example\n * ```ts\n * const context = useContext()\n * console.log(context.readonly, context.disabled)\n * ```\n */\nexport function useContext(): FormContextProps {\n const context = inject<FormContextProps>(FORM_CONTEXT_KEY)\n\n if (!context) {\n throw new Error(\"useContext must be used within a Form\")\n }\n\n return context\n}\n","/**\n * useStableRef - 引用稳定化的 shallowRef\n *\n * 封装 `shallowRef` + `watchEffect` + `isShallowEqual`,\n * 仅在工厂函数返回值与当前值浅不相等时才更新引用,\n * 避免下游组件因对象引用变化而不必要地重渲染。\n *\n * @module hooks/useStableRef\n *\n * @example\n * ```ts\n * import { useStableRef } from '@schemx/vue'\n *\n * const stableProps = useStableRef(() => ({\n * visible: visible.value,\n * disabled: disabled.value,\n * value: field.getValue(),\n * }))\n * ```\n */\n\nimport { type ShallowRef, shallowRef, watchEffect } from \"vue\"\n\nimport { isShallowEqual } from \"../utils/equal\"\n\n/**\n * 创建一个引用稳定的 shallowRef。\n *\n * 在 watchEffect 中执行工厂函数,自动追踪响应式依赖。\n * 仅当新旧值浅比较不相等时才替换 `.value`,保持引用稳定。\n *\n * @typeParam T - 对象类型\n *\n * @param factory - 返回目标对象的工厂函数,在 watchEffect 内执行\n *\n * @returns 只读的 ShallowRef,引用仅在属性值真正变化时更新\n *\n * @example\n * ```ts\n * const props = useStableRef(() => ({\n * value: field.getValue(),\n * onChange: handleChange,\n * }))\n *\n * // props.value 的引用在属性值未变时保持不变\n * h(Component, props.value)\n * ```\n */\nexport function useStableRef<T extends Record<string, any>>(\n factory: () => T\n): Readonly<ShallowRef<T>> {\n const stableRef = shallowRef({} as T) as ShallowRef<T>\n\n watchEffect(() => {\n const next = factory()\n\n if (!isShallowEqual(stableRef.value, next)) {\n stableRef.value = next\n }\n })\n\n return stableRef\n}\n\nexport default useStableRef\n","/**\n * 对象浅比较工具\n *\n * @module utils/equal\n */\n\n/**\n * 浅比较两个对象的自有属性值是否相同。\n *\n * 用于避免 computed / shallowRef 每次返回新对象引用导致子组件不必要的更新。\n * 仅比较第一层属性,函数引用通过 === 判断。\n *\n * @param a - 旧对象\n * @param b - 新对象\n *\n * @returns 两个对象浅相等时返回 true\n *\n * @example\n * shallowEqual({ a: 1, b: 2 }, { a: 1, b: 2 }) // => true\n * shallowEqual({ a: 1 }, { a: 1, b: 2 }) // => false\n */\nexport const isShallowEqual = (\n a: Record<string, any>,\n b: Record<string, any>\n): boolean => {\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n\n return keysA.every((key) => a[key] === b[key])\n}\n","/**\n * useFieldContext - 通过 Vue provide/inject 获取当前字段上下文\n *\n * FormItem 通过 provideFieldContext 将 useField 创建的字段实例注入子树,\n * 渲染器通过 useFieldContext 获取,无需知道字段名。\n *\n * @module hooks/useFieldContext\n *\n * @example\n * ```typescript\n * // FormItem 中\n * const field = useField('date')\n * provideFieldContext(field)\n *\n * // 渲染器中\n * const field = useFieldContext()\n * field.error.value // string[] | undefined\n * field.getValue() // 当前字段值(Vue 响应式)\n * ```\n */\n\nimport { inject, type InjectionKey, provide } from \"vue\"\n\nimport { Values } from \"@schemx/core\"\n\nimport { FieldInstance } from \"../types/field\"\n\nimport type { useField } from \"./useField\"\n\n/** 字段上下文注入 key */\nconst FIELD_CONTEXT_KEY: InjectionKey<FieldInstance> = Symbol(\"schemx:field\")\n\n/**\n * 向子组件树注入当前字段上下文。\n *\n * 应在 FormItem(或任何创建了 useField 的组件)的 setup 中调用。\n *\n * @param field - useField 返回的字段实例\n */\nexport function provideFieldContext<TValues extends Values = Values>(\n field: FieldInstance<TValues>\n): void {\n provide(FIELD_CONTEXT_KEY, field as FieldInstance)\n}\n\n/**\n * 从最近的 FormItem 获取当前字段上下文。\n *\n * 必须在 FormItem 的组件子树内调用,否则抛出错误。\n *\n * @returns useField 返回的字段实例\n *\n * @throws 当不在 FormItem 子树内时抛出\n */\nexport function useFieldContext(): ReturnType<typeof useField> {\n const field = inject(FIELD_CONTEXT_KEY)\n\n if (!field) {\n throw new Error(\"[schemx] useFieldContext() must be used inside a FormItem tree\")\n }\n\n return field\n}\n","/**\n * 校验触发工具\n *\n * 提供校验触发时机的合并、归一化和匹配判断功能。\n *\n * @module utils/validation\n */\n\nimport type { ValidationTrigger } from \"@schemx/core\"\n\n/** 触发时机类型(支持单个或数组) */\nexport type TriggerConfig = ValidationTrigger | ValidationTrigger[]\n\n/** 归一化后的触发类型 */\nexport type NormalizedTrigger = \"blur\" | \"change\" | \"submit\"\n\n/**\n * 判断触发时机配置是否有效。\n *\n * undefined 和空数组视为无效,其余值(包括单个字符串、非空数组)视为有效。\n *\n * @param v - 触发时机配置\n *\n * @returns 配置有效时返回 true\n */\nfunction isValidTrigger(v: TriggerConfig | undefined): v is TriggerConfig {\n if (v === undefined) return false\n if (Array.isArray(v) && v.length === 0) return false\n\n return true\n}\n\n/**\n * 合并校验触发时机配置。\n *\n * 按优先级从高到低取值:列级配置 > 表单上下文配置 > 默认值。\n * 跳过 undefined 和空数组,确保空数组不会意外覆盖后续配置。\n *\n * @param columnTrigger - 列级配置的触发时机\n * @param contextTrigger - 表单上下文配置的触发时机\n * @param defaultTrigger - 兜底默认值\n *\n * @returns 最终生效的触发时机\n *\n * @example\n * mergeTrigger(\"onBlur\", \"onChange\", \"onSubmit\") // => \"onBlur\"\n * mergeTrigger(undefined, \"onChange\", \"onSubmit\") // => \"onChange\"\n * mergeTrigger([], \"onChange\", \"onSubmit\") // => \"onChange\"\n * mergeTrigger(undefined, undefined, \"onSubmit\") // => \"onSubmit\"\n */\nexport function mergeTrigger(\n columnTrigger: TriggerConfig | undefined,\n contextTrigger: TriggerConfig | undefined,\n defaultTrigger: TriggerConfig\n): TriggerConfig {\n if (isValidTrigger(columnTrigger)) return columnTrigger\n\n if (isValidTrigger(contextTrigger)) return contextTrigger\n\n return defaultTrigger\n}\n\n/**\n * 归一化触发类型字符串。\n *\n * 将带 `on` 前缀的格式统一为短格式:\n * `\"onBlur\"` → `\"blur\"`、`\"onChange\"` → `\"change\"`、`\"onSubmit\"` → `\"submit\"`。\n *\n * @param t - 原始触发类型\n *\n * @returns 归一化后的触发类型\n */\nfunction normalizeTrigger(t: ValidationTrigger): NormalizedTrigger {\n const map: Record<ValidationTrigger, NormalizedTrigger> = {\n onBlur: \"blur\",\n onChange: \"change\",\n onSubmit: \"submit\",\n blur: \"blur\",\n change: \"change\",\n submit: \"submit\",\n }\n\n return map[t] ?? \"submit\"\n}\n\n/**\n * 判断当前事件是否应该触发校验。\n *\n * 将配置的触发时机归一化后,与当前事件类型进行匹配。\n *\n * @param event - 当前触发的事件类型\n * @param trigger - 配置的触发时机(支持单个或数组)\n *\n * @returns 是否应该触发校验\n *\n * @example\n * shouldValidateOn(\"change\", \"onChange\") // => true\n * shouldValidateOn(\"blur\", [\"onBlur\", \"onChange\"]) // => true\n * shouldValidateOn(\"change\", \"onSubmit\") // => false\n * shouldValidateOn(\"change\", undefined) // => false\n */\nexport function shouldValidateOn(\n event: NormalizedTrigger,\n trigger?: TriggerConfig\n): boolean {\n if (!trigger) return false\n const triggers = Array.isArray(trigger) ? trigger : [trigger]\n\n return triggers.some((t) => normalizeTrigger(t) === event)\n}\n","/**\n * 插槽解析与子插槽提取工具。\n *\n * 提供 camelCase / kebab-case 双向查找插槽,\n * 以及按字段名前缀提取子渲染器插槽。\n *\n * @module utils/slot\n */\n\n/**\n * 检查字符串是否包含大写字母(驼峰格式特征)。\n *\n * @param str - 待检测的字符串\n * @returns 是否包含大写字母\n */\nconst isCamelCase = (str: string): boolean => /[A-Z]/.test(str)\n\n/**\n * 检查字符串是否包含连字符(kebab-case 特征)。\n *\n * @param str - 待检测的字符串\n * @returns 是否包含连字符\n */\nconst isKebabCase = (str: string): boolean => str.includes(\"-\")\n\n/**\n * 将驼峰命名转换为连字符命名(kebab-case)。\n *\n * @param str - 驼峰格式的字符串\n * @returns 转换后的 kebab-case 字符串\n */\nconst camelToKebab = (str: string): string => {\n return str.replace(/([A-Z])/g, \"-$1\").toLowerCase()\n}\n\n/**\n * 将连字符命名转换为驼峰命名(camelCase)。\n *\n * @param str - kebab-case 格式的字符串\n * @returns 转换后的 camelCase 字符串\n */\nconst kebabToCamel = (str: string): string => {\n return str.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase())\n}\n\n/**\n * 将命名格式归一化为 kebab-case。\n *\n * @param str - 任意命名格式的字符串\n * @returns kebab-case 格式的字符串\n */\nconst normalizeToKebab = (str: string): string => {\n if (isCamelCase(str)) return camelToKebab(str)\n\n return str\n}\n\n/**\n * 将命名格式归一化为 camelCase。\n *\n * @param str - 任意命名格式的字符串\n * @returns camelCase 格式的字符串\n */\nconst normalizeToCamel = (str: string): string => {\n if (isKebabCase(str)) return kebabToCamel(str)\n\n return str\n}\n\n/**\n * 从插槽对象中按名称查找插槽,同时支持 camelCase 和 kebab-case。\n *\n * 优先查找原始名称,未找到时尝试另一种命名格式。\n * 例如传入 `userName` 时,先查 `userName`,再查 `user-name`;\n * 传入 `user-name` 时,先查 `user-name`,再查 `userName`。\n *\n * @param slots - Vue 插槽对象\n * @param name - 插槽名称(camelCase 或 kebab-case)\n *\n * @returns 匹配的插槽函数,未找到返回 undefined\n *\n * @example\n * ```typescript\n * // slots 中定义了 'user-name' 插槽\n * resolveSlot(slots, 'userName') // => 找到 'user-name' 插槽\n * resolveSlot(slots, 'user-name') // => 找到 'user-name' 插槽\n * ```\n */\nexport const resolveSlot = (\n slots: Record<string, any>,\n name: string\n): ((...args: any[]) => any) | undefined => {\n if (slots[name]) return slots[name]\n\n const alt = isCamelCase(name)\n ? camelToKebab(name)\n : isKebabCase(name)\n ? kebabToCamel(name)\n : undefined\n\n if (alt && slots[alt]) return slots[alt]\n\n return undefined\n}\n\n/**\n * 从父级插槽中提取子渲染器插槽。\n *\n * 按 `fieldName:slotName` 和 `fieldName:slot-name` 格式匹配,\n * 提取后去掉前缀作为子渲染器的插槽名。\n * 同时支持 camelCase 和 kebab-case 的 fieldName。\n *\n * @param fieldName - 字段名\n * @param allSlots - 父级全部插槽\n *\n * @returns 子渲染器的插槽对象\n *\n * @example\n * ```typescript\n * // 父级插槽: { 'userName:prefix': fn, 'userName:suffix': fn, 'userNameLabel': fn }\n * extractChildSlots('userName', slots)\n * // => { prefix: fn, suffix: fn }\n * ```\n */\nexport const extractChildSlots = (\n fieldName: string,\n allSlots: Record<string, any>\n): Record<string, any> => {\n const result: Record<string, any> = {}\n const camelPrefix = normalizeToCamel(String(fieldName)) + \":\"\n const kebabPrefix = normalizeToKebab(String(fieldName)) + \":\"\n\n for (const [key, value] of Object.entries(allSlots)) {\n if (key.startsWith(camelPrefix)) {\n result[key.slice(camelPrefix.length)] = value\n } else if (key.startsWith(kebabPrefix) && kebabPrefix !== camelPrefix) {\n result[key.slice(kebabPrefix.length)] = value\n }\n }\n\n return result\n}\n","/**\n * FormGroup - 分组字段组件\n *\n * 用于渲染 componentType 为 \"group\" 的分组字段配置。\n * 支持可折叠的分组容器,内部渲染子 columns。\n *\n * @module components/FormGroup\n */\n\nimport { defineComponent, PropType, ref } from \"vue\"\nimport type { SetupContext, VNodeChild } from \"vue\"\n\nimport classnames from \"classnames\"\n\nimport FormItem from \"../FormItem\"\n\nimport type { SchemxViewGroupSchema, SchemxViewSchema, Values } from \"@schemx/core\"\n\n/**\n * FormGroup Props\n *\n * @typeParam T - 表单值类型\n */\nexport interface SchemxGroupProps<T extends Values = Values> {\n schema: SchemxViewGroupSchema<T>\n}\n\nconst FormGroup = defineComponent(\n <T extends Values = Values>(props: SchemxGroupProps<T>, { slots }: SetupContext) => {\n const collapsed = ref(Boolean(props.schema.defaultCollapsed))\n\n const toggle = () => {\n if (props.schema.collapsible) {\n collapsed.value = !collapsed.value\n }\n }\n\n return (): VNodeChild => {\n const schema = props.schema\n const collapsible = Boolean(schema.collapsible)\n\n return (\n <div\n class={classnames(\n \"schemx-group\",\n { \"schemx-group--collapsed\": collapsed.value },\n schema.class as string | undefined\n )}\n data-key={schema.key}\n >\n {schema.label && (\n <div\n role={collapsible ? \"button\" : undefined}\n tabindex={collapsible ? 0 : undefined}\n class={classnames(\"schemx-group__header\", {\n \"schemx-group__header--clickable\": collapsible,\n })}\n onClick={toggle}\n onKeydown={(e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n toggle()\n }\n }}\n >\n <span class=\"schemx-group__title\">{schema.label}</span>\n {collapsible && (\n <span\n class={classnames(\"schemx-group__arrow\", {\n \"schemx-group__arrow--down\": !collapsed.value,\n })}\n />\n )}\n </div>\n )}\n {!collapsed.value && (\n <div class=\"schemx-group__body\">\n {schema.children.map((child) => (\n <FormItem\n key={child.key}\n schema={child as SchemxViewSchema}\n v-slots={slots}\n />\n ))}\n </div>\n )}\n </div>\n )\n }\n },\n {\n name: \"SchemxGroup\",\n\n props: {\n schema: {\n type: Object as PropType<SchemxViewGroupSchema>,\n required: true,\n },\n },\n }\n)\n\nexport default FormGroup\n","/**\n * FormItem\n *\n * schemx 和 FormGroup 实际渲染字段的组件。\n * 动态属性已由 core 解析到 ViewSchema 中;这里只负责消费\n * 已解析 schema、创建字段实例、组装渲染器属性与插槽。\n *\n * @module components/FormItem\n */\n\nimport { computed, defineComponent, h, PropType, toRef } from \"vue\"\nimport type { SetupContext, VNodeChild } from \"vue\"\n\nimport classnames from \"classnames\"\nimport { omit } from \"es-toolkit\"\n\nimport { useField } from \"../../hooks\"\nimport { useContext } from \"../../hooks/useContext\"\nimport { provideFieldContext } from \"../../hooks/useFieldContext\"\nimport { useFormInstance } from \"../../hooks/useForm\"\nimport { useStableRef } from \"../../hooks/useStableRef\"\nimport {\n extractChildSlots,\n mergeTrigger,\n resolveSlot,\n shouldValidateOn,\n} from \"../../utils\"\nimport FormGroup from \"../FormGroup\"\n\nimport type { TriggerConfig } from \"../../utils\"\nimport type {\n FieldValue,\n NamePath,\n SchemxComponentProps,\n SchemxFormItemProps,\n SchemxViewFieldSchema,\n SchemxViewGroupSchema,\n SchemxViewSchema,\n Values,\n} from \"@schemx/core\"\n\n/**\n * FormItem 属性。\n *\n * @typeParam T - 表单值类型\n */\nexport interface SchemxItemProps<T extends Values = Values> {\n schema: SchemxViewSchema<T>\n}\n\nconst FormItem = defineComponent(\n <T extends Values = Values>(props: SchemxItemProps<T>, { slots }: SetupContext) => {\n const schemaRef = toRef(props, \"schema\")\n\n if (isViewGroupSchema(schemaRef.value)) {\n return (): VNodeChild => {\n return h(FormGroup, { schema: schemaRef.value as SchemxViewGroupSchema }, slots)\n }\n }\n\n const form = useFormInstance<T>()\n const formContext = useContext()\n\n const schema = (): SchemxViewFieldSchema<T> =>\n schemaRef.value as SchemxViewFieldSchema<T>\n\n const field = useField(schema().name)\n\n provideFieldContext(field)\n\n const trigger = computed<TriggerConfig>(() =>\n mergeTrigger(schema().validationTrigger, formContext.validationTrigger, \"onChange\")\n )\n\n /**\n * 是否需要进行校验。\n *\n * 当字段不可见、详情展示、只读或禁用时,无需进行校验。\n */\n const canVerified = computed(() => {\n const isOperate = schema().visible && !schema().readonly && !schema().disabled\n\n const rules = schema().rules\n\n const hasRules = Array.isArray(rules) ? rules?.length > 0 : !!schema().rules\n\n return isOperate && hasRules\n })\n\n /** 值变化处理,设置值后根据触发时机决定是否校验 */\n const handleChange = (v: FieldValue<T, NamePath<T>>) => {\n field.setValue(v)\n schema().componentProps?.onChange?.(v)\n\n if (canVerified.value && shouldValidateOn(\"change\", trigger.value)) {\n field.validate()\n }\n }\n\n /** 失焦处理,根据触发时机决定是否校验 */\n const handleBlur = () => {\n // schema().componentProps?.onBlur?.()\n\n if (canVerified.value && shouldValidateOn(\"blur\", trigger.value)) {\n field.validate()\n }\n }\n\n /**\n * schemas 每一项的 props\n */\n const formItemProps = computed<SchemxFormItemProps<T>>((): SchemxFormItemProps<T> => {\n return {\n ...(omit(schema(), [\"componentProps\"]) satisfies SchemxFormItemProps<T>),\n name: schema().name,\n componentType: schema().componentType,\n class: classnames(\"schemx-item\", schema().class),\n required: schema().required,\n readonly: schema().readonly,\n disabled: schema().disabled,\n visible: schema().visible,\n placeholder: schema().placeholder,\n validationTrigger: trigger.value,\n }\n })\n\n // 使用 useStableRef 避免每次生成新对象引用\n const componentProps = useStableRef<SchemxComponentProps<T>>(\n (): SchemxComponentProps<T> => ({\n ...schema().componentProps,\n formItemProps: formItemProps.value,\n value: field.getValue(),\n readonly: schema().readonly,\n disabled: schema().disabled,\n placeholder: schema().placeholder,\n onChange: handleChange,\n onBlur: handleBlur,\n \"onUpdate:value\": (v) => field.setValue(v),\n })\n )\n\n /**\n * 渲染 required 星号。\n *\n * 当字段为必填且非详情展示/禁用/只读状态时,在 label 前显示红色星号标记。\n *\n * @returns 星号 VNode 或空片段\n */\n const renderRequired = (): VNodeChild => {\n if (!schema().required || schema().disabled || schema().readonly) {\n return null\n }\n\n return <span class=\"schemx-item__required\">*</span>\n }\n\n /**\n * 渲染 formItem label 区域。\n *\n * 优先使用 `{name}Label` 插槽(支持 camelCase / kebab-case),\n * 未提供时渲染默认 label(含 required 星号、label 文本、冒号)。\n *\n * @returns label VNode\n */\n const renderLabel = (): VNodeChild => {\n const labelSlot = resolveSlot(slots, `${schema().name}Label`)\n\n if (labelSlot) {\n return labelSlot(formItemProps.value)\n }\n\n const labelAlign = schema().labelAlign || formContext.labelAlign\n const labelWidth = schema().labelWidth || formContext.labelWidth\n const colon = schema().colon ?? formContext.colon\n\n return (\n <label\n class=\"schemx-item__label\"\n style={{ width: labelWidth, textAlign: labelAlign }}\n >\n {renderRequired()}\n <span class=\"schemx-item__label-text\">\n {schema().label}\n {colon ? \":\" : \"\"}\n </span>\n </label>\n )\n }\n\n /**\n * 渲染 formItem content 区域(仅控件)。\n *\n * 优先使用 `{name}Content` 插槽(支持 camelCase / kebab-case),\n * 插槽参数包含 formItemProps 和 columnElement(渲染器 VNode)。\n * 未提供插槽时,渲染默认控件布局。\n *\n * @returns content VNode\n */\n const renderContent = (): VNodeChild => {\n const component = form.getRenderer(schema().componentType)\n\n if (!component) {\n throw new Error(\n `[schemx] Can not find component renderer of \"${schema().componentType}\".`\n )\n }\n\n // 提取子渲染器插槽(fieldName:slotName 格式)\n const childSlots = extractChildSlots(normalizeNameKey(schema().name), slots)\n const columnElement = h(component, componentProps.value, childSlots)\n\n const contentSlot = resolveSlot(slots, `${schema().name}Content`)\n\n if (contentSlot) {\n return contentSlot({\n ...formItemProps.value,\n columnElement,\n })\n }\n\n return <div class=\"schemx-item__control\">{columnElement}</div>\n }\n\n /**\n * 渲染 formItem error 区域。\n *\n * 优先使用 `{name}Error` 插槽(支持 camelCase / kebab-case),\n * 插槽参数包含 formItemProps 和 errors 数组。\n * 未提供插槽时,仅在存在错误时显示第一条错误信息。\n *\n * @returns error VNode 或 null\n */\n const renderError = (): VNodeChild => {\n const errorSlot = resolveSlot(slots, `${schema().name}Error`)\n\n if (errorSlot) {\n return errorSlot({\n ...formItemProps.value,\n errors: field.error.value,\n })\n }\n\n if (!Array.isArray(field.error.value) || field.error.value.length === 0) {\n return null\n }\n\n return <div class=\"schemx-item__error\">{field.error.value[0]}</div>\n }\n\n return (): VNodeChild => {\n if (!schema().visible) {\n return null\n }\n\n // 整体插槽:完全接管渲染,不包裹任何默认结构\n const itemSlot = resolveSlot(slots, normalizeNameKey(schema().name))\n\n if (itemSlot) {\n return itemSlot(formItemProps.value)\n }\n\n const labelPosition = schema().labelPosition || formContext.labelPosition\n\n return (\n <div class={classnames(\"schemx-item-wrapper\")}>\n <div\n class={classnames(\n \"schemx-item\",\n `schemx-item--label-${labelPosition}`,\n schema().class,\n {\n \"is-readonly\": schema().readonly,\n \"is-disabled\": schema().disabled,\n }\n )}\n style={{ ...(schema().style ?? {}) }}\n >\n {renderLabel()}\n\n <div class=\"schemx-item__content\">\n {renderContent()}\n {renderError()}\n </div>\n </div>\n </div>\n )\n }\n },\n {\n name: \"SchemxItem\",\n\n props: {\n schema: {\n type: Object as PropType<SchemxViewSchema>,\n required: true,\n },\n },\n }\n)\n\nexport default FormItem\n\nconst isViewGroupSchema = <T extends Values>(\n schema: SchemxViewSchema<T>\n): schema is SchemxViewGroupSchema<T> => {\n return schema.componentType === \"group\"\n}\n\nconst normalizeNameKey = (name: unknown): string => {\n if (Array.isArray(name)) {\n return name.map((part) => String(part)).join(\".\")\n }\n\n return String(name)\n}\n","import { SchemxViewSchema } from \"@schemx/core\"\n\n/**\n * 判断当前项是否为顶层可见普通字段中的第一个或最后一个。\n *\n * `group` 和不可见字段不参与顶层卡片圆角判断。\n *\n * 使用示例:\n *\n * const list = [\n * { key: 'group-1', type: 'group' },\n * { key: 'a' },\n * { key: 'b' },\n * { key: 'group-2', type: 'group' },\n * { key: 'c' },\n * ]\n *\n * getSectionPosition(list, 'a')\n * // => { found: true, isFirst: true, isLast: false }\n */\nexport function getSectionPosition<T extends SchemxViewSchema>(\n list: T[],\n currentKey: string\n) {\n const currentIndex = list.findIndex((item) => item.key === currentKey)\n\n if (currentIndex === -1) {\n return {\n found: false,\n isFirst: false,\n isLast: false,\n }\n }\n\n const currentItem = list[currentIndex]\n\n if (!isPositionItem(currentItem)) {\n return {\n found: true,\n isFirst: false,\n isLast: false,\n }\n }\n\n const prevItem = findPositionItem(list, currentIndex, -1)\n const nextItem = findPositionItem(list, currentIndex, 1)\n\n return {\n found: true,\n isFirst: !prevItem,\n isLast: !nextItem,\n }\n}\n\n/**\n * 判断当前项是否参与顶层首尾样式计算。\n */\nfunction isPositionItem<T extends SchemxViewSchema>(item?: T) {\n return (\n !!item &&\n item.componentType !== \"group\" &&\n (!(\"visible\" in item) || item.visible !== false)\n )\n}\n\nfunction findPositionItem<T extends SchemxViewSchema>(\n list: T[],\n startIndex: number,\n step: 1 | -1\n) {\n for (let index = startIndex + step; index >= 0 && index < list.length; index += step) {\n if (isPositionItem(list[index])) {\n return list[index]\n }\n }\n\n return undefined\n}\n","<!--\n schemx - 主组件\n\n 基于 Schema 配置的表单组件,使用 useForm Hook 管理状态。\n\n @module schemx\n-->\n\n<script lang=\"ts\" setup generic=\"T extends Values = Values\">\n import { watch, watchEffect } from \"vue\"\n\n import { omit } from \"es-toolkit\"\n\n import FormItem from \"./components/FormItem\"\n import { createContext } from \"./hooks/useContext\"\n import { useForm } from \"./hooks/useForm\"\n import { useViewSchemas } from \"./hooks/useViewSchemas\"\n\n import type { SchemxFormProps } from \"./types/index\"\n import type { SchemxViewSchema, Values } from \"@schemx/core\"\n\n import \"./styles/index.css\"\n import { getSectionPosition } from \"./utils/helpers\"\n\n defineOptions({ name: \"SchemxForm\" })\n\n const props = withDefaults(defineProps<SchemxFormProps<T>>(), {\n modelValue: () => ({}) as T,\n initialValues: () => ({}) as T,\n form: undefined,\n schemas: () => [],\n class: \"\",\n style: () => ({}),\n onFinish: undefined,\n onFinishFailed: undefined,\n onValuesChange: undefined,\n onFieldsChange: undefined,\n rendererRegistry: undefined,\n validatorRegistry: undefined,\n })\n\n const emit = defineEmits<{\n \"update:modelValue\": [value: T]\n }>()\n\n /**\n * 创建 FormContext 上下文\n *\n * 为子组件提供表单配置信息。\n */\n createContext(\n omit(props, [\n \"form\",\n \"modelValue\",\n \"rendererRegistry\",\n \"defaultRendererType\",\n \"validatorRegistry\",\n \"onFinish\",\n \"onFinishFailed\",\n \"onValuesChange\",\n \"onFieldsChange\",\n ])\n )\n\n /**\n * 获取或创建表单实例\n *\n * 优先使用外部传入的 form,否则内部通过 useForm 创建。\n * 必须在 setup 同步阶段调用,确保 provide 正确注入。\n */\n const form = props.form\n ? props.form\n : useForm<T>({\n schemas: props.schemas,\n initialValues: props.initialValues,\n rendererRegistry: props.rendererRegistry,\n defaultRendererType: props.defaultRendererType,\n validatorRegistry: props.validatorRegistry,\n\n readonly: props.readonly,\n disabled: props.disabled,\n\n onFinish: async (values) => {\n props.onFinish?.(values)\n },\n onFinishFailed: async (errors) => {\n props.onFinishFailed?.(errors)\n },\n onValuesChange: (changedValues, latestSnapshot) => {\n emit(\"update:modelValue\", latestSnapshot as T)\n props.onValuesChange?.(changedValues, latestSnapshot)\n },\n onFieldsChange: (changedPaths, allPaths) => {\n props.onFieldsChange?.(changedPaths, allPaths)\n },\n })\n\n watch(\n () => props.schemas,\n (schemas) => {\n form.setSchemas(schemas)\n },\n { deep: false, immediate: !!props.form }\n )\n\n const viewSchemas = useViewSchemas(form)\n\n const getFormItemClass = (schema: SchemxViewSchema<T>) => {\n const { isFirst, isLast } = getSectionPosition(\n viewSchemas.value as SchemxViewSchema[],\n schema.key\n )\n\n return {\n \"schemx-item-wrapper--first\": isFirst,\n \"schemx-item-wrapper--last\": isLast,\n }\n }\n\n watchEffect(() => {\n form.updateDefaultProps(props)\n })\n\n defineExpose({\n ...form,\n })\n</script>\n\n<template>\n <div :class=\"['schemx', props.class]\">\n <FormItem\n v-for=\"schema in viewSchemas\"\n :key=\"schema.key\"\n :schema=\"schema as SchemxViewSchema\"\n :class=\"getFormItemClass(schema as SchemxViewSchema<T>)\"\n >\n <template v-for=\"(_, slotName) in $slots\" #[slotName]=\"slotProps\">\n <slot :name=\"slotName\" v-bind=\"slotProps ?? {}\" />\n </template>\n </FormItem>\n </div>\n</template>\n","/**\n * useViewSchemas - Vue ViewSchemas bridge.\n *\n * @module hooks/useViewSchemas\n */\n\nimport { onScopeDispose, shallowRef } from \"vue\"\nimport type { ShallowRef } from \"vue\"\n\nimport type { SchemxInstance, SchemxViewSchema, Values } from \"@schemx/core\"\n\nexport function useViewSchemas<T extends Values = Values>(\n form: SchemxInstance<T>\n): ShallowRef<readonly SchemxViewSchema<T>[]> {\n const viewSchemas = shallowRef<readonly SchemxViewSchema<T>[]>(form.getViewSchemas())\n\n const unsubscribe = form.subscribeViewSchemas((nextSchemas) => {\n viewSchemas.value = nextSchemas\n })\n\n onScopeDispose(unsubscribe)\n\n return viewSchemas\n}\n\nexport default useViewSchemas\n","/**\n * schemx 组件导出\n *\n * 为 SchemxForm 组件挂载静态方法(install、FormItem、registerRequest 等),\n * 并作为默认导出。\n *\n * @module formExport\n */\n\nimport type { App, DefineComponent } from \"vue\"\n\nimport FormItem from \"./components/FormItem\"\nimport SchemxForm from \"./formRuntime.js\"\n\nimport type { SchemxFormProps } from \"./types\"\n\n/**\n * SchemxForm 插件安装选项\n *\n * 在 `app.use(SchemxForm, options)` 时传入,用于配置全局默认行为。\n *\n * @example\n * ```ts\n * import SchemxForm from '@schemx/vue'\n *\n * app.use(SchemxForm, {\n * request: (url) => fetch(url).then(r => r.json()),\n * })\n * ```\n */\nexport interface SchemxInstallOptions {}\n\n/**\n * 为组件挂载静态属性并保留原始类型\n *\n * @param comp - 原始组件\n * @param extra - 要挂载的静态属性\n */\nexport function withInstall<T extends object, E extends Record<string, unknown>>(\n comp: T,\n extra: E\n) {\n return Object.assign(comp, extra) as T & E\n}\n\nexport type SchemxFormPlugin = DefineComponent<SchemxFormProps> & {\n install: (app: App, options?: SchemxInstallOptions) => void\n FormItem: typeof FormItem\n}\n\nconst SchemxFormExport = withInstall(SchemxForm, {\n /** Vue 插件安装方法 */\n install(app: App, _options?: SchemxInstallOptions) {\n app.component(\"SchemxForm\", SchemxForm)\n },\n /** FormItem 子组件引用 */\n FormItem,\n}) as unknown as SchemxFormPlugin\n\nexport default SchemxFormExport\n","/**\n * WithRemoteOptions - 选项高阶组件\n *\n * 包装任意渲染器组件,自动注入 useDictionary 的选项加载能力。\n * 被包装组件会额外收到 options、loading 两个 props,\n * 无需自行调用 useDictionary。\n *\n * @module hocs/withRemoteOptions\n */\n\nimport { Component, computed, defineComponent, h, PropType, SetupContext } from \"vue\"\n\nimport { useDictionary } from \"../hooks/useDictionary\"\n\nimport type { NamePath, SchemxDictionary } from \"@schemx/core\"\n\nexport type { SchemxDictionary, SchemxWithDictionary } from \"@schemx/core\"\n\n/**\n * WithRemoteOptions 注入给被包装组件的额外 Props\n */\nexport interface RemoteOptionsInjectedProps {\n /** 加载的选项列表 */\n options: any[]\n /** 加载状态 */\n loading: boolean\n}\n\n/**\n * 选项高阶组件\n *\n * 包装一个渲染器组件,当 dict prop 存在时,\n * 调用 useDictionary 加载选项,并将结果作为 options prop 注入。\n *\n * 当组件自身已传入非空 options 且无 dict 时,优先使用静态 options。\n *\n * @param WrappedComponent - 被包装的渲染器组件\n * @returns 增强后的组件,自动具备选项加载能力\n *\n * @example\n * ```ts\n * import { WithRemoteOptions } from '@schemx/vue'\n * import MySelect from './MySelect.vue'\n *\n * const RemoteSelect = WithRemoteOptions(MySelect)\n *\n * // 在 schema 中使用\n * const schema = {\n * name: 'city',\n * label: '城市',\n * componentType: 'select',\n * componentProps: {\n * dict: {\n * api: async (values) => fetchCities(values.province),\n * dependsOn: ['province'],\n * shouldFetch: (values) => !!values.province,\n * resetOnDepsChange: true,\n * immediate: false,\n * },\n * },\n * }\n * ```\n */\nexport function WithRemoteOptions(WrappedComponent: Component) {\n return defineComponent({\n name: `WithRemoteOptions(${WrappedComponent.name || \"Anonymous\"})`,\n inheritAttrs: false,\n props: {\n dict: {\n type: Object as PropType<SchemxDictionary>,\n default: undefined,\n },\n fieldName: {\n type: [String, Array] as PropType<NamePath>,\n default: undefined,\n },\n },\n setup(props, { attrs, slots }: SetupContext) {\n // 仅在 dict 配置存在时调用 useDictionary\n const dictResult = props.dict ? useDictionary(props.dict, props.fieldName) : null\n\n const childrenProps = computed(() => {\n return {\n ...attrs,\n dict: props.dict,\n options: props.dict ? dictResult?.list.value : attrs.options,\n loading: props.dict ? dictResult?.loading.value : attrs.loading,\n }\n })\n\n return () => h(WrappedComponent, childrenProps.value, slots)\n },\n })\n}\n\nexport default WithRemoteOptions\n","/**\n * useEffect - Vue 组合式 API 版本的 Signal effect\n *\n * 封装 `@schemx/core` 的 `createEffect`,在组件卸载时自动 dispose,\n * 无需手动管理生命周期。\n *\n * @module hooks/useEffect\n *\n * @example\n * ```ts\n * import { useEffect } from '@schemx/vue'\n *\n * // 在 setup 中使用\n * useEffect(() => {\n * const name = form.getFieldValue('name')\n * console.log('name:', name)\n *\n * return () => {\n * // 清理逻辑\n * }\n * })\n * ```\n */\n\nimport { onUnmounted } from \"vue\"\n\nimport { createEffect } from \"@schemx/core\"\n\nimport type { CreateEffectReturn, EffectCallback } from \"@schemx/core\"\n\n/**\n * 创建 Signal effect 并在组件卸载时自动取消。\n *\n * 在 effect 回调中访问任何 Signal 值时自动追踪依赖,\n * 依赖变化时自动重新执行回调。\n * 回调可返回一个清理函数,在 effect 重新执行前或被 dispose 时调用。\n *\n * @param callback - effect 回调函数,可选返回清理函数\n *\n * @returns 取消 effect 的 dispose 函数(通常无需手动调用,组件卸载时自动取消)\n *\n * @example\n * ```ts\n * // 监听字段值变化\n * useEffect(() => {\n * const name = form.getFieldValue('name')\n * console.log('name changed:', name)\n * })\n *\n * // 带清理函数\n * useEffect(() => {\n * const timer = setInterval(() => {\n * console.log('value:', form.getFieldValue('count'))\n * }, 1000)\n *\n * return () => clearInterval(timer)\n * })\n * ```\n */\nexport function useEffect(callback: EffectCallback): CreateEffectReturn {\n const dispose = createEffect(callback)\n\n onUnmounted(dispose)\n\n return dispose\n}\n\nexport default useEffect\n"],"names":["__defProp","Object","defineProperty","__publicField","obj","key","value","enumerable","configurable","writable","__defNormalProp","i","Symbol","for","t","s","i2","t2","i3","c","S","v","o","h","n2","r2","u","f","w","n3","r","e","d","a","n","p","x","l","this","W","watched","Z","unwatched","name","_","b","U","call","g","m","o2","Error","E","j","bind","dispose","createSignal","options","prototype","brand","subscribe","valueOf","toString","toJSON","peek","get","set","N","globalThis_","globalThis","window","self","global","debounce","func","debounceMs","signal","edges","pendingThis","pendingArgs","leading","includes","trailing","invoke","apply","timeoutId","schedule","clearTimeout","setTimeout","cancel","debounced","args","aborted","isFirstCall","flush","addEventListener","once","noop$1","isBuffer","x2","Buffer","getSymbols","object","getOwnPropertySymbols","filter","symbol","propertyIsEnumerable","getTag","regexpTag","stringTag","numberTag","booleanTag","argumentsTag","symbolTag","dateTag","mapTag","setTag","arrayTag","arrayBufferTag","objectTag","dataViewTag","uint8ArrayTag","uint8ClampedArrayTag","uint16ArrayTag","uint32ArrayTag","int8ArrayTag","int16ArrayTag","int32ArrayTag","float32ArrayTag","float64ArrayTag","cloneDeepWithImpl","valueToClone","keyToClone","objectToClone","stack","Map","cloneValue","cloned","has","Array","isArray","result","length","hasOwn","index","input","Date","getTime","RegExp","source","flags","lastIndex","Set","add","subarray","ArrayBuffer","isView","DataView","getPrototypeOf","constructor","SharedArrayBuffer","slice","buffer","byteOffset","byteLength","copyProperties","File","type","Blob","structuredClone","message","cause","Boolean","Number","String","isCloneableObject","create","target","keys","descriptor","getOwnPropertyDescriptor","cloneDeep","isPlainObject","proto","isUnsafeProperty","pick","isEqualsSameValueZero","other","isNaN","isEqualWithImpl","a2","b2","property","aParent","bParent","areValuesEqual","is","areObjectsEqual","aTag","bTag","aStack","bStack","size","entries","aValues","from","values","bValues","aValue","findIndex","bValue","splice","Uint8Array","aKeys","bKeys","propKey","aProp","delete","isEqual","isEqualWith","createFieldSignal","initialValue","touched","pending","valueSignal","initialSignal","touchedSignal","pendingSignal","pendingMessageSignal","pendingMessage","setValue","next","setInitialValue","setTouched","setPending","reset","FieldSignalMapImpl","normalizeKey","defaultNormalizeFieldKey","getKey","record","records","version","_a","normalizedKey","exists","disposeSignal","clear","map","part","join","createSignalEffect","fn","batchUpdates","SignalMapImpl","s2","signals","oldSignals","isBaseSchema","schema","isGroupSchema","isDependencySchema","componentType","isGroupResolvedSchema","isLegalComponentType","getBaseFieldMissing","missing","every","isLegalName","push","getGroupFieldMissing","children","getDependencyFieldMissing","to","renderer","buildWarnMessage","identifier","normalizeSchemas","schemas","missings","console","warn","toKey","toPath","deepKey","quoteChar","bracket","charCodeAt","char","path","defaultValue","isDeepKey","current","getWithPath","isObject","IS_UNSIGNED_INTEGER","isIndex","MAX_SAFE_INTEGER","isInteger","test","regexIsDeepProp","regexIsPlainProp","isKey","isSymbol","assignValue","objValue","updater","customizer","resolvedPath","updateValue","newValue","customizerResult","updateWith","getByPath","normalizeRuntimePath","setByPath","collectObjectPathsByLeaf","prefix","paths","forEach","item","itemPath","withLock","finally","diff","prev","changedValues","defaultConfig","required","readonly","disabled","visible","labelIcon","labelAlign","labelPosition","labelWidth","validationTrigger","colon","defaultConfigKey","ValidatorImpl","register","rules","defaultMessage","existing","unregister","errors","getFieldError","setFieldError","validateField","latestValues","allValid","p2","validateSingleRule","ok","buildResult","validate","error","field","failResult","messages","entry","allMessages","issues","createValidator","createRequiredRule","buildStandardSchema","label","standardIssueResult","standardValueResult","createSelectRequiredRule","createUploadRequiredRule","vendor","RendererRegistry","defaultType","renderers","override","registerAll","getRenderer","hasRenderer","isDefault","deleted","firstKey","getTypes","setDefault","getDefault","createRendererRegistry","ValidatorsRegistry","validators","validators2","resolveValidatorsBySchema","validatorsList","resolved","getNames","createValidatorsRegistry","createSchemas","nextSchemas","update","listener","isInitialNotify","unsubscribe","isSchemxSchemas","candidate","CompileErrorImpl","super","schemaName","schemaKey","CompileError","compileToDescriptors","parentKey","descriptors","normalized","compileGroup","compileDependencySlot","compileField","normalizedSchema","componentProps","cp","placeholder","dependencies","_dependencies","rest","mergedVisible","mergedReadonly","mergedDisabled","mergedAlign","align","contentAlign","mergedPlaceholder","getPlaceholder","rulesArray","mergedRequired","buildNormalizedFieldSchema","rendererType","rawChildren","schemaWithoutChildren","trigger","formApi","abortSignal","getValues","existingplaceholder","isGroupDescriptor","updateFieldModel","model","nextSnapshot","createFieldModelSnapshot","snapshot","isSameArrayOrValue","currentKeys","nextKeys","currentRecord","nextRecord","isShallowEqualRecord","createDependenciesEffect","fieldModel","context","scope","base","triggerFields","currentVersion","scheduler","track","async","resolvedProps","Promise","all","resolveDependenciesProps","runDependenciesTrigger","resolveDependencies","then","disposed","resolveDependenciesProp","condition","formValues","resolveCondition","createDependencyEffect","node","resourceScope","child","dependencySlot","slot","loading","abortController","run","dependencyResourceScope","_a2","resolve","currentDescriptor","abort","controller","AbortController","childSchemas","defaultProps","commitChildren","normalizeError","triggers","isFirstRun","pendingRun","disposeEffect","queueMicrotask","catch","runError","setupTriggerSubscription","RuntimeFieldRegistry","fields","list","createValidationEffect","taskScheduler","registered","validating","registrationVersion","scheduleRegistration","id","priority","instance","unregisterRules","registerRules","applyRegistration","readValidationProps","createLifecycleBus","initialListener","listeners","emit","on","emitMount","currentNode","_b","mount","mounted","emitBeforeMount","beforeMount","emitUpdate","previousNode","currentPreviousNode","emitBeforeUpdate","beforeUpdate","emitUpdated","updated","emitBeforeUnmount","beforeUnmount","emitUnmount","unmount","unmounted","createLifecycle","defaultGetChildren","hasDescriptor","isRootRuntimeNode","isFieldRuntimeNode","isGroupRuntimeNode","isDependencyRuntimeNode","getChildRuntimeNodes","childNodes","dynamicChildNodes","setChildRuntimeNodes","findFieldRuntimeNode","root","tree","predicate","getChildren","queue","findNodeBFS","RuntimeReconciler","runtimeNodeManager","reconcileChildren","parentNode","reconcileChildrenTree","previousByKey","groups","changed","existingNode","parent","removed","disposeTree","createScope","cleanupRecords","childScopes","cleanup","runCleanup","createDisposedHandle","removeItem","childScope","reverse","noop","items","indexOf","reportRuntimeCleanupError","DefaultRuntimeNodeManager","fieldRegistry","lifecycleBus","createRoot","createField","createGroup","createDependency","throwUnknownDescriptor","mountField","mountGroup","mountDependency","throwUnexpectedDescriptor","createPreviousRuntimeNodeSnapshot","updateField","updateGroup","isDependencyDescriptor","updateDependency","unmountField","unmountGroup","unmountDependency","isContainerRuntimeNode","createFieldModel","nextId","fieldResourceScope","fieldDependenciesScope","initializeFieldValue","mountFieldValidation","mountOrRestartFieldDependencies","getFieldSnapshot","setInitialValues","setFieldValue","_node","_descriptor","isSameNamePathList","dependenciesScope","PRIORITY_ORDER","isPromiseLike","StoreImpl","createFieldSignalMap","initialValues","fieldSignals","getOrCreateFieldSignal","getFieldValue","getFieldsValue","pathsArr","setFieldsValue","getFieldsSnapshot","getInitialValue","getInitialValues","isFieldTouched","isFieldsTouched","some","getTouchedFields","touchedFields","setFieldTouched","setFieldsTouched","isFieldPending","isFieldsPending","getPendingFields","setFieldPending","setFieldsPending","resetField","resetFields","resetValues","nextPaths","nextPathSet","destroy","buildViewSchemas","buildRuntimeNodeChildren","nodes","depth","RangeError","results","buildRuntimeNodeSchema","debug","buildDebugMeta","buildGroupViewSchema","buildDependencyRuntimeNode","sanitizePlaceholder","sanitizeComponentProps","buildFieldViewSchema","props","isValidPropKey","runtimeNodeId","runtimeNodeType","hasFieldModel","hasDependencySlot","subscribeViewSchemas","revision","onChange","rootDisposed","disposeHandle","collect","wait","debouncedRun","initialized","immediate","createDebouncedSignalEffect","viewSchemas","CreateForm","store","validator","submit","effect","batch","setSchemas","updateSchemas","updateDefaultProps","getViewRevision","viewRevision","getViewSchemas","waitForDependencies","waitForIdle","rendererRegistry","registerRenderer","getValidator","validatorRegistry","registerValidator","hasValidator","setValues","getValue","getSnapshots","isPending","isTouched","getError","setError","pendingFields","_message","_c","_d","callbacks","onFinish","onFinishFailed","reconciler","bump","schemasInput","modelValue","defaultRendererType","restOptions","onValuesChange","onFieldsChange","createStore","selectRequired","uploadRequired","queues","idleResolvers","pendingAsync","currentFlush","flushOnce","notifyIdleIfNeeded","takeBatch","task","onError","promise","isIdle","hasQueuedTasks","resolvers","whenIdle","timeout","idle","createScheduler","createViewRevision","getFormInstance","getFormApi","lifecycleHooks","applySchemas","schemasDisposer","prevSnapshot","valuesChangeDisposer","_b2","latestSnapshot","changedPaths","resolvedRules","schemaWithRules","handle","partial","assign","previousRevision","callback","createForm","form","getSnapshot","clearError","createEffect","createWatchField","isFirst","prevValue","inequality","createWatchFields","names","prevValues","currentValues","createWatchAll","createWatch","nameOrNamesOrCallback","callbackOrOptions","maybeOptions","SCHEMX_INSTANCE_KEY","useForm","formOptions","mergedOptions","globalRendererRegistry","globalRulesRegistry","computed","provide","onUnmounted","useFormInstance","inject","fieldHookCache","WeakMap","useField","formCache","cachedEntry","activeEntry","refCount","fieldValue","shallowRef","fieldError","fieldPending","dirty","createFieldHook","useWatch","useWatchFields","err","useDictionary","fieldName","ref","requestCount","loadDict","shouldFetch","currentCount","res","maxRetries","retryCount","retryDelay","retryInterval","lastError","attempt","api","executeWithRetry","formatted","formatter","format","onSuccess","dependsOn","_payload","onDepsChange","resetOnDepsChange","onMounted","refresh","mutate","data","FORM_CONTEXT_KEY","useContext","useStableRef","factory","stableRef","watchEffect","keysA","keysB","isShallowEqual","FIELD_CONTEXT_KEY","isValidTrigger","shouldValidateOn","event","onBlur","onSubmit","blur","change","normalizeTrigger","isCamelCase","str","isKebabCase","camelToKebab","replace","toLowerCase","kebabToCamel","_match","letter","toUpperCase","resolveSlot","slots","alt","extractChildSlots","allSlots","camelPrefix","kebabPrefix","normalizeToKebab","startsWith","FormGroup","defineComponent","collapsed","defaultCollapsed","toggle","collapsible","_createVNode","class","classnames","role","undefined","tabindex","onClick","onKeydown","preventDefault","FormItem","schemaRef","toRef","isViewGroupSchema","formContext","provideFieldContext","mergeTrigger","columnTrigger","contextTrigger","defaultTrigger","canVerified","isOperate","hasRules","handleChange","handleBlur","formItemProps","omit","renderLabel","labelSlot","style","width","textAlign","_createTextVNode","renderContent","component","childSlots","normalizeNameKey","columnElement","contentSlot","renderError","errorSlot","itemSlot","isPositionItem","findPositionItem","startIndex","step","__props","__emit","createContext","allPaths","watch","deep","onScopeDispose","useViewSchemas","getFormItemClass","isLast","currentKey","currentIndex","found","getSectionPosition","__expose","_createElementBlock","_normalizeClass","_Fragment","_renderList","_unref","_createBlock","$slots","slotName","_withCtx","slotProps","_renderSlot","_ctx","_mergeProps","SchemxFormExport","comp","SchemxForm","extra","install","app","_options","WrappedComponent","inheritAttrs","dict","default","setup","attrs","dictResult","childrenProps","isDependencyResolvedSchema"],"mappings":"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"}
|