@piying/view-vue 2.2.4 → 2.3.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 +1 -6
- package/index.js.map +1 -1
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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
2
|
import { CoreSchemaHandle, FormBuilder, isLazyMark, getLazyImport, isFieldControl, createViewControlLink, convert, initListen } from "@piying/view-core";
|
|
3
|
-
import { effect, createRootInjector, ChangeDetectionSchedulerImpl, ChangeDetectionScheduler, createInjector,
|
|
3
|
+
import { effect, createRootInjector, ChangeDetectionSchedulerImpl, ChangeDetectionScheduler, createInjector, untracked } from "static-injector";
|
|
4
4
|
class VueSchemaHandle extends CoreSchemaHandle {
|
|
5
5
|
}
|
|
6
6
|
class VueFormBuilder extends FormBuilder {
|
|
@@ -143,11 +143,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
143
143
|
handle: VueSchemaHandle,
|
|
144
144
|
builder: VueFormBuilder,
|
|
145
145
|
injector: subInjector,
|
|
146
|
-
registerOnDestroy: (fn) => {
|
|
147
|
-
subInjector.get(DestroyRef).onDestroy(() => {
|
|
148
|
-
fn();
|
|
149
|
-
});
|
|
150
|
-
},
|
|
151
146
|
...dProps.options
|
|
152
147
|
});
|
|
153
148
|
return [field2, subInjector];
|
package/index.js.map
CHANGED
|
@@ -1 +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, type ShallowRef } from 'vue';\nimport { InjectorToken } from '../token';\n\n// signal=>ref\nexport function signalToRef<T>(value: () => T | undefined): ShallowRef<T> {\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 { CoreWrapperConfig } from '@piying/view-core';\nimport { signalToRef } from '../util/signal-convert';\n\nconst dInputs = defineProps<{\n wrappers: CoreWrapperConfig[];\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());\nconst define = signalToRef(() => props.field.define?.());\nconst componentType = computed(() =>\n typeof define.value?.type === 'function' || isLazyMark(define.value?.type)\n ? defineAsyncComponent(getLazyImport<any>(define.value?.type))\n : define.value?.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: ((destroy?: boolean) => 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?.(true);\n dispose = undefined;\n});\n</script>\n\n<template>\n <template v-if=\"!renderConfig!.hidden\">\n <template v-if=\"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 { computed, onUnmounted, provide, watch } 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 { Injector } from 'static-injector';\nimport { initListen } from '@piying/view-core';\nconst dProps = 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\nlet injectorDispose: (() => any) | undefined;\nconst initResult = computed(() => {\n injectorDispose?.();\n const subInjector = createInjector({ providers: [], parent: rootInjector });\n injectorDispose = () => {\n subInjector.destroy();\n injectorDispose = undefined;\n };\n const field = convert(dProps.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 ...dProps.options,\n });\n return [field, subInjector] as const;\n});\nonUnmounted(() => {\n injectorDispose?.();\n});\nconst field = computed(() => initResult.value[0]);\n\nwatch(\n () => [initResult.value, dProps.modelValue],\n ([[field, subInjector], modelValue], _1, onWatcherCleanup) => {\n let ref: EffectRef | undefined;\n if (field.form.control) {\n ref = initListen(modelValue, field!.form.control!, subInjector as Injector, (value) => {\n untracked(() => {\n if (field!.form.control?.valueNoError$$()) {\n emit('update:modelValue', value);\n }\n });\n });\n field!.form.control!.updateValue(dProps.modelValue);\n }\n onWatcherCleanup(() => {\n ref?.destroy();\n });\n },\n { immediate: true },\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":"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"}
|
|
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, type ShallowRef } from 'vue';\nimport { InjectorToken } from '../token';\n\n// signal=>ref\nexport function signalToRef<T>(value: () => T | undefined): ShallowRef<T> {\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 { CoreWrapperConfig } from '@piying/view-core';\nimport { signalToRef } from '../util/signal-convert';\n\nconst dInputs = defineProps<{\n wrappers: CoreWrapperConfig[];\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());\nconst define = signalToRef(() => props.field.define?.());\nconst componentType = computed(() =>\n typeof define.value?.type === 'function' || isLazyMark(define.value?.type)\n ? defineAsyncComponent(getLazyImport<any>(define.value?.type))\n : define.value?.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: ((destroy?: boolean) => 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?.(true);\n dispose = undefined;\n});\n</script>\n\n<template>\n <template v-if=\"!renderConfig!.hidden\">\n <template v-if=\"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 { computed, onUnmounted, provide, watch } from 'vue';\nimport {\n ChangeDetectionScheduler,\n ChangeDetectionSchedulerImpl,\n createInjector,\n createRootInjector,\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 { Injector } from 'static-injector';\nimport { initListen } from '@piying/view-core';\nconst dProps = 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\nlet injectorDispose: (() => any) | undefined;\nconst initResult = computed(() => {\n injectorDispose?.();\n const subInjector = createInjector({ providers: [], parent: rootInjector });\n injectorDispose = () => {\n subInjector.destroy();\n injectorDispose = undefined;\n };\n const field = convert(dProps.schema as any, {\n handle: VueSchemaHandle as any,\n builder: VueFormBuilder,\n injector: subInjector,\n ...dProps.options,\n });\n return [field, subInjector] as const;\n});\nonUnmounted(() => {\n injectorDispose?.();\n});\nconst field = computed(() => initResult.value[0]);\n\nwatch(\n () => [initResult.value, dProps.modelValue],\n ([[field, subInjector], modelValue], _1, onWatcherCleanup) => {\n let ref: EffectRef | undefined;\n if (field.form.control) {\n ref = initListen(modelValue, field!.form.control!, subInjector as Injector, (value) => {\n untracked(() => {\n if (field!.form.control?.valueNoError$$()) {\n emit('update:modelValue', value);\n }\n });\n });\n field!.form.control!.updateValue(dProps.modelValue);\n }\n onWatcherCleanup(() => {\n ref?.destroy();\n });\n },\n { immediate: true },\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,uBAAA;AAC9C,MAAM,sBAA4E,uBAAA;ACAlF,SAAS,YAAe,OAA2C;AACxE,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,OAAO,EAAE,GAAG,QAAQ,OAAO,OAAA,GAAU,GAAG,QAAQ,OAAO,WAAA,IAAe;AACjG,UAAM,UAAU,SAAS,MAAM,QAAQ,OAAO,UAAA,KAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;ACQ/D,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,MAAM,MAAM,MAAM,YAAY;AAEhE,UAAM,WAAW,YAAY,MAAM,MAAM,MAAM,UAAU;AACzD,UAAM,SAAS,YAAY,MAAM,MAAM,MAAM,UAAU;AACvD,UAAM,gBAAgB;AAAA,MAAS,MAC7B,OAAO,OAAO,OAAO,SAAS,cAAc,WAAW,OAAO,OAAO,IAAI,IACrE,qBAAqB,cAAmB,OAAO,OAAO,IAAI,CAAC,IAC3D,OAAO,OAAO;AAAA,IAAA;AAEpB,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,kBAAA;AACA,YAAI,aAAaD,WAAU;AACzB,oBAAU,uBAAuB,MAAMC,OAAM,KAAK,UAAiBD,UAAS,KAAK,GAAG,QAAQ;AAAA,QAC9F;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;AAEpB,gBAAY,MAAM;AAChB,gBAAU,IAAI;AACd,gBAAU;AAAA,IACZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CD,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,QAAI;AACJ,UAAM,aAAa,SAAS,MAAM;AAChC,wBAAA;AACA,YAAM,cAAc,eAAe,EAAE,WAAW,CAAA,GAAI,QAAQ,cAAc;AAC1E,wBAAkB,MAAM;AACtB,oBAAY,QAAA;AACZ,0BAAkB;AAAA,MACpB;AACA,YAAMC,SAAQ,QAAQ,OAAO,QAAe;AAAA,QAC1C,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,QACV,GAAG,OAAO;AAAA,MAAA,CACX;AACD,aAAO,CAACA,QAAO,WAAW;AAAA,IAC5B,CAAC;AACD,gBAAY,MAAM;AAChB,wBAAA;AAAA,IACF,CAAC;AACD,UAAM,QAAQ,SAAS,MAAM,WAAW,MAAM,CAAC,CAAC;AAEhD;AAAA,MACE,MAAM,CAAC,WAAW,OAAO,OAAO,UAAU;AAAA,MAC1C,CAAC,CAAC,CAACA,QAAO,WAAW,GAAG,UAAU,GAAG,IAAI,qBAAqB;AAC5D,YAAIF;AACJ,YAAIE,OAAM,KAAK,SAAS;AACtB,UAAAF,OAAM,WAAW,YAAYE,OAAO,KAAK,SAAU,aAAyB,CAAC,UAAU;AACrF,sBAAU,MAAM;AACd,kBAAIA,OAAO,KAAK,SAAS,eAAA,GAAkB;AACzC,qBAAK,qBAAqB,KAAK;AAAA,cACjC;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AACDA,iBAAO,KAAK,QAAS,YAAY,OAAO,UAAU;AAAA,QACpD;AACA,yBAAiB,MAAM;AACrB,UAAAF,MAAK,QAAA;AAAA,QACP,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;;;;;;;;ACvEb,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,OAAO,MAAM,UAAW;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piying/view-vue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.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,7 +36,7 @@
|
|
|
36
36
|
],
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@piying/view-core": "^2.
|
|
39
|
+
"@piying/view-core": "^2.3.0",
|
|
40
40
|
"static-injector": "^6.1.2"
|
|
41
41
|
},
|
|
42
42
|
"sideEffects": false,
|