@schemx/vue 1.0.0-next.3 → 1.0.0-next.5

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.
Files changed (99) hide show
  1. package/README.md +288 -283
  2. package/dist/analyze.html +1 -1
  3. package/dist/bridge/fieldBridge.d.ts +5 -18
  4. package/dist/bridge/fieldBridge.d.ts.map +1 -1
  5. package/dist/bridge/formBridge.d.ts +8 -76
  6. package/dist/bridge/formBridge.d.ts.map +1 -1
  7. package/dist/bridge/formInstance.d.ts +18 -0
  8. package/dist/bridge/formInstance.d.ts.map +1 -0
  9. package/dist/bridge/helpers.d.ts +9 -1
  10. package/dist/bridge/helpers.d.ts.map +1 -1
  11. package/dist/bridge/index.d.ts +7 -5
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/types.d.ts +37 -77
  14. package/dist/bridge/types.d.ts.map +1 -1
  15. package/dist/bridge/viewSchemaBridge.d.ts +5 -0
  16. package/dist/bridge/viewSchemaBridge.d.ts.map +1 -0
  17. package/dist/components/Button/index.vue.d.ts +1 -1
  18. package/dist/components/Button/index.vue.d.ts.map +1 -1
  19. package/dist/components/Button/types.d.ts.map +1 -1
  20. package/dist/components/Col/index.d.ts +31 -0
  21. package/dist/components/Col/index.d.ts.map +1 -0
  22. package/dist/components/ConfigProvider/index.d.ts +78 -0
  23. package/dist/components/ConfigProvider/index.d.ts.map +1 -0
  24. package/dist/components/Dynamic/index.d.ts +46 -0
  25. package/dist/components/Dynamic/index.d.ts.map +1 -0
  26. package/dist/components/Field/index.d.ts +47 -0
  27. package/dist/components/Field/index.d.ts.map +1 -0
  28. package/dist/components/Field/slot.d.ts +40 -0
  29. package/dist/components/Field/slot.d.ts.map +1 -0
  30. package/dist/components/Group/index.d.ts +61 -0
  31. package/dist/components/Group/index.d.ts.map +1 -0
  32. package/dist/components/Group/slot.d.ts +34 -0
  33. package/dist/components/Group/slot.d.ts.map +1 -0
  34. package/dist/components/SchemaList/index.d.ts +58 -0
  35. package/dist/components/SchemaList/index.d.ts.map +1 -0
  36. package/dist/components/Wrapper/index.vue.d.ts +29 -0
  37. package/dist/components/Wrapper/index.vue.d.ts.map +1 -0
  38. package/dist/config/appConfig.d.ts +3 -3
  39. package/dist/config/appConfig.d.ts.map +1 -1
  40. package/dist/config/index.d.ts +2 -0
  41. package/dist/config/index.d.ts.map +1 -1
  42. package/dist/config/providerConfig.d.ts +22 -0
  43. package/dist/config/providerConfig.d.ts.map +1 -0
  44. package/dist/config/vueConfig.d.ts +12 -0
  45. package/dist/config/vueConfig.d.ts.map +1 -0
  46. package/dist/form.d.ts +4 -4
  47. package/dist/form.d.ts.map +1 -1
  48. package/dist/hocs/withRemoteOptions.d.ts.map +1 -1
  49. package/dist/hooks/index.d.ts +3 -3
  50. package/dist/hooks/index.d.ts.map +1 -1
  51. package/dist/hooks/provideFieldContext.d.ts +2 -2
  52. package/dist/hooks/provideFormContext.d.ts +13 -46
  53. package/dist/hooks/provideFormContext.d.ts.map +1 -1
  54. package/dist/hooks/useDictionary.d.ts.map +1 -1
  55. package/dist/hooks/useField.d.ts.map +1 -1
  56. package/dist/hooks/useForm.d.ts +2 -2
  57. package/dist/hooks/useForm.d.ts.map +1 -1
  58. package/dist/hooks/useFormSelector.d.ts +4 -0
  59. package/dist/hooks/useFormSelector.d.ts.map +1 -1
  60. package/dist/hooks/useViewSchemas.d.ts +2 -34
  61. package/dist/hooks/useViewSchemas.d.ts.map +1 -1
  62. package/dist/hooks/useWatch.d.ts.map +1 -1
  63. package/dist/index.cjs +1 -1
  64. package/dist/index.cjs.map +1 -1
  65. package/dist/index.d.ts +9 -4
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.mjs +1125 -521
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/style.css +1 -1
  70. package/dist/types/dictionary.d.ts +1 -1
  71. package/dist/types/dictionary.d.ts.map +1 -1
  72. package/dist/types/field.d.ts +38 -2
  73. package/dist/types/field.d.ts.map +1 -1
  74. package/dist/types/form.d.ts +12 -7
  75. package/dist/types/form.d.ts.map +1 -1
  76. package/dist/types/index.d.ts +5 -4
  77. package/dist/types/index.d.ts.map +1 -1
  78. package/dist/types/layout.d.ts +26 -0
  79. package/dist/types/layout.d.ts.map +1 -0
  80. package/dist/utils/colProvider.d.ts +20 -0
  81. package/dist/utils/colProvider.d.ts.map +1 -0
  82. package/dist/utils/helpers.d.ts +4 -0
  83. package/dist/utils/helpers.d.ts.map +1 -1
  84. package/dist/utils/index.d.ts +2 -0
  85. package/dist/utils/index.d.ts.map +1 -1
  86. package/dist/utils/presetRuleProvider.d.ts +16 -0
  87. package/dist/utils/presetRuleProvider.d.ts.map +1 -0
  88. package/dist/utils/rendererProvider.d.ts.map +1 -1
  89. package/package.json +5 -6
  90. package/dist/bridge/formFacade.d.ts +0 -65
  91. package/dist/bridge/formFacade.d.ts.map +0 -1
  92. package/dist/components/FormGroup/index.d.ts +0 -16
  93. package/dist/components/FormGroup/index.d.ts.map +0 -1
  94. package/dist/components/FormItem/index.d.ts +0 -22
  95. package/dist/components/FormItem/index.d.ts.map +0 -1
  96. package/dist/components/FormItem/slot.d.ts +0 -48
  97. package/dist/components/FormItem/slot.d.ts.map +0 -1
  98. package/dist/utils/rulesProvider.d.ts +0 -16
  99. package/dist/utils/rulesProvider.d.ts.map +0 -1
package/dist/form.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { App } from 'vue';
2
- import { default as FormItem } from './components/FormItem';
2
+ import { default as Field } from './components/Field';
3
3
  import { default as SchemxForm } from './formRuntime.js';
4
- import { SchemxConfig } from '@schemx/core';
4
+ import { SchemxVueConfig } from './types/layout';
5
5
  /**
6
6
  * SchemxForm 插件安装选项
7
7
  *
@@ -17,7 +17,7 @@ import { SchemxConfig } from '@schemx/core';
17
17
  * })
18
18
  * ```
19
19
  */
