@piying/view-vue 1.4.0 → 1.5.0

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/index.js CHANGED
@@ -1,106 +1,129 @@
1
- var G = Object.defineProperty;
2
- var K = (o, e, t) => e in o ? G(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
- var F = (o, e, t) => K(o, typeof e != "symbol" ? e + "" : e, t);
4
- import { inject as R, shallowRef as B, watchEffect as O, defineComponent as I, computed as g, createBlock as _, renderSlot as L, openBlock as d, resolveDynamicComponent as w, mergeProps as k, unref as m, toHandlers as V, withCtx as j, createVNode as M, normalizeProps as U, guardReactiveProps as q, defineAsyncComponent as J, provide as N, ref as D, watch as z, onUnmounted as Q, createElementBlock as S, createCommentVNode as T, Fragment as P, renderList as X } from "vue";
5
- import { CoreSchemaHandle as Y, FormBuilder as Z, isLazyMark as ee, getLazyImport as te, isFieldControl as ne, createViewControlLink as oe, convert as re, initListen as le } from "@piying/view-core";
6
- import { effect as ae, createRootInjector as se, ChangeDetectionSchedulerImpl as ce, ChangeDetectionScheduler as ue, createInjector as ie, DestroyRef as de, untracked as pe } from "static-injector";
7
- class fe extends Y {
8
- constructor() {
9
- super(...arguments);
10
- F(this, "contents");
11
- }
1
+ import { inject, shallowRef, watchEffect, defineComponent, computed, createBlock, renderSlot, openBlock, resolveDynamicComponent, mergeProps, unref, toHandlers, withCtx, createVNode, normalizeProps, guardReactiveProps, defineAsyncComponent, provide, ref, watch, onUnmounted, createElementBlock, createCommentVNode, Fragment, renderList } from "vue";
2
+ import { CoreSchemaHandle, FormBuilder, isLazyMark, getLazyImport, isFieldControl, createViewControlLink, convert, initListen } from "@piying/view-core";
3
+ import { effect, createRootInjector, ChangeDetectionSchedulerImpl, ChangeDetectionScheduler, createInjector, DestroyRef, untracked } from "static-injector";
4
+ class VueSchemaHandle extends CoreSchemaHandle {
12
5
  }
13
- class me extends Z {
6
+ class VueFormBuilder extends FormBuilder {
14
7
  }
15
- const $ = Symbol(), H = Symbol();
16
- function v(o) {
17
- const e = R($), t = B(void 0);
18
- return O((l) => {
19
- t.value = o();
20
- const a = ae(
8
+ const InjectorToken = Symbol();
9
+ const PI_VIEW_FIELD_TOKEN = Symbol();
10
+ function signalToRef(value) {
11
+ const injector = inject(InjectorToken);
12
+ const dataRef = shallowRef(void 0);
13
+ watchEffect((onWatcherCleanup) => {
14
+ dataRef.value = value();
15
+ const ref2 = effect(
21
16
  () => {
22
- const n = o();
23
- Object.is(t.value, n) || (t.value = n);
17
+ const currentValue = value();
18
+ if (!Object.is(dataRef.value, currentValue)) {
19
+ dataRef.value = currentValue;
20
+ }
24
21
  },
25
- { injector: e }
22
+ { injector }
26
23
  );
27
- l(() => {
28
- a.destroy();
24
+ onWatcherCleanup(() => {
25
+ ref2.destroy();
29
26
  });
30
- }), t;
27
+ });
28
+ return dataRef;
31
29
  }
32
- const A = /* @__PURE__ */ I({
30
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
33
31
  __name: "wrapper",
34
32
  props: {
35
33
  wrappers: {}
36
34
  },
37
- setup(o) {
38
- const e = o, t = g(() => e.wrappers.slice(1)), l = g(() => e.wrappers[0]), a = v(() => {
39
- var r, c;
40
- return { ...(r = l.value) == null ? void 0 : r.inputs(), ...(c = l.value) == null ? void 0 : c.attributes() };
41
- }), n = g(() => {
42
- var r;
43
- return ((r = l.value) == null ? void 0 : r.outputs) ?? {};
35
+ setup(__props) {
36
+ const dInputs = __props;
37
+ const restWrappers = computed(() => dInputs.wrappers.slice(1));
38
+ const wrapper = computed(() => dInputs.wrappers[0]);
39
+ const inputs = signalToRef(() => {
40
+ var _a, _b;
41
+ return { ...(_a = wrapper.value) == null ? void 0 : _a.inputs(), ...(_b = wrapper.value) == null ? void 0 : _b.attributes() };
44
42
  });
45
- return (r, c) => l.value ? (d(), _(w(l.value.type), k({ key: 0 }, m(a), V(n.value)), {
46
- default: j(() => [
47
- M(A, U(q({ wrappers: t.value })), {
48
- default: j(() => [
49
- L(r.$slots, "default")
50
- ]),
51
- _: 3
52
- }, 16)
53
- ]),
54
- _: 3
55
- }, 16)) : L(r.$slots, "default", { key: 1 });
43
+ const outputs = computed(() => {
44
+ var _a;
45
+ return ((_a = wrapper.value) == null ? void 0 : _a.outputs) ?? {};
46
+ });
47
+ return (_ctx, _cache) => {
48
+ return wrapper.value ? (openBlock(), createBlock(resolveDynamicComponent(wrapper.value.type), mergeProps({ key: 0 }, unref(inputs), toHandlers(outputs.value)), {
49
+ default: withCtx(() => [
50
+ createVNode(_sfc_main$3, normalizeProps(guardReactiveProps({ wrappers: restWrappers.value })), {
51
+ default: withCtx(() => [
52
+ renderSlot(_ctx.$slots, "default")
53
+ ]),
54
+ _: 3
55
+ }, 16)
56
+ ]),
57
+ _: 3
58
+ }, 16)) : renderSlot(_ctx.$slots, "default", { key: 1 });
59
+ };
56
60
  }
57
- }), W = /* @__PURE__ */ I({
61
+ });
62
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
58
63
  __name: "field-template",
59
64
  props: {
60
65
  field: {}
61
66
  },
62
- setup(o) {
63
- const e = o, t = R($), l = v(() => e.field.inputs()), a = v(() => e.field.outputs()), n = v(() => e.field.renderConfig()), r = v(() => e.field.attributes()), c = g(() => ({ ...r.value, ...l.value })), x = v(() => {
64
- var s, f;
65
- return (f = (s = e.field).children) == null ? void 0 : f.call(s);
66
- }), b = v(() => e.field.wrappers()), p = g(
67
+ setup(__props) {
68
+ const props = __props;
69
+ const injector = inject(InjectorToken);
70
+ const inputs = signalToRef(() => props.field.inputs());
71
+ const outputs = signalToRef(() => props.field.outputs());
72
+ const renderConfig = signalToRef(() => props.field.renderConfig());
73
+ const attributes = signalToRef(() => props.field.attributes());
74
+ const fieldInput = computed(() => ({ ...attributes.value, ...inputs.value }));
75
+ const fieldChildren = signalToRef(() => {
76
+ var _a, _b;
77
+ return (_b = (_a = props.field).children) == null ? void 0 : _b.call(_a);
78
+ });
79
+ const wrappers = signalToRef(() => props.field.wrappers());
80
+ const componentType = computed(
67
81
  () => {
68
- var s, f, C, E;
69
- return typeof ((s = e.field.define) == null ? void 0 : s.type) == "function" || ee((f = e.field.define) == null ? void 0 : f.type) ? J(te((C = e.field.define) == null ? void 0 : C.type)) : (E = e.field.define) == null ? void 0 : E.type;
82
+ var _a, _b, _c, _d;
83
+ return typeof ((_a = props.field.define) == null ? void 0 : _a.type) === "function" || isLazyMark((_b = props.field.define) == null ? void 0 : _b.type) ? defineAsyncComponent(getLazyImport((_c = props.field.define) == null ? void 0 : _c.type)) : (_d = props.field.define) == null ? void 0 : _d.type;
70
84
  }
71
- ), u = g(() => e.field);
72
- N(H, u);
73
- const y = D(null), h = ne(u.value.form.control);
74
- let i;
75
- return z(
76
- [y, u],
77
- ([s, f]) => {
78
- i == null || i(), h && s && (i = oe(() => f.form.control, s.cva, t));
85
+ );
86
+ const field = computed(() => props.field);
87
+ provide(PI_VIEW_FIELD_TOKEN, field);
88
+ const childRef = ref(null);
89
+ const isControl = isFieldControl(field.value.form.control);
90
+ let dispose;
91
+ watch(
92
+ [childRef, field],
93
+ ([childRef2, field2]) => {
94
+ dispose == null ? void 0 : dispose();
95
+ if (isControl && childRef2) {
96
+ dispose = createViewControlLink(() => field2.form.control, childRef2["cva"], injector);
97
+ }
79
98
  },
80
- { immediate: !0 }
81
- ), Q(() => {
82
- i == null || i(), i = void 0;
83
- }), (s, f) => {
84
- var C;
85
- return m(n).hidden ? T("", !0) : (d(), S(P, { key: 0 }, [
86
- (C = u.value.define) != null && C.type ? (d(), _(A, {
99
+ { immediate: true }
100
+ );
101
+ onUnmounted(() => {
102
+ dispose == null ? void 0 : dispose();
103
+ dispose = void 0;
104
+ });
105
+ return (_ctx, _cache) => {
106
+ var _a;
107
+ return !unref(renderConfig).hidden ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
108
+ ((_a = field.value.define) == null ? void 0 : _a.type) ? (openBlock(), createBlock(_sfc_main$3, {
87
109
  key: 0,
88
- wrappers: m(b)
110
+ wrappers: unref(wrappers)
89
111
  }, {
90
- default: j(() => [
91
- m(x) ? (d(), _(w(p.value), k({ key: 0 }, c.value, V(m(a))), null, 16)) : (d(), S(P, { key: 1 }, [
92
- u.value.form.control ? (d(), _(w(p.value), k({ key: 0 }, c.value, V(m(a)), {
112
+ default: withCtx(() => [
113
+ unref(fieldChildren) ? (openBlock(), createBlock(resolveDynamicComponent(componentType.value), mergeProps({ key: 0 }, fieldInput.value, toHandlers(unref(outputs))), null, 16)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
114
+ field.value.form.control ? (openBlock(), createBlock(resolveDynamicComponent(componentType.value), mergeProps({ key: 0 }, fieldInput.value, toHandlers(unref(outputs)), {
93
115
  ref_key: "childRef",
94
- ref: y
95
- }), null, 16)) : (d(), _(w(p.value), k({ key: 1 }, c.value, V(m(a))), null, 16))
116
+ ref: childRef
117
+ }), null, 16)) : (openBlock(), createBlock(resolveDynamicComponent(componentType.value), mergeProps({ key: 1 }, fieldInput.value, toHandlers(unref(outputs))), null, 16))
96
118
  ], 64))
97
119
  ]),
98
120
  _: 1
99
- }, 8, ["wrappers"])) : T("", !0)
100
- ], 64));
121
+ }, 8, ["wrappers"])) : createCommentVNode("", true)
122
+ ], 64)) : createCommentVNode("", true);
101
123
  };
102
124
  }
103
- }), ge = /* @__PURE__ */ I({
125
+ });
126
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
104
127
  __name: "piying-view",
105
128
  props: {
106
129
  schema: {},
@@ -108,108 +131,128 @@ const A = /* @__PURE__ */ I({
108
131
  options: {}
109
132
  },
110
133
  emits: ["update:modelValue"],
111
- setup(o, { emit: e }) {
112
- const t = o, l = e, a = se({
134
+ setup(__props, { emit: __emit }) {
135
+ const inputs = __props;
136
+ const emit = __emit;
137
+ const rootInjector = createRootInjector({
113
138
  providers: [
114
139
  {
115
- provide: ue,
116
- useClass: ce
140
+ provide: ChangeDetectionScheduler,
141
+ useClass: ChangeDetectionSchedulerImpl
117
142
  }
118
143
  ]
119
144
  });
120
- N($, a);
121
- const n = B(void 0);
122
- return z(
123
- () => [t.schema, t.options],
124
- ([r, c], x, b) => {
125
- const p = ie({ providers: [], parent: a }), u = re(r, {
126
- handle: fe,
127
- builder: me,
128
- injector: p,
129
- registerOnDestroy: (h) => {
130
- p.get(de).onDestroy(() => {
131
- h();
145
+ provide(InjectorToken, rootInjector);
146
+ const field = shallowRef(void 0);
147
+ watch(
148
+ () => [inputs.schema, inputs.options],
149
+ ([schema, options], _1, onWatcherCleanup) => {
150
+ const subInjector = createInjector({ providers: [], parent: rootInjector });
151
+ const result = convert(schema, {
152
+ handle: VueSchemaHandle,
153
+ builder: VueFormBuilder,
154
+ injector: subInjector,
155
+ registerOnDestroy: (fn) => {
156
+ subInjector.get(DestroyRef).onDestroy(() => {
157
+ fn();
132
158
  });
133
159
  },
134
- ...c
160
+ ...options
135
161
  });
136
- n.value = u;
137
- let y;
138
- if (u.form.control) {
139
- const h = t.modelValue;
140
- y = le(
141
- typeof h < "u" ? h : void 0,
142
- u.form.control,
143
- p,
144
- (i) => {
145
- pe(() => {
146
- var s;
147
- (s = u.form.control) != null && s.valueNoError$$() && l("update:modelValue", i);
162
+ field.value = result;
163
+ let ref2;
164
+ if (result.form.control) {
165
+ const value = inputs.modelValue;
166
+ ref2 = initListen(
167
+ typeof value !== "undefined" ? value : void 0,
168
+ result.form.control,
169
+ subInjector,
170
+ (value2) => {
171
+ untracked(() => {
172
+ var _a;
173
+ if ((_a = result.form.control) == null ? void 0 : _a.valueNoError$$()) {
174
+ emit("update:modelValue", value2);
175
+ }
148
176
  });
149
177
  }
150
178
  );
151
179
  }
152
- b(() => {
153
- p.destroy(), y == null || y.destroy();
180
+ onWatcherCleanup(() => {
181
+ subInjector.destroy();
182
+ ref2 == null ? void 0 : ref2.destroy();
154
183
  });
155
184
  },
156
- { immediate: !0 }
157
- ), O(() => {
158
- var r;
159
- (r = n.value.form.control) == null || r.updateValue(t.modelValue);
160
- }), (r, c) => (d(), _(W, {
161
- field: n.value
162
- }, null, 8, ["field"]));
185
+ { immediate: true }
186
+ );
187
+ watchEffect(() => {
188
+ var _a;
189
+ (_a = field.value.form.control) == null ? void 0 : _a.updateValue(inputs.modelValue);
190
+ });
191
+ return (_ctx, _cache) => {
192
+ return openBlock(), createBlock(_sfc_main$2, {
193
+ field: field.value
194
+ }, null, 8, ["field"]);
195
+ };
163
196
  }
164
197
  });
165
- function Ce() {
166
- const o = D(), e = D(!1);
167
- let t, l;
168
- return {
169
- cva: {
170
- writeValue(n) {
171
- o.value = n;
172
- },
173
- registerOnChange(n) {
174
- t = n;
175
- },
176
- registerOnTouched(n) {
177
- l = n;
178
- },
179
- setDisabledState(n) {
180
- e.value = n;
181
- }
198
+ function useControlValueAccessor() {
199
+ const value = ref();
200
+ const disabled = ref(false);
201
+ let onChange;
202
+ let touched;
203
+ const instance = {
204
+ writeValue(obj) {
205
+ value.value = obj;
182
206
  },
207
+ registerOnChange(fn) {
208
+ onChange = fn;
209
+ },
210
+ registerOnTouched(fn) {
211
+ touched = fn;
212
+ },
213
+ setDisabledState(value2) {
214
+ disabled.value = value2;
215
+ }
216
+ };
217
+ return {
218
+ cva: instance,
183
219
  cvaa: {
184
- value: o,
185
- disabled: e,
186
- valueChange: (n) => {
187
- t(n), o.value = n;
220
+ value,
221
+ disabled,
222
+ valueChange: (input) => {
223
+ onChange(input);
224
+ value.value = input;
188
225
  },
189
226
  touchedChange: () => {
190
- l();
227
+ touched();
191
228
  }
192
229
  }
193
230
  };
194
231
  }
195
- const we = /* @__PURE__ */ I({
232
+ const _sfc_main = /* @__PURE__ */ defineComponent({
196
233
  __name: "group",
197
- setup(o) {
198
- const e = R(H), t = v(() => e == null ? void 0 : e.value.children());
199
- return (l, a) => (d(!0), S(P, null, X(m(t), (n, r) => (d(), _(W, {
200
- key: r,
201
- field: n
202
- }, null, 8, ["field"]))), 128));
234
+ setup(__props) {
235
+ const field = inject(PI_VIEW_FIELD_TOKEN);
236
+ const children = signalToRef(() => field == null ? void 0 : field.value.children());
237
+ return (_ctx, _cache) => {
238
+ return openBlock(true), createElementBlock(Fragment, null, renderList(unref(children), (field2, index) => {
239
+ return openBlock(), createBlock(_sfc_main$2, {
240
+ key: index,
241
+ field: field2
242
+ }, null, 8, ["field"]);
243
+ }), 128);
244
+ };
203
245
  }
204
246
  });
205
247
  export {
206
- $ as InjectorToken,
207
- H as PI_VIEW_FIELD_TOKEN,
208
- W as PiyingFieldTemplate,
209
- ge as PiyingView,
210
- we as PiyingViewGroup,
211
- me as VueFormBuilder,
212
- fe as VueSchemaHandle,
213
- v as signalToRef,
214
- Ce as useControlValueAccessor
248
+ InjectorToken,
249
+ PI_VIEW_FIELD_TOKEN,
250
+ _sfc_main$2 as PiyingFieldTemplate,
251
+ _sfc_main$1 as PiyingView,
252
+ _sfc_main as PiyingViewGroup,
253
+ VueFormBuilder,
254
+ VueSchemaHandle,
255
+ signalToRef,
256
+ useControlValueAccessor
215
257
  };
258
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../packages/vue/src/vue-schema.ts","../../packages/vue/src/builder.ts","../../packages/vue/src/token.ts","../../packages/vue/src/util/signal-convert.ts","../../packages/vue/src/component/wrapper.vue","../../packages/vue/src/component/field-template.vue","../../packages/vue/src/component/piying-view.vue","../../packages/vue/src/util/use-control-value-accessor.ts","../../packages/vue/src/component/group.vue"],"sourcesContent":["import { CoreSchemaHandle } from '@piying/view-core';\nimport type { PiResolvedViewFieldConfig } from './type/group';\n\nexport class VueSchemaHandle extends CoreSchemaHandle<\n VueSchemaHandle,\n () => PiResolvedViewFieldConfig\n> {\n declare type?: any;\n}\n","import { FormBuilder } from '@piying/view-core';\nimport type { VueSchemaHandle } from './vue-schema';\n\nexport class VueFormBuilder extends FormBuilder<VueSchemaHandle> {}\n","import type { Injector } from 'static-injector';\nimport type { ComputedRef, InjectionKey } from 'vue';\nimport type { PiResolvedViewFieldConfig } from './type/group';\n\nexport const InjectorToken: InjectionKey<Injector> = Symbol();\nexport const PI_VIEW_FIELD_TOKEN: InjectionKey<ComputedRef<PiResolvedViewFieldConfig>> = Symbol();\n","import { effect } from 'static-injector';\nimport { shallowRef, watchEffect, inject as vInject } from 'vue';\nimport { InjectorToken } from '../token';\n\n// signal=>ref\nexport function signalToRef<T>(value: () => T | undefined) {\n const injector = vInject(InjectorToken)!;\n\n const dataRef = shallowRef<T>(undefined as any);\n watchEffect((onWatcherCleanup) => {\n dataRef.value = value();\n const ref = effect(\n () => {\n const currentValue = value();\n if (!Object.is(dataRef.value, currentValue)) {\n dataRef.value = currentValue;\n }\n },\n { injector: injector },\n );\n onWatcherCleanup(() => {\n ref.destroy();\n });\n });\n return dataRef;\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport SelfComponent from './wrapper.vue';\nimport type { CoreResolvedWrapperConfig } from '@piying/view-core';\nimport { signalToRef } from '../util/signal-convert';\n\nconst dInputs = defineProps<{\n wrappers: CoreResolvedWrapperConfig[];\n}>();\nconst restWrappers = computed(() => dInputs.wrappers!.slice(1));\nconst wrapper = computed(() => dInputs.wrappers[0]);\nconst inputs = signalToRef(() => ({ ...wrapper.value?.inputs(), ...wrapper.value?.attributes() }));\nconst outputs = computed(() => wrapper.value?.outputs ?? {});\n</script>\n\n<template>\n <template v-if=\"wrapper\">\n <component :is=\"wrapper.type\" v-bind=\"inputs\" v-on=\"outputs\">\n <self-component v-bind=\"{ wrappers: restWrappers }\">\n <slot></slot>\n </self-component>\n </component>\n </template>\n <template v-else>\n <slot></slot>\n </template>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\nimport {\n computed,\n defineAsyncComponent,\n onUnmounted,\n provide,\n ref,\n inject as vInject,\n watch,\n} from 'vue';\nimport type { PiResolvedViewFieldConfig } from '../type/group';\nimport { signalToRef } from '../util/signal-convert';\nimport { PI_VIEW_FIELD_TOKEN, InjectorToken } from '../token';\nimport PiWrapper from './wrapper.vue';\nimport {\n createViewControlLink,\n getLazyImport,\n isFieldControl,\n isLazyMark,\n} from '@piying/view-core';\nconst props = defineProps<{\n field: PiResolvedViewFieldConfig;\n}>();\nconst injector = vInject(InjectorToken)!;\n\nconst inputs = signalToRef(() => props.field.inputs());\nconst outputs = signalToRef(() => props.field.outputs());\nconst renderConfig = signalToRef(() => props.field.renderConfig());\n\nconst attributes = signalToRef(() => props.field.attributes());\nconst fieldInput = computed(() => ({ ...attributes.value, ...inputs.value }));\nconst fieldChildren = signalToRef(() => props.field.children?.());\n\nconst wrappers = signalToRef(() => props.field.wrappers());\n\nconst componentType = computed(() =>\n typeof props.field.define?.type === 'function' || isLazyMark(props.field.define?.type)\n ? defineAsyncComponent(getLazyImport<any>(props.field.define?.type))\n : props.field.define?.type,\n);\nconst field = computed(() => props.field);\nprovide(PI_VIEW_FIELD_TOKEN, field);\n// 使用cva\nconst childRef = ref<any>(null);\nconst isControl = isFieldControl(field.value.form.control);\nlet dispose: (() => void) | undefined;\n\nwatch(\n [childRef, field],\n ([childRef, field]) => {\n dispose?.();\n if (isControl && childRef) {\n dispose = createViewControlLink((() => field.form.control) as any, childRef['cva'], injector);\n }\n },\n { immediate: true },\n);\nonUnmounted(() => {\n dispose?.();\n dispose = undefined;\n});\n</script>\n\n<template>\n <template v-if=\"!renderConfig!.hidden\">\n <template v-if=\"field.define?.type\">\n <pi-wrapper v-bind:wrappers=\"wrappers!\">\n <!-- group -->\n <template v-if=\"fieldChildren\">\n <component :is=\"componentType\" v-bind=\"fieldInput\" v-on=\"outputs\"></component>\n </template>\n <!-- control -->\n <template v-else>\n <template v-if=\"field.form.control\">\n <component\n :is=\"componentType\"\n v-bind=\"fieldInput\"\n v-on=\"outputs\"\n ref=\"childRef\"\n ></component>\n </template>\n <template v-else>\n <component :is=\"componentType\" v-bind=\"fieldInput\" v-on=\"outputs\"></component>\n </template>\n </template>\n </pi-wrapper>\n </template>\n </template>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\nimport * as v from 'valibot';\nimport { convert } from '@piying/view-core';\nimport { provide, shallowRef, watch, watchEffect } from 'vue';\nimport {\n ChangeDetectionScheduler,\n ChangeDetectionSchedulerImpl,\n createInjector,\n createRootInjector,\n DestroyRef,\n untracked,\n type EffectRef,\n} from 'static-injector';\nimport { VueSchemaHandle } from '../vue-schema';\nimport { VueFormBuilder } from '../builder';\nimport { InjectorToken } from '../token';\nimport FieldTemplate from './field-template.vue';\nimport type { PiResolvedViewFieldConfig } from '../type/group';\nimport type { Injector } from 'static-injector';\nimport { initListen } from '@piying/view-core';\nconst inputs = defineProps<{\n schema: v.BaseSchema<any, any, any> | v.SchemaWithPipe<any>;\n modelValue?: any;\n options: any;\n}>();\n\nconst emit = defineEmits(['update:modelValue']);\nconst rootInjector = createRootInjector({\n providers: [\n {\n provide: ChangeDetectionScheduler,\n useClass: ChangeDetectionSchedulerImpl,\n },\n ],\n});\nprovide(InjectorToken, rootInjector);\n\nconst field = shallowRef<PiResolvedViewFieldConfig | undefined>(undefined);\n\nwatch(\n () => [inputs.schema, inputs.options],\n ([schema, options], _1, onWatcherCleanup) => {\n const subInjector = createInjector({ providers: [], parent: rootInjector });\n\n const result = convert(schema as any, {\n handle: VueSchemaHandle as any,\n builder: VueFormBuilder,\n injector: subInjector,\n registerOnDestroy: (fn) => {\n subInjector!.get(DestroyRef).onDestroy(() => {\n fn();\n });\n },\n ...options,\n });\n field.value = result;\n let ref: EffectRef | undefined;\n if (result.form.control) {\n const value = inputs.modelValue;\n ref = initListen(\n typeof value !== 'undefined' ? value : undefined,\n result!.form.control!,\n subInjector as Injector,\n (value) => {\n untracked(() => {\n if (result!.form.control?.valueNoError$$()) {\n emit('update:modelValue', value);\n }\n });\n },\n );\n }\n onWatcherCleanup(() => {\n subInjector.destroy();\n ref?.destroy();\n });\n },\n { immediate: true },\n);\nwatchEffect(() => {\n field.value!.form.control?.updateValue(inputs.modelValue);\n});\n</script>\n\n<template>\n <field-template :field=\"field!\"></field-template>\n</template>\n\n<style scoped></style>\n","import type { ControlValueAccessor } from '@piying/view-core';\nimport { ref } from 'vue';\n\nexport function useControlValueAccessor() {\n const value = ref();\n const disabled = ref(false);\n let onChange: (input: any) => void;\n let touched: () => void;\n const instance: ControlValueAccessor = {\n writeValue(obj) {\n value.value = obj;\n },\n registerOnChange(fn) {\n onChange = fn;\n },\n registerOnTouched(fn) {\n touched = fn;\n },\n setDisabledState(value) {\n disabled.value = value;\n },\n };\n return {\n cva: instance,\n cvaa: {\n value: value,\n disabled: disabled,\n valueChange: (input: any) => {\n onChange(input);\n value.value = input;\n },\n touchedChange: () => {\n touched();\n },\n },\n };\n}\n","<script setup lang=\"ts\">\nimport FieldTemplate from './field-template.vue';\nimport { inject } from 'vue';\nimport { PI_VIEW_FIELD_TOKEN } from '../token';\nimport { signalToRef } from '../util';\n\nconst field = inject(PI_VIEW_FIELD_TOKEN)!;\nconst children = signalToRef(() => field?.value.children!());\n</script>\n\n<template>\n <template v-for=\"(field, index) in children\" :key=\"index\">\n <field-template :field=\"field!\"></field-template>\n </template>\n</template>\n\n<style scoped></style>\n"],"names":["vInject","ref","childRef","field","value"],"mappings":";;;AAGO,MAAM,wBAAwB,iBAGnC;AAEF;ACLO,MAAM,uBAAuB,YAA6B;AAAC;ACC3D,MAAM,gBAAwC,OAAA;AAC9C,MAAM,sBAA4E,OAAA;ACAlF,SAAS,YAAe,OAA4B;AACzD,QAAM,WAAWA,OAAQ,aAAa;AAEtC,QAAM,UAAU,WAAc,MAAgB;AAC9C,cAAY,CAAC,qBAAqB;AAChC,YAAQ,QAAQ,MAAA;AAChB,UAAMC,OAAM;AAAA,MACV,MAAM;AACJ,cAAM,eAAe,MAAA;AACrB,YAAI,CAAC,OAAO,GAAG,QAAQ,OAAO,YAAY,GAAG;AAC3C,kBAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,MACA,EAAE,SAAA;AAAA,IAAmB;AAEvB,qBAAiB,MAAM;AACrB,MAAAA,KAAI,QAAA;AAAA,IACN,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;;;;;;;ACnBA,UAAM,UAAU;AAGhB,UAAM,eAAe,SAAS,MAAM,QAAQ,SAAU,MAAM,CAAC,CAAC;AAC9D,UAAM,UAAU,SAAS,MAAM,QAAQ,SAAS,CAAC,CAAC;AAClD,UAAM,SAAS,YAAY;;AAAO,eAAE,IAAG,aAAQ,UAAR,mBAAe,UAAU,IAAG,aAAQ,UAAR,mBAAe;KAAe;AACjG,UAAM,UAAU,SAAS,MAAA;;AAAM,4BAAQ,UAAR,mBAAe,YAAW;KAAE;;;;;;;;;;;;;;;;;;;;;;ACQ3D,UAAM,QAAQ;AAGd,UAAM,WAAWD,OAAQ,aAAa;AAEtC,UAAM,SAAS,YAAY,MAAM,MAAM,MAAM,QAAQ;AACrD,UAAM,UAAU,YAAY,MAAM,MAAM,MAAM,SAAS;AACvD,UAAM,eAAe,YAAY,MAAM,MAAM,MAAM,cAAc;AAEjE,UAAM,aAAa,YAAY,MAAM,MAAM,MAAM,YAAY;AAC7D,UAAM,aAAa,SAAS,OAAO,EAAE,GAAG,WAAW,OAAO,GAAG,OAAO,MAAA,EAAQ;AAC5E,UAAM,gBAAgB,YAAY,MAAA;;AAAM,+BAAM,OAAM,aAAZ;AAAA,KAAwB;AAEhE,UAAM,WAAW,YAAY,MAAM,MAAM,MAAM,UAAU;AAEzD,UAAM,gBAAgB;AAAA,MAAS;;AAC7B,wBAAO,WAAM,MAAM,WAAZ,mBAAoB,UAAS,cAAc,YAAW,WAAM,MAAM,WAAZ,mBAAoB,IAAI,IACjF,qBAAqB,eAAmB,WAAM,MAAM,WAAZ,mBAAoB,IAAI,CAAC,KACjE,WAAM,MAAM,WAAZ,mBAAoB;AAAA;AAAA,IAAA;AAE1B,UAAM,QAAQ,SAAS,MAAM,MAAM,KAAK;AACxC,YAAQ,qBAAqB,KAAK;AAElC,UAAM,WAAW,IAAS,IAAI;AAC9B,UAAM,YAAY,eAAe,MAAM,MAAM,KAAK,OAAO;AACzD,QAAI;AAEJ;AAAA,MACE,CAAC,UAAU,KAAK;AAAA,MAChB,CAAC,CAACE,WAAUC,MAAK,MAAM;AACrB;AACA,YAAI,aAAaD,WAAU;AACzB,oBAAU,sBAAuB,MAAMC,OAAM,KAAK,SAAiBD,UAAS,KAAK,GAAG,QAAQ;AAAA,QAC9F;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;AAEpB,gBAAY,MAAM;AAChB;AACA,gBAAU;AAAA,IACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCD,UAAM,SAAS;AAMf,UAAM,OAAO;AACb,UAAM,eAAe,mBAAmB;AAAA,MACtC,WAAW;AAAA,QACT;AAAA,UACE,SAAS;AAAA,UACT,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IACF,CACD;AACD,YAAQ,eAAe,YAAY;AAEnC,UAAM,QAAQ,WAAkD,MAAS;AAEzE;AAAA,MACE,MAAM,CAAC,OAAO,QAAQ,OAAO,OAAO;AAAA,MACpC,CAAC,CAAC,QAAQ,OAAO,GAAG,IAAI,qBAAqB;AAC3C,cAAM,cAAc,eAAe,EAAE,WAAW,CAAA,GAAI,QAAQ,cAAc;AAE1E,cAAM,SAAS,QAAQ,QAAe;AAAA,UACpC,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,mBAAmB,CAAC,OAAO;AACzB,wBAAa,IAAI,UAAU,EAAE,UAAU,MAAM;AAC3C,iBAAA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA,GAAG;AAAA,QAAA,CACJ;AACD,cAAM,QAAQ;AACd,YAAID;AACJ,YAAI,OAAO,KAAK,SAAS;AACvB,gBAAM,QAAQ,OAAO;AACrB,UAAAA,OAAM;AAAA,YACJ,OAAO,UAAU,cAAc,QAAQ;AAAA,YACvC,OAAQ,KAAK;AAAA,YACb;AAAA,YACA,CAACG,WAAU;AACT,wBAAU,MAAM;;AACd,qBAAI,YAAQ,KAAK,YAAb,mBAAsB,kBAAkB;AAC1C,uBAAK,qBAAqBA,MAAK;AAAA,gBACjC;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UAAA;AAAA,QAEJ;AACA,yBAAiB,MAAM;AACrB,sBAAY,QAAA;AACZ,UAAAH,QAAA,gBAAAA,KAAK;AAAA,QACP,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;AAEpB,gBAAY,MAAM;;AAChB,kBAAM,MAAO,KAAK,YAAlB,mBAA2B,YAAY,OAAO;AAAA,IAChD,CAAC;;;;;;;;AC9EM,SAAS,0BAA0B;AACxC,QAAM,QAAQ,IAAA;AACd,QAAM,WAAW,IAAI,KAAK;AAC1B,MAAI;AACJ,MAAI;AACJ,QAAM,WAAiC;AAAA,IACrC,WAAW,KAAK;AACd,YAAM,QAAQ;AAAA,IAChB;AAAA,IACA,iBAAiB,IAAI;AACnB,iBAAW;AAAA,IACb;AAAA,IACA,kBAAkB,IAAI;AACpB,gBAAU;AAAA,IACZ;AAAA,IACA,iBAAiBG,QAAO;AACtB,eAAS,QAAQA;AAAAA,IACnB;AAAA,EAAA;AAEF,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,aAAa,CAAC,UAAe;AAC3B,iBAAS,KAAK;AACd,cAAM,QAAQ;AAAA,MAChB;AAAA,MACA,eAAe,MAAM;AACnB,gBAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAEJ;;;;AC9BA,UAAM,QAAQ,OAAO,mBAAmB;AACxC,UAAM,WAAW,YAAY,MAAM,+BAAO,MAAM,UAAW;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piying/view-vue",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Piying view For Vue;Valibot to Component",
5
5
  "type": "module",
6
6
  "homepage": "https://piying-org.github.io/website/docs/client/intro",
@@ -36,14 +36,13 @@
36
36
  ],
37
37
  "license": "MIT",
38
38
  "dependencies": {
39
- "@piying/view-core": "^1.4.0",
40
- "fast-equals": "^5.2.2",
41
- "rfdc": "^1.4.1",
39
+ "@piying/view-core": "^1.5.0",
42
40
  "static-injector": "^6.1.2"
43
41
  },
44
42
  "sideEffects": false,
45
43
  "peerDependencies": {
46
- "vue": "^3.4.21"
44
+ "vue": "^3.4.21",
45
+ "valibot": "^1.1.0"
47
46
  },
48
47
  "module": "index.js",
49
48
  "typings": "index.d.ts",
package/type/group.d.ts CHANGED
@@ -17,7 +17,6 @@ export interface RawComponentDefine {
17
17
  }
18
18
  export interface ComponentFieldConfig {
19
19
  type?: string;
20
- contents?: any[];
21
20
  }
22
21
  export type ResolvedComponentFieldConfig = Omit<ComponentFieldConfig, 'inputs' | 'outputs' | 'directives' | 'wrappers'>;
23
22
  export type PiDefaultRawViewFieldConfig = Pick<VueSchemaHandle, 'inputs' | 'outputs' | 'wrappers' | 'formConfig' | 'renderConfig' | 'props'>;
package/vue-schema.d.ts CHANGED
@@ -2,5 +2,4 @@ import { CoreSchemaHandle } from '@piying/view-core';
2
2
  import type { PiResolvedViewFieldConfig } from './type/group';
3
3
  export declare class VueSchemaHandle extends CoreSchemaHandle<VueSchemaHandle, () => PiResolvedViewFieldConfig> {
4
4
  type?: any;
5
- contents?: any[];
6
5
  }