attaform 0.30.0 → 0.30.1
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/dist/abstract.d.mts +15 -21
- package/dist/abstract.mjs +2 -2
- package/dist/dev/abstract.mjs +4 -4
- package/dist/dev/chunks/devtools.mjs +2 -2
- package/dist/dev/directive.mjs +1 -1
- package/dist/dev/history.mjs +1 -1
- package/dist/dev/index.mjs +5 -5
- package/dist/dev/runtime/plugins/attaform.mjs +1 -1
- package/dist/dev/shared/{attaform-dev.BK6Ge2qR.mjs → attaform-dev.BJK1kqHY.mjs} +14 -14
- package/dist/dev/shared/{attaform-dev.D6CLvaQT.mjs → attaform-dev.BMQ3GcgD.mjs} +46 -59
- package/dist/dev/shared/{attaform-dev.BisFstxh.mjs → attaform-dev.BUIFcTYf.mjs} +6 -6
- package/dist/dev/shared/{attaform-dev.DTrHonpc.mjs → attaform-dev.CT7MDjPy.mjs} +27 -36
- package/dist/dev/shared/{attaform-dev.BcYT6tFh.mjs → attaform-dev.CZz4GYZ6.mjs} +21 -9
- package/dist/dev/shared/{attaform-dev.DUZckyV8.mjs → attaform-dev.Chm4D6SJ.mjs} +2 -2
- package/dist/dev/shared/{attaform-dev.BcNtyOmf.mjs → attaform-dev.DuEE4GU1.mjs} +4 -4
- package/dist/dev/shared/{attaform-dev.CQ2rJiAX.mjs → attaform-dev.DxHdkkPG.mjs} +126 -115
- package/dist/dev/shared/{attaform-dev.BQc5QV3Y.mjs → attaform-dev.zlvDr0WB.mjs} +2 -2
- package/dist/dev/zod-v3.mjs +6 -6
- package/dist/dev/zod-v4.mjs +6 -6
- package/dist/dev/zod.mjs +5 -5
- package/dist/directive.d.mts +4 -4
- package/dist/directive.mjs +1 -1
- package/dist/esbuild.d.mts +11 -0
- package/dist/esbuild.mjs +1 -1
- package/dist/history.d.mts +3 -32
- package/dist/history.mjs +1 -1
- package/dist/index.d.mts +67 -70
- package/dist/index.mjs +3 -3
- package/dist/nuxt.d.mts +4 -3
- package/dist/nuxt.mjs +3 -6
- package/dist/rollup.d.mts +11 -0
- package/dist/rollup.mjs +1 -1
- package/dist/rspack.d.mts +19 -11
- package/dist/rspack.mjs +1 -1
- package/dist/runtime/components/AttaformDevtoolsPanel.vue +12 -12
- package/dist/runtime/components/DevtoolsValueTree.vue +2 -2
- package/dist/shared/{attaform.Rc9u4Vfw.d.mts → attaform.2FslhB9R.d.mts} +83 -95
- package/dist/shared/{attaform.BRDDQeHV.mjs → attaform.8mfKZCwH.mjs} +2 -2
- package/dist/shared/{attaform.DRUT703x.d.mts → attaform.B-Tb62qV.d.mts} +12 -12
- package/dist/shared/{attaform.v0fQtWyA.mjs → attaform.B1rH9ht6.mjs} +1 -1
- package/dist/shared/{attaform.ByWP6kSx.mjs → attaform.B2iebkPA.mjs} +3 -3
- package/dist/shared/{attaform.DhnPb6nK.mjs → attaform.BAf3UNn4.mjs} +1 -1
- package/dist/shared/{attaform.DNJOWjQw.mjs → attaform.BIWicztt.mjs} +102 -100
- package/dist/shared/attaform.BcQwgWaq.d.mts +2153 -0
- package/dist/shared/attaform.Br8EBn5B.d.mts +4553 -0
- package/dist/shared/{attaform.BXneBxEj.mjs → attaform.CO918TdU.mjs} +13 -13
- package/dist/shared/{attaform.CUfrMK7t.mjs → attaform.DRsANMok.mjs} +5 -5
- package/dist/shared/{attaform.B3resMQ1.mjs → attaform.D_f1WgYf.mjs} +40 -53
- package/dist/shared/{attaform.CJ8DpRGj.mjs → attaform.D_pt1gOj.mjs} +26 -33
- package/dist/shared/attaform.L0kUn3vL.d.mts +42 -0
- package/dist/shared/{attaform.BK0cgu2K.mjs → attaform.ZYn2ahzJ.mjs} +3 -3
- package/dist/transforms.d.mts +153 -26
- package/dist/transforms.mjs +1 -1
- package/dist/vite.d.mts +29 -52
- package/dist/vite.mjs +3 -3
- package/dist/webpack.d.mts +20 -12
- package/dist/webpack.mjs +1 -1
- package/dist/zod-v3.d.mts +90 -96
- package/dist/zod-v3.mjs +4 -4
- package/dist/zod-v4.d.mts +118 -118
- package/dist/zod-v4.mjs +4 -4
- package/dist/zod.d.mts +5 -5
- package/dist/zod.mjs +3 -3
- package/package.json +7 -6
- package/dist/shared/attaform.Clz0ArIi.d.mts +0 -44
- package/dist/shared/attaform.UGyOK83T.d.mts +0 -2366
- package/dist/shared/attaform.bKLzMU0o.d.mts +0 -4761
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as InvalidUseFormConfigError } from './attaform-dev.
|
|
2
|
-
import { u as useForm$2 } from './attaform-dev.
|
|
3
|
-
import { u as useForm$1 } from './attaform-dev.
|
|
4
|
-
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './attaform-dev.
|
|
1
|
+
import { a as InvalidUseFormConfigError } from './attaform-dev.zlvDr0WB.mjs';
|
|
2
|
+
import { u as useForm$2 } from './attaform-dev.CT7MDjPy.mjs';
|
|
3
|
+
import { u as useForm$1 } from './attaform-dev.BJK1kqHY.mjs';
|
|
4
|
+
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './attaform-dev.BUIFcTYf.mjs';
|
|
5
5
|
|
|
6
6
|
function isZodV4SchemaShape(value) {
|
|
7
7
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { computed, readonly, toRaw, ref, watchEffect, getCurrentScope, onScopeDispose, shallowReadonly, nextTick, warn, reactive, shallowReactive, shallowRef, toValue, watch, triggerRef, getCurrentInstance, onServerPrefetch, provide, useId, inject, onBeforeMount, onBeforeUpdate, onMounted, effectScope } from 'vue';
|
|
2
|
-
import { A as ANONYMOUS_FORM_KEY_PREFIX, i as isShadowedKey, d as safeOwnHas, a as safeOwnRead, e as consumerHas, f as spreadConsumerRecord, g as copyConsumerArray, r as readConsumerIndex, b as safeAssign, h as consumerKeys, j as readConsumerProp, k as diffAndApply, p as pickDefined, s as structuralSnapshot, n as normalizeNumericOption, l as DEFAULT_FIELD_VALIDATION_DEBOUNCE_MS, m as consumerSymbolKeys, o as applyChangedKeys, R as RESERVED_KEY_PREFIX, q as DEFAULT_MAX_RECURSION_DEPTH, t as ANONYMOUS_WIZARD_KEY_PREFIX } from './attaform-dev.
|
|
3
|
-
import { e as ensureAttaformInstalled, u as useRegistry, d as kFormContext, f as kFormInstanceId, b as kAttaformWizardActiveStepResolver, i as kAttaformAncestorWizard } from './attaform-dev.
|
|
4
|
-
import { R as REGISTER_OWNER_MARKER, d as armDomBinding, V as V_REGISTER_MARKER } from './attaform-dev.
|
|
5
|
-
import { i as isPathPrefix, e as canonicalizePath, k as keyForSegments, m as mapSegmentKeys, b as ROOT_PATH_KEY, s as segmentsForPathKey, S as SubmitErrorHandlerError, t as toError, j as groupErrorsByKey, n as normalizeErrorInput, h as SET_MEMBER_SEGMENT, R as ROOT_PATH, l as normalizeErrorInputs, a as InvalidUseFormConfigError, d as ReservedFormKeyError } from './attaform-dev.
|
|
2
|
+
import { A as ANONYMOUS_FORM_KEY_PREFIX, i as isShadowedKey, d as safeOwnHas, a as safeOwnRead, e as consumerHas, f as spreadConsumerRecord, g as copyConsumerArray, r as readConsumerIndex, b as safeAssign, h as consumerKeys, j as readConsumerProp, k as diffAndApply, p as pickDefined, s as structuralSnapshot, n as normalizeNumericOption, l as DEFAULT_FIELD_VALIDATION_DEBOUNCE_MS, m as consumerSymbolKeys, o as applyChangedKeys, R as RESERVED_KEY_PREFIX, q as DEFAULT_MAX_RECURSION_DEPTH, c as callConsumerFn, t as reportConsumerThrow, u as ANONYMOUS_WIZARD_KEY_PREFIX } from './attaform-dev.CZz4GYZ6.mjs';
|
|
3
|
+
import { e as ensureAttaformInstalled, u as useRegistry, d as kFormContext, f as kFormInstanceId, b as kAttaformWizardActiveStepResolver, i as kAttaformAncestorWizard } from './attaform-dev.Chm4D6SJ.mjs';
|
|
4
|
+
import { R as REGISTER_OWNER_MARKER, d as armDomBinding, V as V_REGISTER_MARKER } from './attaform-dev.BMQ3GcgD.mjs';
|
|
5
|
+
import { i as isPathPrefix, e as canonicalizePath, k as keyForSegments, m as mapSegmentKeys, b as ROOT_PATH_KEY, s as segmentsForPathKey, S as SubmitErrorHandlerError, t as toError, j as groupErrorsByKey, n as normalizeErrorInput, h as SET_MEMBER_SEGMENT, R as ROOT_PATH, l as normalizeErrorInputs, a as InvalidUseFormConfigError, d as ReservedFormKeyError } from './attaform-dev.zlvDr0WB.mjs';
|
|
6
6
|
|
|
7
7
|
const AttaformErrorCode = {
|
|
8
|
-
/** A required field is in the blank set
|
|
8
|
+
/** A required field is in the blank set: no value was supplied. */
|
|
9
9
|
NoValueSupplied: "atta:no-value-supplied",
|
|
10
10
|
/** The schema adapter's `validateAtPath` threw synchronously. */
|
|
11
11
|
AdapterThrew: "atta:adapter-threw",
|
|
@@ -565,9 +565,8 @@ function buildLeafFieldStateBase(state, segments, key, formInstanceId) {
|
|
|
565
565
|
updatedAt: record?.updatedAt ?? null,
|
|
566
566
|
errors,
|
|
567
567
|
// A leaf has no descendants, so its own-bucket errors ARE its subtree
|
|
568
|
-
// errors. Reuse the
|
|
569
|
-
//
|
|
570
|
-
// map (preserves the P3 blank-reactivity optimization above).
|
|
568
|
+
// errors. Reuse the array reference, which makes `ownErrors === errors`
|
|
569
|
+
// and avoids a second read of the whole-form `derivedBlankErrors` map.
|
|
571
570
|
ownErrors: errors,
|
|
572
571
|
validating,
|
|
573
572
|
valid,
|
|
@@ -747,19 +746,19 @@ function buildContainerFieldStateBase(state, segments, key, formInstanceId) {
|
|
|
747
746
|
elements: EMPTY_ELEMENTS,
|
|
748
747
|
updatedAt,
|
|
749
748
|
errors,
|
|
750
|
-
// The container's OWN bucket
|
|
751
|
-
// descendant
|
|
752
|
-
//
|
|
753
|
-
//
|
|
754
|
-
//
|
|
749
|
+
// The container's OWN bucket at this exact path, excluding every
|
|
750
|
+
// descendant `errors` rolls up: a cross-field `.refine()` here, or a
|
|
751
|
+
// `setErrors` pinned at this node. The same raw union the leaf builds
|
|
752
|
+
// from the three stores, and the container already depends on all three
|
|
753
|
+
// through `aggregateErrorsAt`, so it costs no new reactivity.
|
|
755
754
|
ownErrors: state.getErrorsForPath(segments),
|
|
756
755
|
validating,
|
|
757
756
|
valid,
|
|
758
757
|
transforming,
|
|
759
758
|
busy: transforming || validating,
|
|
760
|
-
// A container surfaces its OWN transform failure
|
|
761
|
-
// on the container path
|
|
762
|
-
// descendant
|
|
759
|
+
// A container surfaces its OWN transform failure, from a transform
|
|
760
|
+
// registered on the container path such as a file normalizer, and never
|
|
761
|
+
// rolls up a descendant's: that stays a per-field channel.
|
|
763
762
|
transformError: ownTransformError,
|
|
764
763
|
path: segments,
|
|
765
764
|
...computeFieldIdentity(formInstanceId, state.formKey, key),
|
|
@@ -886,7 +885,7 @@ function isArrayPath(state, segments) {
|
|
|
886
885
|
function warnReadOnly(surface, action, key) {
|
|
887
886
|
const phrase = action === "write" ? `write to "${String(key)}"` : `${action} of "${String(key)}"`;
|
|
888
887
|
console.warn(
|
|
889
|
-
`[attaform] ${surface} is read-only
|
|
888
|
+
`[attaform] ${surface} is read-only; ${phrase} was ignored. Mutate the form via setValue / the directive / field-array helpers instead.`
|
|
890
889
|
);
|
|
891
890
|
}
|
|
892
891
|
function makeReadonlyCoercion(snapshot) {
|
|
@@ -1094,9 +1093,9 @@ function buildErrorsSurface(state, sweep) {
|
|
|
1094
1093
|
// non-schema keys reachable while a genuinely-absent key stays out.
|
|
1095
1094
|
hasOwn: (segments, key) => liveContainerHasKey(state, segments, key) || errorAwareContainerKeys(state, segments).includes(key),
|
|
1096
1095
|
isArrayAt: (segments) => isArrayPath(state, segments),
|
|
1097
|
-
// `errors()
|
|
1098
|
-
// aggregate
|
|
1099
|
-
//
|
|
1096
|
+
// `errors()`, `errors([])` and `errors(path)` are all the subtree
|
|
1097
|
+
// aggregate, through the helper `meta.errors` reads, so they cannot
|
|
1098
|
+
// drift.
|
|
1100
1099
|
call: (path) => aggregateErrorsAt(state, path, keyForSegments(path).key),
|
|
1101
1100
|
surface: "form.errors",
|
|
1102
1101
|
sweep
|
|
@@ -2161,9 +2160,9 @@ function reportRejection(store, path, kind, accepted) {
|
|
|
2161
2160
|
if (!shouldWarnOnce(store, key)) return;
|
|
2162
2161
|
if (accepted.size === 0) {
|
|
2163
2162
|
console.warn(
|
|
2164
|
-
`[attaform] Cannot write to '${dotted}'
|
|
2163
|
+
`[attaform] Cannot write to '${dotted}': this path is not in your schema.
|
|
2165
2164
|
Fix: check for a typo in register('${dotted}'); it should match a leaf key in your schema.
|
|
2166
|
-
(If the path resolves to a never-typed schema, it explicitly admits no values
|
|
2165
|
+
(If the path resolves to a never-typed schema, it explicitly admits no values; relax the schema if intentional.)
|
|
2167
2166
|
The write was a no-op.`
|
|
2168
2167
|
);
|
|
2169
2168
|
return;
|
|
@@ -2171,7 +2170,7 @@ function reportRejection(store, path, kind, accepted) {
|
|
|
2171
2170
|
const expected = formatExpectedKinds(accepted);
|
|
2172
2171
|
if (kind === "string" && accepted.has("number")) {
|
|
2173
2172
|
console.warn(
|
|
2174
|
-
`[attaform] Cannot write a string to '${dotted}'
|
|
2173
|
+
`[attaform] Cannot write a string to '${dotted}': the schema expects ${expected}.
|
|
2175
2174
|
Fix: add type="number" to the input, OR use the .number modifier on v-register:
|
|
2176
2175
|
<input type="number" v-register="register('${dotted}')" />
|
|
2177
2176
|
<input v-register.number="register('${dotted}')" />
|
|
@@ -2180,7 +2179,7 @@ function reportRejection(store, path, kind, accepted) {
|
|
|
2180
2179
|
return;
|
|
2181
2180
|
}
|
|
2182
2181
|
console.warn(
|
|
2183
|
-
`[attaform] Cannot write a ${kind} to '${dotted}'
|
|
2182
|
+
`[attaform] Cannot write a ${kind} to '${dotted}': the schema expects ${expected}.
|
|
2184
2183
|
The write was a no-op.`
|
|
2185
2184
|
);
|
|
2186
2185
|
}
|
|
@@ -2385,7 +2384,7 @@ function buildRegister(state, formInstanceId, instanceConfig) {
|
|
|
2385
2384
|
}
|
|
2386
2385
|
return accepted;
|
|
2387
2386
|
},
|
|
2388
|
-
// Called by the `
|
|
2387
|
+
// Called by the `vRegisterHintTransform` compile-time transform's wrapping
|
|
2389
2388
|
// IIFE on every server-side render of `<element v-register="…">`.
|
|
2390
2389
|
// Without it, every SSR'd FieldState serialises `connected: false`
|
|
2391
2390
|
// (because Vue skips directive lifecycle during SSR) and the client
|
|
@@ -2414,12 +2413,12 @@ function buildRegister(state, formInstanceId, instanceConfig) {
|
|
|
2414
2413
|
}
|
|
2415
2414
|
return false;
|
|
2416
2415
|
},
|
|
2417
|
-
// --- Async transform lifecycle (internal; the directive's
|
|
2418
|
-
//
|
|
2419
|
-
//
|
|
2420
|
-
//
|
|
2421
|
-
//
|
|
2422
|
-
//
|
|
2416
|
+
// --- Async transform lifecycle (internal; the directive's deferred
|
|
2417
|
+
// orchestrator is the only legitimate consumer). Thin path-bound
|
|
2418
|
+
// delegates to the store's per-path token and counter machinery,
|
|
2419
|
+
// the same pattern as `markBlank` and `setValueWithInternalPath`, so
|
|
2420
|
+
// the directive (which holds this RegisterValue and never the store)
|
|
2421
|
+
// can drive the busy / discard / error bookkeeping. ---
|
|
2423
2422
|
beginTransform: (holder) => state.beginTransform(pathKey, holder),
|
|
2424
2423
|
isCurrentTransform: (token) => state.isCurrentTransform(pathKey, token),
|
|
2425
2424
|
endTransform: (token) => state.endTransform(pathKey, token),
|
|
@@ -2432,10 +2431,10 @@ function buildRegister(state, formInstanceId, instanceConfig) {
|
|
|
2432
2431
|
return (state.fieldTransformCounts.get(pathKey) ?? 0) > 0;
|
|
2433
2432
|
},
|
|
2434
2433
|
path: pathKey,
|
|
2435
|
-
// Frozen so a wrapper component can pass `rv.segments`
|
|
2436
|
-
//
|
|
2437
|
-
//
|
|
2438
|
-
//
|
|
2434
|
+
// Frozen so a wrapper component can pass `rv.segments` straight to
|
|
2435
|
+
// `form.fields(...)` with no defensive copy, and so neither a test
|
|
2436
|
+
// fixture nor downstream code can mutate the canonical segment list
|
|
2437
|
+
// out from under the directive.
|
|
2439
2438
|
segments: Object.freeze(segments.slice()),
|
|
2440
2439
|
formKey: state.formKey,
|
|
2441
2440
|
formInstanceId,
|
|
@@ -2641,15 +2640,15 @@ function buildMetaProxy(keys, read) {
|
|
|
2641
2640
|
return new Proxy(target, {
|
|
2642
2641
|
get: (_, key) => owns.has(key) ? read(key) : Reflect.get(target, key),
|
|
2643
2642
|
has: (_, key) => owns.has(key) || Reflect.has(target, key),
|
|
2644
|
-
// Safe to hand back the same array every time: the spec copies a
|
|
2645
|
-
//
|
|
2643
|
+
// Safe to hand back the same array every time: the spec copies a trap's
|
|
2644
|
+
// key list before using it.
|
|
2646
2645
|
ownKeys: () => keys,
|
|
2647
2646
|
getOwnPropertyDescriptor(_, key) {
|
|
2648
2647
|
if (!owns.has(key)) return Reflect.getOwnPropertyDescriptor(target, key);
|
|
2649
2648
|
return { configurable: true, enumerable: true, value: read(key), writable: false };
|
|
2650
2649
|
},
|
|
2651
|
-
// A getter with no setter throws on assignment under strict mode,
|
|
2652
|
-
//
|
|
2650
|
+
// A getter with no setter throws on assignment under strict mode, which
|
|
2651
|
+
// every module here is; `false` keeps that.
|
|
2653
2652
|
set: denyWrite,
|
|
2654
2653
|
deleteProperty: denyWrite,
|
|
2655
2654
|
defineProperty: denyWrite
|
|
@@ -2885,12 +2884,11 @@ function buildFormApi(state, formInstanceId, options = {}) {
|
|
|
2885
2884
|
);
|
|
2886
2885
|
const rootFieldState = getRootFieldStateAt([]);
|
|
2887
2886
|
const metaOwn = {
|
|
2888
|
-
// Whole-form work signals compose the LIFECYCLE counters with the
|
|
2889
|
-
//
|
|
2890
|
-
//
|
|
2891
|
-
//
|
|
2892
|
-
//
|
|
2893
|
-
// unfiltered whole-form aggregate.
|
|
2887
|
+
// Whole-form work signals compose the LIFECYCLE counters with the per-leaf
|
|
2888
|
+
// rollup: a submit-time validate shows up in `activeValidations` and a
|
|
2889
|
+
// per-field debounced validator in `fieldValidationCounts`, and either
|
|
2890
|
+
// flips the flag. `valid` keeps the form-level mount gate, and `errors` is
|
|
2891
|
+
// the unfiltered whole-form aggregate.
|
|
2894
2892
|
validating: computed(
|
|
2895
2893
|
() => state.activeValidations.value > 0 || rootFieldState.value.validating
|
|
2896
2894
|
),
|
|
@@ -2902,7 +2900,7 @@ function buildFormApi(state, formInstanceId, options = {}) {
|
|
|
2902
2900
|
busy: computed(
|
|
2903
2901
|
() => state.activeValidations.value > 0 || state.activeTransforms.value > 0 || rootFieldState.value.validating || rootFieldState.value.transforming
|
|
2904
2902
|
),
|
|
2905
|
-
// Lifecycle
|
|
2903
|
+
// Lifecycle, form-level only and never on FieldState.
|
|
2906
2904
|
submitting,
|
|
2907
2905
|
submissionAttempts,
|
|
2908
2906
|
departAttempts,
|
|
@@ -3019,10 +3017,10 @@ function buildFormApi(state, formInstanceId, options = {}) {
|
|
|
3019
3017
|
}
|
|
3020
3018
|
const api = {
|
|
3021
3019
|
handleSubmit: gated(handleSubmit),
|
|
3022
|
-
//
|
|
3023
|
-
// reactive containers (`meta`, `history`, `blankPaths`) are exposed
|
|
3024
|
-
//
|
|
3025
|
-
//
|
|
3020
|
+
// The callable readonly Proxies (`values`, `fields`, `errors`) and the
|
|
3021
|
+
// reactive containers (`meta`, `history`, `blankPaths`) are exposed through
|
|
3022
|
+
// getters, so reading one activates the form on first touch. Each
|
|
3023
|
+
// underlying object is identity-stable across reads.
|
|
3026
3024
|
get values() {
|
|
3027
3025
|
void state.activate();
|
|
3028
3026
|
return valuesProxy;
|
|
@@ -3039,7 +3037,7 @@ function buildFormApi(state, formInstanceId, options = {}) {
|
|
|
3039
3037
|
key: state.formKey,
|
|
3040
3038
|
// Auto-unwrapping views over the per-store async-defaults lifecycle
|
|
3041
3039
|
// refs (see FormStore.hydrating / hydrateError). Reading either
|
|
3042
|
-
// activates the form
|
|
3040
|
+
// activates the form: observing factory state implies use.
|
|
3043
3041
|
get hydrating() {
|
|
3044
3042
|
void state.activate();
|
|
3045
3043
|
return state.hydrating.value;
|
|
@@ -3048,20 +3046,18 @@ function buildFormApi(state, formInstanceId, options = {}) {
|
|
|
3048
3046
|
void state.activate();
|
|
3049
3047
|
return state.hydrateError.value;
|
|
3050
3048
|
},
|
|
3051
|
-
// Orthogonal to `hydrating` and `hydrateError
|
|
3052
|
-
//
|
|
3053
|
-
// resolved
|
|
3054
|
-
// refetches even when those
|
|
3055
|
-
//
|
|
3056
|
-
// `hydrateError` surfaces the refresh failure.
|
|
3049
|
+
// Orthogonal to `hydrating` and `hydrateError`. `ready` flips true once
|
|
3050
|
+
// defaults are applied, whether sync at construction or from a factory
|
|
3051
|
+
// that resolved, and it is a one-way latch: it stays true through later
|
|
3052
|
+
// refetches even when those fail, so a stale-while-revalidate UI keeps
|
|
3053
|
+
// rendering the prior values while `hydrateError` surfaces the failure.
|
|
3057
3054
|
get ready() {
|
|
3058
3055
|
void state.activate();
|
|
3059
3056
|
return state.defaultsResolved.value;
|
|
3060
3057
|
},
|
|
3061
|
-
// `rehydrate` and `activate` are
|
|
3062
|
-
//
|
|
3063
|
-
//
|
|
3064
|
-
// so they call `state` directly.
|
|
3058
|
+
// `rehydrate` and `activate` are activation entry points themselves and
|
|
3059
|
+
// fire the factory by design, so wrapping them in `gated` would
|
|
3060
|
+
// double-fire. They call `state` directly.
|
|
3065
3061
|
rehydrate: () => state.rehydrate(),
|
|
3066
3062
|
activate: () => state.activate(),
|
|
3067
3063
|
get errors() {
|
|
@@ -3724,19 +3720,16 @@ function touchFieldRecord(st, pathKey, path, patch) {
|
|
|
3724
3720
|
path,
|
|
3725
3721
|
updatedAt: patch.updatedAt ?? current?.updatedAt ?? null,
|
|
3726
3722
|
connected: patch.connected ?? current?.connected ?? false,
|
|
3727
|
-
// focused/blurred
|
|
3728
|
-
//
|
|
3729
|
-
//
|
|
3730
|
-
// `current`, losing the intent. `!== undefined` honours an
|
|
3731
|
-
// explicit null and preserves current only on absence.
|
|
3723
|
+
// `focused` / `blurred` need an explicit-undefined guard: a patch
|
|
3724
|
+
// legitimately carries `null` to mark a disconnect, and `??` would
|
|
3725
|
+
// short-circuit on it and fall through to `current`, losing the intent.
|
|
3732
3726
|
focused: patch.focused !== void 0 ? patch.focused : current?.focused ?? null,
|
|
3733
3727
|
blurred: patch.blurred !== void 0 ? patch.blurred : current?.blurred ?? null,
|
|
3734
|
-
// touched is plain
|
|
3735
|
-
// guard here because `false` is not nullish.
|
|
3728
|
+
// `touched` is a plain boolean, so `??` is equivalent to the guard above.
|
|
3736
3729
|
touched: patch.touched ?? current?.touched ?? false,
|
|
3737
|
-
// interacted is sticky-true
|
|
3738
|
-
//
|
|
3739
|
-
//
|
|
3730
|
+
// `interacted` is sticky-true and a merge patch only ever sets it, so `??`
|
|
3731
|
+
// preserves the current bit. Only the reset paths clear it, and they
|
|
3732
|
+
// reconstruct the record outright.
|
|
3740
3733
|
interacted: patch.interacted ?? current?.interacted ?? false,
|
|
3741
3734
|
blurredAfterInteraction: patch.blurredAfterInteraction ?? current?.blurredAfterInteraction ?? false
|
|
3742
3735
|
});
|
|
@@ -4305,13 +4298,13 @@ function markFocused(st, path, focused, meta) {
|
|
|
4305
4298
|
touchFieldRecord(st, key, path, {
|
|
4306
4299
|
focused,
|
|
4307
4300
|
blurred: !focused,
|
|
4308
|
-
// `touched` flips
|
|
4309
|
-
//
|
|
4301
|
+
// `touched` flips true on blur and stays; a focused field keeps whatever
|
|
4302
|
+
// it held.
|
|
4310
4303
|
touched: focused ? current?.touched ?? false : true,
|
|
4311
|
-
// `blurredAfterInteraction` flips true on the first blur
|
|
4312
|
-
//
|
|
4313
|
-
//
|
|
4314
|
-
//
|
|
4304
|
+
// `blurredAfterInteraction` flips true on the first blur after a value
|
|
4305
|
+
// edit and stays. A tab-through blur before any edit leaves it false,
|
|
4306
|
+
// since `interacted` is still false, which is what keeps a clean
|
|
4307
|
+
// tab-through from arming the gate.
|
|
4315
4308
|
blurredAfterInteraction: !focused && current?.interacted === true ? true : current?.blurredAfterInteraction ?? false
|
|
4316
4309
|
});
|
|
4317
4310
|
const focusMode = meta?.instance?.validateOn ?? st.fieldValidationMode;
|
|
@@ -4507,7 +4500,7 @@ function resetField(st, path) {
|
|
|
4507
4500
|
const wrote = setValueAtPath(st, targetSegments, leafEntry.value);
|
|
4508
4501
|
if (!wrote) {
|
|
4509
4502
|
console.error(
|
|
4510
|
-
`[attaform] resetField: leaf write rejected for path '${targetKey}'
|
|
4503
|
+
`[attaform] resetField: leaf write rejected for path '${targetKey}'. Originals contain a value that doesn't satisfy the slim primitive shape. This is a bug in the construction pipeline.`
|
|
4511
4504
|
);
|
|
4512
4505
|
}
|
|
4513
4506
|
} else {
|
|
@@ -4528,7 +4521,7 @@ function resetField(st, path) {
|
|
|
4528
4521
|
const wroteSubtree = setValueAtPath(st, targetSegments, subtree);
|
|
4529
4522
|
if (!wroteSubtree) {
|
|
4530
4523
|
console.error(
|
|
4531
|
-
`[attaform] resetField: subtree write rejected at path '${targetKey}'
|
|
4524
|
+
`[attaform] resetField: subtree write rejected at path '${targetKey}'. Originals contain values that don't satisfy the slim primitive shape. This is a bug in the construction pipeline.`
|
|
4532
4525
|
);
|
|
4533
4526
|
}
|
|
4534
4527
|
}
|
|
@@ -4783,15 +4776,12 @@ function createFormStore(options) {
|
|
|
4783
4776
|
blankPaths,
|
|
4784
4777
|
originalBlankPaths,
|
|
4785
4778
|
// --- kernel-internal state ---
|
|
4786
|
-
//
|
|
4787
|
-
//
|
|
4788
|
-
//
|
|
4789
|
-
//
|
|
4790
|
-
//
|
|
4791
|
-
//
|
|
4792
|
-
// keeps a reference to the literal they passed cannot mutate the
|
|
4793
|
-
// form's defaults from outside. `reset()` snapshots for a harder
|
|
4794
|
-
// reason (see there) where an alias IS reachable.
|
|
4779
|
+
// A defensive copy. `getDefaultValues` building a fresh tree is an adapter
|
|
4780
|
+
// implementation detail, not a contract, and this field is durable state
|
|
4781
|
+
// that every `reset()` reads, so it must not depend on one. The copy also
|
|
4782
|
+
// stops a consumer holding a reference to the literal they passed from
|
|
4783
|
+
// mutating the form's defaults from outside. `reset()` snapshots for a
|
|
4784
|
+
// harder reason, where an alias IS reachable.
|
|
4795
4785
|
defaultValues: structuralSnapshot(defaultValues),
|
|
4796
4786
|
ssrPrefetch,
|
|
4797
4787
|
rememberVariants,
|
|
@@ -4829,10 +4819,10 @@ function createFormStore(options) {
|
|
|
4829
4819
|
arrayElementKey: bind(arrayElementKey),
|
|
4830
4820
|
reset: bind(reset),
|
|
4831
4821
|
resetField: bind(resetField),
|
|
4832
|
-
// The schema/user pair below reads as a fold waiting to happen.
|
|
4833
|
-
//
|
|
4834
|
-
//
|
|
4835
|
-
//
|
|
4822
|
+
// The schema/user pair below reads as a fold waiting to happen. Folding
|
|
4823
|
+
// them into a `setErrorsForPathIn(channel)` factory measures 10 B LARGER:
|
|
4824
|
+
// gzip has already collected the rent on two adjacent copies, and the
|
|
4825
|
+
// helper adds a name the original does not need.
|
|
4836
4826
|
setSchemaErrorsForPath: (path, entries) => setErrorChannelForKey(
|
|
4837
4827
|
st,
|
|
4838
4828
|
canonicalizePath(path).key,
|
|
@@ -5041,12 +5031,10 @@ function buildFreshState(key, schema, configuration, registry) {
|
|
|
5041
5031
|
coerce: configuration.coerce,
|
|
5042
5032
|
initialBlankPaths
|
|
5043
5033
|
}),
|
|
5044
|
-
// Server
|
|
5045
|
-
//
|
|
5046
|
-
//
|
|
5047
|
-
//
|
|
5048
|
-
// wizard explicitly skipped this key — even an explicit
|
|
5049
|
-
// `form.activate()` defers to the wizard's render-efficiency
|
|
5034
|
+
// Server only. `enqueue` records intent on every `state.activate()`
|
|
5035
|
+
// so a wizard skip-list override has a consistent set to diff
|
|
5036
|
+
// against; `shouldFire` lets the activate path bail on a key the
|
|
5037
|
+
// wizard skipped. Even an explicit `form.activate()` defers to that
|
|
5050
5038
|
// skip-list on the server.
|
|
5051
5039
|
...registry.ssr ? {
|
|
5052
5040
|
ssrPrefetch: {
|
|
@@ -5259,7 +5247,7 @@ function warnOutsideSetup() {
|
|
|
5259
5247
|
warnedOutsideSetup = true;
|
|
5260
5248
|
const frame = captureUserCallSite();
|
|
5261
5249
|
console.warn(
|
|
5262
|
-
`[attaform] useRegister() called outside a component setup; returning an unbound RegisterValue proxy. Fix: call it inside <script setup> or a setup() function
|
|
5250
|
+
`[attaform] useRegister() called outside a component setup; returning an unbound RegisterValue proxy. Fix: call it inside <script setup> or a setup() function, not from an event handler or async callback.` + (frame !== void 0 ? ` ${frame}` : "")
|
|
5263
5251
|
);
|
|
5264
5252
|
}
|
|
5265
5253
|
function warnNoParentRV(instance) {
|
|
@@ -5490,7 +5478,7 @@ function useWizard(options) {
|
|
|
5490
5478
|
const rawSteps = Array.isArray(options.steps) ? options.steps : [];
|
|
5491
5479
|
if (rawSteps.length === 0 && true) {
|
|
5492
5480
|
console.error(
|
|
5493
|
-
"[attaform] useWizard({ steps }): expected a non-empty array of step slots. Continuing with an empty step list
|
|
5481
|
+
"[attaform] useWizard({ steps }): expected a non-empty array of step slots. Continuing with an empty step list: wizard.currentStep reads as undefined, navigation refuses, handleSubmit no-ops."
|
|
5494
5482
|
);
|
|
5495
5483
|
}
|
|
5496
5484
|
const registry = useRegistry();
|
|
@@ -5579,33 +5567,45 @@ function useWizard(options) {
|
|
|
5579
5567
|
return activeKey.value === "" ? void 0 : activeKey.value;
|
|
5580
5568
|
}
|
|
5581
5569
|
};
|
|
5582
|
-
function lazyComputedFor(marker) {
|
|
5570
|
+
function lazyComputedFor(marker, index) {
|
|
5583
5571
|
const cached = lazyComputeds.get(marker);
|
|
5584
5572
|
if (cached !== void 0) return cached;
|
|
5585
5573
|
const c = computed(() => {
|
|
5586
5574
|
void lazyEpoch.value;
|
|
5587
|
-
return
|
|
5575
|
+
return callConsumerFn(
|
|
5576
|
+
() => marker.resolve(slotCtx),
|
|
5577
|
+
void 0,
|
|
5578
|
+
"wizard-lazy-slot",
|
|
5579
|
+
`steps[${index}]`
|
|
5580
|
+
);
|
|
5588
5581
|
});
|
|
5589
5582
|
lazyComputeds.set(marker, c);
|
|
5590
5583
|
return c;
|
|
5591
5584
|
}
|
|
5592
5585
|
const MAX_SLOT_DEPTH = 32;
|
|
5593
|
-
function normalizeSlot(slot, ctx, gated, depth) {
|
|
5586
|
+
function normalizeSlot(slot, ctx, gated, depth, index) {
|
|
5594
5587
|
if (depth > MAX_SLOT_DEPTH) {
|
|
5595
5588
|
{
|
|
5596
5589
|
console.warn(
|
|
5597
|
-
`[attaform] useWizard:
|
|
5590
|
+
`[attaform] useWizard: steps[${index}] nested past ${MAX_SLOT_DEPTH} levels (gate / lazy / function); dropping it. Check for a resolver that returns itself.`
|
|
5598
5591
|
);
|
|
5599
5592
|
}
|
|
5600
5593
|
return void 0;
|
|
5601
5594
|
}
|
|
5602
5595
|
if (slot === void 0 || slot === null) return void 0;
|
|
5603
5596
|
if (typeof slot === "string") return { form: getOrBuildNoop(slot), gated };
|
|
5604
|
-
if (isGateMarker(slot)) return normalizeSlot(slot.inner, ctx, true, depth + 1);
|
|
5605
|
-
if (isLazyMarker(slot))
|
|
5597
|
+
if (isGateMarker(slot)) return normalizeSlot(slot.inner, ctx, true, depth + 1, index);
|
|
5598
|
+
if (isLazyMarker(slot)) {
|
|
5599
|
+
return normalizeSlot(lazyComputedFor(slot, index).value, ctx, gated, depth + 1, index);
|
|
5600
|
+
}
|
|
5606
5601
|
if (typeof slot === "function") {
|
|
5607
|
-
const result =
|
|
5608
|
-
|
|
5602
|
+
const result = callConsumerFn(
|
|
5603
|
+
() => slot(ctx),
|
|
5604
|
+
void 0,
|
|
5605
|
+
"wizard-slot",
|
|
5606
|
+
`steps[${index}]`
|
|
5607
|
+
);
|
|
5608
|
+
return normalizeSlot(result, ctx, gated, depth + 1, index);
|
|
5609
5609
|
}
|
|
5610
5610
|
if (isAnyForm(slot)) return { form: slot, gated };
|
|
5611
5611
|
return void 0;
|
|
@@ -5614,7 +5614,7 @@ function useWizard(options) {
|
|
|
5614
5614
|
const out = [];
|
|
5615
5615
|
const seen = /* @__PURE__ */ new Set();
|
|
5616
5616
|
for (let i = 0; i < rawSteps.length; i++) {
|
|
5617
|
-
const norm = normalizeSlot(rawSteps[i], slotCtx, false, 0);
|
|
5617
|
+
const norm = normalizeSlot(rawSteps[i], slotCtx, false, 0, i);
|
|
5618
5618
|
if (norm === void 0) continue;
|
|
5619
5619
|
const { form, gated } = norm;
|
|
5620
5620
|
if (seen.has(form.key)) {
|
|
@@ -5927,13 +5927,15 @@ function useWizard(options) {
|
|
|
5927
5927
|
seedRef.value = resolved.value;
|
|
5928
5928
|
applyGateSeed(resolved.value);
|
|
5929
5929
|
} else {
|
|
5930
|
-
const eager = resolved.factory();
|
|
5930
|
+
const eager = callConsumerFn(() => resolved.factory(), void 0, "wizard-default-statuses");
|
|
5931
5931
|
if (eager instanceof Promise) {
|
|
5932
5932
|
void eager.then((value) => {
|
|
5933
5933
|
seedRef.value = value;
|
|
5934
5934
|
applyGateSeed(value);
|
|
5935
|
+
}).catch((err) => {
|
|
5936
|
+
reportConsumerThrow("wizard-default-statuses", void 0, err);
|
|
5935
5937
|
});
|
|
5936
|
-
} else {
|
|
5938
|
+
} else if (eager !== void 0) {
|
|
5937
5939
|
seedRef.value = eager;
|
|
5938
5940
|
applyGateSeed(eager);
|
|
5939
5941
|
}
|
|
@@ -6019,10 +6021,15 @@ function useWizard(options) {
|
|
|
6019
6021
|
}
|
|
6020
6022
|
const progressOverride = options.progress;
|
|
6021
6023
|
const progress = computed(() => {
|
|
6024
|
+
const list = compiledSteps.value;
|
|
6022
6025
|
if (progressOverride !== void 0) {
|
|
6023
|
-
|
|
6026
|
+
const override = callConsumerFn(
|
|
6027
|
+
() => progressOverride(list),
|
|
6028
|
+
null,
|
|
6029
|
+
"wizard-progress"
|
|
6030
|
+
);
|
|
6031
|
+
if (override !== null) return override;
|
|
6024
6032
|
}
|
|
6025
|
-
const list = compiledSteps.value;
|
|
6026
6033
|
if (list.length === 0) return 0;
|
|
6027
6034
|
let valid = 0;
|
|
6028
6035
|
for (const step of list) {
|
|
@@ -6050,11 +6057,15 @@ function useWizard(options) {
|
|
|
6050
6057
|
historyHandle.subscribe((value) => {
|
|
6051
6058
|
urlMirror.value = value;
|
|
6052
6059
|
});
|
|
6053
|
-
const
|
|
6060
|
+
const consumerRestore = options.restore;
|
|
6061
|
+
const restoreCallback = consumerRestore === false ? void 0 : consumerRestore !== void 0 ? () => callConsumerFn(() => consumerRestore(), void 0, "wizard-restore") : () => {
|
|
6054
6062
|
const value = urlMirror.value;
|
|
6055
6063
|
return value === void 0 ? void 0 : { step: value };
|
|
6056
6064
|
};
|
|
6057
|
-
const
|
|
6065
|
+
const consumerPersist = options.persist;
|
|
6066
|
+
const persistCallback = consumerPersist === false ? void 0 : consumerPersist !== void 0 ? (state) => {
|
|
6067
|
+
callConsumerFn(() => consumerPersist(state), void 0, "wizard-persist");
|
|
6068
|
+
} : (state) => {
|
|
6058
6069
|
if (state.step === void 0) return;
|
|
6059
6070
|
const current = historyHandle.read();
|
|
6060
6071
|
const effectiveCurrent = current !== void 0 && isCompiledKey(current) ? current : firstKey();
|
|
@@ -9,7 +9,7 @@ class InvalidPathError extends AttaformError {
|
|
|
9
9
|
class InvalidUseFormConfigError extends AttaformError {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(
|
|
12
|
-
"[attaform] useForm received an invalid configuration (a schema directly, no argument, or no `schema` field). Pass it as `useForm({ schema })
|
|
12
|
+
"[attaform] useForm received an invalid configuration (a schema directly, no argument, or no `schema` field). Pass it as `useForm({ schema })`: the schema is one of several configuration options. See https://attaform.dev/docs/reading-the-form/the-form for the full configuration shape."
|
|
13
13
|
);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -57,7 +57,7 @@ class OutsideSetupError extends AttaformError {
|
|
|
57
57
|
class ReservedFormKeyError extends AttaformError {
|
|
58
58
|
constructor(key) {
|
|
59
59
|
super(
|
|
60
|
-
`[attaform] Form key "${key}" uses the reserved "__atta:" namespace. Use a different prefix
|
|
60
|
+
`[attaform] Form key "${key}" uses the reserved "__atta:" namespace. Use a different prefix: "__atta:" is for library-internal synthetic keys (anonymous useForm() calls without an explicit key).`
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
}
|
package/dist/dev/zod-v3.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { i as isZodSchemaType, u as useForm, z as zodAdapter } from './shared/attaform-dev.
|
|
2
|
-
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './shared/attaform-dev.
|
|
3
|
-
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.
|
|
4
|
-
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.
|
|
5
|
-
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.
|
|
6
|
-
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.
|
|
1
|
+
export { i as isZodSchemaType, u as useForm, z as zodAdapter } from './shared/attaform-dev.CT7MDjPy.mjs';
|
|
2
|
+
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './shared/attaform-dev.BUIFcTYf.mjs';
|
|
3
|
+
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.zlvDr0WB.mjs';
|
|
4
|
+
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.DxHdkkPG.mjs';
|
|
5
|
+
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.Chm4D6SJ.mjs';
|
|
6
|
+
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.BMQ3GcgD.mjs';
|
|
7
7
|
|
|
8
8
|
const fieldMeta = installingFieldMetaStore;
|
|
9
9
|
function withMeta(schema, payload) {
|
package/dist/dev/zod-v4.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { a as assertZodVersion, k as kindOf, u as useForm, z as zodAdapter } from './shared/attaform-dev.
|
|
2
|
-
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './shared/attaform-dev.
|
|
3
|
-
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.
|
|
4
|
-
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.
|
|
5
|
-
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.
|
|
6
|
-
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.
|
|
1
|
+
export { a as assertZodVersion, k as kindOf, u as useForm, z as zodAdapter } from './shared/attaform-dev.BJK1kqHY.mjs';
|
|
2
|
+
import { i as installingFieldMetaStore, g as getFieldMetaForSchema } from './shared/attaform-dev.BUIFcTYf.mjs';
|
|
3
|
+
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.zlvDr0WB.mjs';
|
|
4
|
+
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.DxHdkkPG.mjs';
|
|
5
|
+
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.Chm4D6SJ.mjs';
|
|
6
|
+
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.BMQ3GcgD.mjs';
|
|
7
7
|
|
|
8
8
|
const fieldMeta = installingFieldMetaStore;
|
|
9
9
|
function withMeta(schema, payload) {
|
package/dist/dev/zod.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.
|
|
2
|
-
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.
|
|
3
|
-
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.
|
|
4
|
-
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.
|
|
5
|
-
export { f as fieldMeta, u as useForm, w as withMeta } from './shared/attaform-dev.
|
|
1
|
+
export { A as AttaformError, I as InvalidPathError, a as InvalidUseFormConfigError, O as OutsideSetupError, R as ROOT_PATH, b as ROOT_PATH_KEY, c as RegistryNotInstalledError, d as ReservedFormKeyError, S as SubmitErrorHandlerError, e as canonicalizePath, i as isPathPrefix, p as parseDottedPath } from './shared/attaform-dev.zlvDr0WB.mjs';
|
|
2
|
+
export { A as AttaformErrorCode, e as escapeForInlineScript, g as gate, i as injectForm, a as injectWizard, b as isUnset, l as lazy, u as unset, d as useRegister, f as useWizard } from './shared/attaform-dev.DxHdkkPG.mjs';
|
|
3
|
+
export { D as DEVTOOLS_WINDOW_KEY, c as createAttaform, a as createRegistry, g as getRegistryFromApp, h as hydrateAttaformState, k as kAttaformRegistry, r as renderAttaformState, u as useRegistry } from './shared/attaform-dev.Chm4D6SJ.mjs';
|
|
4
|
+
export { a as assignKey, i as isRegisterValue, v as vRegister } from './shared/attaform-dev.BMQ3GcgD.mjs';
|
|
5
|
+
export { f as fieldMeta, u as useForm, w as withMeta } from './shared/attaform-dev.DuEE4GU1.mjs';
|
package/dist/directive.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { i as installVRegister, v as vRegister } from './shared/attaform.
|
|
2
|
-
import { ao as RegisterModelDynamicCustomDirective } from './shared/attaform.
|
|
1
|
+
export { i as installVRegister, v as vRegister } from './shared/attaform.L0kUn3vL.mjs';
|
|
2
|
+
import { ao as RegisterModelDynamicCustomDirective } from './shared/attaform.Br8EBn5B.mjs';
|
|
3
3
|
import 'vue';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -8,11 +8,11 @@ import 'vue';
|
|
|
8
8
|
* `File[]` (multiple). Storage is the canonical blank shape (`null` /
|
|
9
9
|
* `[]`) when no file is selected, with the path marked in
|
|
10
10
|
* `blankPaths` so the friendly "No value supplied" error surfaces
|
|
11
|
-
* through `derivedBlankErrors` on required-file fields
|
|
11
|
+
* through `derivedBlankErrors` on required-file fields, the same channel
|
|
12
12
|
* as required numbers / bigints.
|
|
13
13
|
*
|
|
14
14
|
* The `beforeUpdate` hook keeps the DOM in lockstep with storage by
|
|
15
|
-
* clearing `el.value` when storage transitions to blank
|
|
15
|
+
* clearing `el.value` when storage transitions to blank, the only
|
|
16
16
|
* programmatic write browsers permit on file inputs.
|
|
17
17
|
*/
|
|
18
18
|
declare const vRegisterFile: RegisterModelDynamicCustomDirective;
|
package/dist/directive.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { i as installVRegister, v as vRegister, b as vRegisterFile } from './shared/attaform.
|
|
1
|
+
export { i as installVRegister, v as vRegister, b as vRegisterFile } from './shared/attaform.D_f1WgYf.mjs';
|