20
- export interface SchemxInstallOptions extends SchemxConfig {
20
+ export interface SchemxInstallOptions extends SchemxVueConfig {
21
21
  }
22
22
  /**
23
23
  * 为组件挂载静态属性并保留原始类型
@@ -30,7 +30,7 @@ export interface SchemxInstallOptions extends SchemxConfig {
30
30
  export declare function withInstall<TComponent extends object, TExtras extends Record<string, unknown>>(comp: TComponent, extra: TExtras): TComponent & TExtras;
31
31
  export type SchemxFormPlugin = typeof SchemxForm & {
32
32
  install: (app: App, options?: SchemxInstallOptions) => void;
33
- FormItem: typeof FormItem;
33
+ Field: typeof Field;
34
34
  };
35
35
  declare const SchemxFormExport: SchemxFormPlugin;
36
36
  export default SchemxFormExport;
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,QAAQ,MAAM,uBAAuB,CAAA;AAE5C,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;CAAG;AAE7D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GACK,UAAU,GAAG,OAAO,CAC1D;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,UAAU,GAAG;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,QAAQ,EAAE,OAAO,QAAQ,CAAA;CAC1B,CAAA;AAED,QAAA,MAAM,gBAAgB,EAQL,gBAAgB,CAAA;AAEjC,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,KAAK,MAAM,oBAAoB,CAAA;AAEtC,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;CAAG;AAEhE;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GACK,UAAU,GAAG,OAAO,CAC1D;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,UAAU,GAAG;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,KAAK,EAAE,OAAO,KAAK,CAAA;CACpB,CAAA;AAED,QAAA,MAAM,gBAAgB,EAQL,gBAAgB,CAAA;AAEjC,eAAe,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"withRemoteOptions.d.ts","sourceRoot":"","sources":["../../src/hocs/withRemoteOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAwD,MAAM,KAAK,CAAA;AAQrF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,cAAc;IACd,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,WAAW;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAiCxE;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"withRemoteOptions.d.ts","sourceRoot":"","sources":["../../src/hocs/withRemoteOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAwD,MAAM,KAAK,CAAA;AAOrF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,cAAc;IACd,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,WAAW;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAiCxE;AAED,eAAe,iBAAiB,CAAA"}
@@ -5,8 +5,8 @@
5
5
  */
6
6
  /** useForm - 表单状态管理 */
7
7
  export { useForm } from './useForm';
8
- /** Vue Form Facade - 在 Vue effect 中可追踪的 Form 实例。 */
9
- export { getCoreForm, type VueSchemxInstance } from '../bridge';
8
+ /** Vue Form Instance - 在 Vue effect 中可追踪的 Form 实例。 */
9
+ export type { VueSchemxInstance } from '../bridge';
10
10
  /** createFormContext - 表单上下文注入与消费 */
11
11
  export { createFormContext, useFormContext } from './provideFormContext';
12
12
  /** useField - 单字段控制 */
@@ -24,5 +24,5 @@ export { useStableRef } from './useStableRef';
24
24
  /** useViewSchemas - ViewSchemas Vue 桥接 */
25
25
  export { useViewSchemas } from './useViewSchemas';
26
26
  /** useFormSelector - 表单值 Selector Vue 桥接 */
27
- export { useFormSelector, type UseFormSelectorOptions, } from './useFormSelector';
27
+ export { useFormSelector, type UseFormSelectorOptions } from './useFormSelector';
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,oDAAoD;AACpD,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE/D,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAExE,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,sCAAsC;AACtC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE3E,wBAAwB;AACxB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEjF,6BAA6B;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAEzE,wCAAwC;AACxC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,0CAA0C;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,sDAAsD;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAElD,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAExE,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,sCAAsC;AACtC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE3E,wBAAwB;AACxB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEjF,6BAA6B;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAEzE,wCAAwC;AACxC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,0CAA0C;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,4CAA4C;AAC5C,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -3,7 +3,7 @@ import { Values } from '@schemx/core';
3
3
  /**
4
4
  * 向后代组件提供当前字段实例。
5
5
  *
6
- * 应在创建字段实例的组件 setup() 同步阶段调用,通常由 FormItem
6
+ * 应在创建字段实例的组件 setup() 同步阶段调用,通常由 Field
7
7
  * 在调用 useField() 后使用,使字段插槽或自定义子组件能够读取同一实例。
8
8
  *
9
9
  * @param field - useField() 返回的字段实例
@@ -13,7 +13,7 @@ import { Values } from '@schemx/core';
13
13
  *
14
14
  * @example
15
15
  * ```typescript
16
- * // FormItem 中
16
+ * // Field 中
17
17
  * const field = useField('date')
18
18
  * createFieldContext(field)
19
19
  *
@@ -1,59 +1,26 @@
1
1
  import { InjectionKey } from 'vue';
2
- import { VueSchemxInstance } from '../bridge';
2
+ import { VueFormRuntime, VueSchemxInstance } from '../bridge';
3
3
  import { SchemxInstance, Values } from '@schemx/core';
4
4
  type FormContextInstance = VueSchemxInstance<any>;
5
- /**
6
- * SchemxInstance 在 Vue provide/inject 中使用的注入 key。
7
- *
8
- * 该 key 只应与同一份包代码导出的 createFormContext() 和 useFormContext()
9
- * 配套使用;重复安装不兼容版本的包不会共享此上下文。
10
- */
5
+ /** SchemxInstance 在 Vue provide/inject 中使用的注入 key。 */
11
6
  export declare const SCHEMX_FORM_INSTANCE_KEY: InjectionKey<FormContextInstance>;
12
- /**
13
- * 旧版表单实例注入 key。
14
- *
15
- * @deprecated 请使用 SCHEMX_FORM_INSTANCE_KEY。该别名仅用于兼容旧测试和旧适配代码。
16
- */
7
+ /** 旧版表单实例注入 key,仅保留为内部适配别名。 */
17
8
  export declare const FORM_INSTANCE_KEY: InjectionKey<FormContextInstance>;
18
9
  /**
19
- * 向当前组件的后代组件提供表单实例。
20
- *
21
- * 必须在组件 setup() 的同步执行阶段调用;不要放入 onMounted、nextTick、
22
- * Promise 或其他异步回调中,否则 Vue 无法把上下文关联到当前组件实例。
23
- *
24
- * @typeParam TValues - 表单值类型
25
- * @param instance - 要提供给后代组件的表单实例
10
+ * 向当前组件的后代组件提供表单实例和共享 Runtime。
26
11
  *
27
- * @remarks
28
- * 该函数不接管实例所有权,也不会在组件卸载时销毁实例。
29
- *
30
- * @example
31
- * ```ts
32
- * const form = props.form ?? useForm(options)
33
- *
34
- * // 无论 form 来自外部还是内部,都统一注册上下文。
35
- * createFormContext(form)
36
- * ```
12
+ * @param instance - 要提供给后代组件的 Core Form 或 Vue Instance。
13
+ * @returns 当前 Runtime 对应的 Vue Instance。
37
14
  */
38
- export declare function createFormContext<TValues extends Values = Values>(instance: SchemxInstance<TValues>): VueSchemxInstance<TValues>;
15
+ export declare function createFormContext<TValues extends Values = Values>(instance: SchemxInstance<TValues> | VueSchemxInstance<TValues>): VueSchemxInstance<TValues>;
16
+ /** 获取最近祖先提供的 Vue Instance。 */
17
+ export declare function useFormContext<TValues extends Values = Values>(): VueSchemxInstance<TValues>;
39
18
  /**
40
- * 获取最近祖先组件提供的表单实例。
41
- *
42
- * 该函数只能读取祖先组件注册的上下文,不能读取当前组件自身或后代组件
43
- * 调用 createFormContext() 提供的值。通常由 useField()、useWatch() 等其他
44
- * 表单 hook 间接调用。
19
+ * 获取当前表单的内部 Runtime。
45
20
  *
46
- * @typeParam TValues - 表单值类型
47
- * @returns 当前组件所属表单树中的 SchemxInstance
48
- *
49
- * @throws Error 当前组件不在已注册表单实例上下文的后代组件树中时抛出
50
- *
51
- * @example
52
- * ```ts
53
- * const form = useFormContext<FormValues>()
54
- * form.setFieldValue("name", "Schemx")
55
- * ```
21
+ * 正常路径直接读取 Provider 已持有的 Runtime;测试或旧适配代码只提供
22
+ * `SCHEMX_FORM_INSTANCE_KEY` 时,才为当前 scope 建立一个临时 owner。
56
23
  */
57
- export declare function useFormContext<TValues extends Values = Values>(): VueSchemxInstance<TValues>;
24
+ export declare function useFormRuntimeContext<TValues extends Values = Values>(): VueFormRuntime<TValues>;
58
25
  export {};
59
26
  //# sourceMappingURL=provideFormContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provideFormContext.d.ts","sourceRoot":"","sources":["../../src/hooks/provideFormContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAU,KAAK,YAAY,EAA2B,MAAM,KAAK,CAAA;AAExE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAElB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAK1D,KAAK,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAgC,YAAY,CAC/E,mBAAmB,CACpB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,mCAA2B,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,GAChC,iBAAiB,CAAC,OAAO,CAAC,CAS5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,SAAS,MAAM,GAAG,MAAM,KAC5B,iBAAiB,CAAC,OAAO,CAAC,CAW9B"}
1
+ {"version":3,"file":"provideFormContext.d.ts","sourceRoot":"","sources":["../../src/hooks/provideFormContext.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAU,KAAK,YAAY,EAA2B,MAAM,KAAK,CAAA;AAExE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAElB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1D,KAAK,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAIjD,sDAAsD;AACtD,eAAO,MAAM,wBAAwB,EAEhC,YAAY,CAAC,mBAAmB,CAAC,CAAA;AAOtC,+BAA+B;AAC/B,eAAO,MAAM,iBAAiB,mCAA2B,CAAA;AAEzD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAC7D,iBAAiB,CAAC,OAAO,CAAC,CAW5B;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,CAC5B,OAAO,SAAS,MAAM,GAAG,MAAM,KAC5B,iBAAiB,CAAC,OAAO,CAAC,CAW9B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,SAAS,MAAM,GAAG,MAAM,KAC5B,cAAc,CAAC,OAAO,CAAC,CAc3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDictionary.d.ts","sourceRoot":"","sources":["../../src/hooks/useDictionary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAa,GAAG,EAAmB,MAAM,KAAK,CAAA;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAK1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEpD,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,OAAO,GAAG,OAAO;IACpD,uBAAuB;IACvB,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACpB,kBAAkB;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,kBAAkB;IAClB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IAC7B,eAAe;IACf,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,qBAAqB;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,CAAC,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAElF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAIlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,KAAK,SAAS,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EACnD,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO,EAEjB,SAAS,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EACtD,YAAY,KAAK,KAChB,mBAAmB,CAAC,OAAO,CA6I7B,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"useDictionary.d.ts","sourceRoot":"","sources":["../../src/hooks/useDictionary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAA6B,GAAG,EAAmB,MAAM,KAAK,CAAA;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAK1D,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,EAAE,MAAM,cAAc,CAAA;AAEpE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,OAAO,GAAG,OAAO;IACpD,uBAAuB;IACvB,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACpB,kBAAkB;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,kBAAkB;IAClB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IAC7B,eAAe;IACf,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,qBAAqB;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,CAAC,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAElF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAIlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,KAAK,SAAS,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EACnD,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO,EAEjB,SAAS,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EACtD,YAAY,KAAK,KAChB,mBAAmB,CAAC,OAAO,CA6K7B,CAAA;AAoDD,eAAe,aAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["../../src/hooks/useField.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAgDpD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,MAAM,GAAG,MAAM,EACtD,MAAM,QAAQ,CAAC,OAAO,CAAC,KACtB,aAAa,CAAC,OAAO,CAUvB,CAAA;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["../../src/hooks/useField.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,EAAE,MAAM,cAAc,CAAA;AA+CpE;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,MAAM,GAAG,MAAM,EACtD,MAAM,QAAQ,CAAC,OAAO,CAAC,KACtB,aAAa,CAAC,OAAO,CAQvB,CAAA;AAED,eAAe,QAAQ,CAAA"}
@@ -4,7 +4,7 @@ import { CreateFormOptions, NamePath, Values } from '@schemx/core';
4
4
  * useForm 配置选项。
5
5
  *
6
6
  * 当前与 core 层 CreateFormOptions 保持一致,并在 Vue 层自动补充默认的
7
- * rendererRegistry 和 validationRuleRegistry。保留独立类型用于后续扩展
7
+ * rendererRegistry 和 presetRuleRegistry。保留独立类型用于后续扩展
8
8
  * Vue 专属配置,而不污染 core 层接口。
9
9
  *
10
10
  * @typeParam TValues - 表单值类型
@@ -15,7 +15,7 @@ export interface UseFormOptions<TValues extends Values> extends CreateFormOption
15
15
  * 创建由当前 Vue effect scope 持有的表单实例。
16
16
  *
17
17
  * useForm 只负责以下职责:
18
- * 1. 合并表单显式、App 安装和 Vue 层默认配置;
18
+ * 1. 合并表单显式、组件树 Provider、App 安装和 Vue 层默认配置;
19
19
  * 2. 同步创建 SchemxInstance;
20
20
  * 3. 在当前 effect scope 销毁时调用 instance.destroy()。
21
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAaA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAKlB,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM,CAAE,SAAQ,iBAAiB,CAC/E,OAAO,EACP,QAAQ,CAAC,OAAO,CAAC,CAClB;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrD,OAAO,GAAE,cAAc,CAAC,OAAO,CAAM,GACpC,iBAAiB,CAAC,OAAO,CAAC,CAgC5B"}
1
+ {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAGzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM,CAAE,SAAQ,iBAAiB,CAC/E,OAAO,EACP,QAAQ,CAAC,OAAO,CAAC,CAClB;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrD,OAAO,GAAE,cAAc,CAAC,OAAO,CAAM,GACpC,iBAAiB,CAAC,OAAO,CAAC,CAwB5B"}
@@ -9,6 +9,10 @@ export interface UseFormSelectorOptions<TSelected> {
9
9
  * 默认使用 `Object.is`。
10
10
  */
11
11
  equals?: (previous: TSelected, next: TSelected) => boolean;
12
+ /**
13
+ * Vue watcher 的刷新时机;默认 `sync` 以保持现有表单同步语义。
14
+ */
15
+ flush?: "sync" | "pre" | "post";
12
16
  }
13
17
  /**
14
18
  * 将 Core 表单值按 selector 映射为 Vue 只读浅引用。
@@ -1 +1 @@
1
- {"version":3,"file":"useFormSelector.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormSelector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAIrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,SAAS;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAA;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,SAAS,GAAG,OAAO,EAEnB,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,EAClD,OAAO,GAAE,sBAAsB,CAAC,SAAS,CAAM,GAC9C,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAgCjC;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"useFormSelector.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormSelector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAIrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,SAAS;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAA;IAE1D;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAClF,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,EAClD,OAAO,GAAE,sBAAsB,CAAC,SAAS,CAAM,GAC9C,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAgCjC;AAED,eAAe,eAAe,CAAA"}
@@ -1,40 +1,8 @@
1
1
  import { ComputedRef, ShallowRef } from 'vue';
2
2
  import { SchemxInstance, SchemxViewSchema, Values } from '@schemx/core';
3
- /**
4
- * 将表单 ViewSchema 映射为共享的 Vue 响应式引用。
5
- *
6
- * 当前作用域释放一个桥接使用者;所有使用者都释放后才取消 Core 订阅。
7
- *
8
- * @typeParam TValues - 表单值类型。
9
- * @param form - 要订阅的表单实例。
10
- * @returns 当前 ViewSchema 列表的共享响应式浅引用;调用方不应直接改写其值。
11
- *
12
- * @example
13
- * ```ts
14
- * const form = useForm()
15
- * const viewSchemas = useViewSchemas(form)
16
- *
17
- * watchEffect(() => console.log(viewSchemas.value))
18
- * ```
19
- */
3
+ /** 获取当前表单共享的 ViewSchema 列表。 */
20
4
  export declare function useViewSchemas<TValues extends Values = Values>(form: SchemxInstance<TValues>): ShallowRef<readonly SchemxViewSchema<TValues>[]>;
21
- /**
22
- * 获取指定 key 的响应式 ViewSchema,并复用当前表单的共享订阅。
23
- *
24
- * @typeParam TValues - 表单值类型。
25
- * @param form - 要读取的表单实例。
26
- * @param getKey - 返回当前 schema key 的响应式 getter。
27
- * @returns 对应的最新 ViewSchema;不存在时返回 undefined。
28
- *
29
- * @example
30
- * ```ts
31
- * const schema = useViewSchema(form, () => fieldKey)
32
- *
33
- * watchEffect(() => {
34
- * console.log(schema.value?.label)
35
- * })
36
- * ```
37
- */
5
+ /** 获取当前 key 对应的共享 ViewSchema。 */
38
6
  export declare function useViewSchema<TValues extends Values = Values>(form: SchemxInstance<TValues>, getKey: () => string): ComputedRef<SchemxViewSchema<TValues> | undefined>;
39
7
  export default useViewSchemas;
40
8
  //# sourceMappingURL=useViewSchemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewSchemas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewSchemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAElD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAA;AA+BrB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5D,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAC5B,UAAU,CAAC,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAIlD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC3D,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,MAAM,GACnB,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAIpD;AAqGD,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"useViewSchemas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewSchemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAIlD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE5E,+BAA+B;AAC/B,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5D,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAC5B,UAAU,CAAC,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAQlD;AAED,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC3D,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,MAAM,GACnB,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAUpD;AAED,eAAe,cAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../../src/hooks/useWatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAUH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AACb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EACvB,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACrC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AACb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AA2Bb;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC3D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EACvB,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACrC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,EACnD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../../src/hooks/useWatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAQH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AACb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EACvB,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACrC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AACb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAAA;AA2Bb;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC3D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EACvB,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACrC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,EACnD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,IAAI,CAEZ;AAED,eAAe,QAAQ,CAAA"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),t=require("@schemx/core"),r=require("classnames"),o=require("@schemx/core/adapter"),n=require("es-toolkit");function a(t){return e.shallowRef(t)}function s(e,t){const r=e.stateAdapter.field(t),o=e.fieldBridges.get(r);if(o)return o;const n=r.getSnapshot(),s=a(n.value),l=a(n.errors),i=a(n.touched),u=a(n.pending),d=r.subscribe(()=>{const e=r.getSnapshot();var t,o;Object.is(s.value,e.value)||(s.value=e.value),t=l.value,o=e.errors,t.length===o.length&&t.every((e,t)=>e===o[t])||(l.value=e.errors),i.value!==e.touched&&(i.value=e.touched),u.value!==e.pending&&(u.value=e.pending)}),c={source:r,value:s,errors:l,touched:i,pending:u,dispose:()=>{d()}};return e.fieldBridges.set(r,c),c}const l=new WeakMap,i=new WeakMap,u=new WeakMap;function d(e){return u.get(e)??e}function c(e){const t=d(e),r=l.get(t);if(r)return r;const n=function(e){const t=o.createFormStateAdapter(e),r=a(t.values.getSnapshot()),n=a(t.touchedFields.getSnapshot()),s=a(t.pendingFields.getSnapshot()),l=a(t.loading.getSnapshot()),i=new Map,u=()=>{r.value=t.values.getSnapshot()},d=()=>{n.value=t.touchedFields.getSnapshot()},c=()=>{s.value=t.pendingFields.getSnapshot()},p=()=>{l.value=t.loading.getSnapshot()},v=t.values.subscribe(u),f=t.touchedFields.subscribe(d),h=t.pendingFields.subscribe(c),g=t.loading.subscribe(p),y=()=>{v(),f(),h(),g()},b=m(e),x={form:e,stateAdapter:t,values:r,touchedFields:n,pendingFields:s,loading:l,fieldBridges:i,refCount:0,destroyed:!1,unsubscribe:y,facade:b};return x}(t);return l.set(t,n),n}function m(e){const t=d(e),r=i.get(t);if(r)return r;const o=function(e,t){let r=!1;return{...e,getFieldValue:o=>{if(!r){const r=t.getFormBridge(e);t.getFieldBridge(r,o).value.value}return e.getFieldValue(o)},getFieldErrors:o=>{if(!r){const r=t.getFormBridge(e);t.getFieldBridge(r,o).errors.value}return e.getFieldErrors(o)},isFieldTouched:o=>{if(!r){const r=t.getFormBridge(e);t.getFieldBridge(r,o).touched.value}return e.isFieldTouched(o)},isFieldPending:o=>{if(!r){const r=t.getFormBridge(e);t.getFieldBridge(r,o).pending.value}return e.isFieldPending(o)},getFieldsValue:o=>{if(!r){const r=t.getFormBridge(e);if(void 0===o)r.values.value;else for(const e of o)t.getFieldBridge(r,e).value.value}return e.getFieldsValue(o)},getTouchedFields:()=>(r||t.getFormBridge(e).touchedFields.value,e.getTouchedFields()),getPendingFields:()=>(r||t.getFormBridge(e).pendingFields.value,e.getPendingFields()),isLoading:()=>(r||t.getFormBridge(e).loading.value,e.isLoading()),destroy:()=>{if(r)return;r=!0;const o=t.getCachedFormBridge(e);o&&t.disposeFormBridge(o),e.destroy()}}}(t,{getFormBridge:e=>c(e),getFieldBridge:(e,t)=>s(e,t),getCachedFormBridge:e=>l.get(e),disposeFormBridge:e=>v(e)});return i.set(t,o),u.set(o,t),o}function p(e){if(e.destroyed)return()=>{};e.refCount++;let t=!1;return()=>{t||e.destroyed||(t=!0,e.refCount--,0===e.refCount&&v(e))}}function v(e){if(!e.destroyed){e.destroyed=!0,e.refCount=0,e.unsubscribe();for(const t of e.fieldBridges.values())t.dispose();e.fieldBridges.clear(),e.stateAdapter.dispose(),l.delete(e.form)}}const f=Symbol("schemx:app-config"),h=Object.freeze({schemaConfig:Object.freeze({}),validatorAdapters:Object.freeze([])});function g(e){if(void 0===e)return;const t=Object.entries(e).map(([e,t])=>[e,void 0===t?void 0:Object.freeze({...t})]);return Object.freeze(Object.fromEntries(t))}function y(e,t={}){const r=function(e){const t=Object.freeze({...e.schemaConfig??{}}),r=Object.freeze([...e.validatorAdapters??[]]);return Object.freeze({schemaConfig:t,rendererProps:g(e.rendererProps),validatorAdapters:r,defaultRendererType:e.defaultRendererType,rendererRegistry:e.rendererRegistry,validationRuleRegistry:e.validationRuleRegistry})}(t);e.provide(f,r)}const b=o.createRendererRegistry("input"),x=t.createValidationRuleRegistry();function F(r={}){const o=t.mergeSchemxConfig(function(e){const{schemaConfig:t={},rendererProps:r,validatorAdapters:o=[],defaultRendererType:n,rendererRegistry:a,validationRuleRegistry:s}=e;return{schemaConfig:t,rendererProps:r,defaultRendererType:n,rendererRegistry:a,validationRuleRegistry:s,validatorAdapters:o}}(r),null===e.getCurrentInstance()?h:e.inject(f,h),{rendererRegistry:b,validationRuleRegistry:x}),n={...r,...o},a=t.createForm(n),s=m(a),l=p(c(a));return e.onScopeDispose(()=>{l(),s.destroy()}),s}const C=Symbol("schemx:instance");function B(t){const r=m(t),o=p(c(r));return e.provide(C,r),e.onScopeDispose(o),r}function S(){const t=e.inject(C,null);if(!t)throw new Error("[schemx] useFormContext() must be called inside a <SchemxForm> descendant. Ensure createFormContext(form) is called synchronously during setup().");return t}const w=r=>{const o=S();return function(r,o,n){const a=d(r),s=t.createField(a,o),l=e.computed(()=>n.errors.value),i=e.computed(()=>n.touched.value),u=e.computed(()=>n.pending.value);return{...s,name:o,value:n.value,errors:l,dirty:i,pending:u,getValue:()=>n.value.value,getErrors:()=>n.errors.value,isTouched:()=>n.touched.value,isPending:()=>n.pending.value,getValues:()=>r.getFieldsValue()}}(o,r,s(c(d(o)),r))},k=Symbol("schemx:field");function V(t){e.provide(k,t)}function R(){const t=e.inject(k);if(!t)throw new Error("[schemx] useFieldContext() must be called inside a component tree where createFieldContext(field) has been called.");return t}function O(r,o,n){const a=S(),s=t.createWatch(d(a),r,o,n);return e.onUnmounted(s),s}function _(e,t,r){return O(e,t,r)}function j(e){return e instanceof Error?e:new Error(String(e))}const A=(t,r)=>{var o;const n=S(),a=e.shallowRef([]),s=e.ref(!1),l=e.ref(void 0);let i=0;const u=async()=>{try{const e=n.getFieldsValue();if("function"==typeof t.shouldFetch&&!t.shouldFetch(e))return a.value=[],void(s.value=!1);s.value=!0,l.value=void 0;const r=++i,o=await(async e=>{const r=t.retryCount??0,o=t.retryInterval??1e3;let a=new Error("Unknown error");for(let l=0;l<=r;l++)try{return await t.api(e,n)}catch(s){a=j(s),l<r&&await new Promise(e=>setTimeout(e,o))}throw a})(e);if(r!==i)return;const u=await(async e=>{if("function"==typeof(null==t?void 0:t.formatter))return await t.formatter(e,n);if(!Array.isArray(e))throw new Error("[schemx] Dictionary api must return an array when formatter is not provided.");return e})(o);if(r!==i)return;a.value=u,l.value=void 0,"function"==typeof t.onSuccess&&t.onSuccess(u,n),s.value=!1}catch(e){const r=j(e);l.value=r,a.value=[],s.value=!1,"function"==typeof t.onError&&t.onError(r,n)}};(null==(o=t.dependsOn)?void 0:o.length)&&_(t.dependsOn,(e,o)=>{"function"==typeof t.onDepsChange&&t.onDepsChange(e,n),t.resetOnDepsChange&&r&&n.setFieldValue(r,void 0),u()});const d=t.immediate??!0;return e.onMounted(()=>{d&&u()}),{list:a,loading:s,error:l,loadDict:u,refresh:()=>u(),mutate:e=>{a.value=e}}},E=Symbol("schemx:form-config"),P=t=>{e.provide(E,t)};function N(){const t=e.inject(E);if(!t)throw new Error("[schemx] useFormConfigContext() must be called inside a <SchemxForm> descendant. Ensure createFormConfigContext(props) is called synchronously during setup().");return t}function T(t){const r=e.shallowRef({});return e.watchEffect(()=>{const e=t();((e,t)=>{const r=Object.keys(e),o=Object.keys(t);return r.length===o.length&&r.every(r=>e[r]===t[r])})(r.value,e)||(r.value=e)}),r}const $=new WeakMap;function L(e){return q(d(e)).viewSchemas}function W(r){const o=e.shallowRef(r.getViewSchemas()),n=e.computed(()=>function(e){const r=new Map,o=e=>{for(const n of e)r.set(n.key,n),t.isViewGroupSchema(n)&&o(n.children)};return o(e),r}(o.value));return{refCount:0,schemasByKey:n,unsubscribe:r.subscribeViewSchemas(e=>{o.value=e}),viewSchemas:o}}function q(t){const r=$.get(t),o=r??W(t);return r||$.set(t,o),o.refCount++,e.onScopeDispose(()=>{o.refCount--,o.refCount>0||(o.unsubscribe(),$.delete(t))}),o}function z(t,r,o={}){const n=c(d(t)),a=p(n),s=e.shallowRef(r(n.values.value)),l=o.equals??Object.is,i=e.watch(n.values,e=>{const t=r(e);l(s.value,t)||(s.value=t)},{flush:"sync"});return e.onScopeDispose(()=>{i(),a()}),e.readonly(s)}function M(e){return void 0!==e&&(!Array.isArray(e)||0!==e.length)}function D(e,t){if(!t)return!1;return(Array.isArray(t)?t:[t]).some(t=>function(e){return{onBlur:"blur",onChange:"change",onSubmit:"submit",blur:"blur",change:"change",submit:"submit"}[e]??"submit"}(t)===e)}const I=e=>/[A-Z]/.test(e),G=e=>e.includes("-"),K=e=>e.replace(/([A-Z])/g,"-$1").toLowerCase(),U=e=>e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Z=(e,t)=>{if(e[t])return e[t];const r=I(t)?K(t):G(t)?U(t):void 0;return r&&e[r]?e[r]:void 0},H=(e,t)=>{const r={},o=(n=String(e),(G(n)?U(n):n)+":");var n;const a=(e=>I(e)?K(e):e)(String(e))+":";for(const[s,l]of Object.entries(t))s.startsWith(o)?r[s.slice(o.length)]=l:s.startsWith(a)&&a!==o&&(r[s.slice(a.length)]=l);return r},J=e.defineComponent((t,{slots:o})=>{var n;const a=e.ref(Boolean(t.schema.defaultCollapsed)),s=e.computed(()=>t.schema.collapsed??a.value),l=(null==(n=e.getCurrentInstance())?void 0:n.uid)??0;e.watch(()=>t.schema.collapsed,(e,t)=>{void 0!==e?a.value=e:void 0!==t&&(a.value=t)});const i=()=>{var e,r;if(!t.schema.collapsible||t.schema.disabled)return;const o=!s.value;void 0===t.schema.collapsed&&(a.value=o),null==(r=(e=t.schema).onCollapsedChange)||r.call(e,o)};return()=>{var n;const a=t.schema;if(!1===a.visible)return null;const u=Boolean(a.collapsible),d=s.value,c=a.destroyOnCollapse??!0,m=`schemx-group-${(null==(n=a.debug)?void 0:n.runtimeNodeId)??`local-${l}`}-${Q(a.key)}`,p=`${m}-header`,v=`${m}-body`,f=e.createVNode("div",{id:v,role:"group","aria-labelledby":a.label?p:void 0,"aria-hidden":d||void 0,class:"schemx-group__body",style:!c&&d?{display:"none"}:void 0},[a.children.map(t=>e.createVNode(te,{key:t.key,schema:t},o))]);return e.createVNode("div",{class:r("schemx-group",{"schemx-group--collapsed":d,"is-readonly":a.readonly,"is-disabled":a.disabled},a.class),style:a.style,"data-key":a.key,"aria-disabled":a.disabled||void 0},[a.label&&e.createVNode("div",{id:p,role:u?"button":void 0,tabindex:u?a.disabled?-1:0:void 0,"aria-expanded":u?!d:void 0,"aria-controls":u?v:void 0,"aria-disabled":u&&a.disabled||void 0,class:r("schemx-group__header",{"schemx-group__header--clickable":u&&!a.disabled}),onClick:i,onKeydown:e=>{a.disabled||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),i())}},[e.createVNode("span",{class:"schemx-group__title"},[a.label]),u&&e.createVNode("span",{class:r("schemx-group__arrow",{"schemx-group__arrow--down":!d})},null)]),c?!d&&f:f])}},{name:"SchemxGroup",props:{schema:{type:Object,required:!0}}}),Q=e=>String(e).replace(/[^a-zA-Z0-9_-]/g,"-");function X(e){return Array.isArray(e)?e.map(e=>String(e)).join("."):String(e)}const Y=e.defineComponent({name:"SchemxItem",props:{schema:{type:Object,required:!0}},setup:(r,{slots:o})=>()=>{const n=r.schema;return t.isViewGroupSchema(n)?e.h(J,{schema:n},o):e.h(ee,{schema:n},o)}}),ee=e.defineComponent({name:"SchemxFieldItem",inheritAttrs:!1,props:{schema:{type:Object,required:!0}},setup(o,{attrs:n,slots:a}){const s=S(),l=e.computed(()=>o.schema),i=function(t,r){const o=q(d(t));return e.computed(()=>o.schemasByKey.value.get(r()))}(s,()=>l.value.key),u=e.computed(()=>i.value&&t.isSchemxViewFieldSchema(i.value)?i.value:l.value),c=N(),m=w(u.value.name);V(m);const p=e.computed(()=>{return e=u.value.validationTrigger,t=c.schemaConfig.validationTrigger,r="onChange",M(e)?e:M(t)?t:r;var e,t,r}),v=e.computed(()=>{const e=u.value.visible&&!u.value.readonly&&!u.value.disabled,t=u.value.rules,r=Array.isArray(t)?(null==t?void 0:t.length)>0:!!u.value.rules;return e&&(Boolean(u.value.required)||r)}),f=e=>{var t,r;m.setValue(e),null==(r=null==(t=u.value.componentProps)?void 0:t.onChange)||r.call(t,e),v.value&&D("change",p.value)&&m.validate()},h=e=>{var t,r;null==(r=null==(t=u.value.componentProps)?void 0:t.onBlur)||r.call(t,e),v.value&&D("blur",p.value)&&m.validate()},g=e=>{m.setValue(e)},y=T(()=>({...u.value.componentProps??{},value:m.value.value,onChange:f,onBlur:h,"onUpdate:value":g})),{createSlotProps:b,renderAfter:x,renderBefore:F,renderContent:C,renderError:B,renderLabel:k}=function(t){const{schemaRef:r,field:o,form:n,formContext:a,componentProps:s,slots:l}=t,i=(e={})=>({...s.value,value:o.value.value,...e}),u=e=>{const t=Z(l,`${r.value.name}${e}`);return(null==t?void 0:t(i()))??null};return{createSlotProps:i,renderAfter:()=>u("After"),renderBefore:()=>u("Before"),renderContent:()=>{const t=n.getRenderer(r.value.componentType);if(!t)throw new Error(`[schemx] Can not find component renderer of "${r.value.componentType}".`);const o=H(X(r.value.name),l),a=e.h(t,s.value,o),u=Z(l,`${r.value.name}Content`);return u?u(i({columnElement:a})):e.createVNode("div",{class:"schemx-item__control"},[a])},renderError:()=>{const t=Z(l,`${r.value.name}Error`);return t?t(i({errors:o.errors.value})):0===o.errors.value.length?null:e.createVNode("div",{class:"schemx-item__error"},[o.errors.value[0]])},renderLabel:()=>{const t=Z(l,`${r.value.name}Label`);if(t)return t(r.value);const o=r.value.labelAlign||a.schemaConfig.labelAlign,n=r.value.labelWidth||a.schemaConfig.labelWidth,s=r.value.colon??a.schemaConfig.colon;return e.createVNode("label",{class:"schemx-item__label",style:{width:n,textAlign:o}},[!(r.value.showRequiredMark??Boolean(r.value.required))||r.value.disabled||r.value.readonly?null:e.createVNode("span",{class:"schemx-item__required"},[e.createTextVNode("*")]),e.createVNode("span",{class:"schemx-item__label-text"},[r.value.label,s?":":""])])}}}({schemaRef:u,field:m,form:s,formContext:c,componentProps:y,slots:a});return()=>{if(!u.value.visible)return null;const t=Z(a,X(u.value.name));if(t)return t(b());const o=u.value.labelPosition||c.schemaConfig.labelPosition;return e.createVNode("div",e.mergeProps(n,{class:r("schemx-item-wrapper",n.class),style:[n.style,u.value.style]}),[e.createVNode("div",{class:r("schemx-item",`schemx-item--label-${o}`,u.value.class,{"is-readonly":u.value.readonly,"is-disabled":u.value.disabled}),style:{...u.value.style??{}}},[k(),e.createVNode("div",{class:"schemx-item__content"},[F(),C(),x(),B()])])])}}}),te=Y,re=["aria-busy","data-loading","disabled"],oe={key:0,class:"schemx-button__prefix"},ne={key:1,class:"schemx-button__loading",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},ae={key:4,class:"schemx-button__suffix"},se=e.defineComponent({name:"SchemxButton",inheritAttrs:!1,__name:"index",props:{loading:{type:Boolean,default:!1},loadingText:{default:void 0},disabled:{type:Boolean,default:!1},size:{default:"medium"}},setup(t){const r=t,o=e.useAttrs(),n=e.computed(()=>r.disabled||r.loading),a=e.computed(()=>["schemx-button",`schemx-button--${r.size}`]);return(t,s)=>(e.openBlock(),e.createElementBlock("button",e.mergeProps(e.unref(o),{class:a.value,"aria-busy":r.loading||void 0,"data-loading":r.loading||void 0,disabled:n.value}),[t.$slots.prefix?(e.openBlock(),e.createElementBlock("span",oe,[e.renderSlot(t.$slots,"prefix")])):e.createCommentVNode("",!0),r.loading?(e.openBlock(),e.createElementBlock("svg",ne,[...s[0]||(s[0]=[e.createStaticVNode('<path d="M12 2v4"></path><path d="m16.2 7.8 2.9-2.9"></path><path d="M18 12h4"></path><path d="m16.2 16.2 2.9 2.9"></path><path d="M12 18v4"></path><path d="m4.9 19.1 2.9-2.9"></path><path d="M2 12h4"></path><path d="m4.9 4.9 2.9 2.9"></path>',8)])])):e.createCommentVNode("",!0),r.loading&&r.loadingText?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(r.loadingText),1)],64)):e.renderSlot(t.$slots,"default",{},void 0,void 0,3),t.$slots.suffix?(e.openBlock(),e.createElementBlock("span",ae,[e.renderSlot(t.$slots,"suffix")])):e.createCommentVNode("",!0)],16,re))}});function le(e){return!!e&&!t.isViewGroupSchema(e)&&!1!==e.visible}function ie(e,r,o){for(let n=r+o;n>=0&&n<e.length;n+=o){const r=e[n];if(!1!==r.visible){if(t.isViewGroupSchema(r))return!1;if(le(r))return!0}}return!1}const ue={key:0,class:"schemx-actions"},de=e.defineComponent({name:"SchemxForm",__name:"form",props:{schemas:{default:()=>[]},initialValues:{default:()=>({})},modelValue:{default:()=>({})},form:{default:void 0},loading:{type:Boolean,default:void 0},submitter:{type:[Boolean,Object],default:void 0},resetter:{type:[Boolean,Object],default:void 0},class:{default:""},style:{type:[Boolean,null,String,Object,Array],default:()=>({})},rendererProps:{default:void 0},validatorAdapters:{},defaultRendererType:{},rendererRegistry:{default:void 0},validationRuleRegistry:{default:void 0},onRuleError:{},onFinish:{type:Function,default:void 0},onFinishFailed:{type:Function,default:void 0},onReset:{type:Function,default:void 0},onLoadingChange:{type:Function,default:void 0},onValuesChange:{type:Function,default:void 0},onFieldsChange:{type:Function,default:void 0},lifecycleHooks:{},required:{type:[Boolean,Object]},readonly:{type:Boolean},disabled:{type:Boolean},visible:{type:Boolean,default:!0},labelIcon:{},labelAlign:{},labelPosition:{},labelWidth:{},contentAlign:{},validationTrigger:{},colon:{type:Boolean},showRequiredMark:{type:Boolean}},emits:["update:modelValue"],setup(r,{expose:o,emit:a}){const s=r,l=a,i=e.useSlots(),u=()=>n.pick(s,t.defaultSchemxConfigKeys),d=e.reactive(u());P({schemaConfig:d});const c=s.form?s.form:F({schemas:s.schemas,schemaConfig:u(),initialValues:Object.keys(s.modelValue).length>0?s.modelValue:s.initialValues,rendererProps:s.rendererProps,rendererRegistry:s.rendererRegistry,defaultRendererType:s.defaultRendererType,validationRuleRegistry:s.validationRuleRegistry,validatorAdapters:s.validatorAdapters,onFinish:e=>{var t;return null==(t=s.onFinish)?void 0:t.call(s,e)},onFinishFailed:e=>{var t;return null==(t=s.onFinishFailed)?void 0:t.call(s,e)},onReset:()=>{var e;null==(e=s.onReset)||e.call(s)},onLoadingChange:e=>{var t;null==(t=s.onLoadingChange)||t.call(s,e)},onValuesChange:(e,t)=>{var r;null==(r=s.onValuesChange)||r.call(s,e,t)},onFieldsChange:(e,t)=>{var r;null==(r=s.onFieldsChange)||r.call(s,e,t)}}),m=void 0!==s.form,p=B(c),v=e.computed(()=>s.loading??p.isLoading()),f=e=>!0===e?{}:e||{},h=e.computed(()=>f(s.submitter)),g=e.computed(()=>f(s.resetter)),y=e=>Object.fromEntries(Object.entries(e.buttonProps??{}).filter(([e])=>"type"!==e&&"onClick"!==e)),b=e.computed(()=>y(h.value)),x=e.computed(()=>y(g.value)),C=e.computed(()=>!1!==s.submitter&&(void 0!==s.submitter||i.submitter)),S=e.computed(()=>!1!==s.resetter&&(void 0!==s.resetter||i.resetter)),w=e.computed(()=>C.value||S.value),k=e.computed(()=>Object.fromEntries(Object.entries(i).filter(([e])=>"submitter"!==e&&"resetter"!==e))),V=e.computed(()=>v.value||Boolean(b.value.disabled)),R=e.computed(()=>v.value||Boolean(x.value.disabled));let O=!1;e.watch(()=>s.modelValue,e=>{O=!0,p.setFieldsValue(e),O=!1},{deep:!0});const _=()=>p.submit(),j=()=>{p.reset()},A=z(p,e=>e);e.watch(A,e=>{O||l("update:modelValue",e)},{flush:"sync"}),e.watch(()=>s.schemas,e=>{t.isSchemxSchemas(e)||p.setSchemas(e)},{deep:!1,immediate:!!s.form});const E=L(p),N=e=>{const{isFirst:t,isLast:r}=function(e,t){const r=e.findIndex(e=>e.key===t);return-1===r?{found:!1,isFirst:!1,isLast:!1}:le(e[r])?{found:!0,isFirst:!ie(e,r,-1),isLast:!ie(e,r,1)}:{found:!0,isFirst:!1,isLast:!1}}(E.value,e.key);return{"schemx-item-wrapper--first":t,"schemx-item-wrapper--last":r}};e.watch(u,e=>{Object.assign(d,e),p.updateSchemaConfig(e)},{deep:!1,immediate:m});return o({...p,submit:_,reset:j}),(t,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["schemx",s.class]),style:e.normalizeStyle(s.style)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(E),r=>(e.openBlock(),e.createBlock(e.unref(te),{key:r.key,schema:r,class:e.normalizeClass(N(r))},e.createSlots({_:2},[e.renderList(k.value,(r,o)=>({name:o,fn:e.withCtx(r=>[e.renderSlot(t.$slots,o,e.mergeProps({ref_for:!0},r??{}))])}))]),1032,["schema","class"]))),128)),w.value?(e.openBlock(),e.createElementBlock("div",ue,[S.value&&e.unref(i).resetter?e.renderSlot(t.$slots,"resetter",{form:e.unref(p),loading:v.value,disabled:R.value,reset:j},void 0,void 0,0):S.value?(e.openBlock(),e.createBlock(e.unref(se),e.mergeProps({key:1},x.value,{class:"schemx-actions-button schemx-actions-button--reset",type:"button",disabled:R.value,onClick:j}),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(g.value.text??"重置"),1)]),_:1},16,["disabled"])):e.createCommentVNode("",!0),C.value&&e.unref(i).submitter?e.renderSlot(t.$slots,"submitter",{form:e.unref(p),loading:v.value,disabled:V.value,submit:_},void 0,void 0,2):C.value?(e.openBlock(),e.createBlock(e.unref(se),e.mergeProps({key:3},b.value,{class:"schemx-actions-button schemx-actions-button--submit",type:"button",loading:v.value,disabled:V.value,onClick:_}),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.value.text??"提交"),1)]),_:1},16,["loading","disabled"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],6))}});var ce,me;const pe=(ce=de,me={install(e,t={}){y(e,t),e.component("SchemxForm",de)},FormItem:te},Object.assign(ce,me));exports.FormGroup=J,exports.FormItem=te,exports.WithRemoteOptions=function(t){return e.defineComponent({name:`WithRemoteOptions(${t.name||"Anonymous"})`,inheritAttrs:!1,props:{dict:{type:[Object,Function],default:void 0}},setup(r,{attrs:o,slots:n}){const a=function(e){return"function"==typeof e?{api:e}:e}(r.dict),s=a?o.fieldName??R().name:void 0,l=a?A(a,s):null,i=e.computed(()=>({...o,dict:a,options:a?null==l?void 0:l.list.value:o.options,loading:a?null==l?void 0:l.loading.value:o.loading}));return()=>e.h(t,i.value,n)}})},exports.createFieldContext=V,exports.createFormConfigContext=P,exports.createFormContext=B,exports.default=pe,exports.getCoreForm=d,exports.rendererRegistry=b,exports.schemxForm=pe,exports.useDictionary=A,exports.useField=w,exports.useFieldContext=R,exports.useForm=F,exports.useFormConfigContext=N,exports.useFormContext=S,exports.useFormSelector=z,exports.useStableRef=T,exports.useViewSchemas=L,exports.useWatch=O,exports.useWatchAll=function(e,t){return O(e,t)},exports.useWatchField=function(e,t,r){return O(e,t,r)},exports.useWatchFields=_,exports.validationRuleRegistry=x,Object.keys(t).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),t=require("@schemx/core"),r=require("classnames"),o=require("@schemx/core/adapter"),n=require("es-toolkit");function a(t){return e.shallowRef(t)}function l(e){const t=a(e.getSnapshot());return e.subscribe(()=>{t.value=e.getSnapshot()}),t}function s(e,t){const r=e.stateAdapter.field(t),o=e.fieldStates.get(r);if(o)return o;const n=r.getSnapshot(),l=a(n.value),s=a(n.errors),i=a(n.touched),d=a(n.pending);r.subscribe(()=>{const e=r.getSnapshot();var t,o;Object.is(l.value,e.value)||(l.value=e.value),t=s.value,o=e.errors,t.length===o.length&&t.every((e,t)=>e===o[t])||(s.value=e.errors),i.value!==e.touched&&(i.value=e.touched),d.value!==e.pending&&(d.value=e.pending)});const c={value:l,errors:s,touched:i,pending:d};return e.fieldStates.set(r,c),c}function i(r){const o=e.shallowRef(r.getViewSchemas()),n=e.computed(()=>function(e){const r=new Map,o=e=>{for(const n of e)if(r.set(n.key,n),t.isViewGroupSchema(n))o(n.children);else if(t.isViewDynamicSchema(n))for(const e of n.items)o(e.children)};return o(e),r}(o.value)),a=r.subscribeViewSchemas(e=>{o.value=e});let l=!1;return{schemasByKey:n,viewSchemas:o,dispose:()=>{l||(l=!0,a())}}}const d=new WeakMap,c=new WeakMap;function u(e){const t=function(e){const t=c.get(e);if(t)return t;const r=d.get(e);if(r)return r;const n=function(e){let t,r=0,n=!1;const a=()=>{const t=o.createFormStateAdapter(e),r=l(t.values),n=l(t.touchedFields),a=l(t.pendingFields),s=l(t.loading),i=new Map;let d,c=!1;const u=()=>{c||(c=!0,i.clear(),t.dispose())};return{stateAdapter:t,values:r,touchedFields:n,pendingFields:a,loading:s,fieldStates:i,viewSchemaState:d,dispose:u}},d=()=>{if(n)throw new Error("[schemx] Vue Form Runtime has been destroyed.");return t??(t=a()),t},c=()=>{const e=t;e&&(t=void 0,e.dispose())},u=()=>{if(n)return()=>{};d(),r++;let e=!1;return()=>{e||n||(e=!0,r--,0===r&&c())}},p=(e,r)=>{if(!t)return;s(t,e)[r].value},m=e=>{if(t)if(void 0!==e)for(const r of e)s(t,r).value.value;else t.values.value},v=e=>{if(t)switch(e){case"values":t.values.value;break;case"touchedFields":t.touchedFields.value;break;case"pendingFields":t.pendingFields.value;break;case"loading":t.loading.value}},f=()=>d().values,h=e=>s(d(),e),y=()=>{const t=d();return t.viewSchemaState??(t.viewSchemaState=i(e))},g=()=>{n||(n=!0,r=0,c())},b=function(e,t){let r=!1;return{...e,getFieldValue:o=>(r||t.trackField(o,"value"),e.getFieldValue(o)),getFieldErrors:o=>(r||t.trackField(o,"errors"),e.getFieldErrors(o)),isFieldTouched:o=>(r||t.trackField(o,"touched"),e.isFieldTouched(o)),isFieldPending:o=>(r||t.trackField(o,"pending"),e.isFieldPending(o)),getFieldsValue:o=>(r||t.trackFieldsValue(o),e.getFieldsValue(o)),getTouchedFields:()=>(r||t.trackForm("touchedFields"),e.getTouchedFields()),getPendingFields:()=>(r||t.trackForm("pendingFields"),e.getPendingFields()),isLoading:()=>(r||t.trackForm("loading"),e.isLoading()),destroy:()=>{r||(r=!0,t.destroy(),e.destroy())}}}(e,{trackField:p,trackFieldsValue:m,trackForm:v,destroy:g}),x={core:e,instance:b,retain:u,trackField:p,trackFieldsValue:m,trackForm:v,getValuesRef:f,getFieldState:h,getViewSchemaState:y,destroy:g};return x}(e);return d.set(e,n),c.set(n.instance,n),n}(e),r=t.retain();return{runtime:t,release:r}}const p=Symbol("schemx:app-config"),m=Object.freeze({schemaConfig:Object.freeze({}),validatorAdapters:Object.freeze([])});function v(e){if(void 0===e)return;const t=Object.entries(e).map(([e,t])=>[e,void 0===t?void 0:Object.freeze({...t})]);return Object.freeze(Object.fromEntries(t))}function f(e,t={}){const r=function(e){const t=Object.freeze({...e.schemaConfig??{}}),r=Object.freeze([...e.validatorAdapters??[]]);return Object.freeze({schemaConfig:t,rendererProps:v(e.rendererProps),validatorAdapters:r,defaultRendererType:e.defaultRendererType,rendererRegistry:e.rendererRegistry,presetRuleRegistry:e.presetRuleRegistry,colComponent:e.colComponent})}(t);e.provide(p,r)}function h(){return null===e.getCurrentInstance()?m:e.inject(p,m)}const y=Symbol("schemx:config-provider");function g(){if(null!==e.getCurrentInstance())return e.inject(y,void 0)}const b=t.createPresetRuleRegistry(),x=o.createRendererRegistry("input");function C(e,r={}){const o=null==(n=g())?void 0:n.value;var n;return t.mergeSchemxConfig(e,o??{},h(),r,{rendererRegistry:x,presetRuleRegistry:b})}function S(r={}){const o=C(function(e){const{schemaConfig:t={},rendererProps:r,validatorAdapters:o=[],defaultRendererType:n,rendererRegistry:a,presetRuleRegistry:l}=e;return{schemaConfig:t,rendererProps:r,defaultRendererType:n,rendererRegistry:a,presetRuleRegistry:l,validatorAdapters:o}}(r)),n={...r,...o},a=u(t.createForm(n)),l=a.runtime.instance;return e.onScopeDispose(()=>{a.release(),l.destroy()}),l}const w=Symbol("schemx:instance"),F=Symbol("schemx:runtime");function k(t){const{runtime:r,release:o}=u(t);return e.provide(w,r.instance),e.provide(F,r),e.onScopeDispose(o),r.instance}function V(){const t=e.inject(w,null);if(!t)throw new Error("[schemx] useFormContext() must be called inside a <SchemxForm> descendant. Ensure createFormContext(form) is called synchronously during setup().");return t}function R(){const t=e.inject(F,null);if(t)return t;const r=u(V());return e.onScopeDispose(r.release),r.runtime}const O=r=>{const o=V(),n=R(),a=n.getFieldState(r);return function(r,o,n,a){const l=t.createField(o,n),s=e.computed(()=>a.errors.value),i=e.computed(()=>a.touched.value),d=e.computed(()=>a.pending.value);return{...l,name:n,value:a.value,errors:s,dirty:i,pending:d,getValue:()=>a.value.value,getErrors:()=>a.errors.value,isTouched:()=>a.touched.value,isPending:()=>a.pending.value,getValues:()=>r.getFieldsValue()}}(o,n.core,r,a)},j=Symbol("schemx:field");function A(t){e.provide(j,t)}function B(){const t=e.inject(j);if(!t)throw new Error("[schemx] useFieldContext() must be called inside a component tree where createFieldContext(field) has been called.");return t}function P(r,o,n){const a=R(),l=t.createWatch(a.core,r,o,n);return e.onUnmounted(l),l}function _(e,t,r){return P(e,t,r)}function E(e){return e instanceof Error?e:new Error(String(e))}const N=(t,r)=>{var o;const n=V(),a=e.shallowRef([]),l=e.ref(!1),s=e.ref(void 0);let i=0,d=null;const c=async()=>{const e=++i;null==d||d.abort();const r=new AbortController;d=r;try{const o=n.getFieldsSnapshot();if("function"==typeof t.shouldFetch&&!t.shouldFetch(o))return a.value=[],void(l.value=!1);l.value=!0,s.value=void 0;const d=await(async(e,r)=>{const o=t.retryCount??0,a=t.retryInterval??1e3;let l=new Error("Unknown error");for(let i=0;i<=o;i++)try{if(r.aborted)throw new Error("Dictionary request aborted");return await T(e,n,t.api,r)}catch(s){l=E(s),i<o&&await $(a,r)}throw l})(o,r.signal);if(e!==i||r.signal.aborted)return;const c=await(async e=>{if("function"==typeof(null==t?void 0:t.formatter))return await t.formatter(e,n);if(!Array.isArray(e))throw new Error("[schemx] Dictionary api must return an array when formatter is not provided.");return e})(d);if(e!==i||r.signal.aborted)return;a.value=c,s.value=void 0,"function"==typeof t.onSuccess&&t.onSuccess(c,n),l.value=!1}catch(o){if(r.signal.aborted||e!==i)return;const d=E(o);s.value=d,a.value=[],l.value=!1,"function"==typeof t.onError&&t.onError(d,n)}finally{d===r&&(d=null)}};(null==(o=t.dependsOn)?void 0:o.length)&&_(t.dependsOn,(e,o)=>{"function"==typeof t.onDepsChange&&t.onDepsChange(e,n),t.resetOnDepsChange&&r&&n.setFieldValue(r,void 0),c()},{inequality:!0});const u=t.immediate??!0;return e.onMounted(()=>{u&&c()}),e.onScopeDispose(()=>{i+=1,null==d||d.abort(),d=null}),{list:a,loading:l,error:s,loadDict:c,refresh:()=>c(),mutate:e=>{a.value=e}}};function $(e,t){return new Promise((r,o)=>{let n=()=>{};const a=()=>{clearTimeout(l),t.removeEventListener("abort",n)},l=setTimeout(()=>{a(),r()},e);n=()=>{a(),o(new Error("Dictionary request aborted"))},t.aborted?n():t.addEventListener("abort",n,{once:!0})})}function T(e,t,r,o){return r.length>=3?r(e,t,o):r(e,t)}const q=Symbol("schemx:form-config"),D=t=>{e.provide(q,t)};function L(){const t=e.inject(q);if(!t)throw new Error("[schemx] useFormConfigContext() must be called inside a <SchemxForm> descendant. Ensure createFormConfigContext(props) is called synchronously during setup().");return t}function W(t){const r=e.shallowRef({});return e.watchEffect(()=>{const e=t();((e,t)=>{const r=Object.keys(e),o=Object.keys(t);return r.length===o.length&&r.every(r=>e[r]===t[r])})(r.value,e)||(r.value=e)}),r}function z(t){const r=u(t),o=r.runtime.getViewSchemaState();return e.onScopeDispose(r.release),o.viewSchemas}function M(t,r,o={}){const n=u(t),a=n.runtime.getValuesRef(),l=e.shallowRef(r(a.value)),s=o.equals??Object.is,i=e.watch(a,e=>{const t=r(e);s(l.value,t)||(l.value=t)},{flush:o.flush??"sync"});return e.onScopeDispose(()=>{i(),n.release()}),e.readonly(l)}function G(e){return void 0!==e&&(!Array.isArray(e)||0!==e.length)}function I(e,t){if(!t)return!1;return(Array.isArray(t)?t:[t]).some(t=>function(e){return{onBlur:"blur",onChange:"change",onSubmit:"submit",blur:"blur",change:"change",submit:"submit"}[e]??"submit"}(t)===e)}const H=e=>/[A-Z]/.test(e),K=e=>e.includes("-"),U=e=>e.replace(/([A-Z])/g,"-$1").toLowerCase(),Z=e=>e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),J=(e,t)=>{if(e[t])return e[t];const r=H(t)?U(t):K(t)?Z(t):void 0;return r&&e[r]?e[r]:void 0},Q=(e,t)=>{const r={},o=(n=String(e),(K(n)?Z(n):n)+":");var n;const a=(e=>H(e)?U(e):e)(String(e))+":";for(const[l,s]of Object.entries(t))l.startsWith(o)?r[l.slice(o.length)]=s:l.startsWith(a)&&a!==o&&(r[l.slice(a.length)]=s);return r};function X(e,t){const r=e.findIndex(e=>e.key===t);if(-1===r)return{found:!1,isFirst:!1,isLast:!1};return ee(e[r])?{found:!0,isFirst:!te(e,r,-1),isLast:!te(e,r,1)}:{found:!0,isFirst:!1,isLast:!1}}function Y(e){return Array.isArray(e)?e.map(e=>String(e)).join("."):String(e)}function ee(e){return!!e&&!t.isViewGroupSchema(e)&&!1!==e.visible}function te(e,r,o){for(let n=r+o;n>=0&&n<e.length;n+=o){const r=e[n];if(!1!==r.visible){if(t.isViewGroupSchema(r))return!1;if(ee(r))return!0}}return!1}const re=e.defineComponent({name:"SchemxField",inheritAttrs:!1,props:{schema:{type:Object,required:!0},class:{type:[String,Object,Array,Boolean],required:!1,default:void 0},style:{type:[String,Object,Array],required:!1,default:void 0}},setup(o,{attrs:n,slots:a}){const l=V(),s=e.computed(()=>o.schema),i=function(t,r){const o=u(t),n=o.runtime.getViewSchemaState(),a=e.computed(()=>n.schemasByKey.value.get(r()));return e.onScopeDispose(o.release),a}(l,()=>s.value.key),d=e.computed(()=>i.value&&t.isSchemxViewFieldSchema(i.value)?i.value:s.value),c=L(),p=O(d.value.name);A(p);const m=e.computed(()=>{return e=d.value.validationTrigger,t=c.schemaConfig.validationTrigger,r="onChange",G(e)?e:G(t)?t:r;var e,t,r}),v=e.computed(()=>{const e=!1!==d.value.visible&&!d.value.readonly&&!d.value.disabled,t=d.value.rules,r=Array.isArray(t)?(null==t?void 0:t.length)>0:!!d.value.rules;return e&&(Boolean(d.value.required)||r)}),f=e=>{var t,r;p.setValue(e),null==(r=null==(t=d.value.componentProps)?void 0:t.onChange)||r.call(t,e),v.value&&I("change",m.value)&&p.validate()},h=e=>{var t,r;null==(r=null==(t=d.value.componentProps)?void 0:t.onBlur)||r.call(t,e),v.value&&I("blur",m.value)&&p.validate()},y=e=>{p.setValue(e)},g=W(()=>({...d.value.componentProps??{},value:p.value.value,onChange:f,onBlur:h,"onUpdate:value":y})),{createSlotProps:b,renderAfter:x,renderBefore:C,renderContent:S,renderError:w,renderLabel:F}=function(t){const{schemaRef:r,field:o,form:n,formContext:a,componentProps:l,slots:s}=t,i=(e={})=>({schema:r.value,componentProps:l.value,value:o.value.value,field:o,form:n,...e}),d=e=>{const t=J(s,`${Y(r.value.name)}${e}`);return(null==t?void 0:t(i()))??null};return{createSlotProps:i,renderAfter:()=>d("After"),renderBefore:()=>d("Before"),renderContent:()=>{const t=n.getRenderer(r.value.componentType);if(!t)throw new Error(`[schemx] Can not find component renderer of "${r.value.componentType}".`);const o=Q(Y(r.value.name),s),a=e.h(t,l.value,o),d=J(s,`${Y(r.value.name)}Content`);return d?d(i({columnElement:a})):e.createVNode("div",{class:"schemx-field__control"},[a])},renderError:()=>{const t=J(s,`${Y(r.value.name)}Error`);return t?t(i({errors:o.errors.value})):0===o.errors.value.length?null:e.createVNode("div",{class:"schemx-field__error"},[o.errors.value[0]])},renderLabel:()=>{const t=J(s,`${Y(r.value.name)}Label`);if(t)return t(i());const o=r.value.labelAlign||a.schemaConfig.labelAlign,n=r.value.labelWidth||a.schemaConfig.labelWidth,l=r.value.colon??a.schemaConfig.colon;return e.createVNode("label",{class:"schemx-field__label",style:{width:n,textAlign:o}},[!(r.value.showRequiredMark??Boolean(r.value.required))||r.value.disabled||r.value.readonly?null:e.createVNode("span",{class:"schemx-field__required"},[e.createTextVNode("*")]),e.createVNode("span",{class:"schemx-field__label-text"},[r.value.label,l?":":""])])}}}({schemaRef:d,field:p,form:l,formContext:c,componentProps:g,slots:a});return()=>{if(!1===d.value.visible)return null;const t=J(a,Y(d.value.name)),l=d.value.labelPosition||c.schemaConfig.labelPosition,s=t?t(b()):e.createVNode("div",{class:r("schemx-field",`schemx-field--label-${l}`,{"is-readonly":d.value.readonly,"is-disabled":d.value.disabled})},[F(),e.createVNode("div",{class:"schemx-field__content"},[C(),S(),x(),w()])]);return e.createVNode("div",e.mergeProps(n,{class:r("schemx-field-wrapper",o.class,n.class,d.value.class),style:[n.style,o.style,d.value.style]}),[s])}}}),oe=["aria-busy","data-loading","disabled"],ne={key:0,class:"schemx-button__prefix"},ae={key:1,class:"schemx-button__loading",xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},le={key:4,class:"schemx-button__suffix"},se=e.defineComponent({name:"SchemxButton",inheritAttrs:!1,__name:"index",props:{loading:{type:Boolean,default:!1},loadingText:{default:void 0},disabled:{type:Boolean,default:!1},size:{default:"medium"}},setup(t){const r=t,o=e.useAttrs(),n=e.computed(()=>r.disabled||r.loading),a=e.computed(()=>["schemx-button",`schemx-button--${r.size}`]);return(t,l)=>(e.openBlock(),e.createElementBlock("button",e.mergeProps(e.unref(o),{class:a.value,"aria-busy":r.loading||void 0,"data-loading":r.loading||void 0,disabled:n.value}),[t.$slots.prefix?(e.openBlock(),e.createElementBlock("span",ne,[e.renderSlot(t.$slots,"prefix")])):e.createCommentVNode("",!0),r.loading?(e.openBlock(),e.createElementBlock("svg",ae,[...l[0]||(l[0]=[e.createStaticVNode('<path d="M12 2v4"></path><path d="m16.2 7.8 2.9-2.9"></path><path d="M18 12h4"></path><path d="m16.2 16.2 2.9 2.9"></path><path d="M12 18v4"></path><path d="m4.9 19.1 2.9-2.9"></path><path d="M2 12h4"></path><path d="m4.9 4.9 2.9 2.9"></path>',8)])])):e.createCommentVNode("",!0),r.loading&&r.loadingText?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(r.loadingText),1)],64)):e.renderSlot(t.$slots,"default",{},void 0,void 0,3),t.$slots.suffix?(e.openBlock(),e.createElementBlock("span",le,[e.renderSlot(t.$slots,"suffix")])):e.createCommentVNode("",!0)],16,oe))}}),ie=e.shallowRef();const de=e.defineComponent({name:"SchemxCol",inheritAttrs:!1,props:{layout:{type:Object,required:!1,default:void 0},component:{type:[Object,Function],required:!1,default:void 0}},setup(t,{attrs:r,slots:o}){const n=e.computed(()=>{const r=t.component??ie.value;return r?e.markRaw(e.toRaw(r)):void 0});return()=>{var a;const l=n.value;if(!l)return(null==(a=o.default)?void 0:a.call(o))??null;const s=t.layout??{},i=s.block?24:s.span??24,d=s.block?0:s.offset??0,{class:c,style:u,...p}=r;return e.h(l,{...p,class:["schemx-col",c],style:u,span:i,offset:d},o)}}});const ce=e.defineComponent({name:"SchemxGroup",inheritAttrs:!1,props:{schema:{type:Object,required:!0},class:{type:[String,Object,Array,Boolean],required:!1,default:void 0},style:{type:[String,Object,Array],required:!1,default:void 0},renderChildren:{type:Function,required:!1,default:void 0}},setup(o,{attrs:n,slots:a}){var l;const s=e.ref(Boolean(o.schema.defaultCollapsed)),i=e.computed(()=>o.schema.collapsed??s.value),d=(null==(l=e.getCurrentInstance())?void 0:l.uid)??0;e.watch(()=>o.schema.collapsed,(e,t)=>{void 0!==e?s.value=e:void 0!==t&&(s.value=t)});const c=()=>{var e,t;if(!o.schema.collapsible||o.schema.disabled)return;const r=!i.value;void 0===o.schema.collapsed&&(s.value=r),null==(t=(e=o.schema).onCollapsedChange)||t.call(e,r)};return()=>{var l;const s=o.schema;if(!1===s.visible)return null;const u=Boolean(s.collapsible),p=i.value,m=s.destroyOnCollapse??!0,v=`schemx-group-${(null==(l=s.debug)?void 0:l.runtimeNodeId)??`local-${d}`}-${f=s.key,String(f).replace(/[^a-zA-Z0-9_-]/g,"-")}`;var f;const h=`${v}-header`,y=`${v}-body`,g=r=>t.isViewDynamicSchema(r)?!1===r.visible?null:r.items.map(e=>e.children.map(e=>g(e))):t.isViewGroupSchema(r)?e.createVNode(ce,{key:r.key,schema:r,class:o.class,style:o.style},a):e.createVNode(re,{key:`${r.key}:${Y(r.name)}`,schema:r},a),{hasHeader:b,renderBodyContent:x,renderHeaderContent:C}=function(t){const{schema:o,collapsed:n,collapsible:a,disabled:l,readonly:s,toggle:i,slots:d,renderChildren:c}=t,u=String(o.key),p=J(d,`${u}Header`),m=J(d,`${u}Label`),v=J(d,`${u}Content`),f={schema:o,collapsed:n,collapsible:a,disabled:l,readonly:s,toggle:i};return{hasHeader:Boolean(o.label||p||m),renderBodyContent:()=>v?v(f):c(),renderHeaderContent:()=>{if(p)return p(f);const t=m?m(f):e.createVNode("span",{class:"schemx-group__title"},[o.label]);return a?e.createVNode(e.Fragment,null,[t,e.createVNode("span",{class:r("schemx-group__arrow",{"schemx-group__arrow--down":!n})},null)]):t}}}({schema:s,collapsed:p,collapsible:u,disabled:Boolean(s.disabled),readonly:Boolean(s.readonly),toggle:c,slots:a,renderChildren:()=>o.renderChildren?o.renderChildren(s.children):s.children.map(g)}),S=e.createVNode("div",{id:y,role:"group","aria-labelledby":s.label?h:void 0,"aria-hidden":p||void 0,class:"schemx-group__body",style:!m&&p?{display:"none"}:void 0},[x()]);return e.createVNode("div",e.mergeProps(n,{class:r("schemx-group-wrapper",o.class,n.class,s.class),"data-key":s.key,"aria-disabled":s.disabled||void 0,style:[n.style,o.style,s.style]}),[e.createVNode("div",{class:r("schemx-group",{"schemx-group--collapsed":p,"is-readonly":s.readonly,"is-disabled":s.disabled})},[b&&e.createVNode("div",{id:h,role:u?"button":void 0,tabindex:u?s.disabled?-1:0:void 0,"aria-expanded":u?!p:void 0,"aria-controls":u?y:void 0,"aria-disabled":u&&s.disabled||void 0,class:r("schemx-group__header",{"schemx-group__header--clickable":u&&!s.disabled}),onClick:c,onKeydown:e=>{s.disabled||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),c())}},[C()]),m?!p&&S:S])])}}}),ue=ce,pe=e.defineComponent({name:"SchemxDynamic",inheritAttrs:!1,props:{schema:{type:Object,required:!0},viewSchemas:{type:Array,required:!0},renderChildren:{type:Function,required:!1,default:void 0}},setup(r,{slots:o}){const n=e=>`${e.key}:${Y(e.name)}`,a=e=>{const{isFirst:t,isLast:o}=X(r.viewSchemas,e.key);return{"schemx-field-wrapper--first":t,"schemx-field-wrapper--last":o}},l=r=>{if(t.isViewGroupSchema(r))return e.createVNode(ue,{key:r.key,schema:r},o);const l=r;return e.createVNode(re,{key:n(l),schema:l,class:a(l)},o)};return()=>!1===r.schema.visible?null:r.schema.items.map(t=>{const o=r.renderChildren?r.renderChildren(t.children):t.children.map(l);return e.createVNode(e.Fragment,{key:t.key},[o])})}});const me=e.defineComponent({name:"SchemxSchemaList",inheritAttrs:!1,props:{schemas:{type:Array,required:!0},viewSchemas:{type:Array,required:!0},colComponent:{type:[Object,Function],required:!1,default:void 0},fieldClassResolver:{type:Function,required:!1,default:void 0}},setup(r,{slots:o}){const n=e=>`${e.key}:${Y(e.name)}`,a=e=>t.isSchemxViewFieldSchema(e)?n(e):e.key,l=t=>e.h(me,{schemas:t,viewSchemas:r.viewSchemas,colComponent:r.colComponent},o),s=s=>{var i;if(!1===s.visible)return null;let d;return d=t.isViewGroupSchema(s)?e.createVNode(ue,{key:s.key,schema:s,renderChildren:l},o):t.isViewDynamicSchema(s)?e.createVNode(pe,{key:s.key,schema:s,viewSchemas:r.viewSchemas,renderChildren:l},o):e.createVNode(re,{key:n(s),schema:s,class:null==(i=r.fieldClassResolver)?void 0:i.call(r,s)},o),r.colComponent?e.createVNode(de,{key:a(s),component:r.colComponent,layout:s.layout},"function"==typeof(c=d)||"[object Object]"===Object.prototype.toString.call(c)&&!e.isVNode(c)?d:{default:()=>[d]}):d;var c};return()=>{const t=r.schemas.map(s);return r.colComponent?e.createVNode("div",{class:"schemx-row"},[t]):t}}}),ve=me,fe={key:0,class:"schemx-actions"},he=e.defineComponent({name:"SchemxForm",__name:"form",props:{schemas:{default:()=>[]},fieldRules:{default:void 0},initialValues:{default:()=>({})},modelValue:{default:()=>({})},form:{default:void 0},loading:{type:Boolean,default:void 0},submitter:{type:[Boolean,Object],default:!0},resetter:{type:[Boolean,Object],default:!0},class:{type:[Boolean,null,String,Object,Array],default:""},style:{type:[Boolean,null,String,Object,Array],default:()=>({})},colComponent:{default:void 0},rendererProps:{default:void 0},validatorAdapters:{},defaultRendererType:{},rendererRegistry:{default:void 0},presetRuleRegistry:{default:void 0},onRuleError:{},onFinish:{type:Function,default:void 0},onFinishFailed:{type:Function,default:void 0},onReset:{type:Function,default:void 0},onLoadingChange:{type:Function,default:void 0},onValuesChange:{type:Function,default:void 0},onFieldsChange:{type:Function,default:void 0},lifecycleHooks:{},schedulerOptions:{default:void 0},validationConcurrency:{default:void 0},required:{type:[Boolean,Object]},readonly:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},visible:{type:Boolean,default:void 0},labelIcon:{},labelAlign:{},labelPosition:{},labelWidth:{},contentAlign:{},validationTrigger:{default:void 0},colon:{type:Boolean,default:void 0},showRequiredMark:{type:Boolean,default:void 0}},emits:["update:modelValue"],setup(r,{expose:o,emit:a}){const l=r,s=a,i=e.useSlots(),d=void 0!==l.form,c=e.computed(()=>{const e=n.pick(l,t.defaultSchemxConfigKeys);return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}),u=h(),p=g(),m=t.getGlobalSchemxConfig(),v={schemaConfig:{visible:!0,validationTrigger:["blur","change"]}},f=e.computed(()=>(d?t.mergeSchemxConfig({schemaConfig:c.value},v):t.mergeSchemxConfig({schemaConfig:c.value},(null==p?void 0:p.value)??{},u,v)).schemaConfig??{}),y=e.computed(()=>t.mergeAndResolveSchemxConfig({schemaConfig:c.value},(null==p?void 0:p.value)??{},u,v,m).schemaConfig),b=f.value,x=d?b:y.value,C=e.reactive(b),w=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),F=e=>{for(const r of t.defaultSchemxConfigKeys)w(e,r)||delete C[r];Object.assign(C,e)},V=e.computed(()=>l.colComponent??(null==p?void 0:p.value.colComponent)??u.colComponent??ie.value);D({schemaConfig:C});const R=k(l.form?l.form:S({schemas:l.schemas,schemaConfig:x,initialValues:Object.keys(l.modelValue).length>0?l.modelValue:l.initialValues,rendererProps:l.rendererProps,rendererRegistry:l.rendererRegistry,defaultRendererType:l.defaultRendererType,presetRuleRegistry:l.presetRuleRegistry,fieldRules:l.fieldRules,validatorAdapters:l.validatorAdapters,schedulerOptions:l.schedulerOptions,validationConcurrency:l.validationConcurrency,onFinish:e=>{var t;return null==(t=l.onFinish)?void 0:t.call(l,e)},onFinishFailed:e=>{var t;return null==(t=l.onFinishFailed)?void 0:t.call(l,e)},onReset:()=>{var e;null==(e=l.onReset)||e.call(l)},onLoadingChange:e=>{var t;null==(t=l.onLoadingChange)||t.call(l,e)},onValuesChange:(e,t)=>{var r;null==(r=l.onValuesChange)||r.call(l,e,t)},onFieldsChange:(e,t)=>{var r;null==(r=l.onFieldsChange)||r.call(l,e,t)}})),O=e.computed(()=>l.loading??R.isLoading()),j=e.computed(()=>["schemx",l.class]),A=e.computed(()=>l.style),B=e=>!0===e?{}:e||{},P=e.computed(()=>B(l.submitter)),_=e.computed(()=>B(l.resetter)),E=e=>Object.fromEntries(Object.entries(e.buttonProps??{}).filter(([e])=>"type"!==e&&"onClick"!==e)),N=e.computed(()=>E(P.value)),$=e.computed(()=>E(_.value)),T=e.computed(()=>!1!==l.submitter&&(void 0!==l.submitter||i.submitter)),q=e.computed(()=>!1!==l.resetter&&(void 0!==l.resetter||i.resetter)),L=e.computed(()=>T.value||q.value),W=e.computed(()=>Object.fromEntries(Object.entries(i).filter(([e])=>"submitter"!==e&&"resetter"!==e))),G=e.computed(()=>O.value||Boolean(N.value.disabled)),I=e.computed(()=>O.value||Boolean($.value.disabled));let H=!1;const K=new Set;e.watch(()=>l.modelValue,t=>{if(!K.delete(e.toRaw(t))){H=!0;try{R.setFieldsValue(t)}finally{H=!1}}},{deep:!0,immediate:d});const U=()=>R.submit(),Z=()=>{R.reset()},J=M(R,e=>e);e.watch(J,t=>{H||(t=>{const r=e.toRaw(t);K.add(r),s("update:modelValue",t),e.nextTick(()=>{K.delete(r)})})(t)},{flush:"sync"}),e.watch(()=>l.schemas,e=>{t.isSchemxSchemas(e)||R.setSchemas(e)},{immediate:d});const Q=z(R),Y=e=>{const{isFirst:t,isLast:r}=X(Q.value,e.key);return{"schemx-field-wrapper--first":t,"schemx-field-wrapper--last":r}},ee=e=>{F(f.value),R.updateSchemaConfig(e)},te=(e,r)=>{const o={...e};if(void 0!==r)for(const n of t.defaultSchemxConfigKeys)w(r,n)&&!w(e,n)&&(o[n]=void 0);F(f.value),Object.keys(o).length>0&&R.updateSchemaConfig(o)};d?e.watch(c,te,{deep:!0,immediate:!0}):e.watch(y,ee,{deep:!0});return o({...R,submit:U,reset:Z}),(t,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(j.value),style:e.normalizeStyle(A.value)},[e.createVNode(e.unref(ve),{schemas:e.unref(Q),"view-schemas":e.unref(Q),"col-component":V.value,"field-class-resolver":Y},e.createSlots({_:2},[e.renderList(W.value,(r,o)=>({name:o,fn:e.withCtx(r=>[e.renderSlot(t.$slots,o,e.normalizeProps(e.guardReactiveProps(r??{})))])}))]),1032,["schemas","view-schemas","col-component"]),L.value?(e.openBlock(),e.createElementBlock("div",fe,[q.value&&e.unref(i).resetter?e.renderSlot(t.$slots,"resetter",{form:e.unref(R),loading:O.value,disabled:I.value,reset:Z},void 0,void 0,0):q.value?(e.openBlock(),e.createBlock(e.unref(se),e.mergeProps({key:1},$.value,{class:"schemx-actions-button schemx-actions-button--reset",type:"button",disabled:I.value,onClick:Z}),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value.text??"重置"),1)]),_:1},16,["disabled"])):e.createCommentVNode("",!0),T.value&&e.unref(i).submitter?e.renderSlot(t.$slots,"submitter",{form:e.unref(R),loading:O.value,disabled:G.value,submit:U},void 0,void 0,2):T.value?(e.openBlock(),e.createBlock(e.unref(se),e.mergeProps({key:3},N.value,{class:"schemx-actions-button schemx-actions-button--submit",type:"button",loading:O.value,disabled:G.value,onClick:U}),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(P.value.text??"提交"),1)]),_:1},16,["loading","disabled"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],6))}});var ye,ge;const be=(ye=he,ge={install(e,t={}){f(e,t),e.component("SchemxForm",he)},Field:re},Object.assign(ye,ge));const xe=e.defineComponent({name:"SchemxWrapper",inheritAttrs:!1,__name:"index",props:{readonly:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},setup(t){const r=t,o=e.useAttrs(),n=e.useSlots(),a=e.ref(!1),l=e.computed(()=>["schemx-wrapper",o.class,r.readonly&&"schemx-wrapper--readonly",r.disabled&&"schemx-wrapper--disabled"]),s=e.computed(()=>{const{class:e,...t}=o;return t}),i=e=>{!e||n.readonly||a.value};return e.onMounted(()=>i(r.readonly)),e.watch(()=>r.readonly,i),(t,o)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps(s.value,{class:l.value}),[r.readonly?e.renderSlot(t.$slots,"readonly",{readonly:r.readonly,disabled:r.disabled},void 0,void 0,0):e.renderSlot(t.$slots,"default",{readonly:r.readonly,disabled:r.disabled},void 0,void 0,1)],16))}}),Ce=e.defineComponent({name:"SchemxConfigProvider",inheritAttrs:!1,props:{schemaConfig:{type:Object,default:void 0},rendererProps:{type:Object,default:void 0},validatorAdapters:{type:Array,default:void 0},defaultRendererType:{type:String,default:void 0},rendererRegistry:{type:Object,default:void 0},presetRuleRegistry:{type:Object,default:void 0},colComponent:{type:[Object,Function],default:void 0}},setup:(r,{slots:o})=>(function(r){const o=e.inject(y,void 0),n=e.computed(()=>({...t.mergeSchemxConfig(r.value,(null==o?void 0:o.value)??{}),colComponent:r.value.colComponent??(null==o?void 0:o.value.colComponent)}));e.provide(y,n)}(e.computed(()=>({schemaConfig:r.schemaConfig,rendererProps:r.rendererProps,validatorAdapters:r.validatorAdapters,defaultRendererType:r.defaultRendererType,rendererRegistry:r.rendererRegistry,presetRuleRegistry:r.presetRuleRegistry,colComponent:r.colComponent}))),()=>{var e;return null==(e=o.default)?void 0:e.call(o)})});exports.Col=de,exports.ConfigProvider=Ce,exports.Field=re,exports.Group=ue,exports.WithRemoteOptions=function(t){return e.defineComponent({name:`WithRemoteOptions(${t.name||"Anonymous"})`,inheritAttrs:!1,props:{dict:{type:[Object,Function],default:void 0}},setup(r,{attrs:o,slots:n}){const a=function(e){return"function"==typeof e?{api:e}:e}(r.dict),l=a?o.fieldName??B().name:void 0,s=a?N(a,l):null,i=e.computed(()=>({...o,dict:a,options:a?null==s?void 0:s.list.value:o.options,loading:a?null==s?void 0:s.loading.value:o.loading}));return()=>e.h(t,i.value,n)}})},exports.Wrapper=xe,exports.createFieldContext=A,exports.createFormConfigContext=D,exports.createFormContext=k,exports.default=be,exports.presetRuleRegistry=b,exports.registerCol=function(e){ie.value=e},exports.rendererRegistry=x,exports.schemxForm=be,exports.useDictionary=N,exports.useField=O,exports.useFieldContext=B,exports.useForm=S,exports.useFormConfigContext=L,exports.useFormContext=V,exports.useFormSelector=M,exports.useStableRef=W,exports.useViewSchemas=z,exports.useWatch=P,exports.useWatchAll=function(e,t){return P(e,t)},exports.useWatchField=function(e,t,r){return P(e,t,r)},exports.useWatchFields=_,Object.keys(t).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
2
2
  //# sourceMappingURL=index.cjs.map