@schemx/vue 1.0.0-next.1 → 1.0.0-next.2
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 +37 -7
- package/dist/analyze.html +1 -1
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Button/types.d.ts +21 -0
- package/dist/components/Button/types.d.ts.map +1 -0
- package/dist/components/FormItem/index.d.ts +1 -1
- package/dist/components/FormItem/index.d.ts.map +1 -1
- package/dist/config/appConfig.d.ts.map +1 -1
- package/dist/formBridge.d.ts +188 -0
- package/dist/formBridge.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/provideFormContext.d.ts +4 -3
- package/dist/hooks/provideFormContext.d.ts.map +1 -1
- package/dist/hooks/useField.d.ts +4 -30
- package/dist/hooks/useField.d.ts.map +1 -1
- package/dist/hooks/useForm.d.ts +3 -2
- package/dist/hooks/useForm.d.ts.map +1 -1
- package/dist/hooks/useFormSelector.d.ts +38 -0
- package/dist/hooks/useFormSelector.d.ts.map +1 -0
- package/dist/hooks/useViewSchemas.d.ts +23 -3
- package/dist/hooks/useViewSchemas.d.ts.map +1 -1
- package/dist/hooks/useWatch.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +604 -107
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/field.d.ts +1 -1
- package/dist/types/form.d.ts +33 -1
- package/dist/types/form.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/hooks/useForm.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VueSchemxInstance } from '../formBridge';
|
|
2
|
+
import { CreateFormOptions, NamePath, Values } from '@schemx/core';
|
|
2
3
|
/**
|
|
3
4
|
* useForm 配置选项。
|
|
4
5
|
*
|
|
@@ -52,5 +53,5 @@ export interface UseFormOptions<TValues extends Values> extends CreateFormOption
|
|
|
52
53
|
* createFormContext(form)
|
|
53
54
|
* ```
|
|
54
55
|
*/
|
|
55
|
-
export declare function useForm<TValues extends Values = Values>(options?: UseFormOptions<TValues>):
|
|
56
|
+
export declare function useForm<TValues extends Values = Values>(options?: UseFormOptions<TValues>): VueSchemxInstance<TValues>;
|
|
56
57
|
//# sourceMappingURL=useForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAcA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAItB,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,CA8B5B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ShallowRef } from 'vue';
|
|
2
|
+
import { SchemxInstance, Values } from '@schemx/core';
|
|
3
|
+
/**
|
|
4
|
+
* `useFormSelector` 的选中结果比较配置。
|
|
5
|
+
*/
|
|
6
|
+
export interface UseFormSelectorOptions<TSelected> {
|
|
7
|
+
/**
|
|
8
|
+
* 判断两次 selector 结果是否等价;返回 true 时保持当前 Ref 值。
|
|
9
|
+
* 默认使用 `Object.is`。
|
|
10
|
+
*/
|
|
11
|
+
equals?: (previous: TSelected, next: TSelected) => boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 将 Core 表单值按 selector 映射为 Vue 只读浅引用。
|
|
15
|
+
*
|
|
16
|
+
* selector 只应读取快照,不应通过快照修改表单值或调用表单写入方法。
|
|
17
|
+
* `Readonly<TValues>` 仅表达顶层只读,嵌套字段应按不可变值使用;字段值需通过
|
|
18
|
+
* `setFieldValue()` 或 `setFieldsValue()` 更新,才能触发后续计算。
|
|
19
|
+
*
|
|
20
|
+
* @typeParam TValues - 表单值类型。
|
|
21
|
+
* @typeParam TSelected - selector 返回值类型。
|
|
22
|
+
* @param form - 要订阅的表单实例。
|
|
23
|
+
* @param selector - 从当前表单值快照派生结果的纯函数。
|
|
24
|
+
* @param options - 选中结果的比较配置。
|
|
25
|
+
* @returns selector 当前结果的 Vue 只读浅引用。
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const selectedName = useFormSelector(form, (values) => values.name)
|
|
30
|
+
*
|
|
31
|
+
* watchEffect(() => {
|
|
32
|
+
* console.log(selectedName.value)
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function useFormSelector<TValues extends Values = Values, TSelected = unknown>(form: SchemxInstance<TValues>, selector: (values: Readonly<TValues>) => TSelected, options?: UseFormSelectorOptions<TSelected>): Readonly<ShallowRef<TSelected>>;
|
|
37
|
+
export default useFormSelector;
|
|
38
|
+
//# sourceMappingURL=useFormSelector.d.ts.map
|
|
@@ -0,0 +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,CA6BjC;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { ShallowRef } from 'vue';
|
|
1
|
+
import { ComputedRef, ShallowRef } from 'vue';
|
|
2
2
|
import { SchemxInstance, SchemxViewSchema, Values } from '@schemx/core';
|
|
3
3
|
/**
|
|
4
|
-
* 将表单 ViewSchema
|
|
4
|
+
* 将表单 ViewSchema 映射为共享的 Vue 响应式引用。
|
|
5
|
+
*
|
|
6
|
+
* 当前作用域释放一个桥接使用者;所有使用者都释放后才取消 Core 订阅。
|
|
5
7
|
*
|
|
6
8
|
* @typeParam TValues - 表单值类型。
|
|
7
9
|
* @param form - 要订阅的表单实例。
|
|
8
|
-
* @returns 当前 ViewSchema
|
|
10
|
+
* @returns 当前 ViewSchema 列表的共享响应式浅引用;调用方不应直接改写其值。
|
|
9
11
|
*
|
|
10
12
|
* @example
|
|
11
13
|
* ```ts
|
|
@@ -16,5 +18,23 @@ import { SchemxInstance, SchemxViewSchema, Values } from '@schemx/core';
|
|
|
16
18
|
* ```
|
|
17
19
|
*/
|
|
18
20
|
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
|
+
*/
|
|
38
|
+
export declare function useViewSchema<TValues extends Values = Values>(form: SchemxInstance<TValues>, getKey: () => string): ComputedRef<SchemxViewSchema<TValues> | undefined>;
|
|
19
39
|
export default useViewSchemas;
|
|
20
40
|
//# 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,UAAU,EAAE,MAAM,KAAK,CAAA;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../../src/hooks/useWatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;
|
|
1
|
+
{"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../../src/hooks/useWatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AASH,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"),n=require("es-toolkit"),o=require("@schemx/core/adapter"),a=Symbol("schemx:app-config"),l=Object.freeze({schemaConfig:Object.freeze({}),validatorAdapters:Object.freeze([])});function s(e,t={}){const r=function(e){const t=Object.freeze({...e.schemaConfig??{}}),r=Object.freeze([...e.validatorAdapters??[]]);return Object.freeze({schemaConfig:t,validatorAdapters:r,defaultRendererType:e.defaultRendererType,rendererRegistry:e.rendererRegistry,validationRuleRegistry:e.validationRuleRegistry})}(t);e.provide(a,r)}const i=o.createRendererRegistry("input"),c=t.createValidationRuleRegistry();function u(r={}){const n=t.mergeSchemxConfig(function(e){const{schemaConfig:t={},validatorAdapters:r=[],defaultRendererType:n,rendererRegistry:o,validationRuleRegistry:a}=e;return{schemaConfig:t,defaultRendererType:n,rendererRegistry:o,validationRuleRegistry:a,validatorAdapters:r}}(r),null===e.getCurrentInstance()?l:e.inject(a,l),{rendererRegistry:i,validationRuleRegistry:c}),o={...r,...n},s=t.createForm(o);return e.onScopeDispose(()=>{s.destroy()}),s}const d=Symbol("schemx:instance");function m(t){e.provide(d,t)}function p(){const t=e.inject(d,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 h=new WeakMap;const f=r=>{const n=p(),o=r;let a=h.get(n);a||(a=new Map,h.set(n,a));const l=a.get(o);let s;if(l)l.refCount++,s=l;else{const{result:l,dispose:i}=function(r,n){const o=t.createField(r,n),a=e.shallowRef(o.getValue()),l=e.shallowRef(o.getErrors()),s=e.shallowRef(o.isPending()),i=o.effect(()=>{a.value=o.getValue(),l.value=o.getErrors(),s.value=o.isPending()}),c=e.computed(()=>l.value),u=e.computed(()=>(a.value,o.isTouched())),d=e.computed(()=>s.value);return{result:{name:n,value:a,errors:c,dirty:u,pending:d,...o,getValue:()=>a.value},dispose:i}}(n,r);s={refCount:1,result:l,dispose:i},a.set(o,s)}return e.onUnmounted(()=>{--s.refCount<=0&&(s.dispose(),a.delete(o))}),s.result},v=Symbol("schemx:field");function y(t){e.provide(v,t)}function g(){const t=e.inject(v);if(!t)throw new Error("[schemx] useFieldContext() must be called inside a component tree where createFieldContext(field) has been called.");return t}function b(r,n,o){const a=p(),l=t.createWatch(a,r,n,o);return e.onUnmounted(l),l}function x(e,t,r){return b(e,t,r)}function C(e){return e instanceof Error?e:new Error(String(e))}const w=(t,r)=>{var n;const o=p(),a=e.shallowRef([]),l=e.ref(!1),s=e.ref(void 0);let i=0;const c=async()=>{try{const e=o.getFieldsValue();if("function"==typeof t.shouldFetch&&!t.shouldFetch(e))return a.value=[],void(l.value=!1);l.value=!0,s.value=void 0;const r=++i,n=await(async e=>{const r=t.retryCount??0,n=t.retryInterval??1e3;let a=new Error("Unknown error");for(let s=0;s<=r;s++)try{return await t.api(e,o)}catch(l){a=C(l),s<r&&await new Promise(e=>setTimeout(e,n))}throw a})(e);if(r!==i)return;const c=await(async e=>{if("function"==typeof(null==t?void 0:t.formatter))return await t.formatter(e,o);if(!Array.isArray(e))throw new Error("[schemx] Dictionary api must return an array when formatter is not provided.");return e})(n);if(r!==i)return;a.value=c,s.value=void 0,"function"==typeof t.onSuccess&&t.onSuccess(c,o),l.value=!1}catch(e){const r=C(e);s.value=r,a.value=[],l.value=!1,"function"==typeof t.onError&&t.onError(r,o)}};(null==(n=t.dependsOn)?void 0:n.length)&&x(t.dependsOn,(e,n)=>{"function"==typeof t.onDepsChange&&t.onDepsChange(e,o),t.resetOnDepsChange&&r&&o.setFieldValue(r,void 0),c()});const u=t.immediate??!0;return e.onMounted(()=>{u&&c()}),{list:a,loading:l,error:s,loadDict:c,refresh:()=>c(),mutate:e=>{a.value=e}}},F=Symbol("schemx:form-config"),R=t=>{e.provide(F,t)};function S(){const t=e.inject(F);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 V(t){const r=e.shallowRef({});return e.watchEffect(()=>{const e=t();((e,t)=>{const r=Object.keys(e),n=Object.keys(t);return r.length===n.length&&r.every(r=>e[r]===t[r])})(r.value,e)||(r.value=e)}),r}function A(t){const r=e.shallowRef(t.getViewSchemas()),n=t.subscribeViewSchemas(e=>{r.value=e});return e.onScopeDispose(n),r}function k(e){return void 0!==e&&(!Array.isArray(e)||0!==e.length)}function _(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 O=e=>/[A-Z]/.test(e),j=e=>e.includes("-"),E=e=>e.replace(/([A-Z])/g,"-$1").toLowerCase(),P=e=>e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),B=(e,t)=>{if(e[t])return e[t];const r=O(t)?E(t):j(t)?P(t):void 0;return r&&e[r]?e[r]:void 0},T=(e,t)=>{const r={},n=(o=String(e),(j(o)?P(o):o)+":");var o;const a=(e=>O(e)?E(e):e)(String(e))+":";for(const[l,s]of Object.entries(t))l.startsWith(n)?r[l.slice(n.length)]=s:l.startsWith(a)&&a!==n&&(r[l.slice(a.length)]=s);return r},N=e.defineComponent((t,{slots:n})=>{var o;const a=e.ref(Boolean(t.schema.defaultCollapsed)),l=e.computed(()=>t.schema.collapsed??a.value),s=(null==(o=e.getCurrentInstance())?void 0:o.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 n=!l.value;void 0===t.schema.collapsed&&(a.value=n),null==(r=(e=t.schema).onCollapsedChange)||r.call(e,n)};return()=>{var o;const a=t.schema;if(!1===a.visible)return null;const c=Boolean(a.collapsible),u=l.value,d=a.destroyOnCollapse??!0,m=`schemx-group-${(null==(o=a.debug)?void 0:o.runtimeNodeId)??`local-${s}`}-${$(a.key)}`,p=`${m}-header`,h=`${m}-body`,f=e.createVNode("div",{id:h,role:"group","aria-labelledby":a.label?p:void 0,"aria-hidden":u||void 0,class:"schemx-group__body",style:!d&&u?{display:"none"}:void 0},[a.children.map(t=>e.createVNode(z,{key:t.key,schema:t},n))]);return e.createVNode("div",{class:r("schemx-group",{"schemx-group--collapsed":u,"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:c?"button":void 0,tabindex:c?a.disabled?-1:0:void 0,"aria-expanded":c?!u:void 0,"aria-controls":c?h:void 0,"aria-disabled":c&&a.disabled||void 0,class:r("schemx-group__header",{"schemx-group__header--clickable":c&&!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]),c&&e.createVNode("span",{class:r("schemx-group__arrow",{"schemx-group__arrow--down":!u})},null)]),d?!u&&f:f])}},{name:"SchemxGroup",props:{schema:{type:Object,required:!0}}}),$=e=>String(e).replace(/[^a-zA-Z0-9_-]/g,"-");function q(e){return Array.isArray(e)?e.map(e=>String(e)).join("."):String(e)}const W=e.defineComponent({name:"SchemxItem",props:{schema:{type:Object,required:!0}},setup:(r,{slots:n})=>()=>{const o=r.schema;return t.isViewGroupSchema(o)?e.h(N,{schema:o},n):e.h(I,{schema:o},n)}}),I=e.defineComponent({name:"SchemxFieldItem",inheritAttrs:!1,props:{schema:{type:Object,required:!0}},setup(n,{attrs:o,slots:a}){const l=p(),s=n.schema,i=e.shallowRef(0),c=l.effect(()=>{l.getViewSchemas(),i.value++});e.onUnmounted(c);const u=e.computed(()=>{i.value;const e=l.getViewSchemas().find(e=>e.key===s.key);return e&&t.isSchemxViewFieldSchema(e)?e:s}),d=S(),m=f(u.value.name);y(m);const h=e.computed(()=>{return e=u.value.validationTrigger,t=d.schemaConfig.validationTrigger,r="onChange",k(e)?e:k(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)}),g=e=>{var t,r;m.setValue(e),null==(r=null==(t=u.value.componentProps)?void 0:t.onChange)||r.call(t,e),v.value&&_("change",h.value)&&m.validate()},b=e=>{var t,r;null==(r=null==(t=u.value.componentProps)?void 0:t.onBlur)||r.call(t,e),v.value&&_("blur",h.value)&&m.validate()},x=e=>{m.setValue(e)},C=V(()=>{const e=u.value,t=e.componentProps??{},r={name:e.name,label:e.label,componentType:e.componentType,...t.formItemProps};return{...t,value:m.value.value,disabled:e.disabled,readonly:e.readonly,readonlyPlaceholder:e.readonlyPlaceholder,placeholder:e.placeholder,formItemProps:{...r,disabled:e.disabled,readonly:e.readonly,readonlyPlaceholder:e.readonlyPlaceholder,placeholder:e.placeholder},onChange:g,onBlur:b,"onUpdate:value":x}}),{createSlotProps:w,renderAfter:F,renderBefore:R,renderContent:A,renderError:O,renderLabel:j}=function(t){const{schemaRef:r,field:n,form:o,formContext:a,componentProps:l,slots:s}=t,i=(e={})=>({...l.value,value:n.value.value,...e}),c=e=>{const t=B(s,`${r.value.name}${e}`);return(null==t?void 0:t(i()))??null};return{createSlotProps:i,renderAfter:()=>c("After"),renderBefore:()=>c("Before"),renderContent:()=>{const t=o.getRenderer(r.value.componentType);if(!t)throw new Error(`[schemx] Can not find component renderer of "${r.value.componentType}".`);const n=T(q(r.value.name),s),a=e.h(t,l.value,n),c=B(s,`${r.value.name}Content`);return c?c(i({columnElement:a})):e.createVNode("div",{class:"schemx-item__control"},[a])},renderError:()=>{const t=B(s,`${r.value.name}Error`);return t?t(i({errors:n.errors.value})):0===n.errors.value.length?null:e.createVNode("div",{class:"schemx-item__error"},[n.errors.value[0]])},renderLabel:()=>{const t=B(s,`${r.value.name}Label`);if(t)return t(r.value);const n=r.value.labelAlign||a.schemaConfig.labelAlign,o=r.value.labelWidth||a.schemaConfig.labelWidth,l=r.value.colon??a.schemaConfig.colon;return e.createVNode("label",{class:"schemx-item__label",style:{width:o,textAlign:n}},[!(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,l?":":""])])}}}({schemaRef:u,field:m,form:l,formContext:d,componentProps:C,slots:a});return()=>{if(!u.value.visible)return null;const t=B(a,q(u.value.name));if(t)return t(w());const n=u.value.labelPosition||d.schemaConfig.labelPosition;return e.createVNode("div",e.mergeProps(o,{class:r("schemx-item-wrapper",o.class),style:[o.style,u.value.style]}),[e.createVNode("div",{class:r("schemx-item",`schemx-item--label-${n}`,u.value.class,{"is-readonly":u.value.readonly,"is-disabled":u.value.disabled}),style:{...u.value.style??{}}},[j(),e.createVNode("div",{class:"schemx-item__content"},[R(),A(),F(),O()])])])}}}),z=W;function L(e){return!!e&&!t.isViewGroupSchema(e)&&!1!==e.visible}function D(e,r,n){for(let o=r+n;o>=0&&o<e.length;o+=n){const r=e[o];if(!1!==r.visible){if(t.isViewGroupSchema(r))return!1;if(L(r))return!0}}return!1}const M=e.defineComponent({name:"SchemxForm",__name:"form",props:{schemas:{default:()=>[]},initialValues:{default:()=>({})},modelValue:{default:()=>({})},form:{default:void 0},class:{default:""},style:{type:[Boolean,null,String,Object,Array],default:()=>({})},validatorAdapters:{},defaultRendererType:{},rendererRegistry:{default:void 0},validationRuleRegistry:{default:void 0},onRuleError:{},onFinish:{type:Function,default:void 0},onFinishFailed:{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 l=r,s=a,i=()=>n.pick(l,t.defaultSchemxConfigKeys),c=e.reactive(i());R({schemaConfig:c});const d=l.form?l.form:u({schemas:l.schemas,schemaConfig:i(),initialValues:Object.keys(l.modelValue).length>0?l.modelValue:l.initialValues,rendererRegistry:l.rendererRegistry,defaultRendererType:l.defaultRendererType,validationRuleRegistry:l.validationRuleRegistry,validatorAdapters:l.validatorAdapters,onFinish:async e=>{var t;null==(t=l.onFinish)||t.call(l,e)},onFinishFailed:async e=>{var t;null==(t=l.onFinishFailed)||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)}}),p=void 0!==l.form;m(d);let h=!1;e.watch(()=>l.modelValue,e=>{h=!0,d.setFieldsValue(e),h=!1},{deep:!0});const f=t.createWatch(d,e=>{h||s("update:modelValue",e)});e.onUnmounted(f),e.watch(()=>l.schemas,e=>{t.isSchemxSchemas(e)||d.setSchemas(e)},{deep:!1,immediate:!!l.form});const v=A(d),y=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}:L(e[r])?{found:!0,isFirst:!D(e,r,-1),isLast:!D(e,r,1)}:{found:!0,isFirst:!1,isLast:!1}}(v.value,e.key);return{"schemx-item-wrapper--first":t,"schemx-item-wrapper--last":r}};return e.watch(i,e=>{Object.assign(c,e),d.updateSchemaConfig(e)},{deep:!1,immediate:p}),o({...d}),(t,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["schemx",l.class]),style:e.normalizeStyle(l.style)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(v),r=>(e.openBlock(),e.createBlock(e.unref(z),{key:r.key,schema:r,class:e.normalizeClass(y(r))},e.createSlots({_:2},[e.renderList(t.$slots,(r,n)=>({name:n,fn:e.withCtx(r=>[e.renderSlot(t.$slots,n,e.mergeProps({ref_for:!0},r??{}))])}))]),1032,["schema","class"]))),128))],6))}});var U,G;const Z=(U=M,G={install(e,t={}){s(e,t),e.component("SchemxForm",M)},FormItem:z},Object.assign(U,G));exports.FormGroup=N,exports.FormItem=z,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:n,slots:o}){const a=function(e){return"function"==typeof e?{api:e}:e}(r.dict),l=a?n.fieldName??g().name:void 0,s=a?w(a,l):null,i=e.computed(()=>({...n,dict:a,options:a?null==s?void 0:s.list.value:n.options,loading:a?null==s?void 0:s.loading.value:n.loading}));return()=>e.h(t,i.value,o)}})},exports.createFieldContext=y,exports.createFormConfigContext=R,exports.createFormContext=m,exports.default=Z,exports.rendererRegistry=i,exports.schemxForm=Z,exports.useDictionary=w,exports.useField=f,exports.useFieldContext=g,exports.useForm=u,exports.useFormConfigContext=S,exports.useFormContext=p,exports.useStableRef=V,exports.useViewSchemas=A,exports.useWatch=b,exports.useWatchAll=function(e,t){return b(e,t)},exports.useWatchField=function(e,t,r){return b(e,t,r)},exports.useWatchFields=x,exports.validationRuleRegistry=c,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"),a=Symbol("schemx:app-config"),l=Object.freeze({schemaConfig:Object.freeze({}),validatorAdapters:Object.freeze([])});function s(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 i(e,t={}){const r=function(e){const t=Object.freeze({...e.schemaConfig??{}}),r=Object.freeze([...e.validatorAdapters??[]]);return Object.freeze({schemaConfig:t,rendererProps:s(e.rendererProps),validatorAdapters:r,defaultRendererType:e.defaultRendererType,rendererRegistry:e.rendererRegistry,validationRuleRegistry:e.validationRuleRegistry})}(t);e.provide(a,r)}const u=new WeakMap,d=new WeakMap,c=new WeakMap;function m(t){return e.shallowRef(t)}function p(e){return c.get(e)??e}function v(e){const t=p(e),r=u.get(t);if(r)return r;const n=function(e){const t=o.createFormExternalStore(e),r=m(t.values.getSnapshot()),n=m(t.touchedFields.getSnapshot()),a=m(t.pendingFields.getSnapshot()),l=m(t.loading.getSnapshot()),s=new Map,i=()=>{r.value=t.values.getSnapshot()},u=()=>{n.value=t.touchedFields.getSnapshot()},d=()=>{a.value=t.pendingFields.getSnapshot()},c=()=>{l.value=t.loading.getSnapshot()},p=t.values.subscribe(i),v=t.touchedFields.subscribe(u),h=t.pendingFields.subscribe(d),g=t.loading.subscribe(c),y=()=>{p(),v(),h(),g()},b=f(e),x={form:e,externalStore:t,values:r,touchedFields:n,pendingFields:a,loading:l,fieldBridges:s,refCount:0,destroyed:!1,unsubscribe:y,facade:b};return x}(t);return u.set(t,n),n}function f(e){const t=p(e),r=d.get(t);if(r)return r;const o=function(e){let t=!1;const r=r=>{if(!t){g(v(e),r).value.value}return e.getFieldValue(r)},o=r=>{if(!t){g(v(e),r).errors.value}return e.getFieldErrors(r)},n=r=>{if(!t){g(v(e),r).touched.value}return e.isFieldTouched(r)},a=r=>{if(!t){g(v(e),r).pending.value}return e.isFieldPending(r)},l=r=>{if(!t){const t=v(e);if(void 0===r)t.values.value;else for(const e of r)g(t,e).value.value}return e.getFieldsValue(r)},s=()=>{if(!t){v(e).touchedFields.value}return e.getTouchedFields()},i=()=>{if(!t){v(e).pendingFields.value}return e.getPendingFields()},d=()=>{if(!t){v(e).loading.value}return e.isLoading()},c=()=>{if(t)return;t=!0;const r=u.get(e);r&&y(r),e.destroy()};return{...e,getFieldValue:r,getFieldErrors:o,isFieldTouched:n,isFieldPending:a,getFieldsValue:l,getTouchedFields:s,getPendingFields:i,isLoading:d,destroy:c}}(t);return d.set(t,o),c.set(o,t),o}function h(e){if(e.destroyed)return()=>{};e.refCount++;let t=!1;return()=>{t||e.destroyed||(t=!0,e.refCount--,0===e.refCount&&y(e))}}function g(e,t){const r=e.externalStore.field(t),o=e.fieldBridges.get(r);if(o)return o;const n=r.getSnapshot(),a=m(n.value),l=m(n.errors),s=m(n.touched),i=m(n.pending),u=r.subscribe(()=>{const e=r.getSnapshot();var t,o;Object.is(a.value,e.value)||(a.value=e.value),t=l.value,o=e.errors,t.length===o.length&&t.every((e,t)=>e===o[t])||(l.value=e.errors),s.value!==e.touched&&(s.value=e.touched),i.value!==e.pending&&(i.value=e.pending)}),d={store:r,value:a,errors:l,touched:s,pending:i,dispose:()=>{u()}};return e.fieldBridges.set(r,d),d}function y(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.externalStore.dispose(),u.delete(e.form)}}const b=o.createRendererRegistry("input"),x=t.createValidationRuleRegistry();function C(r={}){const o=t.mergeSchemxConfig(function(e){const{schemaConfig:t={},rendererProps:r,validatorAdapters:o=[],defaultRendererType:n,rendererRegistry:a,validationRuleRegistry:l}=e;return{schemaConfig:t,rendererProps:r,defaultRendererType:n,rendererRegistry:a,validationRuleRegistry:l,validatorAdapters:o}}(r),null===e.getCurrentInstance()?l:e.inject(a,l),{rendererRegistry:b,validationRuleRegistry:x}),n={...r,...o},s=t.createForm(n),i=f(s),u=h(v(s));return e.onScopeDispose(()=>{u(),i.destroy()}),i}const F=Symbol("schemx:instance");function S(t){const r=f(t),o=h(v(r));return e.provide(F,r),e.onScopeDispose(o),r}function w(){const t=e.inject(F,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 k=r=>{const o=w();return function(r,o,n){const a=p(r),l=t.createField(a,o),s=e.computed(()=>n.errors.value),i=e.computed(()=>n.touched.value),u=e.computed(()=>n.pending.value);return{...l,name:o,value:n.value,errors:s,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,g(v(p(o)),r))},V=Symbol("schemx:field");function B(t){e.provide(V,t)}function R(){const t=e.inject(V);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=w(),l=t.createWatch(p(a),r,o,n);return e.onUnmounted(l),l}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=w(),a=e.shallowRef([]),l=e.ref(!1),s=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(l.value=!1);l.value=!0,s.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 s=0;s<=r;s++)try{return await t.api(e,n)}catch(l){a=j(l),s<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,s.value=void 0,"function"==typeof t.onSuccess&&t.onSuccess(u,n),l.value=!1}catch(e){const r=j(e);s.value=r,a.value=[],l.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:l,error:s,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(p(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=v(p(t)),a=h(n),l=e.shallowRef(r(n.values.value)),s=o.equals??Object.is,i=e.watch(n.values,e=>{const t=r(e);s(l.value,t)||(l.value=t)},{flush:"sync"});return e.onScopeDispose(()=>{i(),a()}),e.readonly(l)}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[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},J=e.defineComponent((t,{slots:o})=>{var n;const a=e.ref(Boolean(t.schema.defaultCollapsed)),l=e.computed(()=>t.schema.collapsed??a.value),s=(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=!l.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=l.value,c=a.destroyOnCollapse??!0,m=`schemx-group-${(null==(n=a.debug)?void 0:n.runtimeNodeId)??`local-${s}`}-${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 l=w(),s=e.computed(()=>o.schema),i=function(t,r){const o=q(p(t));return e.computed(()=>o.schemasByKey.value.get(r()))}(l,()=>s.value.key),u=e.computed(()=>i.value&&t.isSchemxViewFieldSchema(i.value)?i.value:s.value),d=N(),c=k(u.value.name);B(c);const m=e.computed(()=>{return e=u.value.validationTrigger,t=d.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;c.setValue(e),null==(r=null==(t=u.value.componentProps)?void 0:t.onChange)||r.call(t,e),v.value&&D("change",m.value)&&c.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",m.value)&&c.validate()},g=e=>{c.setValue(e)},y=T(()=>({...u.value.componentProps??{},value:c.value.value,onChange:f,onBlur:h,"onUpdate:value":g})),{createSlotProps:b,renderAfter:x,renderBefore:C,renderContent:F,renderError:S,renderLabel:V}=function(t){const{schemaRef:r,field:o,form:n,formContext:a,componentProps:l,slots:s}=t,i=(e={})=>({...l.value,value:o.value.value,...e}),u=e=>{const t=Z(s,`${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),s),a=e.h(t,l.value,o),u=Z(s,`${r.value.name}Content`);return u?u(i({columnElement:a})):e.createVNode("div",{class:"schemx-item__control"},[a])},renderError:()=>{const t=Z(s,`${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(s,`${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,l=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,l?":":""])])}}}({schemaRef:u,field:c,form:l,formContext:d,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||d.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??{}}},[V(),e.createVNode("div",{class:"schemx-item__content"},[C(),F(),x(),S()])])])}}}),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"},le=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",oe,[e.renderSlot(t.$slots,"prefix")])):e.createCommentVNode("",!0),r.loading?(e.openBlock(),e.createElementBlock("svg",ne,[...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",ae,[e.renderSlot(t.$slots,"suffix")])):e.createCommentVNode("",!0)],16,re))}});function se(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(se(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:!0},resetter:{type:[Boolean,Object],default:!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 l=r,s=a,i=e.useSlots(),u=()=>n.pick(l,t.defaultSchemxConfigKeys),d=e.reactive(u());P({schemaConfig:d});const c=l.form?l.form:C({schemas:l.schemas,schemaConfig:u(),initialValues:Object.keys(l.modelValue).length>0?l.modelValue:l.initialValues,rendererProps:l.rendererProps,rendererRegistry:l.rendererRegistry,defaultRendererType:l.defaultRendererType,validationRuleRegistry:l.validationRuleRegistry,validatorAdapters:l.validatorAdapters,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)}}),m=void 0!==l.form,p=S(c),v=e.computed(()=>l.loading??p.isLoading()),f=e=>!0===e?{}:e||{},h=e.computed(()=>f(l.submitter)),g=e.computed(()=>f(l.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)),F=e.computed(()=>!1!==l.submitter&&(void 0!==l.submitter||i.submitter)),w=e.computed(()=>!1!==l.resetter&&(void 0!==l.resetter||i.resetter)),k=e.computed(()=>F.value||w.value),V=e.computed(()=>Object.fromEntries(Object.entries(i).filter(([e])=>"submitter"!==e&&"resetter"!==e))),B=e.computed(()=>v.value||Boolean(b.value.disabled)),R=e.computed(()=>v.value||Boolean(x.value.disabled));let O=!1;e.watch(()=>l.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||s("update:modelValue",e)},{flush:"sync"}),e.watch(()=>l.schemas,e=>{t.isSchemxSchemas(e)||p.setSchemas(e)},{deep:!1,immediate:!!l.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}:se(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}};return e.watch(u,e=>{Object.assign(d,e),p.updateSchemaConfig(e)},{deep:!1,immediate:m}),o({...p,submit:_,reset:j}),(t,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["schemx",l.class]),style:e.normalizeStyle(l.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(V.value,(r,o)=>({name:o,fn:e.withCtx(r=>[e.renderSlot(t.$slots,o,e.mergeProps({ref_for:!0},r??{}))])}))]),1032,["schema","class"]))),128)),k.value?(e.openBlock(),e.createElementBlock("div",ue,[w.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):w.value?(e.openBlock(),e.createBlock(e.unref(le),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),F.value&&e.unref(i).submitter?e.renderSlot(t.$slots,"submitter",{form:e.unref(p),loading:v.value,disabled:B.value,submit:_},void 0,void 0,2):F.value?(e.openBlock(),e.createBlock(e.unref(le),e.mergeProps({key:3},b.value,{class:"schemx-actions-button schemx-actions-button--submit",type:"button",loading:v.value,disabled:B.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={}){i(e,t),e.component("SchemxForm",de)},FormItem:te},Object.assign(ce,me));exports.Button=le,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),l=a?o.fieldName??R().name:void 0,s=a?A(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.createFieldContext=B,exports.createFormConfigContext=P,exports.createFormContext=S,exports.default=pe,exports.getCoreForm=p,exports.rendererRegistry=b,exports.schemxForm=pe,exports.useDictionary=A,exports.useField=k,exports.useFieldContext=R,exports.useForm=C,exports.useFormConfigContext=N,exports.useFormContext=w,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]})});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|