@logixjs/form 0.0.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/Error-VvknI9Wj.d.cts +37 -0
- package/dist/Error-VvknI9Wj.d.ts +37 -0
- package/dist/Error.cjs +46 -0
- package/dist/Error.cjs.map +1 -0
- package/dist/Error.d.cts +1 -0
- package/dist/Error.d.ts +1 -0
- package/dist/Error.js +14 -0
- package/dist/Error.js.map +1 -0
- package/dist/Form.cjs +2455 -0
- package/dist/Form.cjs.map +1 -0
- package/dist/Form.d.cts +64 -0
- package/dist/Form.d.ts +64 -0
- package/dist/Form.js +25 -0
- package/dist/Form.js.map +1 -0
- package/dist/FormView-CAg9LVrf.d.cts +17 -0
- package/dist/FormView-CAg9LVrf.d.ts +17 -0
- package/dist/FormView.cjs +61 -0
- package/dist/FormView.cjs.map +1 -0
- package/dist/FormView.d.cts +1 -0
- package/dist/FormView.d.ts +1 -0
- package/dist/FormView.js +8 -0
- package/dist/FormView.js.map +1 -0
- package/dist/Path-DOjMkAS6.d.cts +42 -0
- package/dist/Path-DOjMkAS6.d.ts +42 -0
- package/dist/Path.cjs +132 -0
- package/dist/Path.cjs.map +1 -0
- package/dist/Path.d.cts +1 -0
- package/dist/Path.d.ts +1 -0
- package/dist/Path.js +22 -0
- package/dist/Path.js.map +1 -0
- package/dist/Rule-BOAiSVz9.d.cts +202 -0
- package/dist/Rule-BOAiSVz9.d.ts +202 -0
- package/dist/Rule.cjs +307 -0
- package/dist/Rule.cjs.map +1 -0
- package/dist/Rule.d.cts +2 -0
- package/dist/Rule.d.ts +2 -0
- package/dist/Rule.js +34 -0
- package/dist/Rule.js.map +1 -0
- package/dist/SchemaErrorMapping-Cu5gl7-Z.d.ts +50 -0
- package/dist/SchemaErrorMapping-DOrgLzii.d.cts +50 -0
- package/dist/SchemaErrorMapping.cjs +305 -0
- package/dist/SchemaErrorMapping.cjs.map +1 -0
- package/dist/SchemaErrorMapping.d.cts +2 -0
- package/dist/SchemaErrorMapping.d.ts +2 -0
- package/dist/SchemaErrorMapping.js +17 -0
- package/dist/SchemaErrorMapping.js.map +1 -0
- package/dist/SchemaPathMapping-BCoUW-_q.d.ts +16 -0
- package/dist/SchemaPathMapping-BUq2zm8W.d.cts +20 -0
- package/dist/SchemaPathMapping-BUq2zm8W.d.ts +20 -0
- package/dist/SchemaPathMapping-DJnExqM3.d.cts +16 -0
- package/dist/SchemaPathMapping.cjs +179 -0
- package/dist/SchemaPathMapping.cjs.map +1 -0
- package/dist/SchemaPathMapping.d.cts +2 -0
- package/dist/SchemaPathMapping.d.ts +2 -0
- package/dist/SchemaPathMapping.js +12 -0
- package/dist/SchemaPathMapping.js.map +1 -0
- package/dist/Trait-Bu794ROY.d.cts +49 -0
- package/dist/Trait-Bu794ROY.d.ts +49 -0
- package/dist/Trait.cjs +48 -0
- package/dist/Trait.cjs.map +1 -0
- package/dist/Trait.d.cts +2 -0
- package/dist/Trait.d.ts +2 -0
- package/dist/Trait.js +12 -0
- package/dist/Trait.js.map +1 -0
- package/dist/chunk-5DRI5UGD.js +105 -0
- package/dist/chunk-5DRI5UGD.js.map +1 -0
- package/dist/chunk-AD2ZA7KA.js +23 -0
- package/dist/chunk-AD2ZA7KA.js.map +1 -0
- package/dist/chunk-EOXJRCM6.js +146 -0
- package/dist/chunk-EOXJRCM6.js.map +1 -0
- package/dist/chunk-JZ5FZKPJ.js +71 -0
- package/dist/chunk-JZ5FZKPJ.js.map +1 -0
- package/dist/chunk-LNJJPZAG.js +46 -0
- package/dist/chunk-LNJJPZAG.js.map +1 -0
- package/dist/chunk-NAR5SIFP.js +22 -0
- package/dist/chunk-NAR5SIFP.js.map +1 -0
- package/dist/chunk-OJVEZKU7.js +117 -0
- package/dist/chunk-OJVEZKU7.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-S5JTU2CM.js +31 -0
- package/dist/chunk-S5JTU2CM.js.map +1 -0
- package/dist/chunk-YHDEJ47V.js +1885 -0
- package/dist/chunk-YHDEJ47V.js.map +1 -0
- package/dist/chunk-YVHXLY63.js +315 -0
- package/dist/chunk-YVHXLY63.js.map +1 -0
- package/dist/impl-BfSlyM58.d.ts +225 -0
- package/dist/impl-Ccdm5eDF.d.cts +225 -0
- package/dist/index.cjs +2689 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +332 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +43 -0
- package/dist/react/index.d.ts +43 -0
- package/dist/react/index.js +201 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +62 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Error_exports
|
|
3
|
+
} from "./chunk-S5JTU2CM.js";
|
|
4
|
+
import {
|
|
5
|
+
derived,
|
|
6
|
+
fromValues,
|
|
7
|
+
list,
|
|
8
|
+
make,
|
|
9
|
+
node,
|
|
10
|
+
rules,
|
|
11
|
+
traits
|
|
12
|
+
} from "./chunk-YHDEJ47V.js";
|
|
13
|
+
import {
|
|
14
|
+
FormView_exports
|
|
15
|
+
} from "./chunk-LNJJPZAG.js";
|
|
16
|
+
import {
|
|
17
|
+
Rule_exports
|
|
18
|
+
} from "./chunk-YVHXLY63.js";
|
|
19
|
+
import {
|
|
20
|
+
SchemaErrorMapping_exports
|
|
21
|
+
} from "./chunk-JZ5FZKPJ.js";
|
|
22
|
+
import "./chunk-5DRI5UGD.js";
|
|
23
|
+
import {
|
|
24
|
+
Path_exports
|
|
25
|
+
} from "./chunk-OJVEZKU7.js";
|
|
26
|
+
import {
|
|
27
|
+
SchemaPathMapping_exports
|
|
28
|
+
} from "./chunk-NAR5SIFP.js";
|
|
29
|
+
import "./chunk-EOXJRCM6.js";
|
|
30
|
+
import {
|
|
31
|
+
Trait_exports,
|
|
32
|
+
computed,
|
|
33
|
+
link,
|
|
34
|
+
source
|
|
35
|
+
} from "./chunk-AD2ZA7KA.js";
|
|
36
|
+
import "./chunk-PZ5AY32C.js";
|
|
37
|
+
export {
|
|
38
|
+
Error_exports as Error,
|
|
39
|
+
FormView_exports as FormView,
|
|
40
|
+
Path_exports as Path,
|
|
41
|
+
Rule_exports as Rule,
|
|
42
|
+
SchemaErrorMapping_exports as SchemaErrorMapping,
|
|
43
|
+
SchemaPathMapping_exports as SchemaPathMapping,
|
|
44
|
+
Trait_exports as Trait,
|
|
45
|
+
computed,
|
|
46
|
+
derived,
|
|
47
|
+
fromValues as from,
|
|
48
|
+
link,
|
|
49
|
+
list,
|
|
50
|
+
make,
|
|
51
|
+
node,
|
|
52
|
+
rules,
|
|
53
|
+
source,
|
|
54
|
+
traits
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/react/index.ts
|
|
31
|
+
var react_exports = {};
|
|
32
|
+
__export(react_exports, {
|
|
33
|
+
useField: () => useField,
|
|
34
|
+
useFieldArray: () => useFieldArray,
|
|
35
|
+
useForm: () => useForm,
|
|
36
|
+
useFormState: () => useFormState
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(react_exports);
|
|
39
|
+
|
|
40
|
+
// src/react/useField.ts
|
|
41
|
+
var import_react = require("react");
|
|
42
|
+
var LogixReact = __toESM(require("@logixjs/react"), 1);
|
|
43
|
+
|
|
44
|
+
// src/internal/form/path.ts
|
|
45
|
+
var getAtPath = (state, path) => {
|
|
46
|
+
if (!path) return state;
|
|
47
|
+
const segments = path.split(".");
|
|
48
|
+
let current = state;
|
|
49
|
+
for (const segment of segments) {
|
|
50
|
+
if (current == null) return void 0;
|
|
51
|
+
const index = Number(segment);
|
|
52
|
+
if (Array.isArray(current) && Number.isInteger(index) && String(index) === segment) {
|
|
53
|
+
current = current[index];
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
current = current[segment];
|
|
57
|
+
}
|
|
58
|
+
return current;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// src/Path.ts
|
|
62
|
+
var isNumericSegment = (seg) => /^[0-9]+$/.test(seg);
|
|
63
|
+
var splitPath = (path) => {
|
|
64
|
+
if (!path) return [];
|
|
65
|
+
const parts = path.split(".").filter((p) => p.length > 0);
|
|
66
|
+
const segs = [];
|
|
67
|
+
for (const part of parts) {
|
|
68
|
+
if (!part) continue;
|
|
69
|
+
if (part.endsWith("[]")) {
|
|
70
|
+
const base = part.slice(0, -2);
|
|
71
|
+
if (base) segs.push(base);
|
|
72
|
+
segs.push("[]");
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const bracket = /^(.+)\[(\d+)\]$/.exec(part);
|
|
76
|
+
if (bracket) {
|
|
77
|
+
const base = bracket[1];
|
|
78
|
+
if (base) segs.push(base);
|
|
79
|
+
segs.push(bracket[2]);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
segs.push(part);
|
|
83
|
+
}
|
|
84
|
+
return segs;
|
|
85
|
+
};
|
|
86
|
+
var toErrorsPath = (valuePath) => {
|
|
87
|
+
if (!valuePath) return "errors";
|
|
88
|
+
const segs = splitPath(valuePath);
|
|
89
|
+
const out = [];
|
|
90
|
+
for (const seg of segs) {
|
|
91
|
+
if (isNumericSegment(seg)) {
|
|
92
|
+
out.push("rows", seg);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (seg === "[]") {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
out.push(seg);
|
|
99
|
+
}
|
|
100
|
+
return `errors.${out.join(".")}`;
|
|
101
|
+
};
|
|
102
|
+
var toManualErrorsPath = (valuePath) => {
|
|
103
|
+
const base = toErrorsPath(valuePath);
|
|
104
|
+
return base === "errors" ? "errors.$manual" : base.replace(/^errors\./, "errors.$manual.");
|
|
105
|
+
};
|
|
106
|
+
var toSchemaErrorsPath = (valuePath) => {
|
|
107
|
+
const base = toErrorsPath(valuePath);
|
|
108
|
+
return base === "errors" ? "errors.$schema" : base.replace(/^errors\./, "errors.$schema.");
|
|
109
|
+
};
|
|
110
|
+
var toUiPath = (valuePath) => valuePath ? `ui.${valuePath}` : "ui";
|
|
111
|
+
|
|
112
|
+
// src/react/useField.ts
|
|
113
|
+
var readUiFlag = (ui, key) => {
|
|
114
|
+
if (!ui || typeof ui !== "object" || Array.isArray(ui)) return false;
|
|
115
|
+
return ui[key] === true;
|
|
116
|
+
};
|
|
117
|
+
var useField = (form, path) => {
|
|
118
|
+
const value = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, path));
|
|
119
|
+
const manualError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toManualErrorsPath(path)));
|
|
120
|
+
const ruleError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toErrorsPath(path)));
|
|
121
|
+
const schemaError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toSchemaErrorsPath(path)));
|
|
122
|
+
const error = (0, import_react.useMemo)(() => manualError ?? ruleError ?? schemaError, [manualError, ruleError, schemaError]);
|
|
123
|
+
const ui = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toUiPath(path)));
|
|
124
|
+
const touched = (0, import_react.useMemo)(() => readUiFlag(ui, "touched"), [ui]);
|
|
125
|
+
const dirty = (0, import_react.useMemo)(() => readUiFlag(ui, "dirty"), [ui]);
|
|
126
|
+
const dispatch = LogixReact.useDispatch(form.runtime);
|
|
127
|
+
const onChange = (0, import_react.useCallback)(
|
|
128
|
+
(next) => {
|
|
129
|
+
dispatch({ _tag: "setValue", payload: { path, value: next } });
|
|
130
|
+
},
|
|
131
|
+
[dispatch, path]
|
|
132
|
+
);
|
|
133
|
+
const onBlur = (0, import_react.useCallback)(() => {
|
|
134
|
+
dispatch({ _tag: "blur", payload: { path } });
|
|
135
|
+
}, [dispatch, path]);
|
|
136
|
+
return (0, import_react.useMemo)(
|
|
137
|
+
() => ({
|
|
138
|
+
value,
|
|
139
|
+
error,
|
|
140
|
+
touched,
|
|
141
|
+
dirty,
|
|
142
|
+
onChange,
|
|
143
|
+
onBlur
|
|
144
|
+
}),
|
|
145
|
+
[value, error, touched, dirty, onChange, onBlur]
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// src/react/useFieldArray.ts
|
|
150
|
+
var import_react2 = require("react");
|
|
151
|
+
var LogixReact2 = __toESM(require("@logixjs/react"), 1);
|
|
152
|
+
|
|
153
|
+
// src/internal/form/rowid.ts
|
|
154
|
+
var Logix = __toESM(require("@logixjs/core"), 1);
|
|
155
|
+
var getRowIdStore = (runtime) => {
|
|
156
|
+
if (!runtime || typeof runtime !== "object" && typeof runtime !== "function") {
|
|
157
|
+
return void 0;
|
|
158
|
+
}
|
|
159
|
+
const store = Logix.InternalContracts.getRowIdStore(runtime);
|
|
160
|
+
if (!store || typeof store !== "object") return void 0;
|
|
161
|
+
const getRowId = store.getRowId;
|
|
162
|
+
if (typeof getRowId !== "function") return void 0;
|
|
163
|
+
return store;
|
|
164
|
+
};
|
|
165
|
+
var getTrackByForListPath = (runtime, listPath) => {
|
|
166
|
+
if (!runtime || typeof runtime !== "object" && typeof runtime !== "function") {
|
|
167
|
+
return void 0;
|
|
168
|
+
}
|
|
169
|
+
const configs = Logix.InternalContracts.getStateTraitListConfigs(runtime);
|
|
170
|
+
if (!Array.isArray(configs)) return void 0;
|
|
171
|
+
for (const cfg of configs) {
|
|
172
|
+
if (!cfg || typeof cfg !== "object") continue;
|
|
173
|
+
const typed = cfg;
|
|
174
|
+
if (typed.path !== listPath) continue;
|
|
175
|
+
if (typeof typed.trackBy === "string" && typed.trackBy.length > 0) {
|
|
176
|
+
return typed.trackBy;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return void 0;
|
|
180
|
+
};
|
|
181
|
+
var readTrackBy = (item, trackBy) => {
|
|
182
|
+
if (!item || typeof item !== "object") return void 0;
|
|
183
|
+
const segments = trackBy.split(".");
|
|
184
|
+
let current = item;
|
|
185
|
+
for (const seg of segments) {
|
|
186
|
+
if (current == null) return void 0;
|
|
187
|
+
current = current[seg];
|
|
188
|
+
}
|
|
189
|
+
return current;
|
|
190
|
+
};
|
|
191
|
+
var getFieldArrayItemId = (params) => {
|
|
192
|
+
const k = params.trackBy !== void 0 ? readTrackBy(params.item, params.trackBy) : void 0;
|
|
193
|
+
if (k !== void 0) return String(k);
|
|
194
|
+
const fromStore = params.rowIds?.[params.index] ?? params.rowIdStore?.getRowId(params.listPath, params.index);
|
|
195
|
+
if (typeof fromStore === "string" && fromStore.length > 0) return fromStore;
|
|
196
|
+
return String(params.index);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
// src/react/useFieldArray.ts
|
|
200
|
+
var useFieldArray = (form, path) => {
|
|
201
|
+
const items = LogixReact2.useSelector(form.runtime, (s) => {
|
|
202
|
+
const value = getAtPath(s, path);
|
|
203
|
+
return Array.isArray(value) ? value : [];
|
|
204
|
+
});
|
|
205
|
+
const dispatch = LogixReact2.useDispatch(form.runtime);
|
|
206
|
+
const rowIdStore = getRowIdStore(form.runtime);
|
|
207
|
+
const trackBy = getTrackByForListPath(form.runtime, path);
|
|
208
|
+
const fields = (0, import_react2.useMemo)(() => {
|
|
209
|
+
const ensureList = rowIdStore?.ensureList;
|
|
210
|
+
const rowIds = typeof ensureList === "function" ? (() => {
|
|
211
|
+
try {
|
|
212
|
+
return ensureList(path, items, trackBy);
|
|
213
|
+
} catch {
|
|
214
|
+
return void 0;
|
|
215
|
+
}
|
|
216
|
+
})() : void 0;
|
|
217
|
+
return items.map((item, index) => ({
|
|
218
|
+
id: getFieldArrayItemId({
|
|
219
|
+
listPath: path,
|
|
220
|
+
item,
|
|
221
|
+
index,
|
|
222
|
+
trackBy,
|
|
223
|
+
rowIds,
|
|
224
|
+
rowIdStore
|
|
225
|
+
})
|
|
226
|
+
}));
|
|
227
|
+
}, [items, rowIdStore, trackBy, path]);
|
|
228
|
+
const append = (0, import_react2.useCallback)(
|
|
229
|
+
(value) => {
|
|
230
|
+
dispatch({ _tag: "arrayAppend", payload: { path, value } });
|
|
231
|
+
},
|
|
232
|
+
[dispatch, path]
|
|
233
|
+
);
|
|
234
|
+
const prepend = (0, import_react2.useCallback)(
|
|
235
|
+
(value) => {
|
|
236
|
+
dispatch({ _tag: "arrayPrepend", payload: { path, value } });
|
|
237
|
+
},
|
|
238
|
+
[dispatch, path]
|
|
239
|
+
);
|
|
240
|
+
const remove = (0, import_react2.useCallback)(
|
|
241
|
+
(index) => {
|
|
242
|
+
dispatch({ _tag: "arrayRemove", payload: { path, index } });
|
|
243
|
+
},
|
|
244
|
+
[dispatch, path]
|
|
245
|
+
);
|
|
246
|
+
const swap = (0, import_react2.useCallback)(
|
|
247
|
+
(indexA, indexB) => {
|
|
248
|
+
dispatch({ _tag: "arraySwap", payload: { path, indexA, indexB } });
|
|
249
|
+
},
|
|
250
|
+
[dispatch, path]
|
|
251
|
+
);
|
|
252
|
+
const move = (0, import_react2.useCallback)(
|
|
253
|
+
(from, to) => {
|
|
254
|
+
dispatch({ _tag: "arrayMove", payload: { path, from, to } });
|
|
255
|
+
},
|
|
256
|
+
[dispatch, path]
|
|
257
|
+
);
|
|
258
|
+
return (0, import_react2.useMemo)(
|
|
259
|
+
() => ({
|
|
260
|
+
fields,
|
|
261
|
+
append,
|
|
262
|
+
prepend,
|
|
263
|
+
remove,
|
|
264
|
+
swap,
|
|
265
|
+
move
|
|
266
|
+
}),
|
|
267
|
+
[fields, append, prepend, remove, swap, move]
|
|
268
|
+
);
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
// src/react/useForm.ts
|
|
272
|
+
var LogixReact3 = __toESM(require("@logixjs/react"), 1);
|
|
273
|
+
var useForm = (form) => LogixReact3.useModule(form);
|
|
274
|
+
|
|
275
|
+
// src/react/useFormState.ts
|
|
276
|
+
var import_react3 = require("react");
|
|
277
|
+
var LogixReact4 = __toESM(require("@logixjs/react"), 1);
|
|
278
|
+
|
|
279
|
+
// src/FormView.ts
|
|
280
|
+
var readSnapshot = (state) => {
|
|
281
|
+
const meta = state && typeof state === "object" && !Array.isArray(state) ? state.$form : void 0;
|
|
282
|
+
const safe = meta && typeof meta === "object" && !Array.isArray(meta) ? meta : void 0;
|
|
283
|
+
const submitCount = typeof safe?.submitCount === "number" && Number.isFinite(safe.submitCount) ? safe.submitCount : 0;
|
|
284
|
+
const isSubmitting = safe?.isSubmitting === true;
|
|
285
|
+
const isDirty = safe?.isDirty === true;
|
|
286
|
+
const errorCount = typeof safe?.errorCount === "number" && Number.isFinite(safe.errorCount) ? safe.errorCount : 0;
|
|
287
|
+
return {
|
|
288
|
+
submitCount,
|
|
289
|
+
isSubmitting,
|
|
290
|
+
isDirty,
|
|
291
|
+
errorCount
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
var getFormView = (state, prev) => {
|
|
295
|
+
const snap = readSnapshot(state);
|
|
296
|
+
const isValid = snap.errorCount === 0;
|
|
297
|
+
const isPristine = !snap.isDirty;
|
|
298
|
+
const canSubmit = !snap.isSubmitting && isValid;
|
|
299
|
+
if (prev && prev.submitCount === snap.submitCount && prev.isSubmitting === snap.isSubmitting && prev.isDirty === snap.isDirty && prev.isValid === isValid) {
|
|
300
|
+
return prev;
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
canSubmit,
|
|
304
|
+
isSubmitting: snap.isSubmitting,
|
|
305
|
+
isValid,
|
|
306
|
+
isDirty: snap.isDirty,
|
|
307
|
+
isPristine,
|
|
308
|
+
submitCount: snap.submitCount
|
|
309
|
+
};
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
// src/react/useFormState.ts
|
|
313
|
+
var useFormState = (form, selector, equalityFn) => {
|
|
314
|
+
const lastViewRef = (0, import_react3.useRef)(void 0);
|
|
315
|
+
const select = (0, import_react3.useCallback)(
|
|
316
|
+
(state) => {
|
|
317
|
+
const view = getFormView(state, lastViewRef.current);
|
|
318
|
+
lastViewRef.current = view;
|
|
319
|
+
return selector(view);
|
|
320
|
+
},
|
|
321
|
+
[selector]
|
|
322
|
+
);
|
|
323
|
+
return LogixReact4.useSelector(form.runtime, select, equalityFn);
|
|
324
|
+
};
|
|
325
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
326
|
+
0 && (module.exports = {
|
|
327
|
+
useField,
|
|
328
|
+
useFieldArray,
|
|
329
|
+
useForm,
|
|
330
|
+
useFormState
|
|
331
|
+
});
|
|
332
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react/index.ts","../../src/react/useField.ts","../../src/internal/form/path.ts","../../src/Path.ts","../../src/react/useFieldArray.ts","../../src/internal/form/rowid.ts","../../src/react/useForm.ts","../../src/react/useFormState.ts","../../src/FormView.ts"],"sourcesContent":["export * from './useField.js'\nexport * from './useFieldArray.js'\nexport * from './useForm.js'\nexport * from './useFormState.js'\n","import { useCallback, useMemo } from 'react'\nimport type * as Logix from '@logixjs/core'\nimport * as LogixReact from '@logixjs/react'\nimport type { FormAction, FormState } from '../Form.js'\nimport { getAtPath } from '../internal/form/path.js'\nimport { toErrorsPath, toManualErrorsPath, toSchemaErrorsPath, toUiPath } from '../Path.js'\n\nconst readUiFlag = (ui: unknown, key: string): boolean => {\n if (!ui || typeof ui !== 'object' || Array.isArray(ui)) return false\n return (ui as Record<string, unknown>)[key] === true\n}\n\ntype FormRuntimeHandle<TValues extends object> = {\n readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>\n}\n\nexport const useField = <TValues extends object>(\n form: FormRuntimeHandle<TValues>,\n path: string,\n): {\n readonly value: unknown\n readonly error: unknown\n readonly touched: boolean\n readonly dirty: boolean\n readonly onChange: (value: unknown) => void\n readonly onBlur: () => void\n} => {\n const value = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, path))\n const manualError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toManualErrorsPath(path)))\n const ruleError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toErrorsPath(path)))\n const schemaError = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toSchemaErrorsPath(path)))\n const error = useMemo(() => manualError ?? ruleError ?? schemaError, [manualError, ruleError, schemaError])\n const ui = LogixReact.useSelector(form.runtime, (s) => getAtPath(s, toUiPath(path)))\n\n const touched = useMemo(() => readUiFlag(ui, 'touched'), [ui])\n const dirty = useMemo(() => readUiFlag(ui, 'dirty'), [ui])\n\n const dispatch = LogixReact.useDispatch(form.runtime)\n\n const onChange = useCallback(\n (next: unknown) => {\n dispatch({ _tag: 'setValue', payload: { path, value: next } })\n },\n [dispatch, path],\n )\n\n const onBlur = useCallback(() => {\n dispatch({ _tag: 'blur', payload: { path } })\n }, [dispatch, path])\n\n return useMemo(\n () => ({\n value,\n error,\n touched,\n dirty,\n onChange,\n onBlur,\n }),\n [value, error, touched, dirty, onChange, onBlur],\n )\n}\n","export const getAtPath = (state: unknown, path: string): unknown => {\n if (!path) return state\n\n const segments = path.split('.')\n let current: any = state\n\n for (const segment of segments) {\n if (current == null) return undefined\n const index = Number(segment)\n if (Array.isArray(current) && Number.isInteger(index) && String(index) === segment) {\n current = current[index]\n continue\n }\n current = current[segment]\n }\n\n return current\n}\n\nconst cloneContainer = (value: unknown): any => {\n if (Array.isArray(value)) return value.slice()\n if (value && typeof value === 'object') return { ...(value as any) }\n return undefined\n}\n\nexport const setAtPath = (state: unknown, path: string, value: unknown): unknown => {\n if (!path) return value\n\n const segments = path.split('.')\n const rootClone = cloneContainer(state) ?? {}\n\n let current: any = rootClone\n let currentSource: any = state\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!\n const index = Number(segment)\n const isIndex = Number.isInteger(index) && String(index) === segment\n\n const nextSource =\n currentSource == null\n ? undefined\n : isIndex && Array.isArray(currentSource)\n ? currentSource[index]\n : currentSource[segment]\n\n const nextSegment = segments[i + 1]!\n const nextIndex = Number(nextSegment)\n const nextIsIndex = Number.isInteger(nextIndex) && String(nextIndex) === nextSegment\n\n const nextClone = cloneContainer(nextSource) ?? (nextIsIndex ? [] : {})\n\n if (isIndex && Array.isArray(current)) {\n current[index] = nextClone\n } else {\n current[segment] = nextClone\n }\n\n current = nextClone\n currentSource = nextSource\n }\n\n const last = segments[segments.length - 1]!\n const lastIndex = Number(last)\n const lastIsIndex = Number.isInteger(lastIndex) && String(lastIndex) === last\n\n if (lastIsIndex && Array.isArray(current)) {\n current[lastIndex] = value\n } else {\n current[last] = value\n }\n\n return rootClone\n}\n\nexport const unsetAtPath = (state: unknown, path: string): unknown => {\n if (!path) return state\n if (getAtPath(state, path) === undefined) return state\n\n const segments = path.split('.')\n const rootClone = cloneContainer(state)\n if (rootClone === undefined) return state\n\n let current: any = rootClone\n let currentSource: any = state\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!\n const index = Number(segment)\n const isIndex = Number.isInteger(index) && String(index) === segment\n\n const nextSource =\n currentSource == null\n ? undefined\n : isIndex && Array.isArray(currentSource)\n ? currentSource[index]\n : currentSource[segment]\n\n const nextClone = cloneContainer(nextSource)\n if (nextClone === undefined) {\n return state\n }\n\n if (isIndex && Array.isArray(current)) {\n current[index] = nextClone\n } else {\n current[segment] = nextClone\n }\n\n current = nextClone\n currentSource = nextSource\n }\n\n const last = segments[segments.length - 1]!\n const lastIndex = Number(last)\n const lastIsIndex = Number.isInteger(lastIndex) && String(lastIndex) === last\n\n if (lastIsIndex && Array.isArray(current)) {\n current[lastIndex] = undefined\n return rootClone\n }\n\n if (current && typeof current === 'object') {\n delete current[last]\n }\n\n return rootClone\n}\n\nexport const updateArrayAtPath = (\n state: unknown,\n path: string,\n update: (items: ReadonlyArray<unknown>) => ReadonlyArray<unknown>,\n): unknown => {\n const current = getAtPath(state, path)\n const items = Array.isArray(current) ? current : []\n const next = update(items)\n return setAtPath(state, path, next)\n}\n","export type ValuePath = string\nexport type PatternPath = string\nexport type ListPath = string\nexport type ErrorsPath = string\nexport type UiPath = string\nexport type FieldPath = ReadonlyArray<string>\n\nconst isNumericSegment = (seg: string): boolean => /^[0-9]+$/.test(seg)\n\nconst splitPath = (path: string): ReadonlyArray<string> => {\n if (!path) return []\n const parts = path.split('.').filter((p) => p.length > 0)\n const segs: Array<string> = []\n\n for (const part of parts) {\n if (!part) continue\n if (part.endsWith('[]')) {\n const base = part.slice(0, -2)\n if (base) segs.push(base)\n segs.push('[]')\n continue\n }\n const bracket = /^(.+)\\[(\\d+)\\]$/.exec(part)\n if (bracket) {\n const base = bracket[1]!\n if (base) segs.push(base)\n segs.push(bracket[2]!)\n continue\n }\n segs.push(part)\n }\n\n return segs\n}\n\nexport const toPatternPath = (valuePath: ValuePath): PatternPath => {\n if (!valuePath) return valuePath\n const segs = splitPath(valuePath)\n const out: Array<string> = []\n\n for (const seg of segs) {\n if (seg === '[]' || isNumericSegment(seg)) {\n if (out.length === 0) continue\n const last = out[out.length - 1]!\n if (!last.endsWith('[]')) out[out.length - 1] = `${last}[]`\n continue\n }\n out.push(seg)\n }\n\n return out.join('.')\n}\n\nexport const toListPath = (valuePath: ValuePath): ListPath | undefined => {\n const segs = splitPath(valuePath)\n const firstIndex = segs.findIndex((seg) => seg === '[]' || isNumericSegment(seg))\n if (firstIndex <= 0) return undefined\n return segs.slice(0, firstIndex).join('.')\n}\n\nexport const toErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n if (!valuePath) return 'errors'\n const segs = splitPath(valuePath)\n const out: Array<string> = []\n\n for (const seg of segs) {\n if (isNumericSegment(seg)) {\n out.push('rows', seg)\n continue\n }\n if (seg === '[]') {\n continue\n }\n out.push(seg)\n }\n\n return `errors.${out.join('.')}`\n}\n\nexport const toManualErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n const base = toErrorsPath(valuePath)\n return base === 'errors' ? 'errors.$manual' : base.replace(/^errors\\./, 'errors.$manual.')\n}\n\nexport const toSchemaErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n const base = toErrorsPath(valuePath)\n return base === 'errors' ? 'errors.$schema' : base.replace(/^errors\\./, 'errors.$schema.')\n}\n\nexport const toUiPath = (valuePath: ValuePath): UiPath => (valuePath ? `ui.${valuePath}` : 'ui')\n\nexport const toFieldPath = (path: ValuePath | PatternPath): FieldPath => {\n const segs = splitPath(path)\n const out: Array<string> = []\n for (const seg of segs) {\n if (seg === '[]' || isNumericSegment(seg)) continue\n out.push(seg)\n }\n return out.length > 0 ? out : ['$root']\n}\n\nexport const Path = {\n toPatternPath,\n toListPath,\n toErrorsPath,\n toManualErrorsPath,\n toSchemaErrorsPath,\n toUiPath,\n toFieldPath,\n} as const\n","import { useCallback, useMemo } from 'react'\nimport type * as Logix from '@logixjs/core'\nimport * as LogixReact from '@logixjs/react'\nimport type { FormAction, FormState } from '../Form.js'\nimport { getAtPath } from '../internal/form/path.js'\nimport { getFieldArrayItemId, getRowIdStore, getTrackByForListPath } from '../internal/form/rowid.js'\n\nexport interface FieldArrayItem {\n readonly id: string\n}\n\ntype FormRuntimeHandle<TValues extends object> = {\n readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>\n}\n\nexport const useFieldArray = <TValues extends object>(\n form: FormRuntimeHandle<TValues>,\n path: string,\n): {\n readonly fields: ReadonlyArray<FieldArrayItem>\n readonly append: (value: unknown) => void\n readonly prepend: (value: unknown) => void\n readonly remove: (index: number) => void\n readonly swap: (indexA: number, indexB: number) => void\n readonly move: (from: number, to: number) => void\n} => {\n const items = LogixReact.useSelector(form.runtime, (s) => {\n const value = getAtPath(s, path)\n return Array.isArray(value) ? value : []\n })\n\n const dispatch = LogixReact.useDispatch(form.runtime)\n const rowIdStore = getRowIdStore(form.runtime)\n const trackBy = getTrackByForListPath(form.runtime, path)\n\n const fields = useMemo(() => {\n const ensureList = rowIdStore?.ensureList\n const rowIds =\n typeof ensureList === 'function'\n ? (() => {\n try {\n return ensureList(path, items, trackBy)\n } catch {\n return undefined\n }\n })()\n : undefined\n\n return items.map((item, index) => ({\n id: getFieldArrayItemId({\n listPath: path,\n item,\n index,\n trackBy,\n rowIds,\n rowIdStore,\n }),\n }))\n }, [items, rowIdStore, trackBy, path])\n\n const append = useCallback(\n (value: unknown) => {\n dispatch({ _tag: 'arrayAppend', payload: { path, value } })\n },\n [dispatch, path],\n )\n\n const prepend = useCallback(\n (value: unknown) => {\n dispatch({ _tag: 'arrayPrepend', payload: { path, value } })\n },\n [dispatch, path],\n )\n\n const remove = useCallback(\n (index: number) => {\n dispatch({ _tag: 'arrayRemove', payload: { path, index } })\n },\n [dispatch, path],\n )\n\n const swap = useCallback(\n (indexA: number, indexB: number) => {\n dispatch({ _tag: 'arraySwap', payload: { path, indexA, indexB } })\n },\n [dispatch, path],\n )\n\n const move = useCallback(\n (from: number, to: number) => {\n dispatch({ _tag: 'arrayMove', payload: { path, from, to } })\n },\n [dispatch, path],\n )\n\n return useMemo(\n () => ({\n fields,\n append,\n prepend,\n remove,\n swap,\n move,\n }),\n [fields, append, prepend, remove, swap, move],\n )\n}\n","import * as Logix from '@logixjs/core'\n\nexport type RowIdStoreLike = {\n readonly getRowId: (listPath: string, index: number) => string | undefined\n readonly ensureList?: (listPath: string, items: ReadonlyArray<unknown>, trackBy?: string) => ReadonlyArray<string>\n}\n\ntype ListConfigLike = {\n readonly path: string\n readonly trackBy?: string\n}\n\nexport const getRowIdStore = (runtime: unknown): RowIdStoreLike | undefined => {\n if (!runtime || (typeof runtime !== 'object' && typeof runtime !== 'function')) {\n return undefined\n }\n const store = Logix.InternalContracts.getRowIdStore(runtime as any)\n if (!store || typeof store !== 'object') return undefined\n const getRowId = (store as Record<string, unknown>).getRowId\n if (typeof getRowId !== 'function') return undefined\n return store as RowIdStoreLike\n}\n\nexport const getTrackByForListPath = (runtime: unknown, listPath: string): string | undefined => {\n if (!runtime || (typeof runtime !== 'object' && typeof runtime !== 'function')) {\n return undefined\n }\n const configs = Logix.InternalContracts.getStateTraitListConfigs(runtime as any)\n if (!Array.isArray(configs)) return undefined\n\n for (const cfg of configs as ReadonlyArray<unknown>) {\n if (!cfg || typeof cfg !== 'object') continue\n const typed = cfg as ListConfigLike\n if (typed.path !== listPath) continue\n if (typeof typed.trackBy === 'string' && typed.trackBy.length > 0) {\n return typed.trackBy\n }\n }\n\n return undefined\n}\n\nconst readTrackBy = (item: unknown, trackBy: string): unknown => {\n if (!item || typeof item !== 'object') return undefined\n const segments = trackBy.split('.')\n let current: any = item\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n}\n\nexport const getFieldArrayItemId = (params: {\n readonly listPath: string\n readonly item: unknown\n readonly index: number\n readonly trackBy?: string\n readonly rowIds?: ReadonlyArray<string>\n readonly rowIdStore?: RowIdStoreLike\n}): string => {\n const k = params.trackBy !== undefined ? readTrackBy(params.item, params.trackBy) : undefined\n if (k !== undefined) return String(k)\n\n const fromStore = params.rowIds?.[params.index] ?? params.rowIdStore?.getRowId(params.listPath, params.index)\n if (typeof fromStore === 'string' && fromStore.length > 0) return fromStore\n\n return String(params.index)\n}\n","import * as LogixReact from '@logixjs/react'\nimport type { FormAction, FormHandleExt, FormModule, FormState } from '../Form.js'\n\nexport const useForm = <Id extends string, TValues extends object>(\n form: FormModule<Id, TValues>,\n): LogixReact.ModuleRef<FormState<TValues>, FormAction> & FormHandleExt<TValues> => LogixReact.useModule(form)\n","import { useCallback, useRef } from 'react'\nimport type * as Logix from '@logixjs/core'\nimport * as LogixReact from '@logixjs/react'\nimport type { FormAction, FormState } from '../Form.js'\nimport type { FormView } from '../FormView.js'\nimport { getFormView } from '../FormView.js'\n\ntype FormRuntimeHandle<TValues extends object> = {\n readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>\n}\n\nexport const useFormState = <TValues extends object, V>(\n form: FormRuntimeHandle<TValues>,\n selector: (view: FormView) => V,\n equalityFn?: (previous: V, next: V) => boolean,\n): V => {\n const lastViewRef = useRef<FormView | undefined>(undefined)\n\n const select = useCallback(\n (state: unknown): V => {\n const view = getFormView(state, lastViewRef.current)\n lastViewRef.current = view\n return selector(view)\n },\n [selector],\n )\n\n return LogixReact.useSelector(form.runtime, select, equalityFn)\n}\n","export type FormView = {\n readonly canSubmit: boolean\n readonly isSubmitting: boolean\n readonly isValid: boolean\n readonly isDirty: boolean\n readonly isPristine: boolean\n readonly submitCount: number\n}\n\ntype Snapshot = {\n readonly submitCount: number\n readonly isSubmitting: boolean\n readonly isDirty: boolean\n readonly errorCount: number\n}\n\nconst readSnapshot = (state: unknown): Snapshot => {\n const meta = state && typeof state === 'object' && !Array.isArray(state) ? (state as any).$form : undefined\n const safe = meta && typeof meta === 'object' && !Array.isArray(meta) ? (meta as any) : undefined\n\n const submitCount = typeof safe?.submitCount === 'number' && Number.isFinite(safe.submitCount) ? safe.submitCount : 0\n const isSubmitting = safe?.isSubmitting === true\n const isDirty = safe?.isDirty === true\n const errorCount = typeof safe?.errorCount === 'number' && Number.isFinite(safe.errorCount) ? safe.errorCount : 0\n\n return {\n submitCount,\n isSubmitting,\n isDirty,\n errorCount,\n }\n}\n\nexport const getFormView = (state: unknown, prev?: FormView): FormView => {\n const snap = readSnapshot(state)\n const isValid = snap.errorCount === 0\n const isPristine = !snap.isDirty\n const canSubmit = !snap.isSubmitting && isValid\n\n if (\n prev &&\n prev.submitCount === snap.submitCount &&\n prev.isSubmitting === snap.isSubmitting &&\n prev.isDirty === snap.isDirty &&\n prev.isValid === isValid\n ) {\n return prev\n }\n\n return {\n canSubmit,\n isSubmitting: snap.isSubmitting,\n isValid,\n isDirty: snap.isDirty,\n isPristine,\n submitCount: snap.submitCount,\n }\n}\n"],"mappings":"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","names":["import_react","LogixReact","LogixReact","import_react","LogixReact"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as Logix from '@logixjs/core';
|
|
2
|
+
import { e as FormState, f as FormAction, l as FormModule, k as FormHandleExt } from '../impl-Ccdm5eDF.cjs';
|
|
3
|
+
import * as LogixReact from '@logixjs/react';
|
|
4
|
+
import { a as FormView } from '../FormView-CAg9LVrf.cjs';
|
|
5
|
+
import 'effect';
|
|
6
|
+
import '../Rule-BOAiSVz9.cjs';
|
|
7
|
+
import '../Trait-Bu794ROY.cjs';
|
|
8
|
+
|
|
9
|
+
type FormRuntimeHandle$2<TValues extends object> = {
|
|
10
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
11
|
+
};
|
|
12
|
+
declare const useField: <TValues extends object>(form: FormRuntimeHandle$2<TValues>, path: string) => {
|
|
13
|
+
readonly value: unknown;
|
|
14
|
+
readonly error: unknown;
|
|
15
|
+
readonly touched: boolean;
|
|
16
|
+
readonly dirty: boolean;
|
|
17
|
+
readonly onChange: (value: unknown) => void;
|
|
18
|
+
readonly onBlur: () => void;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
interface FieldArrayItem {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
}
|
|
24
|
+
type FormRuntimeHandle$1<TValues extends object> = {
|
|
25
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
26
|
+
};
|
|
27
|
+
declare const useFieldArray: <TValues extends object>(form: FormRuntimeHandle$1<TValues>, path: string) => {
|
|
28
|
+
readonly fields: ReadonlyArray<FieldArrayItem>;
|
|
29
|
+
readonly append: (value: unknown) => void;
|
|
30
|
+
readonly prepend: (value: unknown) => void;
|
|
31
|
+
readonly remove: (index: number) => void;
|
|
32
|
+
readonly swap: (indexA: number, indexB: number) => void;
|
|
33
|
+
readonly move: (from: number, to: number) => void;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
declare const useForm: <Id extends string, TValues extends object>(form: FormModule<Id, TValues>) => LogixReact.ModuleRef<FormState<TValues>, FormAction> & FormHandleExt<TValues>;
|
|
37
|
+
|
|
38
|
+
type FormRuntimeHandle<TValues extends object> = {
|
|
39
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
40
|
+
};
|
|
41
|
+
declare const useFormState: <TValues extends object, V>(form: FormRuntimeHandle<TValues>, selector: (view: FormView) => V, equalityFn?: (previous: V, next: V) => boolean) => V;
|
|
42
|
+
|
|
43
|
+
export { type FieldArrayItem, useField, useFieldArray, useForm, useFormState };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as Logix from '@logixjs/core';
|
|
2
|
+
import { e as FormState, f as FormAction, l as FormModule, k as FormHandleExt } from '../impl-BfSlyM58.js';
|
|
3
|
+
import * as LogixReact from '@logixjs/react';
|
|
4
|
+
import { a as FormView } from '../FormView-CAg9LVrf.js';
|
|
5
|
+
import 'effect';
|
|
6
|
+
import '../Rule-BOAiSVz9.js';
|
|
7
|
+
import '../Trait-Bu794ROY.js';
|
|
8
|
+
|
|
9
|
+
type FormRuntimeHandle$2<TValues extends object> = {
|
|
10
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
11
|
+
};
|
|
12
|
+
declare const useField: <TValues extends object>(form: FormRuntimeHandle$2<TValues>, path: string) => {
|
|
13
|
+
readonly value: unknown;
|
|
14
|
+
readonly error: unknown;
|
|
15
|
+
readonly touched: boolean;
|
|
16
|
+
readonly dirty: boolean;
|
|
17
|
+
readonly onChange: (value: unknown) => void;
|
|
18
|
+
readonly onBlur: () => void;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
interface FieldArrayItem {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
}
|
|
24
|
+
type FormRuntimeHandle$1<TValues extends object> = {
|
|
25
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
26
|
+
};
|
|
27
|
+
declare const useFieldArray: <TValues extends object>(form: FormRuntimeHandle$1<TValues>, path: string) => {
|
|
28
|
+
readonly fields: ReadonlyArray<FieldArrayItem>;
|
|
29
|
+
readonly append: (value: unknown) => void;
|
|
30
|
+
readonly prepend: (value: unknown) => void;
|
|
31
|
+
readonly remove: (index: number) => void;
|
|
32
|
+
readonly swap: (indexA: number, indexB: number) => void;
|
|
33
|
+
readonly move: (from: number, to: number) => void;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
declare const useForm: <Id extends string, TValues extends object>(form: FormModule<Id, TValues>) => LogixReact.ModuleRef<FormState<TValues>, FormAction> & FormHandleExt<TValues>;
|
|
37
|
+
|
|
38
|
+
type FormRuntimeHandle<TValues extends object> = {
|
|
39
|
+
readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>;
|
|
40
|
+
};
|
|
41
|
+
declare const useFormState: <TValues extends object, V>(form: FormRuntimeHandle<TValues>, selector: (view: FormView) => V, equalityFn?: (previous: V, next: V) => boolean) => V;
|
|
42
|
+
|
|
43
|
+
export { type FieldArrayItem, useField, useFieldArray, useForm, useFormState };
|