@weave-framework/forms 0.2.107 → 0.2.162
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 +2 -2
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +138 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +166 -0
- package/dist/schema.js.map +1 -0
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Weave forms — signal-native field/form state + validation over `bind:value`. Zero third-party deps.
|
|
4
4
|
|
|
5
|
-
Part of **[Weave](https://
|
|
5
|
+
Part of **[Weave](https://weaveframework.dev/)** — a fine-grained reactive, signal-native UI framework: no Virtual DOM, zero third-party runtime dependencies.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install @weave-framework/forms
|
|
@@ -14,7 +14,7 @@ Most apps get this (and the rest of Weave) in one step:
|
|
|
14
14
|
npm create weave@latest my-app
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
📚 **Guides + full API reference:** [
|
|
17
|
+
📚 **Guides + full API reference:** [weaveframework.dev](https://weaveframework.dev/)
|
|
18
18
|
|
|
19
19
|
## License
|
|
20
20
|
|
package/dist/index.d.ts
CHANGED
|
@@ -42,6 +42,12 @@ export interface Control<T> {
|
|
|
42
42
|
validating: () => boolean;
|
|
43
43
|
/** Whether this control (or any descendant) has been touched. Reactive. */
|
|
44
44
|
touched: () => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Whether this control (or any descendant) has changed from its initial value — the
|
|
47
|
+
* Weave analog of Angular's `dirty`. `touched` is about *interaction* (blurred), `dirty`
|
|
48
|
+
* is about *value change*. `pristine` is simply `!dirty()`. Cleared by {@link reset}.
|
|
49
|
+
*/
|
|
50
|
+
dirty: () => boolean;
|
|
45
51
|
/** Restore initial value(s) and clear touched/errors. */
|
|
46
52
|
reset: () => void;
|
|
47
53
|
/** Mark this control (and every descendant) touched — e.g. on a failed submit. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAuC,KAAK,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AAE3G,0EAA0E;AAC1E,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;AAEvD,0FAA0F;AAC1F,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAC9B,KAAK,EAAE,CAAC,EACR,GAAG,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,KACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,sDAAsD;AACtD,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,iGAAiG;IACjG,KAAK,EAAE,MAAM,CAAC,CAAC;IACf,oEAAoE;IACpE,KAAK,EAAE,MAAM,OAAO,CAAC;IACrB,kFAAkF;IAClF,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,2EAA2E;IAC3E,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB,yDAAyD;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAC1C,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACjB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,OAAO,CAAC;IACrB,+FAA+F;IAC/F,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,qDAAqD;IACrD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAOD,oFAAoF;AACpF,wBAAgB,KAAK,CAAC,CAAC,EACrB,OAAO,EAAE,CAAC,EACV,UAAU,GAAE,SAAS,CAAC,CAAC,CAAC,EAAO,EAC/B,IAAI,GAAE,YAAY,CAAC,CAAC,CAAM,GACzB,KAAK,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -73,6 +73,7 @@ export function field(initial, validators = [], opts = {}) {
|
|
|
73
73
|
error,
|
|
74
74
|
valid: computed(() => error() === null),
|
|
75
75
|
touched,
|
|
76
|
+
dirty: computed(() => !Object.is(value(), initial)),
|
|
76
77
|
validating: () => validating(),
|
|
77
78
|
reset: () => {
|
|
78
79
|
value.set(initial);
|
|
@@ -168,6 +169,7 @@ export function group(controls, opts = {}) {
|
|
|
168
169
|
touched: () => list.some((c) => c.touched()),
|
|
169
170
|
reset: () => list.forEach((c) => c.reset()),
|
|
170
171
|
touchAll,
|
|
172
|
+
dirty: () => list.some((c) => c.dirty()),
|
|
171
173
|
submitting: () => submitting(),
|
|
172
174
|
submitError: () => submitError(),
|
|
173
175
|
validateAsync,
|
|
@@ -204,6 +206,8 @@ export function fieldArray(factory, seeds = []) {
|
|
|
204
206
|
valid: () => items().every((c) => c.valid()),
|
|
205
207
|
validating: () => items().some((c) => c.validating()),
|
|
206
208
|
touched: () => items().some((c) => c.touched()),
|
|
209
|
+
// Dirty if the item set changed (push/removeAt) or any current item is dirty.
|
|
210
|
+
dirty: () => items().length !== seeds.length || items().some((c) => c.dirty()),
|
|
207
211
|
reset: () => items.set(seeds.map((s) => factory(s))),
|
|
208
212
|
touchAll: () => items().forEach((c) => c.touchAll()),
|
|
209
213
|
push: (seed) => items.set((xs) => [...xs, factory(seed)]),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAA8B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weave-framework/forms/schema — schema-driven forms.
|
|
3
|
+
*
|
|
4
|
+
* A declarative **field-type registry** ({@link fieldType}) plus a builder
|
|
5
|
+
* ({@link schemaForm}) that turns a plain JSON-ish schema into a live forms
|
|
6
|
+
* {@link Group}, composing the existing `field`/`group`/`validators` primitives —
|
|
7
|
+
* no re-implementation of form state. This is the RFC 0002 "field-type registry"
|
|
8
|
+
* slice: instead of hand-wiring every `field(...)`, you describe fields declaratively
|
|
9
|
+
* and a registered *type* supplies the default value, the validators built from the
|
|
10
|
+
* field's constraints, and a UI-render hint (which control + props).
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { schemaForm, fieldType } from '@weave-framework/forms/schema';
|
|
14
|
+
*
|
|
15
|
+
* const f = schemaForm({
|
|
16
|
+
* fields: [
|
|
17
|
+
* { name: 'email', type: 'email', required: true, label: 'Email' },
|
|
18
|
+
* { name: 'age', type: 'number', min: 18 },
|
|
19
|
+
* { name: 'plan', type: 'select', options: [{ value: 'free', label: 'Free' }] },
|
|
20
|
+
* { name: 'tos', type: 'checkbox', required: true },
|
|
21
|
+
* ],
|
|
22
|
+
* });
|
|
23
|
+
* f.render(); // [{ name, field, control:'input', props:{type:'email'}, label }, …] → drive the UI
|
|
24
|
+
* f.valid(); // aggregate validity, reactive
|
|
25
|
+
* f.value(); // { email, age, plan, tos }, reactive
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { type Field, type Group, type Validator, type AsyncValidator } from './index';
|
|
29
|
+
/** One declarative field in a {@link FormSchema}. `type` names a registered {@link FieldTypeDef}. */
|
|
30
|
+
export interface SchemaField {
|
|
31
|
+
/** Unique key within the form — becomes the control name and the value key. */
|
|
32
|
+
name: string;
|
|
33
|
+
/** A registered field-type name (built-ins: text, textarea, email, password, number, checkbox, select, radio, date). */
|
|
34
|
+
type: string;
|
|
35
|
+
/** Human label — passed through to the render descriptor for the UI to show. */
|
|
36
|
+
label?: string;
|
|
37
|
+
/** Explicit initial value; falls back to the type's default. */
|
|
38
|
+
initial?: unknown;
|
|
39
|
+
/** Adds a `required` validator (a checkbox must be checked; a value must be non-empty). */
|
|
40
|
+
required?: boolean;
|
|
41
|
+
/** Numeric lower bound (number type). */
|
|
42
|
+
min?: number;
|
|
43
|
+
/** Numeric upper bound (number type). */
|
|
44
|
+
max?: number;
|
|
45
|
+
/** Minimum string length (text-like types). Skipped when the value is empty and not `required`. */
|
|
46
|
+
minLength?: number;
|
|
47
|
+
/** Maximum string length (text-like types). */
|
|
48
|
+
maxLength?: number;
|
|
49
|
+
/** Format the value must match (text-like types). Skipped when empty and not `required`. */
|
|
50
|
+
pattern?: RegExp;
|
|
51
|
+
/** Choices for select/radio — passed through as a render prop. */
|
|
52
|
+
options?: ReadonlyArray<{
|
|
53
|
+
value: unknown;
|
|
54
|
+
label: string;
|
|
55
|
+
}>;
|
|
56
|
+
/** Extra validators appended after the type's constraint-derived ones. */
|
|
57
|
+
validators?: Validator<never>[];
|
|
58
|
+
/** Async validator (e.g. "username taken?") — same semantics as {@link field}'s. */
|
|
59
|
+
asyncValidate?: AsyncValidator<never>;
|
|
60
|
+
/** Debounce for {@link asyncValidate} (ms). */
|
|
61
|
+
debounceMs?: number;
|
|
62
|
+
/** Arbitrary extra props merged into the render descriptor (override the type's props). */
|
|
63
|
+
props?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/** A whole form described declaratively. */
|
|
66
|
+
export interface FormSchema {
|
|
67
|
+
/** The fields, in render order. */
|
|
68
|
+
fields: SchemaField[];
|
|
69
|
+
/** Cross-field validation over the whole `{ name: value }` snapshot — same shape as `group`'s. */
|
|
70
|
+
validate?: (values: Record<string, unknown>) => Record<string, string> | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* A field type — the mapping from a schema `type` name to (1) a default value,
|
|
74
|
+
* (2) the validators its constraints translate to, and (3) a UI-render hint. Register
|
|
75
|
+
* one with {@link fieldType}; a `schemaForm` consults the registry (or a per-form
|
|
76
|
+
* override list) to build each control.
|
|
77
|
+
*/
|
|
78
|
+
export interface FieldTypeDef<T = unknown> {
|
|
79
|
+
/** The `type` name this handles (e.g. `'email'`). */
|
|
80
|
+
name: string;
|
|
81
|
+
/** Default initial value when the schema field omits `initial` — a value or a function of the field. */
|
|
82
|
+
defaultValue?: T | ((f: SchemaField) => T);
|
|
83
|
+
/** Build the validator list from the field's constraints (`required`/`min`/`pattern`/…). */
|
|
84
|
+
validators?: (f: SchemaField) => Validator<T>[];
|
|
85
|
+
/** UI hint — the component key a renderer should use (default `'input'`). */
|
|
86
|
+
control?: string;
|
|
87
|
+
/** UI hint — static props for that component, merged UNDER the field's own `props`. */
|
|
88
|
+
props?: (f: SchemaField) => Record<string, unknown>;
|
|
89
|
+
/** Coerce a raw value to this type (e.g. `''`/`null` → number|null). Applied to the initial value. */
|
|
90
|
+
coerce?: (raw: unknown) => T;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Register a field type (and return it). Overrides any existing type of the same name.
|
|
94
|
+
* This is the `fieldType()` registry entry point — call it once at app start for your
|
|
95
|
+
* custom types, or pass types per-form via `schemaForm(schema, { types: [...] })`.
|
|
96
|
+
*/
|
|
97
|
+
export declare function fieldType<T>(def: FieldTypeDef<T>): FieldTypeDef<T>;
|
|
98
|
+
/** Look up a registered field type by name (undefined if none). */
|
|
99
|
+
export declare function getFieldType(name: string): FieldTypeDef<unknown> | undefined;
|
|
100
|
+
/** The names of every currently-registered field type. */
|
|
101
|
+
export declare function fieldTypeNames(): string[];
|
|
102
|
+
/** One entry of {@link SchemaForm.render} — the live control plus the UI hints to render it. */
|
|
103
|
+
export interface RenderField {
|
|
104
|
+
/** The field name / value key. */
|
|
105
|
+
name: string;
|
|
106
|
+
/** The live {@link Field} — bind `value`, read `error()`/`valid()`. */
|
|
107
|
+
field: Field<unknown>;
|
|
108
|
+
/** The originating schema field. */
|
|
109
|
+
schema: SchemaField;
|
|
110
|
+
/** Which UI component to render (the type's `control`, default `'input'`). */
|
|
111
|
+
control: string;
|
|
112
|
+
/** The field's label, if any. */
|
|
113
|
+
label?: string;
|
|
114
|
+
/** Props for the component: the type's `props` overlaid with the field's own `props`. */
|
|
115
|
+
props: Record<string, unknown>;
|
|
116
|
+
}
|
|
117
|
+
/** The result of {@link schemaForm}: a `group` of fields plus the render model + lookups. */
|
|
118
|
+
export interface SchemaForm extends Group<Record<string, Field<unknown>>> {
|
|
119
|
+
/** The schema it was built from. */
|
|
120
|
+
schema: FormSchema;
|
|
121
|
+
/** Ordered render descriptors — iterate these to render the form. */
|
|
122
|
+
render: () => RenderField[];
|
|
123
|
+
/** Look up one field by name. */
|
|
124
|
+
fieldFor: (name: string) => Field<unknown> | undefined;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build a live form from a declarative {@link FormSchema}. Each field is created via its
|
|
128
|
+
* registered {@link FieldTypeDef} (default value, constraint validators, render hint), then
|
|
129
|
+
* aggregated with the existing {@link group} (so validity/values/touched/dirty/submit all
|
|
130
|
+
* work exactly as a hand-built form). Pass `types` to register field types scoped to this
|
|
131
|
+
* form (they win over globally-registered ones without mutating the global registry).
|
|
132
|
+
*
|
|
133
|
+
* Throws (fail-loud) if a field names a `type` that isn't registered.
|
|
134
|
+
*/
|
|
135
|
+
export declare function schemaForm(schema: FormSchema, opts?: {
|
|
136
|
+
types?: FieldTypeDef<unknown>[];
|
|
137
|
+
}): SchemaForm;
|
|
138
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weave-framework/forms/schema — schema-driven forms.
|
|
3
|
+
*
|
|
4
|
+
* A declarative **field-type registry** ({@link fieldType}) plus a builder
|
|
5
|
+
* ({@link schemaForm}) that turns a plain JSON-ish schema into a live forms
|
|
6
|
+
* {@link Group}, composing the existing `field`/`group`/`validators` primitives —
|
|
7
|
+
* no re-implementation of form state. This is the RFC 0002 "field-type registry"
|
|
8
|
+
* slice: instead of hand-wiring every `field(...)`, you describe fields declaratively
|
|
9
|
+
* and a registered *type* supplies the default value, the validators built from the
|
|
10
|
+
* field's constraints, and a UI-render hint (which control + props).
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { schemaForm, fieldType } from '@weave-framework/forms/schema';
|
|
14
|
+
*
|
|
15
|
+
* const f = schemaForm({
|
|
16
|
+
* fields: [
|
|
17
|
+
* { name: 'email', type: 'email', required: true, label: 'Email' },
|
|
18
|
+
* { name: 'age', type: 'number', min: 18 },
|
|
19
|
+
* { name: 'plan', type: 'select', options: [{ value: 'free', label: 'Free' }] },
|
|
20
|
+
* { name: 'tos', type: 'checkbox', required: true },
|
|
21
|
+
* ],
|
|
22
|
+
* });
|
|
23
|
+
* f.render(); // [{ name, field, control:'input', props:{type:'email'}, label }, …] → drive the UI
|
|
24
|
+
* f.valid(); // aggregate validity, reactive
|
|
25
|
+
* f.value(); // { email, age, plan, tos }, reactive
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { field, group, validators, } from './index';
|
|
29
|
+
const registry = new Map();
|
|
30
|
+
/**
|
|
31
|
+
* Register a field type (and return it). Overrides any existing type of the same name.
|
|
32
|
+
* This is the `fieldType()` registry entry point — call it once at app start for your
|
|
33
|
+
* custom types, or pass types per-form via `schemaForm(schema, { types: [...] })`.
|
|
34
|
+
*/
|
|
35
|
+
export function fieldType(def) {
|
|
36
|
+
registry.set(def.name, def);
|
|
37
|
+
return def;
|
|
38
|
+
}
|
|
39
|
+
/** Look up a registered field type by name (undefined if none). */
|
|
40
|
+
export function getFieldType(name) {
|
|
41
|
+
return registry.get(name);
|
|
42
|
+
}
|
|
43
|
+
/** The names of every currently-registered field type. */
|
|
44
|
+
export function fieldTypeNames() {
|
|
45
|
+
return [...registry.keys()];
|
|
46
|
+
}
|
|
47
|
+
/* ─────────────────────── built-in field types ───────────────────────── */
|
|
48
|
+
/** Wrap a string validator so it is skipped on an empty value (emptiness is `required`'s job). */
|
|
49
|
+
const skipEmpty = (v) => (x) => x ? v(x) : null;
|
|
50
|
+
/** required + minLength/maxLength/pattern from a schema field, for text-like types. */
|
|
51
|
+
function textValidators(f) {
|
|
52
|
+
const vs = [];
|
|
53
|
+
if (f.required)
|
|
54
|
+
vs.push(validators.required());
|
|
55
|
+
if (f.minLength != null)
|
|
56
|
+
vs.push(skipEmpty(validators.minLength(f.minLength)));
|
|
57
|
+
if (f.maxLength != null)
|
|
58
|
+
vs.push(validators.maxLength(f.maxLength));
|
|
59
|
+
if (f.pattern)
|
|
60
|
+
vs.push(skipEmpty(validators.pattern(f.pattern)));
|
|
61
|
+
return vs;
|
|
62
|
+
}
|
|
63
|
+
fieldType({ name: 'text', control: 'input', defaultValue: '', validators: textValidators });
|
|
64
|
+
fieldType({ name: 'textarea', control: 'textarea', defaultValue: '', validators: textValidators });
|
|
65
|
+
fieldType({
|
|
66
|
+
name: 'email',
|
|
67
|
+
control: 'input',
|
|
68
|
+
defaultValue: '',
|
|
69
|
+
props: () => ({ type: 'email' }),
|
|
70
|
+
validators: (f) => [...textValidators(f), skipEmpty(validators.email())],
|
|
71
|
+
});
|
|
72
|
+
fieldType({
|
|
73
|
+
name: 'password',
|
|
74
|
+
control: 'input',
|
|
75
|
+
defaultValue: '',
|
|
76
|
+
props: () => ({ type: 'password' }),
|
|
77
|
+
validators: textValidators,
|
|
78
|
+
});
|
|
79
|
+
fieldType({ name: 'date', control: 'date', defaultValue: '', validators: textValidators });
|
|
80
|
+
fieldType({
|
|
81
|
+
name: 'number',
|
|
82
|
+
control: 'number',
|
|
83
|
+
defaultValue: null,
|
|
84
|
+
coerce: (raw) => (raw === '' || raw == null ? null : Number(raw)),
|
|
85
|
+
validators: (f) => {
|
|
86
|
+
const vs = [];
|
|
87
|
+
if (f.required)
|
|
88
|
+
vs.push((v) => (v == null ? 'Required' : null));
|
|
89
|
+
if (f.min != null)
|
|
90
|
+
vs.push((v) => (v != null && v < f.min ? `Must be ≥ ${f.min}` : null));
|
|
91
|
+
if (f.max != null)
|
|
92
|
+
vs.push((v) => (v != null && v > f.max ? `Must be ≤ ${f.max}` : null));
|
|
93
|
+
return vs;
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
fieldType({
|
|
97
|
+
name: 'checkbox',
|
|
98
|
+
control: 'checkbox',
|
|
99
|
+
defaultValue: false,
|
|
100
|
+
coerce: (raw) => Boolean(raw),
|
|
101
|
+
validators: (f) => (f.required ? [validators.required()] : []),
|
|
102
|
+
});
|
|
103
|
+
const choiceType = (name) => {
|
|
104
|
+
fieldType({
|
|
105
|
+
name,
|
|
106
|
+
control: name,
|
|
107
|
+
defaultValue: '',
|
|
108
|
+
props: (f) => ({ options: f.options ?? [] }),
|
|
109
|
+
validators: (f) => (f.required ? [validators.required()] : []),
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
choiceType('select');
|
|
113
|
+
choiceType('radio');
|
|
114
|
+
/**
|
|
115
|
+
* Build a live form from a declarative {@link FormSchema}. Each field is created via its
|
|
116
|
+
* registered {@link FieldTypeDef} (default value, constraint validators, render hint), then
|
|
117
|
+
* aggregated with the existing {@link group} (so validity/values/touched/dirty/submit all
|
|
118
|
+
* work exactly as a hand-built form). Pass `types` to register field types scoped to this
|
|
119
|
+
* form (they win over globally-registered ones without mutating the global registry).
|
|
120
|
+
*
|
|
121
|
+
* Throws (fail-loud) if a field names a `type` that isn't registered.
|
|
122
|
+
*/
|
|
123
|
+
export function schemaForm(schema, opts = {}) {
|
|
124
|
+
const local = new Map();
|
|
125
|
+
for (const t of opts.types ?? [])
|
|
126
|
+
local.set(t.name, t);
|
|
127
|
+
const resolve = (name) => local.get(name) ?? registry.get(name);
|
|
128
|
+
const controls = {};
|
|
129
|
+
const descriptors = [];
|
|
130
|
+
for (const f of schema.fields) {
|
|
131
|
+
const def = resolve(f.type);
|
|
132
|
+
if (!def) {
|
|
133
|
+
throw new Error(`[weave/forms] unknown field type "${f.type}" for field "${f.name}". ` +
|
|
134
|
+
`Register it with fieldType({ name: '${f.type}', … }) or pass it via schemaForm(schema, { types: [ … ] }).`);
|
|
135
|
+
}
|
|
136
|
+
const rawInitial = f.initial !== undefined
|
|
137
|
+
? f.initial
|
|
138
|
+
: typeof def.defaultValue === 'function'
|
|
139
|
+
? def.defaultValue(f)
|
|
140
|
+
: def.defaultValue;
|
|
141
|
+
const initial = def.coerce ? def.coerce(rawInitial) : rawInitial;
|
|
142
|
+
const vs = [
|
|
143
|
+
...(def.validators ? def.validators(f) : []),
|
|
144
|
+
...(f.validators ?? []),
|
|
145
|
+
];
|
|
146
|
+
const control = field(initial, vs, {
|
|
147
|
+
asyncValidate: f.asyncValidate,
|
|
148
|
+
debounceMs: f.debounceMs,
|
|
149
|
+
});
|
|
150
|
+
controls[f.name] = control;
|
|
151
|
+
descriptors.push({
|
|
152
|
+
name: f.name,
|
|
153
|
+
field: control,
|
|
154
|
+
schema: f,
|
|
155
|
+
control: def.control ?? 'input',
|
|
156
|
+
label: f.label,
|
|
157
|
+
props: { ...(def.props ? def.props(f) : {}), ...(f.props ?? {}) },
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
const g = group(controls, schema.validate ? { validate: (v) => schema.validate(v) } : {});
|
|
161
|
+
g.schema = schema;
|
|
162
|
+
g.render = () => descriptors;
|
|
163
|
+
g.fieldFor = (name) => controls[name];
|
|
164
|
+
return g;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weave-framework/forms",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.162",
|
|
4
4
|
"description": "Weave forms — signal-native field/form state + validation over bind:value. Zero third-party deps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"./dom": {
|
|
16
16
|
"types": "./dist/dom.d.ts",
|
|
17
17
|
"import": "./dist/dom.js"
|
|
18
|
+
},
|
|
19
|
+
"./schema": {
|
|
20
|
+
"types": "./dist/schema.d.ts",
|
|
21
|
+
"import": "./dist/schema.js"
|
|
18
22
|
}
|
|
19
23
|
},
|
|
20
24
|
"files": [
|
|
@@ -32,7 +36,7 @@
|
|
|
32
36
|
"access": "public"
|
|
33
37
|
},
|
|
34
38
|
"dependencies": {
|
|
35
|
-
"@weave-framework/runtime": "0.2.
|
|
39
|
+
"@weave-framework/runtime": "0.2.162"
|
|
36
40
|
},
|
|
37
41
|
"license": "MIT"
|
|
38
42
|
}
|