@vanstack/solid-ark 0.0.22 → 0.0.23

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.
@@ -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-IwL17HZI.js";
4
+ import { t as n } from "../form-B5rMsobe.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";
@@ -1,2 +1,2 @@
1
1
  export { Form } from './Form';
2
- export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormInvalidSubmitProps, FormProps, FormSize, FormSubmitProps, } from './type';
2
+ export type { DatePickerStoredValue, FieldConfig, FieldControlProps, FieldRule, FieldRuleContext, FormExposed, FormInvalidSubmitProps, FormProps, FormSize, FormSubmitProps, } from './type';
@@ -1,3 +1,3 @@
1
1
  import "../solid-ark.css";
2
- import { t as e } from "../form-IwL17HZI.js";
2
+ import { t as e } from "../form-B5rMsobe.js";
3
3
  export { e as Form };
@@ -123,6 +123,21 @@ export interface FormSubmitProps<TData extends Record<string, unknown>> {
123
123
  /** patch=true 时提供:patch 是否非空 */
124
124
  changed?: boolean;
125
125
  }
126
+ /** 暴露给外部的表单实例(Form ref) */
127
+ export interface FormExposed<TData extends Record<string, unknown>> {
128
+ /** 校验全部字段(等待异步规则);返回是否全部通过,不触发提交 */
129
+ validate: () => Promise<boolean>;
130
+ /** 重置表单 */
131
+ reset: () => void;
132
+ /** 读取全部字段值(快照副本,非响应式引用) */
133
+ getFieldValues: () => TData;
134
+ /** 批量写入字段值(逐字段触发校验与 onValuesChange) */
135
+ setFieldValues: (values: Partial<TData>) => void;
136
+ /** 读取字段值 */
137
+ getFieldValue: (name: string) => unknown;
138
+ /** 写入字段值 */
139
+ setFieldValue: (name: string, value: unknown) => void;
140
+ }
126
141
  export interface FormProps<TData extends Record<string, unknown>> {
127
142
  /** 字段配置 */
128
143
  fields: FieldConfig[];
@@ -132,10 +147,13 @@ export interface FormProps<TData extends Record<string, unknown>> {
132
147
  onValuesChange?: (values: TData) => void;
133
148
  /** 是否计算变更集:默认 false;开启后 onSubmit 额外收到 { patch, changed }(与初始值比较,提交时计算) */
134
149
  patch?: boolean;
150
+ /** 暴露表单实例(Solid ref 语义,挂载时回调一次),用于外部主动校验/提交 */
151
+ ref?: (api: FormExposed<TData>) => void;
135
152
  /** 控件尺寸:small | default(默认)| large,控制 input/textarea/select/datePicker 等输入类控件 */
136
153
  size?: FormSize;
137
154
  /** 提交回调(仅在校验通过时触发) */
138
- onSubmit: (props: FormSubmitProps<TData>) => Promise<void> | void;
155
+ /** 提交回调(仅在校验通过时触发);只做展示/受控绑定时可不传 */
156
+ onSubmit?: (props: FormSubmitProps<TData>) => Promise<void> | void;
139
157
  /** 提交被校验拦截时的回调 */
140
158
  onSubmitInvalid?: (props: FormInvalidSubmitProps<TData>) => void;
141
159
  /** 表单布局 class */
@@ -466,14 +466,14 @@ function oe(e) {
466
466
  let t = e;
467
467
  if (r.patch) {
468
468
  let { patch: e, changed: n } = ne(l, t, r.fields);
469
- await r.onSubmit({
469
+ await r.onSubmit?.({
470
470
  value: t,
471
471
  patch: e,
472
472
  changed: n
473
473
  });
474
474
  return;
475
475
  }
476
- await r.onSubmit({ value: t });
476
+ await r.onSubmit?.({ value: t });
477
477
  },
478
478
  onSubmitInvalid: ({ value: e, formApi: t }) => {
479
479
  if (!r.onSubmitInvalid) return;
@@ -487,7 +487,18 @@ function oe(e) {
487
487
  errors: n
488
488
  });
489
489
  }
490
- })), b = _.useStore((e) => e.isSubmitting), C = _.useStore((e) => e.values), w = _.setFieldValue;
490
+ }));
491
+ r.ref?.({
492
+ validate: async () => (await _.validateAllFields("change"), _.state.canSubmit),
493
+ reset: () => _.reset(),
494
+ getFieldValues: () => ({ ..._.state.values }),
495
+ setFieldValues: (e) => {
496
+ for (let [t, n] of Object.entries(e)) _.setFieldValue(t, n);
497
+ },
498
+ getFieldValue: (e) => _.getFieldValue(e),
499
+ setFieldValue: (e, t) => _.setFieldValue(e, t)
500
+ });
501
+ let b = _.useStore((e) => e.isSubmitting), C = _.useStore((e) => e.values), w = _.setFieldValue;
491
502
  return p(y(() => r.values, (e) => {
492
503
  for (let [t, n] of Object.entries(e ?? {})) _.state.values[t] !== n && w(t, n);
493
504
  }, { defer: !0 })), p(y(C, (e) => r.onValuesChange?.(e), { defer: !0 })), (() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vanstack/solid-ark",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -71,8 +71,8 @@
71
71
  "vite-plugin-solid": "^2.11.0",
72
72
  "vitest": "^4.1.10",
73
73
  "zod": "^4.4.0",
74
- "@vanstack/eslint-config": "0.0.1",
75
74
  "@vanstack/prettier-config": "0.0.1",
75
+ "@vanstack/eslint-config": "0.0.1",
76
76
  "@vanstack/tsconfig": "0.0.1",
77
77
  "@vanstack/vite-config": "0.0.2"
78
78
  },