@vanstack/solid-ark 0.0.23 → 0.0.25
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 +4 -0
- package/dist/data-table/index.mjs +1 -1
- package/dist/form/index.d.ts +1 -1
- package/dist/form/index.mjs +1 -1
- package/dist/form/type.d.ts +17 -2
- package/dist/{form-B5rMsobe.js → form-CsuVvlcC.js} +138 -121
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -54,6 +54,10 @@ function Demo() {
|
|
|
54
54
|
|
|
55
55
|
组件样式基于 Tailwind 语义 token,覆盖 `:root` CSS 变量即可自定义(各子入口文档中有对应的 token 示例)。
|
|
56
56
|
|
|
57
|
+
## 演示
|
|
58
|
+
|
|
59
|
+
组件演示见 monorepo 的 [apps/solid-demo](https://gitee.com/janzho/vanstack/tree/master/apps/solid-demo):`pnpm dev` 后打开 Form / Modal / DataTable / Badge 等页面。
|
|
60
|
+
|
|
57
61
|
## License
|
|
58
62
|
|
|
59
63
|
MIT
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../solid-ark.css";
|
|
2
2
|
import { t as e } from "../button-Br_upy12.js";
|
|
3
3
|
import { t } from "../badge-Dt0uZnmA.js";
|
|
4
|
-
import { t as n } from "../form-
|
|
4
|
+
import { t as n } from "../form-CsuVvlcC.js";
|
|
5
5
|
import { t as r } from "../table-Dl0ngdNr.js";
|
|
6
6
|
import { className as i, createComponent as a, effect as o, insert as s, memo as c, setAttribute as l, setStyleProperty as u, template as d, use as f } from "solid-js/web";
|
|
7
7
|
import { For as p, Show as m, createEffect as ee, createMemo as h, createSignal as g, mergeProps as _, on as te, onCleanup as v, onMount as y } from "solid-js";
|
package/dist/form/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Form } from './Form';
|
|
2
|
-
export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormExposed, FormInvalidSubmitProps, FormProps, FormSize, FormSubmitProps, } from './type';
|
|
2
|
+
export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormExposed, FormFieldValues, FormInvalidSubmitProps, FormProps, FormSize, FormSubmitProps, } from './type';
|
package/dist/form/index.mjs
CHANGED
package/dist/form/type.d.ts
CHANGED
|
@@ -25,6 +25,10 @@ interface BaseFieldConfig {
|
|
|
25
25
|
renderLabel?: (label: string) => JSX.Element;
|
|
26
26
|
/** 自定义 error */
|
|
27
27
|
renderError?: (errors: string[]) => JSX.Element;
|
|
28
|
+
/** 是否隐藏渲染:true 时不渲染但值仍提交,默认 false */
|
|
29
|
+
hidden?: boolean;
|
|
30
|
+
/** 是否渲染并提交:false 或函数返回 false 时不渲染且值不提交;函数接收当前表单值(响应式联动显隐) */
|
|
31
|
+
show?: ((values: Record<string, unknown>) => boolean) | boolean;
|
|
28
32
|
/** 提交/比较前转换为数字(select/radio 值是字符串、目标字段是数字时使用) */
|
|
29
33
|
valueType?: "number";
|
|
30
34
|
}
|
|
@@ -123,14 +127,25 @@ export interface FormSubmitProps<TData extends Record<string, unknown>> {
|
|
|
123
127
|
/** patch=true 时提供:patch 是否非空 */
|
|
124
128
|
changed?: boolean;
|
|
125
129
|
}
|
|
130
|
+
/** getFieldValues 的返回值:全部字段值 + (patch 开启时)变更集 */
|
|
131
|
+
export interface FormFieldValues<TData extends Record<string, unknown>> {
|
|
132
|
+
/** 当前全部字段值(与 onSubmit 的 value 内容一致,剔除 show=false 字段) */
|
|
133
|
+
values: TData;
|
|
134
|
+
/** patch=true 时提供:与初始值不同的字段集合 */
|
|
135
|
+
patch?: Partial<TData>;
|
|
136
|
+
/** patch=true 时提供:patch 是否非空 */
|
|
137
|
+
changed?: boolean;
|
|
138
|
+
}
|
|
126
139
|
/** 暴露给外部的表单实例(Form ref) */
|
|
127
140
|
export interface FormExposed<TData extends Record<string, unknown>> {
|
|
128
141
|
/** 校验全部字段(等待异步规则);返回是否全部通过,不触发提交 */
|
|
129
142
|
validate: () => Promise<boolean>;
|
|
143
|
+
/** 校验全部字段:通过返回同 getFieldValues(),未通过返回 false */
|
|
144
|
+
validateAndGetFieldValues: () => Promise<false | FormFieldValues<TData>>;
|
|
130
145
|
/** 重置表单 */
|
|
131
146
|
reset: () => void;
|
|
132
|
-
/**
|
|
133
|
-
getFieldValues: () => TData
|
|
147
|
+
/** 读取全部字段值与 patch(patch 开启时提供 patch/changed) */
|
|
148
|
+
getFieldValues: () => FormFieldValues<TData>;
|
|
134
149
|
/** 批量写入字段值(逐字段触发校验与 onValuesChange) */
|
|
135
150
|
setFieldValues: (values: Partial<TData>) => void;
|
|
136
151
|
/** 读取字段值 */
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import "./solid-ark.css";
|
|
2
2
|
import { Index as e, className as t, createComponent as n, delegateEvents as r, effect as i, insert as a, memo as o, setAttribute as s, style as c, template as l } from "solid-js/web";
|
|
3
|
-
import { For as u, Show as d, Suspense as f, createEffect as p, createMemo as m, createSignal as h, createUniqueId as g, lazy as _, mergeProps as
|
|
4
|
-
import { Field as
|
|
5
|
-
import { createForm as
|
|
6
|
-
import { Checkbox as
|
|
7
|
-
import { RadioGroup as
|
|
8
|
-
import { Switch as
|
|
9
|
-
import { deepEqual as
|
|
3
|
+
import { For as u, Show as d, Suspense as f, createEffect as p, createMemo as m, createSignal as h, createUniqueId as g, lazy as _, mergeProps as ee, on as v, onCleanup as y } from "solid-js";
|
|
4
|
+
import { Field as b } from "@ark-ui/solid/field";
|
|
5
|
+
import { createForm as x } from "@tanstack/solid-form";
|
|
6
|
+
import { Checkbox as S } from "@ark-ui/solid/checkbox";
|
|
7
|
+
import { RadioGroup as C } from "@ark-ui/solid/radio-group";
|
|
8
|
+
import { Switch as w } from "@ark-ui/solid/switch";
|
|
9
|
+
import { deepEqual as T } from "fast-equals";
|
|
10
10
|
//#region src/form/components/FieldSkeleton.tsx
|
|
11
|
-
var
|
|
12
|
-
function
|
|
13
|
-
return
|
|
11
|
+
var E = /*#__PURE__*/ l("<div aria-hidden=true class=van-form-field-skeleton>");
|
|
12
|
+
function D() {
|
|
13
|
+
return E();
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/form/components/FormCheckbox.tsx
|
|
17
|
-
var
|
|
17
|
+
var O = /*#__PURE__*/ l("<svg class=van-form-check-icon fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=3 viewBox=\"0 0 24 24\"><path d=\"M5 12l5 5l10 -10\">");
|
|
18
18
|
function k(e) {
|
|
19
|
-
return n(
|
|
19
|
+
return n(S.Root, {
|
|
20
20
|
get checked() {
|
|
21
21
|
return e.value ?? !1;
|
|
22
22
|
},
|
|
@@ -27,24 +27,24 @@ function k(e) {
|
|
|
27
27
|
onCheckedChange: (t) => e.onChange(t.checked === !0),
|
|
28
28
|
get children() {
|
|
29
29
|
return [
|
|
30
|
-
n(
|
|
30
|
+
n(S.Control, {
|
|
31
31
|
class: "van-form-checkbox-control",
|
|
32
32
|
get children() {
|
|
33
|
-
return n(
|
|
33
|
+
return n(S.Indicator, {
|
|
34
34
|
class: "van-form-checkbox-indicator",
|
|
35
35
|
get children() {
|
|
36
|
-
return
|
|
36
|
+
return O();
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
}),
|
|
41
|
-
o(() => o(() => !!e.label)() && n(
|
|
41
|
+
o(() => o(() => !!e.label)() && n(S.Label, {
|
|
42
42
|
class: "van-form-checkbox-label",
|
|
43
43
|
get children() {
|
|
44
44
|
return e.label;
|
|
45
45
|
}
|
|
46
46
|
})),
|
|
47
|
-
n(
|
|
47
|
+
n(S.HiddenInput, {})
|
|
48
48
|
];
|
|
49
49
|
}
|
|
50
50
|
});
|
|
@@ -52,8 +52,8 @@ function k(e) {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
//#region src/form/components/FormCheckboxGroup.tsx
|
|
54
54
|
var A = /*#__PURE__*/ l("<svg class=van-form-check-icon fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=3 viewBox=\"0 0 24 24\"><path d=\"M5 12l5 5l10 -10\">");
|
|
55
|
-
function
|
|
56
|
-
return n(
|
|
55
|
+
function te(t) {
|
|
56
|
+
return n(S.Group, {
|
|
57
57
|
class: "van-form-checkbox-group",
|
|
58
58
|
get id() {
|
|
59
59
|
return t.controlId;
|
|
@@ -65,7 +65,7 @@ function j(t) {
|
|
|
65
65
|
get each() {
|
|
66
66
|
return t.field.options;
|
|
67
67
|
},
|
|
68
|
-
children: (e) => n(
|
|
68
|
+
children: (e) => n(S.Root, {
|
|
69
69
|
class: "van-form-checkbox-root",
|
|
70
70
|
get id() {
|
|
71
71
|
return `${t.controlId}-item-${e().value}`;
|
|
@@ -81,10 +81,10 @@ function j(t) {
|
|
|
81
81
|
},
|
|
82
82
|
get children() {
|
|
83
83
|
return [
|
|
84
|
-
n(
|
|
84
|
+
n(S.Control, {
|
|
85
85
|
class: "van-form-checkbox-control",
|
|
86
86
|
get children() {
|
|
87
|
-
return n(
|
|
87
|
+
return n(S.Indicator, {
|
|
88
88
|
class: "van-form-checkbox-indicator",
|
|
89
89
|
get children() {
|
|
90
90
|
return A();
|
|
@@ -92,13 +92,13 @@ function j(t) {
|
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
94
|
}),
|
|
95
|
-
n(
|
|
95
|
+
n(S.Label, {
|
|
96
96
|
class: "van-form-checkbox-label",
|
|
97
97
|
get children() {
|
|
98
98
|
return e().label;
|
|
99
99
|
}
|
|
100
100
|
}),
|
|
101
|
-
n(
|
|
101
|
+
n(S.HiddenInput, {})
|
|
102
102
|
];
|
|
103
103
|
}
|
|
104
104
|
})
|
|
@@ -108,7 +108,7 @@ function j(t) {
|
|
|
108
108
|
}
|
|
109
109
|
//#endregion
|
|
110
110
|
//#region src/form/components/useDebouncedValue.ts
|
|
111
|
-
function
|
|
111
|
+
function j(e) {
|
|
112
112
|
let [t, n] = h(e.value() ?? ""), r, i = (t) => {
|
|
113
113
|
if (n(t), (e.debounce ?? 0) > 0) {
|
|
114
114
|
clearTimeout(r), r = setTimeout(() => {
|
|
@@ -120,7 +120,7 @@ function M(e) {
|
|
|
120
120
|
}, a = () => {
|
|
121
121
|
r !== void 0 && (clearTimeout(r), r = void 0, t() !== e.value() && e.onChange(t()));
|
|
122
122
|
};
|
|
123
|
-
return p(
|
|
123
|
+
return p(v(() => e.value(), (e) => n(e ?? ""))), y(() => clearTimeout(r)), {
|
|
124
124
|
local: t,
|
|
125
125
|
handleInput: i,
|
|
126
126
|
handleBlur: () => {
|
|
@@ -133,17 +133,17 @@ function M(e) {
|
|
|
133
133
|
}
|
|
134
134
|
//#endregion
|
|
135
135
|
//#region src/form/components/FormInput.tsx
|
|
136
|
-
var
|
|
137
|
-
function
|
|
138
|
-
return
|
|
136
|
+
var ne = /*#__PURE__*/ l("<svg fill=none height=14 stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 viewBox=\"0 0 24 24\"width=14 xmlns=http://www.w3.org/2000/svg><path d=\"M18 6 6 18\"></path><path d=\"m6 6 12 12\">"), re = /*#__PURE__*/ l("<button aria-label=清空 type=button>"), M = /*#__PURE__*/ l("<div class=van-form-input-group>"), N = /*#__PURE__*/ l("<span class=\"van-form-input-addon van-form-input-addon-prefix\">"), P = /*#__PURE__*/ l("<span class=\"van-form-input-addon van-form-input-addon-suffix\">");
|
|
137
|
+
function F() {
|
|
138
|
+
return ne();
|
|
139
139
|
}
|
|
140
|
-
function
|
|
141
|
-
let { local: r, handleInput: s, handleBlur: c, handleClear: l } =
|
|
140
|
+
function I(e) {
|
|
141
|
+
let { local: r, handleInput: s, handleBlur: c, handleClear: l } = j({
|
|
142
142
|
value: () => e.value,
|
|
143
143
|
debounce: e.field.debounce,
|
|
144
144
|
onChange: e.onChange,
|
|
145
145
|
onBlur: e.onBlur
|
|
146
|
-
}), u, f = n(
|
|
146
|
+
}), u, f = n(b.Input, {
|
|
147
147
|
get autocomplete() {
|
|
148
148
|
return e.field.autocomplete;
|
|
149
149
|
},
|
|
@@ -164,11 +164,11 @@ function R(e) {
|
|
|
164
164
|
}
|
|
165
165
|
}), p = e.field.prefix !== void 0 || e.field.suffix !== void 0, m = e.field.clearable === !0;
|
|
166
166
|
return !p && !m ? f : (() => {
|
|
167
|
-
var s =
|
|
167
|
+
var s = M();
|
|
168
168
|
return a(s, (() => {
|
|
169
169
|
var t = o(() => e.field.prefix !== void 0);
|
|
170
170
|
return () => t() && (() => {
|
|
171
|
-
var t =
|
|
171
|
+
var t = N();
|
|
172
172
|
return a(t, () => e.field.prefix), t;
|
|
173
173
|
})();
|
|
174
174
|
})(), null), a(s, f, null), a(s, n(d, {
|
|
@@ -176,15 +176,15 @@ function R(e) {
|
|
|
176
176
|
return m && r() !== "";
|
|
177
177
|
},
|
|
178
178
|
get children() {
|
|
179
|
-
var r =
|
|
179
|
+
var r = re();
|
|
180
180
|
return r.$$click = () => {
|
|
181
181
|
l(), u?.focus();
|
|
182
|
-
}, a(r, n(
|
|
182
|
+
}, a(r, n(F, {})), i(() => t(r, `van-form-input-clear${e.field.suffix === void 0 ? "" : " van-form-input-clear-before-suffix"}`)), r;
|
|
183
183
|
}
|
|
184
184
|
}), null), a(s, (() => {
|
|
185
185
|
var t = o(() => e.field.suffix !== void 0);
|
|
186
186
|
return () => t() && (() => {
|
|
187
|
-
var t =
|
|
187
|
+
var t = P();
|
|
188
188
|
return a(t, () => e.field.suffix), t;
|
|
189
189
|
})();
|
|
190
190
|
})(), null), s;
|
|
@@ -193,9 +193,9 @@ function R(e) {
|
|
|
193
193
|
r(["click"]);
|
|
194
194
|
//#endregion
|
|
195
195
|
//#region src/form/components/FormRadio.tsx
|
|
196
|
-
function
|
|
196
|
+
function L(t) {
|
|
197
197
|
let r = m(() => t.field.options.map((e) => e.value));
|
|
198
|
-
return n(
|
|
198
|
+
return n(C.Root, {
|
|
199
199
|
class: "van-form-radio-group",
|
|
200
200
|
get id() {
|
|
201
201
|
return t.controlId;
|
|
@@ -212,21 +212,21 @@ function z(t) {
|
|
|
212
212
|
},
|
|
213
213
|
children: (e) => {
|
|
214
214
|
let r = t.field.options.find((t) => t.value === e());
|
|
215
|
-
return n(
|
|
215
|
+
return n(C.Item, {
|
|
216
216
|
class: "van-form-radio-item",
|
|
217
217
|
get value() {
|
|
218
218
|
return e();
|
|
219
219
|
},
|
|
220
220
|
get children() {
|
|
221
221
|
return [
|
|
222
|
-
n(
|
|
223
|
-
n(
|
|
222
|
+
n(C.ItemControl, { class: "van-form-radio-control" }),
|
|
223
|
+
n(C.ItemText, {
|
|
224
224
|
class: "van-form-radio-text",
|
|
225
225
|
get children() {
|
|
226
226
|
return r?.label ?? e();
|
|
227
227
|
}
|
|
228
228
|
}),
|
|
229
|
-
n(
|
|
229
|
+
n(C.ItemHiddenInput, {})
|
|
230
230
|
];
|
|
231
231
|
}
|
|
232
232
|
});
|
|
@@ -237,8 +237,8 @@ function z(t) {
|
|
|
237
237
|
}
|
|
238
238
|
//#endregion
|
|
239
239
|
//#region src/form/components/FormSwitch.tsx
|
|
240
|
-
function
|
|
241
|
-
return n(
|
|
240
|
+
function R(e) {
|
|
241
|
+
return n(w.Root, {
|
|
242
242
|
get checked() {
|
|
243
243
|
return e.value ?? !1;
|
|
244
244
|
},
|
|
@@ -249,33 +249,33 @@ function B(e) {
|
|
|
249
249
|
onCheckedChange: (t) => e.onChange(t.checked),
|
|
250
250
|
get children() {
|
|
251
251
|
return [
|
|
252
|
-
n(
|
|
252
|
+
n(w.Control, {
|
|
253
253
|
class: "van-form-switch-control",
|
|
254
254
|
get children() {
|
|
255
|
-
return n(
|
|
255
|
+
return n(w.Thumb, { class: "van-form-switch-thumb" });
|
|
256
256
|
}
|
|
257
257
|
}),
|
|
258
|
-
o(() => o(() => !!e.label)() && n(
|
|
258
|
+
o(() => o(() => !!e.label)() && n(w.Label, {
|
|
259
259
|
class: "van-form-switch-label",
|
|
260
260
|
get children() {
|
|
261
261
|
return e.label;
|
|
262
262
|
}
|
|
263
263
|
})),
|
|
264
|
-
n(
|
|
264
|
+
n(w.HiddenInput, {})
|
|
265
265
|
];
|
|
266
266
|
}
|
|
267
267
|
});
|
|
268
268
|
}
|
|
269
269
|
//#endregion
|
|
270
270
|
//#region src/form/components/FormTextarea.tsx
|
|
271
|
-
function
|
|
272
|
-
let { local: t, handleInput: r, handleBlur: i } =
|
|
271
|
+
function z(e) {
|
|
272
|
+
let { local: t, handleInput: r, handleBlur: i } = j({
|
|
273
273
|
value: () => e.value,
|
|
274
274
|
debounce: e.field.debounce,
|
|
275
275
|
onChange: e.onChange,
|
|
276
276
|
onBlur: e.onBlur
|
|
277
277
|
});
|
|
278
|
-
return n(
|
|
278
|
+
return n(b.Textarea, {
|
|
279
279
|
class: "van-form-textarea",
|
|
280
280
|
onBlur: i,
|
|
281
281
|
onInput: (e) => r(e.currentTarget.value),
|
|
@@ -292,17 +292,17 @@ function V(e) {
|
|
|
292
292
|
}
|
|
293
293
|
//#endregion
|
|
294
294
|
//#region src/form/components/utils.ts
|
|
295
|
-
function
|
|
295
|
+
function B(e, t) {
|
|
296
296
|
return e.fieldType === t;
|
|
297
297
|
}
|
|
298
|
-
function
|
|
298
|
+
function V(e) {
|
|
299
299
|
if (e != null) return typeof e == "number" ? `${e}px` : e;
|
|
300
300
|
}
|
|
301
301
|
//#endregion
|
|
302
302
|
//#region src/form/components/FieldRenderer.tsx
|
|
303
|
-
var
|
|
304
|
-
function
|
|
305
|
-
return
|
|
303
|
+
var H = _(() => import("./FormDatePicker-Cazd9kkD.js").then((e) => ({ default: e.FormDatePicker }))), U = _(() => import("./FormSelect-BDZATc3u.js").then((e) => ({ default: e.FormSelect })));
|
|
304
|
+
function W(e) {
|
|
305
|
+
return B(e.field, "input") ? n(I, {
|
|
306
306
|
get field() {
|
|
307
307
|
return e.field;
|
|
308
308
|
},
|
|
@@ -313,7 +313,7 @@ function K(e) {
|
|
|
313
313
|
get value() {
|
|
314
314
|
return e.value;
|
|
315
315
|
}
|
|
316
|
-
}) :
|
|
316
|
+
}) : B(e.field, "textarea") ? n(z, {
|
|
317
317
|
get field() {
|
|
318
318
|
return e.field;
|
|
319
319
|
},
|
|
@@ -324,12 +324,12 @@ function K(e) {
|
|
|
324
324
|
get value() {
|
|
325
325
|
return e.value;
|
|
326
326
|
}
|
|
327
|
-
}) :
|
|
327
|
+
}) : B(e.field, "select") ? n(f, {
|
|
328
328
|
get fallback() {
|
|
329
|
-
return n(
|
|
329
|
+
return n(D, {});
|
|
330
330
|
},
|
|
331
331
|
get children() {
|
|
332
|
-
return n(
|
|
332
|
+
return n(U, {
|
|
333
333
|
get controlId() {
|
|
334
334
|
return e.controlId;
|
|
335
335
|
},
|
|
@@ -345,12 +345,12 @@ function K(e) {
|
|
|
345
345
|
}
|
|
346
346
|
});
|
|
347
347
|
}
|
|
348
|
-
}) :
|
|
348
|
+
}) : B(e.field, "datePicker") ? n(f, {
|
|
349
349
|
get fallback() {
|
|
350
|
-
return n(
|
|
350
|
+
return n(D, {});
|
|
351
351
|
},
|
|
352
352
|
get children() {
|
|
353
|
-
return n(
|
|
353
|
+
return n(H, {
|
|
354
354
|
get controlId() {
|
|
355
355
|
return e.controlId;
|
|
356
356
|
},
|
|
@@ -366,7 +366,7 @@ function K(e) {
|
|
|
366
366
|
}
|
|
367
367
|
});
|
|
368
368
|
}
|
|
369
|
-
}) :
|
|
369
|
+
}) : B(e.field, "checkbox") ? n(k, {
|
|
370
370
|
get controlId() {
|
|
371
371
|
return e.controlId;
|
|
372
372
|
},
|
|
@@ -377,7 +377,7 @@ function K(e) {
|
|
|
377
377
|
get value() {
|
|
378
378
|
return e.value;
|
|
379
379
|
}
|
|
380
|
-
}) :
|
|
380
|
+
}) : B(e.field, "switch") ? n(R, {
|
|
381
381
|
get controlId() {
|
|
382
382
|
return e.controlId;
|
|
383
383
|
},
|
|
@@ -388,7 +388,7 @@ function K(e) {
|
|
|
388
388
|
get value() {
|
|
389
389
|
return e.value;
|
|
390
390
|
}
|
|
391
|
-
}) :
|
|
391
|
+
}) : B(e.field, "radio") ? n(L, {
|
|
392
392
|
get controlId() {
|
|
393
393
|
return e.controlId;
|
|
394
394
|
},
|
|
@@ -399,7 +399,7 @@ function K(e) {
|
|
|
399
399
|
get value() {
|
|
400
400
|
return e.value;
|
|
401
401
|
}
|
|
402
|
-
}) :
|
|
402
|
+
}) : B(e.field, "checkbox-group") ? n(te, {
|
|
403
403
|
get controlId() {
|
|
404
404
|
return e.controlId;
|
|
405
405
|
},
|
|
@@ -414,29 +414,29 @@ function K(e) {
|
|
|
414
414
|
}
|
|
415
415
|
//#endregion
|
|
416
416
|
//#region src/form/patch.ts
|
|
417
|
-
function
|
|
418
|
-
return
|
|
417
|
+
function G(e) {
|
|
418
|
+
return q(e) || e === "" ? void 0 : Number(e);
|
|
419
419
|
}
|
|
420
|
-
function
|
|
421
|
-
return
|
|
420
|
+
function K(e) {
|
|
421
|
+
return q(e) || e === "" ? 0 : Number(e);
|
|
422
422
|
}
|
|
423
|
-
function
|
|
423
|
+
function q(e) {
|
|
424
424
|
return e == null;
|
|
425
425
|
}
|
|
426
|
-
function
|
|
426
|
+
function J(e) {
|
|
427
427
|
return Array.isArray(e) ? [...e].sort() : [];
|
|
428
428
|
}
|
|
429
|
-
function
|
|
429
|
+
function Y(e) {
|
|
430
430
|
return e && typeof e == "object" && !Array.isArray(e) ? e : {};
|
|
431
431
|
}
|
|
432
|
-
function
|
|
432
|
+
function X(e) {
|
|
433
433
|
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
434
434
|
}
|
|
435
|
-
function
|
|
435
|
+
function ie(e, t, n) {
|
|
436
436
|
let r = {};
|
|
437
437
|
for (let i of n) {
|
|
438
438
|
let { name: n, valueType: a } = i, o = e[n], s = t[n], c;
|
|
439
|
-
c = a === "number" ?
|
|
439
|
+
c = a === "number" ? T(G(o), G(s)) : Array.isArray(o) || Array.isArray(s) ? T(J(o), J(s)) : X(o) || X(s) ? T(Y(o), Y(s)) : T(q(o) ? "" : o, q(s) ? "" : s), c || (r[n] = a === "number" ? K(s) : s);
|
|
440
440
|
}
|
|
441
441
|
return {
|
|
442
442
|
patch: r,
|
|
@@ -445,11 +445,11 @@ function ne(e, t, n) {
|
|
|
445
445
|
}
|
|
446
446
|
//#endregion
|
|
447
447
|
//#region src/form/Form.tsx
|
|
448
|
-
var
|
|
449
|
-
function
|
|
448
|
+
var ae = /*#__PURE__*/ l("<form>"), oe = /*#__PURE__*/ l("<div class=van-form-field>");
|
|
449
|
+
function Z(e) {
|
|
450
450
|
return typeof e == "string" ? e : e && typeof e == "object" && "message" in e ? String(e.message) : String(e);
|
|
451
451
|
}
|
|
452
|
-
function
|
|
452
|
+
function se(e) {
|
|
453
453
|
let t = e.rule;
|
|
454
454
|
if (t) return {
|
|
455
455
|
onChange: typeof t == "function" ? (e) => t({
|
|
@@ -459,27 +459,43 @@ function ae(e) {
|
|
|
459
459
|
...e.validateListenTo?.length ? { onChangeListenTo: e.validateListenTo } : {}
|
|
460
460
|
};
|
|
461
461
|
}
|
|
462
|
-
function
|
|
463
|
-
|
|
462
|
+
function Q(e, t) {
|
|
463
|
+
return typeof e.show == "function" ? e.show(t) : e.show !== !1;
|
|
464
|
+
}
|
|
465
|
+
function ce(e, t) {
|
|
466
|
+
let n = new Set(t.filter((t) => !Q(t, e)).map((e) => e.name));
|
|
467
|
+
return Object.fromEntries(Object.entries(e).filter(([e]) => !n.has(e)));
|
|
468
|
+
}
|
|
469
|
+
function le(e, t) {
|
|
470
|
+
return e.filter((e) => Q(e, t));
|
|
471
|
+
}
|
|
472
|
+
function $(e) {
|
|
473
|
+
let r = ee({ values: {} }, e), l = r.values, f = g(), h = (e) => `${f}-${e}`, _ = (e) => {
|
|
474
|
+
let t = ce(e, r.fields);
|
|
475
|
+
if (r.patch) {
|
|
476
|
+
let { patch: n, changed: i } = ie(l, t, le(r.fields, e));
|
|
477
|
+
return {
|
|
478
|
+
values: t,
|
|
479
|
+
patch: n,
|
|
480
|
+
changed: i
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
return { values: t };
|
|
484
|
+
}, y = x(() => ({
|
|
464
485
|
defaultValues: l,
|
|
465
486
|
onSubmit: async ({ value: e }) => {
|
|
466
|
-
let t = e;
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
changed: n
|
|
473
|
-
});
|
|
474
|
-
return;
|
|
475
|
-
}
|
|
476
|
-
await r.onSubmit?.({ value: t });
|
|
487
|
+
let { values: t, patch: n, changed: i } = _(e);
|
|
488
|
+
await r.onSubmit?.(n === void 0 ? { value: t } : {
|
|
489
|
+
value: t,
|
|
490
|
+
patch: n,
|
|
491
|
+
changed: i
|
|
492
|
+
});
|
|
477
493
|
},
|
|
478
494
|
onSubmitInvalid: ({ value: e, formApi: t }) => {
|
|
479
495
|
if (!r.onSubmitInvalid) return;
|
|
480
496
|
let n = {}, i = t.state.fieldMeta;
|
|
481
497
|
for (let [e, t] of Object.entries(i)) {
|
|
482
|
-
let r = (t?.errors ?? []).map(
|
|
498
|
+
let r = (t?.errors ?? []).map(Z).filter(Boolean);
|
|
483
499
|
r.length > 0 && (n[e] = r);
|
|
484
500
|
}
|
|
485
501
|
r.onSubmitInvalid({
|
|
@@ -489,37 +505,38 @@ function oe(e) {
|
|
|
489
505
|
}
|
|
490
506
|
}));
|
|
491
507
|
r.ref?.({
|
|
492
|
-
validate: async () => (await
|
|
493
|
-
|
|
494
|
-
|
|
508
|
+
validate: async () => (await y.validateAllFields("change"), y.state.canSubmit),
|
|
509
|
+
validateAndGetFieldValues: async () => (await y.validateAllFields("change"), y.state.canSubmit ? _(y.state.values) : !1),
|
|
510
|
+
reset: () => y.reset(),
|
|
511
|
+
getFieldValues: () => _(y.state.values),
|
|
495
512
|
setFieldValues: (e) => {
|
|
496
|
-
for (let [t, n] of Object.entries(e))
|
|
513
|
+
for (let [t, n] of Object.entries(e)) y.setFieldValue(t, n);
|
|
497
514
|
},
|
|
498
|
-
getFieldValue: (e) =>
|
|
499
|
-
setFieldValue: (e, t) =>
|
|
515
|
+
getFieldValue: (e) => y.getFieldValue(e),
|
|
516
|
+
setFieldValue: (e, t) => y.setFieldValue(e, t)
|
|
500
517
|
});
|
|
501
|
-
let
|
|
502
|
-
return p(
|
|
503
|
-
for (let [t, n] of Object.entries(e ?? {}))
|
|
504
|
-
}, { defer: !0 })), p(
|
|
505
|
-
var e =
|
|
518
|
+
let S = y.useStore((e) => e.values), C = m(() => r.fields.filter((e) => !e.hidden && Q(e, S()))), w = y.useStore((e) => e.isSubmitting), T = y.useStore((e) => e.values), E = y.setFieldValue;
|
|
519
|
+
return p(v(() => r.values, (e) => {
|
|
520
|
+
for (let [t, n] of Object.entries(e ?? {})) y.state.values[t] !== n && E(t, n);
|
|
521
|
+
}, { defer: !0 })), p(v(T, (e) => r.onValuesChange?.(e), { defer: !0 })), (() => {
|
|
522
|
+
var e = ae();
|
|
506
523
|
return e.addEventListener("submit", (e) => {
|
|
507
|
-
e.preventDefault(), e.stopPropagation(),
|
|
524
|
+
e.preventDefault(), e.stopPropagation(), y.handleSubmit();
|
|
508
525
|
}), a(e, n(u, {
|
|
509
526
|
get each() {
|
|
510
|
-
return
|
|
527
|
+
return C();
|
|
511
528
|
},
|
|
512
|
-
children: (e) => n(
|
|
529
|
+
children: (e) => n(y.Field, {
|
|
513
530
|
get name() {
|
|
514
531
|
return e.name;
|
|
515
532
|
},
|
|
516
533
|
get validators() {
|
|
517
|
-
return
|
|
534
|
+
return se(e);
|
|
518
535
|
},
|
|
519
536
|
children: (t) => {
|
|
520
|
-
let r = t(), s = m(() => (t().state.meta.errors ?? []).map(
|
|
537
|
+
let r = t(), s = m(() => (t().state.meta.errors ?? []).map(Z).filter(Boolean)), l = m(() => t().state.value), f = V(e.fieldWidth), p = f ? { width: f } : void 0;
|
|
521
538
|
return e.control ? (() => {
|
|
522
|
-
var t =
|
|
539
|
+
var t = oe();
|
|
523
540
|
return a(t, () => e.control({
|
|
524
541
|
value: l,
|
|
525
542
|
onChange: (e) => r.handleChange(e),
|
|
@@ -527,7 +544,7 @@ function oe(e) {
|
|
|
527
544
|
error: s,
|
|
528
545
|
id: h(e.name)
|
|
529
546
|
})), i((e) => c(t, p, e)), t;
|
|
530
|
-
})() : n(
|
|
547
|
+
})() : n(b.Root, {
|
|
531
548
|
class: "van-form-field",
|
|
532
549
|
get id() {
|
|
533
550
|
return h(e.name);
|
|
@@ -543,12 +560,12 @@ function oe(e) {
|
|
|
543
560
|
return o(() => !!(e.label && e.fieldType !== "checkbox" && e.fieldType !== "checkbox-group"))() && e.fieldType !== "switch";
|
|
544
561
|
},
|
|
545
562
|
get children() {
|
|
546
|
-
return o(() => !!e.renderLabel)() ? n(
|
|
563
|
+
return o(() => !!e.renderLabel)() ? n(b.Label, {
|
|
547
564
|
class: "van-form-label",
|
|
548
565
|
get children() {
|
|
549
566
|
return e.renderLabel(e.label);
|
|
550
567
|
}
|
|
551
|
-
}) : n(
|
|
568
|
+
}) : n(b.Label, {
|
|
552
569
|
class: "van-form-label",
|
|
553
570
|
get children() {
|
|
554
571
|
return e.label;
|
|
@@ -556,7 +573,7 @@ function oe(e) {
|
|
|
556
573
|
});
|
|
557
574
|
}
|
|
558
575
|
}),
|
|
559
|
-
n(
|
|
576
|
+
n(W, {
|
|
560
577
|
get controlId() {
|
|
561
578
|
return h(e.name);
|
|
562
579
|
},
|
|
@@ -572,7 +589,7 @@ function oe(e) {
|
|
|
572
589
|
return e.helperText;
|
|
573
590
|
},
|
|
574
591
|
get children() {
|
|
575
|
-
return n(
|
|
592
|
+
return n(b.HelperText, {
|
|
576
593
|
class: "van-form-helper",
|
|
577
594
|
get children() {
|
|
578
595
|
return e.helperText;
|
|
@@ -585,7 +602,7 @@ function oe(e) {
|
|
|
585
602
|
return s().length > 0;
|
|
586
603
|
},
|
|
587
604
|
get children() {
|
|
588
|
-
return o(() => !!e.renderError)() ? n(
|
|
605
|
+
return o(() => !!e.renderError)() ? n(b.ErrorText, {
|
|
589
606
|
class: "van-form-error",
|
|
590
607
|
get children() {
|
|
591
608
|
return e.renderError(s());
|
|
@@ -594,7 +611,7 @@ function oe(e) {
|
|
|
594
611
|
get each() {
|
|
595
612
|
return s();
|
|
596
613
|
},
|
|
597
|
-
children: (e) => n(
|
|
614
|
+
children: (e) => n(b.ErrorText, {
|
|
598
615
|
class: "van-form-error",
|
|
599
616
|
children: e
|
|
600
617
|
})
|
|
@@ -606,7 +623,7 @@ function oe(e) {
|
|
|
606
623
|
});
|
|
607
624
|
}
|
|
608
625
|
})
|
|
609
|
-
}), null), a(e, () => r.children?.({ isSubmitting:
|
|
626
|
+
}), null), a(e, () => r.children?.({ isSubmitting: w() }), null), i((n) => {
|
|
610
627
|
var i = `van-form-form ${r.className ?? ""}`, a = r.size ?? "default";
|
|
611
628
|
return i !== n.e && t(e, n.e = i), a !== n.t && s(e, "data-size", n.t = a), n;
|
|
612
629
|
}, {
|
|
@@ -616,4 +633,4 @@ function oe(e) {
|
|
|
616
633
|
})();
|
|
617
634
|
}
|
|
618
635
|
//#endregion
|
|
619
|
-
export {
|
|
636
|
+
export { $ as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vanstack/solid-ark",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -71,10 +71,10 @@
|
|
|
71
71
|
"vite-plugin-solid": "^2.11.0",
|
|
72
72
|
"vitest": "^4.1.10",
|
|
73
73
|
"zod": "^4.4.0",
|
|
74
|
-
"@vanstack/prettier-config": "0.0.1",
|
|
75
74
|
"@vanstack/eslint-config": "0.0.1",
|
|
76
|
-
"@vanstack/
|
|
77
|
-
"@vanstack/vite-config": "0.0.2"
|
|
75
|
+
"@vanstack/prettier-config": "0.0.1",
|
|
76
|
+
"@vanstack/vite-config": "0.0.2",
|
|
77
|
+
"@vanstack/tsconfig": "0.0.1"
|
|
78
78
|
},
|
|
79
79
|
"scripts": {
|
|
80
80
|
"build": "tsc --noEmit && vite build",
|