@vanstack/solid-ark 0.0.4 → 0.0.6

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 ADDED
@@ -0,0 +1,59 @@
1
+ # @vanstack/solid-ark
2
+
3
+ 基于 [Ark UI](https://ark-ui.com) + TanStack 生态([TanStack Form](https://tanstack.com/form)、[TanStack Table](https://tanstack.com/table))的 Solid 组件库。样式统一消费 Tailwind 语义 token,支持 CSS 变量主题化。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm add @vanstack/solid-ark
9
+ ```
10
+
11
+ 按使用的子入口安装对应 peer 依赖:`solid-js`、`@ark-ui/solid`、`@tanstack/solid-form`、`@tanstack/solid-table`、`zod`。
12
+
13
+ ## 快速开始
14
+
15
+ ```tsx
16
+ import { Button } from "@vanstack/solid-ark/button";
17
+
18
+ function Demo() {
19
+ return (
20
+ <Button variant="success" loading={false} onClick={() => console.log("clicked")}>
21
+ 确认
22
+ </Button>
23
+ );
24
+ }
25
+ ```
26
+
27
+ ## 子入口
28
+
29
+ 包按功能拆分为独立子入口,按需引入:
30
+
31
+ | 入口 | 说明 |
32
+ |------|------|
33
+ | `@vanstack/solid-ark/button` | 原生 `<button>` 样式封装,支持 `loading`、`variant` |
34
+ | `@vanstack/solid-ark/form` | 受控表单:TanStack Form + Ark UI + Zod,支持外部 `values` 双向绑定、变更集(patch)、跨字段校验、防抖输入、datePicker 等控件 |
35
+ | `@vanstack/solid-ark/modal` | 基于 Ark UI Dialog 的命令式弹窗管理器,Promise 驱动 |
36
+ | `@vanstack/solid-ark/drawer` | 基于 Ark UI Drawer 的命令式抽屉管理器,支持四方向滑入 |
37
+ | `@vanstack/solid-ark/toast` | 基于 Ark UI Toast 的通知组件,命令式调用 |
38
+ | `@vanstack/solid-ark/table` | 基于 TanStack Table 的非受控表格,内置排序和行选择 |
39
+ | `@vanstack/solid-ark/data-table` | 搜索表单 + 表格 + 分页的组合组件,支持内部/外部取数两种模式 |
40
+
41
+ ## 详细文档
42
+
43
+ 各子入口的完整使用文档位于源码对应目录的 `README.md`,可在线查看:
44
+
45
+ - [packages/solid/ark/src/form](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/form)
46
+ - [packages/solid/ark/src/button](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/button)
47
+ - [packages/solid/ark/src/modal](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/modal)
48
+ - [packages/solid/ark/src/drawer](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/drawer)
49
+ - [packages/solid/ark/src/toast](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/toast)
50
+ - [packages/solid/ark/src/table](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/table)
51
+ - [packages/solid/ark/src/data-table](https://gitee.com/janzho/vanstack/tree/master/packages/solid/ark/src/data-table)
52
+
53
+ ## 主题化
54
+
55
+ 组件样式基于 Tailwind 语义 token,覆盖 `:root` CSS 变量即可自定义(各子入口文档中有对应的 token 示例)。
56
+
57
+ ## License
58
+
59
+ MIT
@@ -151,7 +151,7 @@ function z(e) {
151
151
  children: (e) => t(u.TableHeader, {
152
152
  class: "van-form-date-table-header",
153
153
  get children() {
154
- return e().short;
154
+ return e().narrow;
155
155
  }
156
156
  })
157
157
  })];
@@ -1,6 +1,6 @@
1
1
  import { JSX } from 'solid-js';
2
2
  export type ButtonVariant = "danger" | "ghost" | "outline" | "primary" | "success" | "warning";
3
- export type ButtonSize = "lg" | "md" | "sm";
3
+ export type ButtonSize = "default" | "large" | "small";
4
4
  export type ButtonProps = {
5
5
  /** 加载中:显示 spinner、自动 disabled、设置 aria-busy */
6
6
  loading?: boolean;
@@ -1,3 +1,3 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../button-C9xYlZbo.js";
2
+ import { t as e } from "../button-Br_upy12.js";
3
3
  export { e as Button };
@@ -13,7 +13,6 @@ function l(i) {
13
13
  ]), d = () => [
14
14
  "van-btn",
15
15
  `van-btn-${l.variant ?? "primary"}`,
16
- `van-btn-${l.size ?? "md"}`,
17
16
  l.class
18
17
  ].filter(Boolean).join(" ");
19
18
  return (() => {
@@ -25,6 +24,9 @@ function l(i) {
25
24
  get class() {
26
25
  return d();
27
26
  },
27
+ get "data-size"() {
28
+ return l.size;
29
+ },
28
30
  get disabled() {
29
31
  return l.loading || u.disabled;
30
32
  },
@@ -1,6 +1,6 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../button-C9xYlZbo.js";
3
- import { t } from "../form-TmnHhNkx.js";
2
+ import { t as e } from "../button-Br_upy12.js";
3
+ import { t } from "../form-BMnQz8c0.js";
4
4
  import { t as n } from "../table-B88tYpbb.js";
5
5
  import { className as r, createComponent as i, effect as a, insert as o, memo as s, setAttribute as c, template as l } from "solid-js/web";
6
6
  import { For as u, Show as d, createEffect as f, createMemo as p, createSignal as m, mergeProps as h, on as g, onMount as _ } from "solid-js";
@@ -1,5 +1,5 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../button-C9xYlZbo.js";
2
+ import { t as e } from "../button-Br_upy12.js";
3
3
  import { Portal as t, createComponent as n, insert as r, mergeProps as i, template as a } from "solid-js/web";
4
4
  import { For as o, Show as s, createSignal as c, onMount as l } from "solid-js";
5
5
  import { DrawerBackdrop as u, DrawerCloseTrigger as d, DrawerContent as f, DrawerDescription as p, DrawerGrabber as m, DrawerGrabberIndicator as h, DrawerPositioner as g, DrawerRootProvider as _, DrawerTitle as v, useDrawer as y } from "@ark-ui/solid/drawer";
@@ -1,2 +1,2 @@
1
1
  export { Form } from './Form';
2
- export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormInvalidSubmitProps, FormProps, } from './type';
2
+ export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormInvalidSubmitProps, FormProps, FormSize, FormSubmitProps, } from './type';
@@ -1,3 +1,3 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../form-TmnHhNkx.js";
2
+ import { t as e } from "../form-BMnQz8c0.js";
3
3
  export { e as Form };
@@ -0,0 +1,16 @@
1
+ import { FieldConfig } from './type';
2
+ export interface BuildPatchResult<TData extends Record<string, unknown>> {
3
+ /** 与初始值不同的字段集合;无变化时为空对象 */
4
+ patch: Partial<TData>;
5
+ /** patch 是否非空 */
6
+ changed: boolean;
7
+ }
8
+ /**
9
+ * 对比初始快照与当前值,返回发生变化的字段集合。
10
+ * - 字符串/布尔:空值归一(undefined/null → "")后严格比较;
11
+ * - valueType: "number":比较前 Number() 归一(1 与 "1" 视为相同),patch 里放数字(清空保存 0);
12
+ * - 数组:空值归一 [],排序后深度比较([1,2] 与 [2,1] 视为相同);
13
+ * - 对象:空值归一 {},深度比较;
14
+ * - 用户改后又改回原值 → 无变化,不进 patch。
15
+ */
16
+ export declare function buildPatch<TData extends Record<string, unknown>>(initial: TData, current: TData, fields: FieldConfig[]): BuildPatchResult<TData>;
@@ -25,6 +25,8 @@ interface BaseFieldConfig {
25
25
  renderLabel?: (label: string) => JSX.Element;
26
26
  /** 自定义 error */
27
27
  renderError?: (errors: string[]) => JSX.Element;
28
+ /** 提交/比较前转换为数字(select/radio 值是字符串、目标字段是数字时使用) */
29
+ valueType?: "number";
28
30
  }
29
31
  export interface InputFieldConfig extends BaseFieldConfig {
30
32
  fieldType: "input";
@@ -75,7 +77,7 @@ export interface CheckboxGroupFieldConfig extends BaseFieldConfig {
75
77
  value: string;
76
78
  }[];
77
79
  }
78
- export interface DatePickerFieldConfig extends BaseFieldConfig {
80
+ export interface DatePickerFieldConfig extends Omit<BaseFieldConfig, "valueType"> {
79
81
  fieldType: "datePicker";
80
82
  /** 选择粒度:year | month | week | date | datetime,默认 date */
81
83
  mode?: "date" | "datetime" | "month" | "week" | "year";
@@ -102,12 +104,23 @@ export interface FieldControlProps {
102
104
  error?: string[];
103
105
  id: string;
104
106
  }
107
+ /** 表单控件尺寸 */
108
+ export type FormSize = "default" | "large" | "small";
105
109
  export interface FormInvalidSubmitProps<TData extends Record<string, unknown>> {
106
110
  /** 提交被拦截时的表单值 */
107
111
  value: TData;
108
112
  /** 字段名 → 错误消息列表,只包含有错误的字段 */
109
113
  errors: Record<string, string[]>;
110
114
  }
115
+ /** 校验通过后的提交载荷:patch=true 时额外携带 patch / changed */
116
+ export interface FormSubmitProps<TData extends Record<string, unknown>> {
117
+ /** 当前表单值 */
118
+ value: TData;
119
+ /** patch=true 时提供:与初始值不同的字段集合(含变化的数组/对象) */
120
+ patch?: Partial<TData>;
121
+ /** patch=true 时提供:patch 是否非空 */
122
+ changed?: boolean;
123
+ }
111
124
  export interface FormProps<TData extends Record<string, unknown>> {
112
125
  /** 字段配置 */
113
126
  fields: FieldConfig[];
@@ -115,10 +128,12 @@ export interface FormProps<TData extends Record<string, unknown>> {
115
128
  values?: Partial<TData>;
116
129
  /** 表单值变化通知:内部值变化(用户输入、外部 values 同步)时触发,配合 values 使用可实现双向绑定 */
117
130
  onValuesChange?: (values: TData) => void;
131
+ /** 是否计算变更集:默认 false;开启后 onSubmit 额外收到 { patch, changed }(与初始值比较,提交时计算) */
132
+ patch?: boolean;
133
+ /** 控件尺寸:small | default(默认)| large,控制 input/textarea/select/datePicker 等输入类控件 */
134
+ size?: FormSize;
118
135
  /** 提交回调(仅在校验通过时触发) */
119
- onSubmit: (props: {
120
- value: TData;
121
- }) => Promise<void> | void;
136
+ onSubmit: (props: FormSubmitProps<TData>) => Promise<void> | void;
122
137
  /** 提交被校验拦截时的回调 */
123
138
  onSubmitInvalid?: (props: FormInvalidSubmitProps<TData>) => void;
124
139
  /** 表单布局 class */
@@ -1,21 +1,22 @@
1
1
  import "./solid-ark.css";
2
- import { Index as e, className as t, createComponent as n, delegateEvents as r, effect as i, insert as a, memo as o, style as s, template as c } from "solid-js/web";
3
- import { For as l, Show as u, Suspense as d, createEffect as f, createMemo as p, createSignal as m, createUniqueId as h, lazy as g, mergeProps as _, 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";
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 v, on as y, onCleanup as b } from "solid-js";
4
+ import { Field as x } from "@ark-ui/solid/field";
5
+ import { createForm as S } from "@tanstack/solid-form";
6
+ import { Checkbox as C } from "@ark-ui/solid/checkbox";
7
+ import { RadioGroup as w } from "@ark-ui/solid/radio-group";
8
+ import { Switch as T } from "@ark-ui/solid/switch";
9
+ import { deepEqual as E } from "fast-equals";
9
10
  //#region src/form/components/FieldSkeleton.tsx
10
- var T = /*#__PURE__*/ c("<div aria-hidden=true class=van-form-field-skeleton>");
11
- function E() {
12
- return T();
11
+ var D = /*#__PURE__*/ l("<div aria-hidden=true class=van-form-field-skeleton>");
12
+ function O() {
13
+ return D();
13
14
  }
14
15
  //#endregion
15
16
  //#region src/form/components/FormCheckbox.tsx
16
- var D = /*#__PURE__*/ c("<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\">");
17
- function O(e) {
18
- return n(S.Root, {
17
+ var ee = /*#__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
+ function k(e) {
19
+ return n(C.Root, {
19
20
  get checked() {
20
21
  return e.value ?? !1;
21
22
  },
@@ -26,33 +27,33 @@ function O(e) {
26
27
  onCheckedChange: (t) => e.onChange(t.checked === !0),
27
28
  get children() {
28
29
  return [
29
- n(S.Control, {
30
+ n(C.Control, {
30
31
  class: "van-form-checkbox-control",
31
32
  get children() {
32
- return n(S.Indicator, {
33
+ return n(C.Indicator, {
33
34
  class: "van-form-checkbox-indicator",
34
35
  get children() {
35
- return D();
36
+ return ee();
36
37
  }
37
38
  });
38
39
  }
39
40
  }),
40
- o(() => o(() => !!e.label)() && n(S.Label, {
41
+ o(() => o(() => !!e.label)() && n(C.Label, {
41
42
  class: "van-form-checkbox-label",
42
43
  get children() {
43
44
  return e.label;
44
45
  }
45
46
  })),
46
- n(S.HiddenInput, {})
47
+ n(C.HiddenInput, {})
47
48
  ];
48
49
  }
49
50
  });
50
51
  }
51
52
  //#endregion
52
53
  //#region src/form/components/FormCheckboxGroup.tsx
53
- var k = /*#__PURE__*/ c("<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\">");
54
- function A(t) {
55
- return n(S.Group, {
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 j(t) {
56
+ return n(C.Group, {
56
57
  class: "van-form-checkbox-group",
57
58
  get id() {
58
59
  return t.controlId;
@@ -64,7 +65,7 @@ function A(t) {
64
65
  get each() {
65
66
  return t.field.options;
66
67
  },
67
- children: (e) => n(S.Root, {
68
+ children: (e) => n(C.Root, {
68
69
  class: "van-form-checkbox-root",
69
70
  get id() {
70
71
  return `${t.controlId}-item-${e().value}`;
@@ -80,24 +81,24 @@ function A(t) {
80
81
  },
81
82
  get children() {
82
83
  return [
83
- n(S.Control, {
84
+ n(C.Control, {
84
85
  class: "van-form-checkbox-control",
85
86
  get children() {
86
- return n(S.Indicator, {
87
+ return n(C.Indicator, {
87
88
  class: "van-form-checkbox-indicator",
88
89
  get children() {
89
- return k();
90
+ return A();
90
91
  }
91
92
  });
92
93
  }
93
94
  }),
94
- n(S.Label, {
95
+ n(C.Label, {
95
96
  class: "van-form-checkbox-label",
96
97
  get children() {
97
98
  return e().label;
98
99
  }
99
100
  }),
100
- n(S.HiddenInput, {})
101
+ n(C.HiddenInput, {})
101
102
  ];
102
103
  }
103
104
  })
@@ -107,8 +108,8 @@ function A(t) {
107
108
  }
108
109
  //#endregion
109
110
  //#region src/form/components/useDebouncedValue.ts
110
- function j(e) {
111
- let [t, n] = m(e.value() ?? ""), r, i = (t) => {
111
+ function M(e) {
112
+ let [t, n] = h(e.value() ?? ""), r, i = (t) => {
112
113
  if (n(t), (e.debounce ?? 0) > 0) {
113
114
  clearTimeout(r), r = setTimeout(() => {
114
115
  r = void 0, e.onChange(t);
@@ -119,7 +120,7 @@ function j(e) {
119
120
  }, a = () => {
120
121
  r !== void 0 && (clearTimeout(r), r = void 0, t() !== e.value() && e.onChange(t()));
121
122
  };
122
- return f(v(() => e.value(), (e) => n(e ?? ""))), y(() => clearTimeout(r)), {
123
+ return p(y(() => e.value(), (e) => n(e ?? ""))), b(() => clearTimeout(r)), {
123
124
  local: t,
124
125
  handleInput: i,
125
126
  handleBlur: () => {
@@ -132,17 +133,17 @@ function j(e) {
132
133
  }
133
134
  //#endregion
134
135
  //#region src/form/components/FormInput.tsx
135
- var M = /*#__PURE__*/ c("<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\">"), N = /*#__PURE__*/ c("<button aria-label=清空 type=button>"), P = /*#__PURE__*/ c("<div class=van-form-input-group>"), F = /*#__PURE__*/ c("<span class=\"van-form-input-addon van-form-input-addon-prefix\">"), I = /*#__PURE__*/ c("<span class=\"van-form-input-addon van-form-input-addon-suffix\">");
136
+ var te = /*#__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\">"), N = /*#__PURE__*/ l("<button aria-label=清空 type=button>"), P = /*#__PURE__*/ l("<div class=van-form-input-group>"), F = /*#__PURE__*/ l("<span class=\"van-form-input-addon van-form-input-addon-prefix\">"), I = /*#__PURE__*/ l("<span class=\"van-form-input-addon van-form-input-addon-suffix\">");
136
137
  function L() {
137
- return M();
138
+ return te();
138
139
  }
139
140
  function R(e) {
140
- let { local: r, handleInput: s, handleBlur: c, handleClear: l } = j({
141
+ let { local: r, handleInput: s, handleBlur: c, handleClear: l } = M({
141
142
  value: () => e.value,
142
143
  debounce: e.field.debounce,
143
144
  onChange: e.onChange,
144
145
  onBlur: e.onBlur
145
- }), d, f = n(b.Input, {
146
+ }), u, f = n(x.Input, {
146
147
  get autocomplete() {
147
148
  return e.field.autocomplete;
148
149
  },
@@ -153,7 +154,7 @@ function R(e) {
153
154
  return e.field.placeholder;
154
155
  },
155
156
  ref: (e) => {
156
- d = e;
157
+ u = e;
157
158
  },
158
159
  get type() {
159
160
  return e.field.type ?? "text";
@@ -170,14 +171,14 @@ function R(e) {
170
171
  var t = F();
171
172
  return a(t, () => e.field.prefix), t;
172
173
  })();
173
- })(), null), a(s, f, null), a(s, n(u, {
174
+ })(), null), a(s, f, null), a(s, n(d, {
174
175
  get when() {
175
176
  return m && r() !== "";
176
177
  },
177
178
  get children() {
178
179
  var r = N();
179
180
  return r.$$click = () => {
180
- l(), d?.focus();
181
+ l(), u?.focus();
181
182
  }, a(r, n(L, {})), i(() => t(r, `van-form-input-clear${e.field.suffix === void 0 ? "" : " van-form-input-clear-before-suffix"}`)), r;
182
183
  }
183
184
  }), null), a(s, (() => {
@@ -193,8 +194,8 @@ r(["click"]);
193
194
  //#endregion
194
195
  //#region src/form/components/FormRadio.tsx
195
196
  function z(t) {
196
- let r = p(() => t.field.options.map((e) => e.value));
197
- return n(C.Root, {
197
+ let r = m(() => t.field.options.map((e) => e.value));
198
+ return n(w.Root, {
198
199
  class: "van-form-radio-group",
199
200
  get id() {
200
201
  return t.controlId;
@@ -211,21 +212,21 @@ function z(t) {
211
212
  },
212
213
  children: (e) => {
213
214
  let r = t.field.options.find((t) => t.value === e());
214
- return n(C.Item, {
215
+ return n(w.Item, {
215
216
  class: "van-form-radio-item",
216
217
  get value() {
217
218
  return e();
218
219
  },
219
220
  get children() {
220
221
  return [
221
- n(C.ItemControl, { class: "van-form-radio-control" }),
222
- n(C.ItemText, {
222
+ n(w.ItemControl, { class: "van-form-radio-control" }),
223
+ n(w.ItemText, {
223
224
  class: "van-form-radio-text",
224
225
  get children() {
225
226
  return r?.label ?? e();
226
227
  }
227
228
  }),
228
- n(C.ItemHiddenInput, {})
229
+ n(w.ItemHiddenInput, {})
229
230
  ];
230
231
  }
231
232
  });
@@ -237,7 +238,7 @@ function z(t) {
237
238
  //#endregion
238
239
  //#region src/form/components/FormSwitch.tsx
239
240
  function B(e) {
240
- return n(w.Root, {
241
+ return n(T.Root, {
241
242
  get checked() {
242
243
  return e.value ?? !1;
243
244
  },
@@ -248,19 +249,19 @@ function B(e) {
248
249
  onCheckedChange: (t) => e.onChange(t.checked),
249
250
  get children() {
250
251
  return [
251
- n(w.Control, {
252
+ n(T.Control, {
252
253
  class: "van-form-switch-control",
253
254
  get children() {
254
- return n(w.Thumb, { class: "van-form-switch-thumb" });
255
+ return n(T.Thumb, { class: "van-form-switch-thumb" });
255
256
  }
256
257
  }),
257
- o(() => o(() => !!e.label)() && n(w.Label, {
258
+ o(() => o(() => !!e.label)() && n(T.Label, {
258
259
  class: "van-form-switch-label",
259
260
  get children() {
260
261
  return e.label;
261
262
  }
262
263
  })),
263
- n(w.HiddenInput, {})
264
+ n(T.HiddenInput, {})
264
265
  ];
265
266
  }
266
267
  });
@@ -268,13 +269,13 @@ function B(e) {
268
269
  //#endregion
269
270
  //#region src/form/components/FormTextarea.tsx
270
271
  function V(e) {
271
- let { local: t, handleInput: r, handleBlur: i } = j({
272
+ let { local: t, handleInput: r, handleBlur: i } = M({
272
273
  value: () => e.value,
273
274
  debounce: e.field.debounce,
274
275
  onChange: e.onChange,
275
276
  onBlur: e.onBlur
276
277
  });
277
- return n(b.Textarea, {
278
+ return n(x.Textarea, {
278
279
  class: "van-form-textarea",
279
280
  onBlur: i,
280
281
  onInput: (e) => r(e.currentTarget.value),
@@ -299,7 +300,7 @@ function U(e) {
299
300
  }
300
301
  //#endregion
301
302
  //#region src/form/components/FieldRenderer.tsx
302
- var W = g(() => import("./FormDatePicker-BWrGST8J.js").then((e) => ({ default: e.FormDatePicker }))), G = g(() => import("./FormSelect-Dex9R5TZ.js").then((e) => ({ default: e.FormSelect })));
303
+ var W = _(() => import("./FormDatePicker-Cazd9kkD.js").then((e) => ({ default: e.FormDatePicker }))), G = _(() => import("./FormSelect-Dex9R5TZ.js").then((e) => ({ default: e.FormSelect })));
303
304
  function K(e) {
304
305
  return H(e.field, "input") ? n(R, {
305
306
  get field() {
@@ -323,9 +324,9 @@ function K(e) {
323
324
  get value() {
324
325
  return e.value;
325
326
  }
326
- }) : H(e.field, "select") ? n(d, {
327
+ }) : H(e.field, "select") ? n(f, {
327
328
  get fallback() {
328
- return n(E, {});
329
+ return n(O, {});
329
330
  },
330
331
  get children() {
331
332
  return n(G, {
@@ -344,9 +345,9 @@ function K(e) {
344
345
  }
345
346
  });
346
347
  }
347
- }) : H(e.field, "datePicker") ? n(d, {
348
+ }) : H(e.field, "datePicker") ? n(f, {
348
349
  get fallback() {
349
- return n(E, {});
350
+ return n(O, {});
350
351
  },
351
352
  get children() {
352
353
  return n(W, {
@@ -365,7 +366,7 @@ function K(e) {
365
366
  }
366
367
  });
367
368
  }
368
- }) : H(e.field, "checkbox") ? n(O, {
369
+ }) : H(e.field, "checkbox") ? n(k, {
369
370
  get controlId() {
370
371
  return e.controlId;
371
372
  },
@@ -398,7 +399,7 @@ function K(e) {
398
399
  get value() {
399
400
  return e.value;
400
401
  }
401
- }) : H(e.field, "checkbox-group") ? n(A, {
402
+ }) : H(e.field, "checkbox-group") ? n(j, {
402
403
  get controlId() {
403
404
  return e.controlId;
404
405
  },
@@ -412,12 +413,43 @@ function K(e) {
412
413
  }) : null;
413
414
  }
414
415
  //#endregion
415
- //#region src/form/Form.tsx
416
- var q = /*#__PURE__*/ c("<form>"), J = /*#__PURE__*/ c("<div class=van-form-field>");
416
+ //#region src/form/patch.ts
417
+ function q(e) {
418
+ return Y(e) || e === "" ? void 0 : Number(e);
419
+ }
420
+ function J(e) {
421
+ return Y(e) || e === "" ? 0 : Number(e);
422
+ }
417
423
  function Y(e) {
418
- return typeof e == "string" ? e : e && typeof e == "object" && "message" in e ? String(e.message) : String(e);
424
+ return e == null;
419
425
  }
420
426
  function X(e) {
427
+ return Array.isArray(e) ? [...e].sort() : [];
428
+ }
429
+ function Z(e) {
430
+ return e && typeof e == "object" && !Array.isArray(e) ? e : {};
431
+ }
432
+ function Q(e) {
433
+ return typeof e == "object" && !!e && !Array.isArray(e);
434
+ }
435
+ function ne(e, t, n) {
436
+ let r = {};
437
+ for (let i of n) {
438
+ let { name: n, valueType: a } = i, o = e[n], s = t[n], c;
439
+ c = a === "number" ? E(q(o), q(s)) : Array.isArray(o) || Array.isArray(s) ? E(X(o), X(s)) : Q(o) || Q(s) ? E(Z(o), Z(s)) : E(Y(o) ? "" : o, Y(s) ? "" : s), c || (r[n] = a === "number" ? J(s) : s);
440
+ }
441
+ return {
442
+ patch: r,
443
+ changed: Object.keys(r).length > 0
444
+ };
445
+ }
446
+ //#endregion
447
+ //#region src/form/Form.tsx
448
+ var re = /*#__PURE__*/ l("<form>"), ie = /*#__PURE__*/ l("<div class=van-form-field>");
449
+ function $(e) {
450
+ return typeof e == "string" ? e : e && typeof e == "object" && "message" in e ? String(e.message) : String(e);
451
+ }
452
+ function ae(e) {
421
453
  let t = e.rule;
422
454
  if (t) return {
423
455
  onChange: typeof t == "function" ? (e) => t({
@@ -427,17 +459,27 @@ function X(e) {
427
459
  ...e.validateListenTo?.length ? { onChangeListenTo: e.validateListenTo } : {}
428
460
  };
429
461
  }
430
- function Z(e) {
431
- let r = _({ values: {} }, e), c = r.values, d = h(), m = (e) => `${d}-${e}`, g = x(() => ({
432
- defaultValues: c,
462
+ function oe(e) {
463
+ let r = v({ values: {} }, e), l = r.values, f = g(), h = (e) => `${f}-${e}`, _ = S(() => ({
464
+ defaultValues: l,
433
465
  onSubmit: async ({ value: e }) => {
434
- await r.onSubmit({ value: e });
466
+ let t = e;
467
+ if (r.patch) {
468
+ let { patch: e, changed: n } = ne(l, t, r.fields);
469
+ await r.onSubmit({
470
+ value: t,
471
+ patch: e,
472
+ changed: n
473
+ });
474
+ return;
475
+ }
476
+ await r.onSubmit({ value: t });
435
477
  },
436
478
  onSubmitInvalid: ({ value: e, formApi: t }) => {
437
479
  if (!r.onSubmitInvalid) return;
438
480
  let n = {}, i = t.state.fieldMeta;
439
481
  for (let [e, t] of Object.entries(i)) {
440
- let r = (t?.errors ?? []).map(Y).filter(Boolean);
482
+ let r = (t?.errors ?? []).map($).filter(Boolean);
441
483
  r.length > 0 && (n[e] = r);
442
484
  }
443
485
  r.onSubmitInvalid({
@@ -445,57 +487,57 @@ function Z(e) {
445
487
  errors: n
446
488
  });
447
489
  }
448
- })), y = g.useStore((e) => e.isSubmitting), S = g.useStore((e) => e.values), C = g.setFieldValue;
449
- return f(v(() => r.values, (e) => {
450
- for (let [t, n] of Object.entries(e ?? {})) g.state.values[t] !== n && C(t, n);
451
- }, { defer: !0 })), f(v(S, (e) => r.onValuesChange?.(e), { defer: !0 })), (() => {
452
- var e = q();
490
+ })), b = _.useStore((e) => e.isSubmitting), C = _.useStore((e) => e.values), w = _.setFieldValue;
491
+ return p(y(() => r.values, (e) => {
492
+ for (let [t, n] of Object.entries(e ?? {})) _.state.values[t] !== n && w(t, n);
493
+ }, { defer: !0 })), p(y(C, (e) => r.onValuesChange?.(e), { defer: !0 })), (() => {
494
+ var e = re();
453
495
  return e.addEventListener("submit", (e) => {
454
- e.preventDefault(), e.stopPropagation(), g.handleSubmit();
455
- }), a(e, n(l, {
496
+ e.preventDefault(), e.stopPropagation(), _.handleSubmit();
497
+ }), a(e, n(u, {
456
498
  get each() {
457
499
  return r.fields;
458
500
  },
459
- children: (e) => n(g.Field, {
501
+ children: (e) => n(_.Field, {
460
502
  get name() {
461
503
  return e.name;
462
504
  },
463
505
  get validators() {
464
- return X(e);
506
+ return ae(e);
465
507
  },
466
508
  children: (t) => {
467
- let r = t(), c = p(() => (t().state.meta.errors ?? []).map(Y).filter(Boolean)), d = p(() => t().state.value), f = U(e.fieldWidth), h = f ? { width: f } : void 0;
509
+ let r = t(), s = m(() => (t().state.meta.errors ?? []).map($).filter(Boolean)), l = m(() => t().state.value), f = U(e.fieldWidth), p = f ? { width: f } : void 0;
468
510
  return e.control ? (() => {
469
- var t = J();
511
+ var t = ie();
470
512
  return a(t, () => e.control({
471
- value: d(),
513
+ value: l(),
472
514
  onChange: (e) => r.handleChange(e),
473
515
  onBlur: () => r.handleBlur(),
474
- error: c(),
475
- id: m(e.name)
476
- })), i((e) => s(t, h, e)), t;
477
- })() : n(b.Root, {
516
+ error: s(),
517
+ id: h(e.name)
518
+ })), i((e) => c(t, p, e)), t;
519
+ })() : n(x.Root, {
478
520
  class: "van-form-field",
479
521
  get id() {
480
- return m(e.name);
522
+ return h(e.name);
481
523
  },
482
524
  get invalid() {
483
- return c().length > 0;
525
+ return s().length > 0;
484
526
  },
485
- style: h,
527
+ style: p,
486
528
  get children() {
487
529
  return [
488
- n(u, {
530
+ n(d, {
489
531
  get when() {
490
532
  return o(() => !!(e.label && e.fieldType !== "checkbox" && e.fieldType !== "checkbox-group"))() && e.fieldType !== "switch";
491
533
  },
492
534
  get children() {
493
- return o(() => !!e.renderLabel)() ? n(b.Label, {
535
+ return o(() => !!e.renderLabel)() ? n(x.Label, {
494
536
  class: "van-form-label",
495
537
  get children() {
496
538
  return e.renderLabel(e.label);
497
539
  }
498
- }) : n(b.Label, {
540
+ }) : n(x.Label, {
499
541
  class: "van-form-label",
500
542
  get children() {
501
543
  return e.label;
@@ -505,21 +547,21 @@ function Z(e) {
505
547
  }),
506
548
  n(K, {
507
549
  get controlId() {
508
- return m(e.name);
550
+ return h(e.name);
509
551
  },
510
552
  field: e,
511
553
  onBlur: () => r.handleBlur(),
512
554
  onChange: (e) => r.handleChange(e),
513
555
  get value() {
514
- return d();
556
+ return l();
515
557
  }
516
558
  }),
517
- n(u, {
559
+ n(d, {
518
560
  get when() {
519
561
  return e.helperText;
520
562
  },
521
563
  get children() {
522
- return n(b.HelperText, {
564
+ return n(x.HelperText, {
523
565
  class: "van-form-helper",
524
566
  get children() {
525
567
  return e.helperText;
@@ -527,21 +569,21 @@ function Z(e) {
527
569
  });
528
570
  }
529
571
  }),
530
- n(u, {
572
+ n(d, {
531
573
  get when() {
532
- return c().length > 0;
574
+ return s().length > 0;
533
575
  },
534
576
  get children() {
535
- return o(() => !!e.renderError)() ? n(b.ErrorText, {
577
+ return o(() => !!e.renderError)() ? n(x.ErrorText, {
536
578
  class: "van-form-error",
537
579
  get children() {
538
- return e.renderError(c());
580
+ return e.renderError(s());
539
581
  }
540
- }) : n(l, {
582
+ }) : n(u, {
541
583
  get each() {
542
- return c();
584
+ return s();
543
585
  },
544
- children: (e) => n(b.ErrorText, {
586
+ children: (e) => n(x.ErrorText, {
545
587
  class: "van-form-error",
546
588
  children: e
547
589
  })
@@ -553,8 +595,14 @@ function Z(e) {
553
595
  });
554
596
  }
555
597
  })
556
- }), null), a(e, () => r.children?.({ isSubmitting: y() }), null), i(() => t(e, `van-form-form ${r.className ?? ""}`)), e;
598
+ }), null), a(e, () => r.children?.({ isSubmitting: b() }), null), i((n) => {
599
+ var i = `van-form-form ${r.className ?? ""}`, a = r.size ?? "default";
600
+ return i !== n.e && t(e, n.e = i), a !== n.t && s(e, "data-size", n.t = a), n;
601
+ }, {
602
+ e: void 0,
603
+ t: void 0
604
+ }), e;
557
605
  })();
558
606
  }
559
607
  //#endregion
560
- export { Z as t };
608
+ export { oe as t };
@@ -1,5 +1,5 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../button-C9xYlZbo.js";
2
+ import { t as e } from "../button-Br_upy12.js";
3
3
  import { Portal as t, createComponent as n, insert as r, memo as i, mergeProps as a, template as o } from "solid-js/web";
4
4
  import { DialogBackdrop as s, DialogCloseTrigger as c, DialogContent as l, DialogDescription as u, DialogPositioner as d, DialogRootProvider as f, DialogTitle as p, useDialog as m } from "@ark-ui/solid/dialog";
5
5
  import { For as h, Show as g, createSignal as _, onMount as v } from "solid-js";
@@ -1,2 +1,2 @@
1
- .van-btn{border-radius:var(--radius-lg,2px);white-space:nowrap;cursor:pointer;outline:none;justify-content:center;align-items:center;gap:6px;height:36px;padding:0 16px;font-size:14px;font-weight:500;transition:background .15s,border-color .15s,opacity .15s,box-shadow .15s;display:inline-flex}.van-btn:focus-visible{box-shadow:0 0 0 2px var(--ring,#3b82f666)}.van-btn:disabled{opacity:.5;cursor:not-allowed}.van-btn-sm{height:32px;padding:0 12px;font-size:13px}.van-btn-lg{height:40px;padding:0 20px}.van-btn-icon-only{width:36px;min-width:0;padding:0}.van-btn-icon-only.van-btn-sm{width:32px}.van-btn-icon-only.van-btn-lg{width:40px}.van-btn-primary{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);border:none}.van-btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--primary,#3b82f6) 85%, black)}.van-btn-outline{color:var(--card-foreground,#171717);border:1px solid var(--border,#e5e5e5);background:0 0}.van-btn-outline:hover:not(:disabled){background:var(--muted,#f5f5f5)}.van-btn-ghost{color:var(--muted-foreground,#737373);background:0 0;border:none}.van-btn-ghost:hover:not(:disabled){color:var(--card-foreground,#171717)}.van-btn-danger{background:var(--destructive,#ef4444);color:var(--destructive-foreground,#fff);border:none}.van-btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--destructive,#ef4444) 85%, black)}.van-btn-success{background:var(--success,#16a34a);color:var(--success-foreground,#fff);border:none}.van-btn-success:hover:not(:disabled){background:color-mix(in srgb, var(--success,#16a34a) 85%, black)}.van-btn-warning{background:var(--warning,#d97706);color:var(--warning-foreground,#fff);border:none}.van-btn-warning:hover:not(:disabled){background:color-mix(in srgb, var(--warning,#d97706) 85%, black)}@keyframes van-btn-spin{to{transform:rotate(360deg)}}.van-btn-spinner-wrapper{flex-shrink:0;justify-content:flex-end;align-items:center;width:16px;height:16px;display:inline-flex}.van-btn-spinner{border:1.5px solid;border-right-color:#0000;border-radius:50%;width:12px;height:12px;animation:.6s linear infinite van-btn-spin;display:inline-block}.van-form-form{flex-direction:column;gap:16px;width:100%;display:flex}.van-form-field{flex-direction:column;gap:6px;display:flex}.van-form-label{color:var(--card-foreground,#171717);font-size:14px;font-weight:500}.van-form-input,.van-form-textarea{width:100%;color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);outline:none;padding:8px 12px;font-size:14px;transition:border-color .15s}.van-form-input:focus,.van-form-textarea:focus{border-color:var(--primary,#3b82f6)}.van-form-input[data-invalid],.van-form-textarea[data-invalid]{border-color:var(--destructive,#ef4444)}.van-form-textarea{resize:vertical;min-height:80px}.van-form-input-group{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);align-items:center;width:100%;transition:border-color .15s;display:flex;overflow:hidden}.van-form-input-group:focus-within{border-color:var(--primary,#3b82f6)}.van-form-input-group:has(.van-form-input[data-invalid]){border-color:var(--destructive,#ef4444)}.van-form-input-group .van-form-input{background:0 0;border:none;flex:1;min-width:0}.van-form-input-addon{color:var(--muted-foreground,#9ca3af);flex-shrink:0;align-self:stretch;align-items:center;padding:0 10px;font-size:14px;display:flex}.van-form-input-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;flex-shrink:0;justify-content:center;align-items:center;padding:2px 10px 2px 2px;transition:opacity .15s,color .15s;display:flex}.van-form-input-clear-before-suffix{padding-right:2px}.van-form-input-group:hover .van-form-input-clear,.van-form-input-group:focus-within .van-form-input-clear{opacity:1;visibility:visible}.van-form-input-clear:hover{color:var(--primary,#3b82f6)}.van-form-select-control{align-items:center;display:flex;position:relative}.van-form-select-trigger{color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);cursor:pointer;flex:1;align-items:center;padding:8px 12px;font-size:14px;transition:border-color .15s;display:flex}.van-form-select-trigger:focus{border-color:var(--primary,#3b82f6)}.van-form-select-value{text-align:left;flex:1}.van-form-select-indicator{color:var(--muted-foreground,#9ca3af);pointer-events:none;align-items:center;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.van-form-select-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:2px;transition:opacity .15s,color .15s;display:flex;position:absolute;top:50%;right:36px;transform:translateY(-50%)}.van-form-select-control:hover .van-form-select-clear,.van-form-select-control:focus-within .van-form-select-clear{opacity:1;visibility:visible}.van-form-select-clear:hover{color:var(--primary,#3b82f6)}.van-form-select-clear[hidden]{display:none}.van-form-select-control:has(.van-form-select-clear) .van-form-select-trigger{padding-right:56px}.van-form-select-positioner{--z-index:50!important}.van-form-select-content{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);min-width:var(--reference-width);padding:4px;box-shadow:0 4px 12px #0000001a}.van-form-select-item{color:var(--card-foreground,#171717);cursor:pointer;border-radius:2px;padding:8px 12px;font-size:14px;transition:background .1s}.van-form-select-item:hover,.van-form-select-item[data-highlighted]{background:var(--muted,#f5f5f5)}.van-form-select-item[data-selected]{color:var(--primary,#3b82f6);font-weight:500}.van-form-date-control{align-items:center;display:flex;position:relative}.van-form-date-trigger{color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);cursor:pointer;flex:1;align-items:center;gap:8px;padding:8px 36px 8px 12px;font-size:14px;transition:border-color .15s;display:flex;position:relative}.van-form-date-trigger:focus{border-color:var(--primary,#3b82f6)}.van-form-date-value{text-align:left;flex:1}.van-form-date-icon{color:var(--muted-foreground,#9ca3af);pointer-events:none;align-items:center;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.van-form-date-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:2px;transition:opacity .15s,color .15s;display:flex;position:absolute;top:50%;right:36px;transform:translateY(-50%)}.van-form-date-control:hover .van-form-date-clear,.van-form-date-control:focus-within .van-form-date-clear{opacity:1;visibility:visible}.van-form-date-clear:hover{color:var(--primary,#3b82f6)}.van-form-date-clear[hidden]{display:none}.van-form-date-control:has(.van-form-date-clear) .van-form-date-trigger{padding-right:56px}.van-form-date-positioner{--z-index:50!important}.van-form-date-content{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);padding:10px;box-shadow:0 4px 12px #0000001a}.van-form-date-view{width:252px}.van-form-date-view-dual{width:auto}.van-form-date-days{gap:10px;display:flex}.van-form-date-days .van-form-date-table{width:224px}.van-form-date-view-control{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.van-form-date-nav-trigger{width:28px;height:28px;color:var(--muted-foreground,#9ca3af);cursor:pointer;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;transition:background .1s,color .1s;display:flex}.van-form-date-nav-trigger:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-form-date-view-trigger{color:var(--card-foreground,#171717);cursor:pointer;background:0 0;border:none;border-radius:2px;padding:4px 8px;font-size:14px;font-weight:500;transition:background .1s}.van-form-date-view-trigger:hover{background:var(--muted,#f5f5f5)}.van-form-date-table{border-collapse:collapse;table-layout:fixed;width:100%}.van-form-date-table-header{color:var(--muted-foreground,#737373);text-align:center;padding:6px 0;font-size:12px;font-weight:400}.van-form-date-week-header,.van-form-date-week-cell{width:24px;color:var(--muted-foreground,#9ca3af);text-align:center;padding:1px 2px;font-size:11px;font-weight:400}.van-form-date-cell{text-align:center;padding:1px}.van-form-date-cell-trigger{width:100%;height:32px;color:var(--card-foreground,#171717);cursor:pointer;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;font-size:13px;transition:background .1s,color .1s;display:flex}.van-form-date-cell-trigger:hover{background:var(--muted,#f5f5f5)}.van-form-date-cell-trigger[data-selected]{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);font-weight:500}.van-form-date-cell-trigger[data-in-range],.van-form-date-cell-trigger[data-range-start],.van-form-date-cell-trigger[data-range-end]{background:color-mix(in srgb, var(--primary,#3b82f6) 12%, transparent)}.van-form-date-cell-trigger[data-range-start],.van-form-date-cell-trigger[data-range-end]{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);font-weight:500}.van-form-date-cell-trigger[data-outside-range]{color:var(--muted-foreground,#9ca3af)}.van-form-date-cell-trigger[data-today]:not([data-selected]){box-shadow:inset 0 0 0 1px var(--primary,#3b82f6)}.van-form-date-cell-trigger[data-unavailable]{opacity:.4}.van-form-date-cell-trigger[data-disabled]{opacity:.4;cursor:not-allowed}.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-cell-trigger:not([data-selected]):not([data-in-range]):not([data-range-start]):not([data-range-end]):not([data-disabled]){background:var(--muted,#f5f5f5)}.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-week-cell{color:var(--primary,#3b82f6)}.van-form-date-time{width:100%;color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);outline:none;margin-top:8px;padding:8px 12px;font-family:inherit;font-size:14px;transition:border-color .15s}.van-form-date-time:focus{border-color:var(--primary,#3b82f6)}.van-form-helper{color:var(--muted-foreground,#737373);font-size:12px}.van-form-error{color:var(--destructive,#ef4444);font-size:12px}.van-form-field-skeleton{border-radius:var(--radius-lg,2px);background-color:var(--muted,#f5f5f5);background-image:linear-gradient(90deg,#0000 0%,#ffffff80 50%,#0000 100%);background-repeat:no-repeat;background-size:200% 100%;width:100%;height:38px;animation:1.4s ease-in-out infinite van-form-skeleton-shimmer}@keyframes van-form-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.van-form-checkbox-control{border:1px solid var(--border,#d1d5db);background:var(--card,#fff);cursor:pointer;border-radius:1px;justify-content:center;align-items:center;width:18px;height:18px;transition:all .15s;display:flex}.van-form-checkbox-control:hover{border-color:var(--primary,#6366f1)}.van-form-checkbox-control[data-state=checked]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1)}.van-form-checkbox-indicator{color:var(--primary-foreground,#fff);justify-content:center;align-items:center;display:flex}.van-form-checkbox-root{cursor:pointer;align-items:center;gap:8px;display:inline-flex}.van-form-checkbox-label{color:var(--card-foreground,#171717);font-size:14px}.van-form-checkbox-group{flex-direction:column;gap:8px;display:flex}.van-form-check-icon{width:14px;height:14px}.van-form-switch-control{background:var(--border,#d1d5db);cursor:pointer;border-radius:11px;align-items:center;width:40px;height:22px;padding:2px;transition:background .15s;display:flex}.van-form-switch-control[data-state=checked]{background:var(--primary,#6366f1)}.van-form-switch-thumb{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s}.van-form-switch-control[data-state=checked] .van-form-switch-thumb{transform:translate(18px)}.van-form-switch-root{cursor:pointer;align-items:center;gap:8px;display:inline-flex}.van-form-switch-label{color:var(--card-foreground,#171717);font-size:14px}.van-form-radio-group{flex-direction:column;gap:8px;display:flex}.van-form-radio-item{color:var(--card-foreground,#171717);cursor:pointer;align-items:center;gap:8px;font-size:14px;display:flex}.van-form-radio-control{border:2px solid var(--border,#d1d5db);background:var(--card,#fff);border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;transition:all .15s;display:flex}.van-form-radio-control[data-state=checked]{border-color:var(--primary,#6366f1)}.van-form-radio-control[data-state=checked]:after{content:"";background:var(--primary,#6366f1);border-radius:50%;width:8px;height:8px}.van-form-radio-control:hover{border-color:var(--primary,#6366f1)}.van-form-radio-text{flex:1}@media (prefers-color-scheme:dark){.van-form-input,.van-form-textarea,.van-form-select-trigger,.van-form-date-trigger,.van-form-date-time{background:var(--card,#1e1e2e);color:var(--card-foreground,#cdd6f4);border-color:var(--border,#313244)}.van-form-input-group{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-input-addon{color:var(--muted-foreground,#a0a0b0)}.van-form-select-content{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-select-item:hover,.van-form-select-item[data-highlighted]{background:var(--muted,#27273e)}.van-form-date-content{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-date-nav-trigger:hover,.van-form-date-view-trigger:hover,.van-form-date-cell-trigger:hover,.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-cell-trigger:not([data-selected]):not([data-in-range]):not([data-range-start]):not([data-range-end]):not([data-disabled]){background:var(--muted,#27273e)}.van-form-field-skeleton{background-color:var(--muted,#27273e);background-image:linear-gradient(90deg,#0000 0%,#ffffff1f 50%,#0000 100%)}}.van-table-wrapper{width:100%;color:var(--card-foreground,#1f2937);flex-direction:column;gap:12px;font-size:14px;display:flex}.van-table-container{border:1px solid var(--border,#e5e7eb);border-radius:var(--radius-xl,2px);background:var(--card,#fff);position:relative;overflow:auto}.van-table-loading-mask{z-index:10;background:color-mix(in srgb, var(--card,#fff) 72%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.van-table-spinner{border:3px solid var(--border,#e5e7eb);border-top-color:var(--primary,#6366f1);border-radius:50%;width:28px;height:28px;animation:.6s linear infinite van-table-spin}@keyframes van-table-spin{to{transform:rotate(360deg)}}.van-table{border-collapse:collapse;width:100%}.van-table-th{z-index:1;text-align:left;color:var(--muted-foreground,#9ca3af);border-bottom:1px solid var(--border,#e5e7eb);white-space:nowrap;-webkit-user-select:none;user-select:none;padding:10px 14px;font-size:14px;font-weight:400;position:sticky;top:0}.van-table-th-sortable{cursor:pointer}.van-table-th-sortable:hover{background:var(--secondary,#f3f4f6)}.van-table-th-content{align-items:center;gap:4px;display:inline-flex}.van-table-sort-icon{flex-shrink:0;width:8px;height:14px}.van-table-sort-arrow{color:var(--muted-foreground,#9ca3af);opacity:.35}.van-table-sort-arrow.van-table-sort-active{opacity:1;color:var(--primary,#6366f1)}.van-table-tr{border-bottom:1px solid var(--border,#f3f4f6);transition:background .12s}.van-table-tr:last-child{border-bottom:none}.van-table-tr:hover{background:var(--muted,#f9fafb)}.van-table-tr-selected{background:color-mix(in srgb, var(--primary,#6366f1) 3%, transparent)!important}.van-table-td{vertical-align:middle;padding:10px 14px}.van-table-empty{text-align:center;color:var(--muted-foreground,#9ca3af);padding:56px 16px;font-size:14px}.van-table-checkbox-control{border:1px solid var(--input,#d1d5db);background:var(--card,#fff);cursor:pointer;border-radius:1px;justify-content:center;align-items:center;width:18px;height:18px;transition:all .15s;display:flex}.van-table-checkbox-control:hover{border-color:var(--primary,#6366f1)}.van-table-checkbox-control[data-state=checked],.van-table-checkbox-control[data-state=indeterminate]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1)}.van-table-checkbox-indicator{color:var(--primary-foreground,#fff);justify-content:center;align-items:center;display:flex}.van-table-check-icon{width:14px;height:14px}@media (prefers-color-scheme:dark){.van-table-wrapper{--card:#1e1e2e;--card-foreground:#cdd6f4;--foreground:#cdd6f4;--muted:#181825;--muted-foreground:#9399b2;--border:#313244;--input:#45475a;--secondary:#27273e;--primary:#89b4fa;--primary-foreground:#1e1e2e}}.van-table-wrapper[data-density=compact] .van-table-th,.van-table-wrapper[data-density=compact] .van-table-td{padding:6px 12px}.van-table-th-select,.van-table-td-select{width:36px;padding-left:14px;padding-right:8px}.van-data-table{width:100%;color:var(--card-foreground,#1f2937);border:1px solid var(--border,#e5e7eb);background-color:#fff;border-radius:4px;flex-direction:column;font-size:14px;display:flex}.van-data-table-search{width:100%;padding:14px}.van-data-table-search .van-form-form{flex-flow:wrap;align-items:flex-end;gap:8px}.van-data-table-search .van-form-field{width:192px}.van-data-table-search .van-form-input,.van-data-table-search .van-form-select-trigger,.van-data-table-search .van-form-date-trigger{box-sizing:border-box;height:36px}.van-data-table-search-actions{gap:6px;display:flex}.van-data-table-toolbar{justify-content:flex-start;align-items:center;gap:8px;padding:8px 14px;display:flex}.van-data-table-search+.van-data-table-toolbar{border-top:1px solid var(--border,#e5e7eb)}.van-data-table .van-table-container{border-left:none;border-right:none}.van-data-table-pagination{color:var(--muted-foreground,#9ca3af);justify-content:space-between;align-items:center;gap:12px;padding:14px;display:flex}.van-data-table-pagination-buttons{align-items:center;gap:6px;display:flex}.van-data-table-pagination-btn{min-width:32px;height:32px;color:var(--card-foreground,#1f2937);background:var(--card,#fff);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0 6px;font-size:14px;transition:all .15s;display:inline-flex}.van-data-table-pagination-btn:hover:not(:disabled):not([data-selected]){background:var(--muted,#6366f1)}.van-data-table-pagination-btn[data-selected]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1);color:var(--primary-foreground,#fff)}.van-data-table-pagination-btn:disabled{opacity:.45;cursor:not-allowed}.van-data-table-pagination-ellipsis{min-width:24px;height:32px;color:var(--muted-foreground,#9ca3af);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}.van-data-table-pagination-icon{width:14px;height:14px}@media (prefers-color-scheme:dark){.van-data-table{--card:#1e1e2e;--card-foreground:#cdd6f4;--foreground:#cdd6f4;--muted:#181825;--muted-foreground:#9399b2;--border:#313244;--input:#45475a;--secondary:#27273e;--primary:#89b4fa;--primary-foreground:#1e1e2e}}@keyframes van-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-drawer-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-drawer-slide-in-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes van-drawer-slide-out-right{to{transform:translate(100%)}}@keyframes van-drawer-slide-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes van-drawer-slide-out-left{to{transform:translate(-100%)}}@keyframes van-drawer-slide-in-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes van-drawer-slide-out-top{to{transform:translateY(-100%)}}@keyframes van-drawer-slide-in-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes van-drawer-slide-out-bottom{to{transform:translateY(100%)}}.van-drawer-backdrop{z-index:var(--z,1000);background:#0006;position:fixed;inset:0}.van-drawer-backdrop[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-fade-in}.van-drawer-backdrop[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-drawer-fade-out}.van-drawer-positioner{z-index:calc(var(--z-index-base,1000) + var(--layer-index,0));position:fixed;inset:0}.van-drawer-content{position:fixed}.van-drawer-content[data-placement=right],.van-drawer-content:not([data-placement]){width:var(--van-drawer-size,400px);max-width:100vw;top:0;bottom:0;right:0}.van-drawer-content[data-placement=right][data-state=open],.van-drawer-content:not([data-placement])[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-right}.van-drawer-content[data-placement=right][data-state=closed],.van-drawer-content:not([data-placement])[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-right}.van-drawer-content[data-placement=left]{width:var(--van-drawer-size,400px);max-width:100vw;top:0;bottom:0;left:0}.van-drawer-content[data-placement=left][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-left}.van-drawer-content[data-placement=left][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-left}.van-drawer-content[data-placement=top]{height:var(--van-drawer-size,400px);max-height:100vh;top:0;left:0;right:0}.van-drawer-content[data-placement=top][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-top}.van-drawer-content[data-placement=top][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-top}.van-drawer-content[data-placement=bottom]{height:var(--van-drawer-size,400px);max-height:100vh;bottom:0;left:0;right:0}.van-drawer-content[data-placement=bottom][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-bottom}.van-drawer-content[data-placement=bottom][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-bottom}.van-drawer-content-inner{background:var(--card,#fff);border-radius:2px;flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden;box-shadow:0 0 0 1px #0000000f,0 4px 16px #0000001a}.van-drawer-header{flex-shrink:0;justify-content:space-between;align-items:flex-start;padding:20px 20px 12px;display:flex}.van-drawer-title{color:var(--card-foreground,#171717);margin:0;font-size:16px;font-weight:600;line-height:1.4}.van-drawer-close{border-radius:var(--radius-lg,2px);cursor:pointer;width:24px;height:24px;color:var(--muted-foreground,#737373);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin:-2px -2px 0 8px;font-size:14px;transition:background .15s,color .15s;display:inline-flex}.van-drawer-close:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-drawer-desc{color:var(--muted-foreground,#737373);padding:0 20px 14px;font-size:14px;line-height:1.5}.van-drawer-body{flex:1;min-height:0;padding:2px 20px 16px;overflow-y:auto}.van-drawer-footer{border-top:1px solid var(--border,#e5e5e5);flex-shrink:0;justify-content:flex-end;gap:10px;padding:12px 20px;display:flex}.van-drawer-footer .van-btn{min-width:84px}.van-drawer-grabber{cursor:grab;flex-shrink:0;justify-content:center;padding:8px 0 0;display:flex}.van-drawer-grabber:active{cursor:grabbing}.van-drawer-grabber-indicator{background:#d4d4d4;border-radius:2px;width:36px;height:4px}@keyframes van-modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-modal-scale-in{0%{opacity:0;transform:scale(.95)translateY(8px)}to{opacity:1;transform:none}}@keyframes van-modal-scale-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.95)translateY(-4px)}}.van-modal-backdrop{z-index:var(--z,1000);background:#0006;position:fixed;inset:0}.van-modal-backdrop[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-modal-fade-in}.van-modal-backdrop[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-modal-fade-out}.van-modal-positioner{z-index:calc(var(--z-index-base,1000) + var(--layer-index,0));justify-content:center;align-items:start;padding:15vh 1rem 1rem;display:flex;position:fixed;inset:0}.van-modal-positioner[data-center]{align-items:center;padding-top:1rem}.van-modal-content{background:var(--card,#fff);border-radius:var(--radius-lg,2px);width:var(--van-modal-width,min(480px, 92vw));min-width:min(420px,92vw);max-height:var(--van-modal-max-height,90vh);flex-direction:column;display:flex;overflow:hidden;box-shadow:0 0 0 1px #0000000f,0 4px 16px #0000001a}.van-modal-content[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-modal-scale-in}.van-modal-content[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-modal-scale-out}.van-modal-header{justify-content:space-between;align-items:flex-start;padding:20px 20px 12px;display:flex}.van-modal-title{color:var(--card-foreground,#171717);margin:0;font-size:16px;font-weight:600;line-height:1.4}.van-modal-close{border-radius:var(--radius-lg,2px);cursor:pointer;width:24px;height:24px;color:var(--muted-foreground,#737373);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin:-2px -2px 0 8px;font-size:14px;transition:background .15s,color .15s;display:inline-flex}.van-modal-close:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-modal-desc{color:var(--muted-foreground,#737373);padding:0 20px 14px;font-size:14px;line-height:1.5}.van-modal-body{flex:1;padding:2px 20px 16px;overflow-y:auto}.van-modal-footer{justify-content:flex-end;gap:10px;padding:12px 20px;display:flex}.van-modal-footer .van-btn{min-width:84px}.van-modal-content[data-center] .van-modal-footer{border-top:1px solid var(--border,#e5e5e5)}[data-scope=dialog][data-part=content][data-has-nested]{transform:scale(calc(1 - var(--nested-layer-count,0) * .03))}[data-scope=toast][data-part=root]{transform:translate3d(var(--x,0), var(--y,100%), 0);z-index:var(--z-index,0);opacity:var(--opacity,1);background:var(--card,#fff);border-radius:var(--radius-lg,2px);min-width:320px;max-width:420px;transition:transform .25s,opacity .2s;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 12px #0000001f}.van-toast-bar{flex-shrink:0;width:4px}[data-type=success] .van-toast-bar{background:var(--success,#22c55e)}[data-type=error] .van-toast-bar{background:var(--destructive,#ef4444)}[data-type=info] .van-toast-bar{background:var(--primary,#3b82f6)}[data-type=warning] .van-toast-bar{background:var(--warning,#f59e0b)}[data-type=loading] .van-toast-bar{background:var(--muted-foreground,#f5f5f5)}.van-toast-body{flex:1;min-width:0;padding:12px 40px 12px 16px}.van-toast-title{color:var(--card-foreground,#171717);white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;line-height:1.4;overflow:hidden}.van-toast-desc{color:var(--muted-foreground,#737373);margin-top:2px;font-size:14px;line-height:1.5}.van-toast-close{cursor:pointer;width:20px;height:20px;color:var(--muted-foreground,#9ca3af);background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:0;transition:color .15s,background .15s;display:inline-flex;position:absolute;top:12px;right:12px}.van-toast-close:hover{color:var(--card-foreground,#4b5563);background:var(--muted,#f3f4f6)}.van-toast-close-x{width:12px;height:12px;display:block;position:relative}.van-toast-close-x:before,.van-toast-close-x:after{content:"";background:currentColor;border-radius:1px;width:12px;height:1.5px;position:absolute;top:50%;left:50%}.van-toast-close-x:before{transform:translate(-50%,-50%)rotate(45deg)}.van-toast-close-x:after{transform:translate(-50%,-50%)rotate(-45deg)}
1
+ .van-btn{height:var(--van-btn-height,36px);padding:0 var(--van-btn-padding-x,16px);border-radius:var(--radius-lg,2px);font-size:var(--van-btn-font-size,14px);white-space:nowrap;cursor:pointer;outline:none;justify-content:center;align-items:center;gap:6px;font-weight:500;transition:background .15s,border-color .15s,opacity .15s,box-shadow .15s;display:inline-flex}.van-btn:focus-visible{box-shadow:0 0 0 2px var(--ring,#3b82f666)}.van-btn:disabled{opacity:.5;cursor:not-allowed}.van-btn[data-size=small],.van-form-form[data-size=small] .van-btn:not([data-size]){--van-btn-height:32px;--van-btn-padding-x:12px;--van-btn-font-size:13px}.van-btn[data-size=large],.van-form-form[data-size=large] .van-btn:not([data-size]){--van-btn-height:40px;--van-btn-padding-x:20px;--van-btn-font-size:15px}.van-btn-icon-only{width:var(--van-btn-height,36px);min-width:0;padding:0}.van-btn-primary{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);border:none}.van-btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--primary,#3b82f6) 85%, black)}.van-btn-outline{color:var(--card-foreground,#171717);border:1px solid var(--border,#e5e5e5);background:0 0}.van-btn-outline:hover:not(:disabled){background:var(--muted,#f5f5f5)}.van-btn-ghost{color:var(--muted-foreground,#737373);background:0 0;border:none}.van-btn-ghost:hover:not(:disabled){color:var(--card-foreground,#171717)}.van-btn-danger{background:var(--destructive,#ef4444);color:var(--destructive-foreground,#fff);border:none}.van-btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--destructive,#ef4444) 85%, black)}.van-btn-success{background:var(--success,#16a34a);color:var(--success-foreground,#fff);border:none}.van-btn-success:hover:not(:disabled){background:color-mix(in srgb, var(--success,#16a34a) 85%, black)}.van-btn-warning{background:var(--warning,#d97706);color:var(--warning-foreground,#fff);border:none}.van-btn-warning:hover:not(:disabled){background:color-mix(in srgb, var(--warning,#d97706) 85%, black)}@keyframes van-btn-spin{to{transform:rotate(360deg)}}.van-btn-spinner-wrapper{flex-shrink:0;justify-content:flex-end;align-items:center;width:16px;height:16px;display:inline-flex}.van-btn-spinner{border:1.5px solid;border-right-color:#0000;border-radius:50%;width:12px;height:12px;animation:.6s linear infinite van-btn-spin;display:inline-block}.van-form-form{--van-form-control-padding-y:8px;--van-form-control-padding-x:12px;--van-form-control-font-size:14px;--van-form-control-height:36px;flex-direction:column;gap:16px;width:100%;display:flex}.van-form-form[data-size=small]{--van-form-control-padding-y:6px;--van-form-control-padding-x:10px;--van-form-control-font-size:13px;--van-form-control-height:32px}.van-form-form[data-size=large]{--van-form-control-padding-y:10px;--van-form-control-padding-x:12px;--van-form-control-font-size:15px;--van-form-control-height:40px}.van-form-field{flex-direction:column;gap:6px;display:flex}.van-form-label{color:var(--card-foreground,#171717);font-size:14px;font-weight:500}.van-form-input,.van-form-textarea{width:100%;padding:var(--van-form-control-padding-y,8px) var(--van-form-control-padding-x,12px);font-size:var(--van-form-control-font-size,14px);color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);box-sizing:border-box;height:var(--van-form-control-height,36px);outline:none;transition:border-color .15s}.van-form-input:focus,.van-form-textarea:focus{border-color:var(--primary,#3b82f6)}.van-form-input[data-invalid],.van-form-textarea[data-invalid]{border-color:var(--destructive,#ef4444)}.van-form-textarea{resize:vertical;min-height:80px}.van-form-input-group{box-sizing:border-box;width:100%;height:var(--van-form-control-height,36px);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);align-items:center;transition:border-color .15s;display:flex;overflow:hidden}.van-form-input-group:focus-within{border-color:var(--primary,#3b82f6)}.van-form-input-group:has(.van-form-input[data-invalid]){border-color:var(--destructive,#ef4444)}.van-form-input-group .van-form-input{background:0 0;border:none;flex:1;min-width:0;height:100%}.van-form-input-addon{color:var(--muted-foreground,#9ca3af);flex-shrink:0;align-self:stretch;align-items:center;padding:0 10px;font-size:14px;display:flex}.van-form-input-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;flex-shrink:0;justify-content:center;align-items:center;padding:2px 10px 2px 2px;transition:opacity .15s,color .15s;display:flex}.van-form-input-clear-before-suffix{padding-right:2px}.van-form-input-group:hover .van-form-input-clear,.van-form-input-group:focus-within .van-form-input-clear{opacity:1;visibility:visible}.van-form-input-clear:hover{color:var(--primary,#3b82f6)}.van-form-select-control{align-items:center;display:flex;position:relative}.van-form-select-trigger{padding:var(--van-form-control-padding-y,8px) var(--van-form-control-padding-x,12px);font-size:var(--van-form-control-font-size,14px);color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);box-sizing:border-box;height:var(--van-form-control-height,36px);cursor:pointer;flex:1;align-items:center;transition:border-color .15s;display:flex}.van-form-select-trigger:focus{border-color:var(--primary,#3b82f6)}.van-form-select-value{text-align:left;flex:1}.van-form-select-indicator{color:var(--muted-foreground,#9ca3af);pointer-events:none;align-items:center;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.van-form-select-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:2px;transition:opacity .15s,color .15s;display:flex;position:absolute;top:50%;right:36px;transform:translateY(-50%)}.van-form-select-control:hover .van-form-select-clear,.van-form-select-control:focus-within .van-form-select-clear{opacity:1;visibility:visible}.van-form-select-clear:hover{color:var(--primary,#3b82f6)}.van-form-select-clear[hidden]{display:none}.van-form-select-control:has(.van-form-select-clear) .van-form-select-trigger{padding-right:56px}.van-form-select-positioner{--z-index:50!important}.van-form-select-content{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);min-width:var(--reference-width);padding:4px;box-shadow:0 4px 12px #0000001a}.van-form-select-item{color:var(--card-foreground,#171717);cursor:pointer;border-radius:2px;padding:8px 12px;font-size:14px;transition:background .1s}.van-form-select-item:hover,.van-form-select-item[data-highlighted]{background:var(--muted,#f5f5f5)}.van-form-select-item[data-selected]{color:var(--primary,#3b82f6);font-weight:500}.van-form-date-control{align-items:center;display:flex;position:relative}.van-form-date-trigger{padding:var(--van-form-control-padding-y,8px) var(--van-form-control-padding-x,12px);font-size:var(--van-form-control-font-size,14px);color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);box-sizing:border-box;height:var(--van-form-control-height,36px);cursor:pointer;flex:1;align-items:center;gap:8px;padding-right:36px;transition:border-color .15s;display:flex;position:relative}.van-form-date-trigger:focus{border-color:var(--primary,#3b82f6)}.van-form-date-value{text-align:left;flex:1}.van-form-date-icon{color:var(--muted-foreground,#9ca3af);pointer-events:none;align-items:center;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.van-form-date-clear{color:var(--muted-foreground,#9ca3af);cursor:pointer;opacity:0;visibility:hidden;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:2px;transition:opacity .15s,color .15s;display:flex;position:absolute;top:50%;right:36px;transform:translateY(-50%)}.van-form-date-control:hover .van-form-date-clear,.van-form-date-control:focus-within .van-form-date-clear{opacity:1;visibility:visible}.van-form-date-clear:hover{color:var(--primary,#3b82f6)}.van-form-date-clear[hidden]{display:none}.van-form-date-control:has(.van-form-date-clear) .van-form-date-trigger{padding-right:56px}.van-form-date-positioner{--z-index:50!important}.van-form-date-content{background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);padding:10px;box-shadow:0 4px 12px #0000001a}.van-form-date-view{width:252px}.van-form-date-view-dual{width:auto}.van-form-date-days{gap:10px;display:flex}.van-form-date-days .van-form-date-table{width:224px}.van-form-date-view-control{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.van-form-date-nav-trigger{width:28px;height:28px;color:var(--muted-foreground,#9ca3af);cursor:pointer;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;transition:background .1s,color .1s;display:flex}.van-form-date-nav-trigger:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-form-date-view-trigger{color:var(--card-foreground,#171717);cursor:pointer;background:0 0;border:none;border-radius:2px;padding:4px 8px;font-size:14px;font-weight:500;transition:background .1s}.van-form-date-view-trigger:hover{background:var(--muted,#f5f5f5)}.van-form-date-table{border-collapse:collapse;table-layout:fixed;width:100%}.van-form-date-table-header{color:var(--muted-foreground,#737373);text-align:center;padding:6px 0;font-size:12px;font-weight:400}.van-form-date-week-header,.van-form-date-week-cell{width:24px;color:var(--muted-foreground,#9ca3af);text-align:center;padding:1px 2px;font-size:11px;font-weight:400}.van-form-date-cell{text-align:center;padding:1px}.van-form-date-cell-trigger{width:100%;height:32px;color:var(--card-foreground,#171717);cursor:pointer;background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;font-size:13px;transition:background .1s,color .1s;display:flex}.van-form-date-cell-trigger:hover{background:var(--muted,#f5f5f5)}.van-form-date-cell-trigger[data-selected]{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);font-weight:500}.van-form-date-cell-trigger[data-in-range],.van-form-date-cell-trigger[data-range-start],.van-form-date-cell-trigger[data-range-end]{background:color-mix(in srgb, var(--primary,#3b82f6) 12%, transparent)}.van-form-date-cell-trigger[data-range-start],.van-form-date-cell-trigger[data-range-end]{background:var(--primary,#3b82f6);color:var(--primary-foreground,#fff);font-weight:500}.van-form-date-cell-trigger[data-outside-range]{color:var(--muted-foreground,#9ca3af)}.van-form-date-cell-trigger[data-today]:not([data-selected]){box-shadow:inset 0 0 0 1px var(--primary,#3b82f6)}.van-form-date-cell-trigger[data-unavailable]{opacity:.4}.van-form-date-cell-trigger[data-disabled]{opacity:.4;cursor:not-allowed}.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-cell-trigger:not([data-selected]):not([data-in-range]):not([data-range-start]):not([data-range-end]):not([data-disabled]){background:var(--muted,#f5f5f5)}.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-week-cell{color:var(--primary,#3b82f6)}.van-form-date-time{width:100%;padding:var(--van-form-control-padding-y,8px) var(--van-form-control-padding-x,12px);font-size:var(--van-form-control-font-size,14px);color:var(--card-foreground,#171717);background:var(--card,#fff);border:1px solid var(--border,#e5e5e5);border-radius:var(--radius-lg,2px);outline:none;margin-top:8px;font-family:inherit;transition:border-color .15s}.van-form-date-time:focus{border-color:var(--primary,#3b82f6)}.van-form-helper{color:var(--muted-foreground,#737373);font-size:12px}.van-form-error{color:var(--destructive,#ef4444);font-size:12px}.van-form-field-skeleton{width:100%;height:var(--van-form-control-height,36px);border-radius:var(--radius-lg,2px);background-color:var(--muted,#f5f5f5);background-image:linear-gradient(90deg,#0000 0%,#ffffff80 50%,#0000 100%);background-repeat:no-repeat;background-size:200% 100%;animation:1.4s ease-in-out infinite van-form-skeleton-shimmer}@keyframes van-form-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.van-form-checkbox-control{border:1px solid var(--border,#d1d5db);background:var(--card,#fff);cursor:pointer;border-radius:1px;justify-content:center;align-items:center;width:18px;height:18px;transition:all .15s;display:flex}.van-form-checkbox-control:hover{border-color:var(--primary,#6366f1)}.van-form-checkbox-control[data-state=checked]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1)}.van-form-checkbox-indicator{color:var(--primary-foreground,#fff);justify-content:center;align-items:center;display:flex}.van-form-checkbox-root{cursor:pointer;align-items:center;gap:8px;display:inline-flex}.van-form-checkbox-label{color:var(--card-foreground,#171717);font-size:14px}.van-form-checkbox-group{flex-direction:column;gap:8px;display:flex}.van-form-check-icon{width:14px;height:14px}.van-form-switch-control{background:var(--border,#d1d5db);cursor:pointer;border-radius:11px;align-items:center;width:40px;height:22px;padding:2px;transition:background .15s;display:flex}.van-form-switch-control[data-state=checked]{background:var(--primary,#6366f1)}.van-form-switch-thumb{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s}.van-form-switch-control[data-state=checked] .van-form-switch-thumb{transform:translate(18px)}.van-form-switch-root{cursor:pointer;align-items:center;gap:8px;display:inline-flex}.van-form-switch-label{color:var(--card-foreground,#171717);font-size:14px}.van-form-radio-group{flex-direction:column;gap:8px;display:flex}.van-form-radio-item{color:var(--card-foreground,#171717);cursor:pointer;align-items:center;gap:8px;font-size:14px;display:flex}.van-form-radio-control{border:2px solid var(--border,#d1d5db);background:var(--card,#fff);border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;transition:all .15s;display:flex}.van-form-radio-control[data-state=checked]{border-color:var(--primary,#6366f1)}.van-form-radio-control[data-state=checked]:after{content:"";background:var(--primary,#6366f1);border-radius:50%;width:8px;height:8px}.van-form-radio-control:hover{border-color:var(--primary,#6366f1)}.van-form-radio-text{flex:1}@media (prefers-color-scheme:dark){.van-form-input,.van-form-textarea,.van-form-select-trigger,.van-form-date-trigger,.van-form-date-time{background:var(--card,#1e1e2e);color:var(--card-foreground,#cdd6f4);border-color:var(--border,#313244)}.van-form-input-group{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-input-addon{color:var(--muted-foreground,#a0a0b0)}.van-form-select-content{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-select-item:hover,.van-form-select-item[data-highlighted]{background:var(--muted,#27273e)}.van-form-date-content{background:var(--card,#1e1e2e);border-color:var(--border,#313244)}.van-form-date-nav-trigger:hover,.van-form-date-view-trigger:hover,.van-form-date-cell-trigger:hover,.van-form-date-week-mode .van-form-date-table-body .van-form-date-table-row:hover .van-form-date-cell-trigger:not([data-selected]):not([data-in-range]):not([data-range-start]):not([data-range-end]):not([data-disabled]){background:var(--muted,#27273e)}.van-form-field-skeleton{background-color:var(--muted,#27273e);background-image:linear-gradient(90deg,#0000 0%,#ffffff1f 50%,#0000 100%)}}.van-table-wrapper{width:100%;color:var(--card-foreground,#1f2937);flex-direction:column;gap:12px;font-size:14px;display:flex}.van-table-container{border:1px solid var(--border,#e5e7eb);border-radius:var(--radius-xl,2px);background:var(--card,#fff);position:relative;overflow:auto}.van-table-loading-mask{z-index:10;background:color-mix(in srgb, var(--card,#fff) 72%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.van-table-spinner{border:3px solid var(--border,#e5e7eb);border-top-color:var(--primary,#6366f1);border-radius:50%;width:28px;height:28px;animation:.6s linear infinite van-table-spin}@keyframes van-table-spin{to{transform:rotate(360deg)}}.van-table{border-collapse:collapse;width:100%}.van-table-th{z-index:1;text-align:left;color:var(--muted-foreground,#9ca3af);border-bottom:1px solid var(--border,#e5e7eb);white-space:nowrap;-webkit-user-select:none;user-select:none;padding:10px 14px;font-size:14px;font-weight:400;position:sticky;top:0}.van-table-th-sortable{cursor:pointer}.van-table-th-sortable:hover{background:var(--secondary,#f3f4f6)}.van-table-th-content{align-items:center;gap:4px;display:inline-flex}.van-table-sort-icon{flex-shrink:0;width:8px;height:14px}.van-table-sort-arrow{color:var(--muted-foreground,#9ca3af);opacity:.35}.van-table-sort-arrow.van-table-sort-active{opacity:1;color:var(--primary,#6366f1)}.van-table-tr{border-bottom:1px solid var(--border,#f3f4f6);transition:background .12s}.van-table-tr:last-child{border-bottom:none}.van-table-tr:hover{background:var(--muted,#f9fafb)}.van-table-tr-selected{background:color-mix(in srgb, var(--primary,#6366f1) 3%, transparent)!important}.van-table-td{vertical-align:middle;padding:10px 14px}.van-table-empty{text-align:center;color:var(--muted-foreground,#9ca3af);padding:56px 16px;font-size:14px}.van-table-checkbox-control{border:1px solid var(--input,#d1d5db);background:var(--card,#fff);cursor:pointer;border-radius:1px;justify-content:center;align-items:center;width:18px;height:18px;transition:all .15s;display:flex}.van-table-checkbox-control:hover{border-color:var(--primary,#6366f1)}.van-table-checkbox-control[data-state=checked],.van-table-checkbox-control[data-state=indeterminate]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1)}.van-table-checkbox-indicator{color:var(--primary-foreground,#fff);justify-content:center;align-items:center;display:flex}.van-table-check-icon{width:14px;height:14px}@media (prefers-color-scheme:dark){.van-table-wrapper{--card:#1e1e2e;--card-foreground:#cdd6f4;--foreground:#cdd6f4;--muted:#181825;--muted-foreground:#9399b2;--border:#313244;--input:#45475a;--secondary:#27273e;--primary:#89b4fa;--primary-foreground:#1e1e2e}}.van-table-wrapper[data-density=compact] .van-table-th,.van-table-wrapper[data-density=compact] .van-table-td{padding:6px 12px}.van-table-th-select,.van-table-td-select{width:36px;padding-left:14px;padding-right:8px}.van-data-table{width:100%;color:var(--card-foreground,#1f2937);border:1px solid var(--border,#e5e7eb);background-color:#fff;border-radius:4px;flex-direction:column;font-size:14px;display:flex}.van-data-table-search{width:100%;padding:14px}.van-data-table-search .van-form-form{flex-flow:wrap;align-items:flex-end;gap:8px}.van-data-table-search .van-form-field{width:192px}.van-data-table-search .van-form-input,.van-data-table-search .van-form-select-trigger,.van-data-table-search .van-form-date-trigger{box-sizing:border-box;height:36px}.van-data-table-search-actions{gap:6px;display:flex}.van-data-table-toolbar{justify-content:flex-start;align-items:center;gap:8px;padding:8px 14px;display:flex}.van-data-table-search+.van-data-table-toolbar{border-top:1px solid var(--border,#e5e7eb)}.van-data-table .van-table-container{border-left:none;border-right:none}.van-data-table-pagination{color:var(--muted-foreground,#9ca3af);justify-content:space-between;align-items:center;gap:12px;padding:14px;display:flex}.van-data-table-pagination-buttons{align-items:center;gap:6px;display:flex}.van-data-table-pagination-btn{min-width:32px;height:32px;color:var(--card-foreground,#1f2937);background:var(--card,#fff);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0 6px;font-size:14px;transition:all .15s;display:inline-flex}.van-data-table-pagination-btn:hover:not(:disabled):not([data-selected]){background:var(--muted,#6366f1)}.van-data-table-pagination-btn[data-selected]{background:var(--primary,#6366f1);border-color:var(--primary,#6366f1);color:var(--primary-foreground,#fff)}.van-data-table-pagination-btn:disabled{opacity:.45;cursor:not-allowed}.van-data-table-pagination-ellipsis{min-width:24px;height:32px;color:var(--muted-foreground,#9ca3af);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}.van-data-table-pagination-icon{width:14px;height:14px}@media (prefers-color-scheme:dark){.van-data-table{--card:#1e1e2e;--card-foreground:#cdd6f4;--foreground:#cdd6f4;--muted:#181825;--muted-foreground:#9399b2;--border:#313244;--input:#45475a;--secondary:#27273e;--primary:#89b4fa;--primary-foreground:#1e1e2e}}@keyframes van-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-drawer-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-drawer-slide-in-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes van-drawer-slide-out-right{to{transform:translate(100%)}}@keyframes van-drawer-slide-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes van-drawer-slide-out-left{to{transform:translate(-100%)}}@keyframes van-drawer-slide-in-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes van-drawer-slide-out-top{to{transform:translateY(-100%)}}@keyframes van-drawer-slide-in-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes van-drawer-slide-out-bottom{to{transform:translateY(100%)}}.van-drawer-backdrop{z-index:var(--z,1000);background:#0006;position:fixed;inset:0}.van-drawer-backdrop[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-fade-in}.van-drawer-backdrop[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-drawer-fade-out}.van-drawer-positioner{z-index:calc(var(--z-index-base,1000) + var(--layer-index,0));position:fixed;inset:0}.van-drawer-content{position:fixed}.van-drawer-content[data-placement=right],.van-drawer-content:not([data-placement]){width:var(--van-drawer-size,400px);max-width:100vw;top:0;bottom:0;right:0}.van-drawer-content[data-placement=right][data-state=open],.van-drawer-content:not([data-placement])[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-right}.van-drawer-content[data-placement=right][data-state=closed],.van-drawer-content:not([data-placement])[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-right}.van-drawer-content[data-placement=left]{width:var(--van-drawer-size,400px);max-width:100vw;top:0;bottom:0;left:0}.van-drawer-content[data-placement=left][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-left}.van-drawer-content[data-placement=left][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-left}.van-drawer-content[data-placement=top]{height:var(--van-drawer-size,400px);max-height:100vh;top:0;left:0;right:0}.van-drawer-content[data-placement=top][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-top}.van-drawer-content[data-placement=top][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-top}.van-drawer-content[data-placement=bottom]{height:var(--van-drawer-size,400px);max-height:100vh;bottom:0;left:0;right:0}.van-drawer-content[data-placement=bottom][data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-drawer-slide-in-bottom}.van-drawer-content[data-placement=bottom][data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) forwards van-drawer-slide-out-bottom}.van-drawer-content-inner{background:var(--card,#fff);border-radius:2px;flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden;box-shadow:0 0 0 1px #0000000f,0 4px 16px #0000001a}.van-drawer-header{flex-shrink:0;justify-content:space-between;align-items:flex-start;padding:20px 20px 12px;display:flex}.van-drawer-title{color:var(--card-foreground,#171717);margin:0;font-size:16px;font-weight:600;line-height:1.4}.van-drawer-close{border-radius:var(--radius-lg,2px);cursor:pointer;width:24px;height:24px;color:var(--muted-foreground,#737373);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin:-2px -2px 0 8px;font-size:14px;transition:background .15s,color .15s;display:inline-flex}.van-drawer-close:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-drawer-desc{color:var(--muted-foreground,#737373);padding:0 20px 14px;font-size:14px;line-height:1.5}.van-drawer-body{flex:1;min-height:0;padding:2px 20px 16px;overflow-y:auto}.van-drawer-footer{border-top:1px solid var(--border,#e5e5e5);flex-shrink:0;justify-content:flex-end;gap:10px;padding:12px 20px;display:flex}.van-drawer-footer .van-btn{min-width:84px}.van-drawer-grabber{cursor:grab;flex-shrink:0;justify-content:center;padding:8px 0 0;display:flex}.van-drawer-grabber:active{cursor:grabbing}.van-drawer-grabber-indicator{background:#d4d4d4;border-radius:2px;width:36px;height:4px}@keyframes van-modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-modal-scale-in{0%{opacity:0;transform:scale(.95)translateY(8px)}to{opacity:1;transform:none}}@keyframes van-modal-scale-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.95)translateY(-4px)}}.van-modal-backdrop{z-index:var(--z,1000);background:#0006;position:fixed;inset:0}.van-modal-backdrop[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-modal-fade-in}.van-modal-backdrop[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-modal-fade-out}.van-modal-positioner{z-index:calc(var(--z-index-base,1000) + var(--layer-index,0));justify-content:center;align-items:start;padding:15vh 1rem 1rem;display:flex;position:fixed;inset:0}.van-modal-positioner[data-center]{align-items:center;padding-top:1rem}.van-modal-content{background:var(--card,#fff);border-radius:var(--radius-lg,2px);width:var(--van-modal-width,min(480px, 92vw));min-width:min(420px,92vw);max-height:var(--van-modal-max-height,90vh);flex-direction:column;display:flex;overflow:hidden;box-shadow:0 0 0 1px #0000000f,0 4px 16px #0000001a}.van-modal-content[data-state=open]{animation:.25s cubic-bezier(.16,1,.3,1) van-modal-scale-in}.van-modal-content[data-state=closed]{animation:.15s cubic-bezier(.4,0,1,1) van-modal-scale-out}.van-modal-header{justify-content:space-between;align-items:flex-start;padding:20px 20px 12px;display:flex}.van-modal-title{color:var(--card-foreground,#171717);margin:0;font-size:16px;font-weight:600;line-height:1.4}.van-modal-close{border-radius:var(--radius-lg,2px);cursor:pointer;width:24px;height:24px;color:var(--muted-foreground,#737373);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin:-2px -2px 0 8px;font-size:14px;transition:background .15s,color .15s;display:inline-flex}.van-modal-close:hover{background:var(--muted,#f5f5f5);color:var(--card-foreground,#171717)}.van-modal-desc{color:var(--muted-foreground,#737373);padding:0 20px 14px;font-size:14px;line-height:1.5}.van-modal-body{flex:1;padding:2px 20px 16px;overflow-y:auto}.van-modal-footer{justify-content:flex-end;gap:10px;padding:12px 20px;display:flex}.van-modal-footer .van-btn{min-width:84px}.van-modal-content[data-center] .van-modal-footer{border-top:1px solid var(--border,#e5e5e5)}[data-scope=dialog][data-part=content][data-has-nested]{transform:scale(calc(1 - var(--nested-layer-count,0) * .03))}[data-scope=toast][data-part=root]{transform:translate3d(var(--x,0), var(--y,100%), 0);z-index:var(--z-index,0);opacity:var(--opacity,1);background:var(--card,#fff);border-radius:var(--radius-lg,2px);min-width:320px;max-width:420px;transition:transform .25s,opacity .2s;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 12px #0000001f}.van-toast-bar{flex-shrink:0;width:4px}[data-type=success] .van-toast-bar{background:var(--success,#22c55e)}[data-type=error] .van-toast-bar{background:var(--destructive,#ef4444)}[data-type=info] .van-toast-bar{background:var(--primary,#3b82f6)}[data-type=warning] .van-toast-bar{background:var(--warning,#f59e0b)}[data-type=loading] .van-toast-bar{background:var(--muted-foreground,#f5f5f5)}.van-toast-body{flex:1;min-width:0;padding:12px 40px 12px 16px}.van-toast-title{color:var(--card-foreground,#171717);white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;line-height:1.4;overflow:hidden}.van-toast-desc{color:var(--muted-foreground,#737373);margin-top:2px;font-size:14px;line-height:1.5}.van-toast-close{cursor:pointer;width:20px;height:20px;color:var(--muted-foreground,#9ca3af);background:0 0;border:none;border-radius:2px;justify-content:center;align-items:center;padding:0;transition:color .15s,background .15s;display:inline-flex;position:absolute;top:12px;right:12px}.van-toast-close:hover{color:var(--card-foreground,#4b5563);background:var(--muted,#f3f4f6)}.van-toast-close-x{width:12px;height:12px;display:block;position:relative}.van-toast-close-x:before,.van-toast-close-x:after{content:"";background:currentColor;border-radius:1px;width:12px;height:1.5px;position:absolute;top:50%;left:50%}.van-toast-close-x:before{transform:translate(-50%,-50%)rotate(45deg)}.van-toast-close-x:after{transform:translate(-50%,-50%)rotate(-45deg)}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vanstack/solid-ark",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -52,7 +52,8 @@
52
52
  "zod": "^4.4.0"
53
53
  },
54
54
  "dependencies": {
55
- "@internationalized/date": "^3.12.2"
55
+ "@internationalized/date": "^3.12.2",
56
+ "fast-equals": "^6.0.2"
56
57
  },
57
58
  "devDependencies": {
58
59
  "@ark-ui/solid": "^5.0.0",
@@ -63,15 +64,17 @@
63
64
  "solid-js": "^1.9.0",
64
65
  "vite": "^8.0.0",
65
66
  "vite-plugin-solid": "^2.11.0",
67
+ "vitest": "^4.1.10",
66
68
  "zod": "^4.4.0",
67
69
  "@vanstack/eslint-config": "0.0.1",
70
+ "@vanstack/tsconfig": "0.0.1",
68
71
  "@vanstack/prettier-config": "0.0.1",
69
- "@vanstack/vite-config": "0.0.1",
70
- "@vanstack/tsconfig": "0.0.1"
72
+ "@vanstack/vite-config": "0.0.2"
71
73
  },
72
74
  "scripts": {
73
75
  "build": "tsc --noEmit && vite build",
74
76
  "tsc": "tsc --noEmit",
75
- "lint": "eslint . --fix"
77
+ "lint": "eslint . --fix",
78
+ "test": "vitest run"
76
79
  }
77
80
  }