skyline-vue-admin 0.0.16 → 0.0.17
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/dist/components/avatar-input/index.cjs +1 -1
- package/dist/components/avatar-input/index.cjs.map +1 -1
- package/dist/components/avatar-input/index.d.ts +0 -4
- package/dist/components/avatar-input/index.mjs +72 -104
- package/dist/components/avatar-input/index.mjs.map +1 -1
- package/dist/components/can-access/index.cjs +1 -1
- package/dist/components/can-access/index.mjs +1 -1
- package/dist/components/create/index.cjs +1 -1
- package/dist/components/create/index.mjs +4 -4
- package/dist/components/data-table/index.cjs +1 -1
- package/dist/components/data-table/index.mjs +4 -4
- package/dist/components/data-table-col/index.cjs +1 -1
- package/dist/components/data-table-col/index.cjs.map +1 -1
- package/dist/components/data-table-col/index.mjs +5 -4
- package/dist/components/data-table-col/index.mjs.map +1 -1
- package/dist/components/edit/index.cjs +1 -1
- package/dist/components/edit/index.mjs +1 -1
- package/dist/components/file-multiple-input/index.cjs +1 -1
- package/dist/components/file-multiple-input/index.cjs.map +1 -1
- package/dist/components/file-multiple-input/index.d.ts +2 -8
- package/dist/components/file-multiple-input/index.mjs +38 -146
- package/dist/components/file-multiple-input/index.mjs.map +1 -1
- package/dist/components/file-multiple-model-input/index.cjs +2 -0
- package/dist/components/file-multiple-model-input/index.cjs.map +1 -0
- package/dist/components/file-multiple-model-input/index.d.ts +72 -0
- package/dist/components/file-multiple-model-input/index.mjs +154 -0
- package/dist/components/file-multiple-model-input/index.mjs.map +1 -0
- package/dist/components/filter/index.cjs +1 -1
- package/dist/components/filter/index.mjs +6 -6
- package/dist/components/image-field/index.cjs +1 -1
- package/dist/components/image-field/index.cjs.map +1 -1
- package/dist/components/image-field/index.mjs +3 -2
- package/dist/components/image-field/index.mjs.map +1 -1
- package/dist/components/link-field/index.cjs +1 -1
- package/dist/components/link-field/index.cjs.map +1 -1
- package/dist/components/link-field/index.mjs +3 -2
- package/dist/components/link-field/index.mjs.map +1 -1
- package/dist/components/radio-button-group-input/index.cjs +1 -1
- package/dist/components/radio-button-group-input/index.cjs.map +1 -1
- package/dist/components/radio-button-group-input/index.mjs +3 -2
- package/dist/components/radio-button-group-input/index.mjs.map +1 -1
- package/dist/components/reference-field/index.cjs +1 -1
- package/dist/components/reference-field/index.mjs +1 -1
- package/dist/components/show-simple-layout/index.cjs +1 -1
- package/dist/components/show-simple-layout/index.cjs.map +1 -1
- package/dist/components/show-simple-layout/index.mjs +4 -2
- package/dist/components/show-simple-layout/index.mjs.map +1 -1
- package/dist/components/simple-form/index.cjs +1 -1
- package/dist/components/simple-form/index.cjs.map +1 -1
- package/dist/components/simple-form/index.mjs +3 -2
- package/dist/components/simple-form/index.mjs.map +1 -1
- package/dist/components/text-field/index.cjs +1 -1
- package/dist/components/text-field/index.cjs.map +1 -1
- package/dist/components/text-field/index.mjs +6 -4
- package/dist/components/text-field/index.mjs.map +1 -1
- package/dist/components/text-input/index.cjs +1 -1
- package/dist/components/text-input/index.cjs.map +1 -1
- package/dist/components/text-input/index.mjs +7 -6
- package/dist/components/text-input/index.mjs.map +1 -1
- package/dist/hooks/useUpload.cjs +1 -1
- package/dist/hooks/useUpload.cjs.map +1 -1
- package/dist/hooks/useUpload.d.ts +9 -3
- package/dist/hooks/useUpload.mjs +20 -5
- package/dist/hooks/useUpload.mjs.map +1 -1
- package/dist/layouts/default.cjs +1 -1
- package/dist/layouts/default.mjs +14 -14
- package/dist/provides/dataProvider.d.ts +2 -6
- package/dist/styles/components/file-multiple-input.css +1 -1
- package/dist/styles/components/file-multiple-model-input.css +1 -0
- package/dist/styles/index.css +1 -1
- package/package.json +1 -1
|
@@ -19,9 +19,9 @@ import "../../hooks/useReferenceArrayField.mjs";
|
|
|
19
19
|
import { useTreeWithDetails as V } from "../../hooks/useTreeWithDetails.mjs";
|
|
20
20
|
import "../../hooks/useFormGrid.mjs";
|
|
21
21
|
import "../../hooks/useReferenceArrayInput.mjs";
|
|
22
|
+
import { skyConfig as d } from "../../setup/index.mjs";
|
|
22
23
|
import { EpDelete as W } from "../../icons/EpDelete.mjs";
|
|
23
24
|
import { EpDocumentAdd as B } from "../../icons/EpDocumentAdd.mjs";
|
|
24
|
-
import { skyConfig as d } from "../../setup/index.mjs";
|
|
25
25
|
import { useAsyncState as c } from "@vueuse/core";
|
|
26
26
|
import { ElCard as F, ElButton as y, ElPopconfirm as q, ElSkeleton as z, ElMessage as G } from "element-plus";
|
|
27
27
|
import { useI18n as H } from "vue-i18n";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("element-plus/es/components/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("element-plus/es/components/form-item/style/css");const t=require("vue"),s=require("element-plus"),m=require("vue-router");require("../../hooks/useUser.cjs");require("../../hooks/usePermission.cjs");require("../../hooks/useMenu.cjs");require("../../hooks/useTab.cjs");require("../../hooks/useRouteKeepAlive.cjs");require("../../hooks/useSize.cjs");require("../../hooks/useLang.cjs");require("../../hooks/useTheme.cjs");require("../../hooks/useList.cjs");require("../../hooks/useHiddenTitle.cjs");const q=require("../../hooks/useForm.cjs");require("../../hooks/useShow.cjs");require("../../hooks/useReferenceArrayField.cjs");require("../../hooks/useTreeWithDetails.cjs");const y=require("../../hooks/useFormGrid.cjs");require("../../hooks/useReferenceArrayInput.cjs");require("vue-i18n");const f=require("../can-access/index.cjs"),S=require("../file-multiple-model-input/index.cjs"),g=t.defineComponent({name:"SkyFileMultipleInput",inheritAttrs:!1,props:{source:{type:String,required:!0},label:String,rules:Object,type:{type:String,default:"file"},dataName:{type:String,default:"name"},dataUrl:{type:String,default:"url"},limit:{type:Number,default:1},autoUpload:{type:Boolean,default:!0}},setup(e,{slots:i,attrs:l}){const a=m.useRoute(),o=y.useFormGrid(),{formData:r,editData:u}=q.useForm(),n=t.computed(()=>e.label||e.source),d=a.meta;return u.value&&(r[e.source]=u.value[e.source]),()=>t.createVNode(f.SkyCanAccess,{resource:d.resource,action:["create","edit"],column:e.source},{default:()=>[t.createVNode(s.ElFormItem,{class:["sky-file-multiple-input",`is-${e.type}`],label:n.value,prop:e.source,rules:e.rules,style:o?`grid-area: ${e.source}`:""},{default:()=>[t.createVNode(S.SkyFileMultipleModelInput,t.mergeProps({modelValue:r[e.source],"onUpdate:modelValue":c=>r[e.source]=c,type:e.type,dataName:e.dataName,dataUrl:e.dataUrl,limit:e.limit,autoUpload:e.autoUpload},l),{default:()=>[i.default?.()]})]})]})}});exports.SkyFileMultipleInput=g;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/file-multiple-input/index.tsx"],"sourcesContent":["import { EpPlus } from '@/icons/EpPlus'\nimport type { GetManyResult, Identifier, SkyUploadRawFile } from '@/provides'\nimport {\n ElDialog,\n ElFormItem,\n ElIcon,\n ElLoadingDirective,\n ElUpload,\n genFileId,\n type FormItemRule,\n type UploadFile,\n type UploadInstance,\n type UploadProps,\n type UploadRawFile,\n} from 'element-plus'\nimport {\n cloneVNode,\n computed,\n defineComponent,\n Fragment,\n h,\n ref,\n shallowRef,\n useTemplateRef,\n withDirectives,\n} from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useAsyncState } from '@vueuse/core'\nimport { useForm, useFormGrid, type SkyUploadUserFile } from '@/hooks'\nimport { skyConfig } from '@/setup'\nimport type { SkyLayoutRouteMeta } from '@/router'\nimport { SkyCanAccess } from '../can-access'\nimport { EpUploadFilled } from '@/icons/EpUploadFilled'\nimport { useI18n } from 'vue-i18n'\n\nexport interface SkyFileMultipleInputProps {\n reference: string\n source: string\n type?: 'file' | 'image'\n dataId?: string\n dataName?: string\n dataUrl?: string\n label?: string\n rules?: FormItemRule | FormItemRule[]\n name?: string\n withCredentials?: boolean\n limit?: number\n fileList?: SkyUploadUserFile[]\n autoUpload?: UploadProps['autoUpload']\n}\n\nexport const SkyFileMultipleInput = defineComponent<\n SkyFileMultipleInputProps & Partial<UploadProps>\n>({\n name: 'SkyFileMultipleInput',\n inheritAttrs: false,\n props: {\n reference: {\n type: String,\n required: true,\n },\n source: {\n type: String,\n required: true,\n },\n type: {\n type: String,\n default: 'file',\n },\n dataId: {\n type: String,\n default: 'id',\n },\n dataName: {\n type: String,\n default: 'name',\n },\n dataUrl: {\n type: String,\n default: 'url',\n },\n label: String,\n rules: Object,\n limit: {\n type: Number,\n default: 1,\n },\n fileList: {\n type: Array,\n default: () => [],\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n const { t } = useI18n()\n const route = useRoute()\n const formGrid = useFormGrid()\n const { formData, editData } = useForm()!\n const title = computed<string>(() => props.label || props.source)\n // init fileList\n const fileList = shallowRef<SkyUploadUserFile[]>(props.fileList!)\n const uploadRef = useTemplateRef<UploadInstance>('uploadRef')\n const routeMeta = route.meta as SkyLayoutRouteMeta\n\n if (editData.value) {\n formData[props.source] = editData.value[props.source]\n }\n\n const onExceed = (files: File[]) => {\n if (props.limit === 1) {\n uploadRef.value?.clearFiles()\n const file = files[0] as UploadRawFile\n file.uid = genFileId()\n uploadRef.value?.handleStart(file)\n if (props.autoUpload) {\n uploadRef.value?.submit()\n }\n }\n }\n\n const onSuccess = () => {\n const ids: Identifier[] = []\n for (const fl of fileList.value) {\n if (fl.id) {\n ids.push(fl.id as Identifier)\n } else {\n const raw = fl.raw as SkyUploadRawFile | undefined\n if (raw?.data?.id) {\n fl.id = raw.data.id as Identifier\n ids.push(raw.data.id as Identifier)\n }\n }\n }\n formData[props.source] = ids\n }\n\n const preview = ref(false)\n const previewUrl = ref<string>()\n const onPreview = (file: UploadFile) => {\n previewUrl.value = file.url\n preview.value = true\n }\n\n let controller: AbortController | undefined\n const { isLoading } = useAsyncState<GetManyResult | undefined>(\n async () => {\n const ids = formData[props.source]\n if (ids) {\n controller = new AbortController()\n const res = await skyConfig.dataProvider?.getMany?.(props.reference, {\n ids: ids as Identifier[],\n signal: controller.signal,\n })\n\n if (res?.data) {\n fileList.value = res.data.map((d) => ({\n id: d[props.dataId!] as Identifier,\n name: d[props.dataName!] as string,\n url: d[props.dataUrl!] as string,\n }))\n return res\n }\n }\n },\n undefined,\n {\n immediate: true,\n },\n )\n\n const action = ref('')\n const data = shallowRef<Record<string, unknown>>()\n const headers = shallowRef<Record<string, unknown>>()\n const method = ref()\n const name = ref<string>()\n const beforeUpload = async (rawFile: SkyUploadRawFile) => {\n const res = await skyConfig.dataProvider?.getUploadConfig?.({\n file: rawFile,\n })\n if (res?.data) {\n action.value = res.data.action\n data.value = res.data.data\n headers.value = res.data.headers\n method.value = res.data.method\n name.value = res.data.name\n rawFile.data = {\n id: res.data.file.id,\n name: res.data.file.name,\n url: res.data.file.url,\n }\n }\n }\n\n const accept = computed(() => (props.type === 'image' ? 'image/*' : undefined))\n const listType = computed(() => (props.type === 'image' ? 'picture-card' : 'text'))\n\n return () => (\n <SkyCanAccess resource={routeMeta.resource} action={['create', 'edit']} column={props.source}>\n <ElFormItem\n class={['sky-file-multiple-input', `is-${props.type}`]}\n label={title.value}\n prop={props.source}\n rules={props.rules}\n style={formGrid ? `grid-area: ${props.source}` : ''}\n >\n <ElUpload\n ref=\"uploadRef\"\n action={action.value}\n method={method.value}\n name={props.name}\n withCredentials={props.withCredentials}\n multiple={props.limit! > 1}\n limit={props.limit}\n beforeUpload={beforeUpload}\n onSuccess={onSuccess}\n onExceed={onExceed}\n headers={headers.value}\n data={data.value}\n listType={listType.value}\n fileList={fileList.value}\n onUpdate:file-list={(fs: SkyUploadUserFile[]) => (fileList.value = fs)}\n autoUpload={props.autoUpload}\n drag={props.type === 'file'}\n showFileList\n onPreview={onPreview}\n // https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Attributes/accept\n accept={accept.value}\n {...attrs}\n >\n {{\n default: () =>\n props.type === 'image' ? (\n <ElIcon>\n <EpPlus />\n </ElIcon>\n ) : (\n <>\n <ElIcon class=\"sky-file-multiple-input__icon\">\n <EpUploadFilled />\n </ElIcon>\n <div class=\"sky-file-multiple-input__text\">\n {t('upload.drop')}\n <em>{t('upload.click')}</em>\n </div>\n </>\n ),\n file: (scope: { file: UploadFile; index: number }) => {\n if (slots.default) {\n const vnodes = slots.default()\n return withDirectives(\n h(\n Fragment,\n vnodes.map((vnode) => cloneVNode(vnode, { ...scope })),\n ),\n [[ElLoadingDirective, isLoading.value]],\n )\n }\n },\n }}\n </ElUpload>\n <ElDialog\n appendToBody\n modelValue={preview.value}\n onUpdate:modelValue={(v) => (preview.value = v)}\n >\n <img class=\"sky-file-multiple-input__img\" src={previewUrl.value} />\n </ElDialog>\n </ElFormItem>\n </SkyCanAccess>\n )\n },\n})\n"],"names":["SkyFileMultipleInput","defineComponent","name","inheritAttrs","props","reference","type","required","source","default","dataId","dataName","dataUrl","label","rules","limit","fileList","autoUpload","attrs","t","route","useRoute","formGrid","useFormGrid","editData","title","computed","shallowRef","uploadRef","useTemplateRef","routeMeta","formData","file","files","fl","ids","raw","preview","ref","previewUrl","controller","isLoading","res","skyConfig","id","url","immediate","action","data","headers","method","beforeUpload","rawFile","accept","listType","onSuccess","onExceed","fs","onPreview","_createVNode","_Fragment","ElIcon","vnodes","slots","withDirectives","h","Fragment","vnode","cloneVNode","ElLoadingDirective","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/file-multiple-input/index.tsx"],"sourcesContent":["import { ElFormItem, type FormItemRule, type UploadProps } from 'element-plus'\nimport { computed, defineComponent } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useForm, useFormGrid, type FormContext } from '@/hooks'\nimport type { SkyLayoutRouteMeta } from '@/router'\nimport { SkyCanAccess } from '../can-access'\nimport { SkyFileMultipleModelInput } from '../file-multiple-model-input'\n\nexport interface SkyFileMultipleInputProps {\n source: string\n label?: string\n rules?: FormItemRule | FormItemRule[]\n type?: 'file' | 'image'\n dataName?: string\n dataUrl?: string\n limit?: number\n autoUpload?: UploadProps['autoUpload']\n}\n\nexport const SkyFileMultipleInput = defineComponent<\n SkyFileMultipleInputProps & Partial<UploadProps>\n>({\n name: 'SkyFileMultipleInput',\n inheritAttrs: false,\n props: {\n source: {\n type: String,\n required: true,\n },\n label: String,\n rules: Object,\n type: {\n type: String,\n default: 'file',\n },\n dataName: {\n type: String,\n default: 'name',\n },\n dataUrl: {\n type: String,\n default: 'url',\n },\n limit: {\n type: Number,\n default: 1,\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n const route = useRoute()\n const formGrid = useFormGrid()\n const { formData, editData } = useForm()! as FormContext<\n Record<string, Array<Record<string, unknown>>>\n >\n const title = computed<string>(() => props.label || props.source)\n // init fileList\n const routeMeta = route.meta as SkyLayoutRouteMeta\n\n if (editData.value) {\n formData[props.source] = editData.value[props.source] as Array<Record<string, unknown>>\n }\n\n return () => (\n <SkyCanAccess resource={routeMeta.resource} action={['create', 'edit']} column={props.source}>\n <ElFormItem\n class={['sky-file-multiple-input', `is-${props.type}`]}\n label={title.value}\n prop={props.source}\n rules={props.rules}\n style={formGrid ? `grid-area: ${props.source}` : ''}\n >\n <SkyFileMultipleModelInput\n modelValue={formData[props.source]}\n onUpdate:modelValue={(v) => (formData[props.source] = v)}\n type={props.type}\n dataName={props.dataName}\n dataUrl={props.dataUrl}\n limit={props.limit}\n autoUpload={props.autoUpload}\n {...attrs}\n >\n {slots.default?.()}\n </SkyFileMultipleModelInput>\n </ElFormItem>\n </SkyCanAccess>\n )\n },\n})\n"],"names":["SkyFileMultipleInput","defineComponent","name","inheritAttrs","props","source","type","required","label","rules","default","dataName","dataUrl","limit","autoUpload","attrs","route","useRoute","formGrid","useFormGrid","editData","title","computed","routeMeta","formData"],"mappings":"08BAmBAA,EAAAC,EAAAA,gBAAA,CAGEC,KAAAA,uBACAC,aAAAA,GACAC,MAAAA,CACEC,OAAAA,CACEC,KAAAA,OACAC,SAAAA,IAEFC,MAAAA,OACAC,MAAAA,OACAH,KAAAA,CACEA,KAAAA,OACAI,QAAAA,QAEFC,SAAAA,CACEL,KAAAA,OACAI,QAAAA,QAEFE,QAAAA,CACEN,KAAAA,OACAI,QAAAA,OAEFG,MAAAA,CACEP,KAAAA,OACAI,QAAAA,GAEFI,WAAAA,CACER,KAAAA,QACAI,QAAAA,EACF,oBAEoBK,MAAAA,CAAM,EAAA,CAC1B,MAAAC,EAAAC,EAAAA,SAAA,EACAC,EAAAC,EAAAA,YAAA,cACkBC,SAAAA,eAGlBC,EAAAC,EAAAA,SAAA,IAAAlB,EAAA,OAAAA,EAAA,MAAA,EAEAmB,EAAAP,EAAA,sBAGEQ,EAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,EAAAA,MAAAA,yDAI0C,OAAA,CAAA,SAAA,MAAA,EAA4B,OAAApB,EAAA,MAAsB,EAAA,CAAAM,QAAAA,IAAAA,CAAAA,EAAAA,YAAAA,aAAAA,4FAKtE,MAAAQ,EAAA,cAAAd,EAAA,MAAA,GAAA,EACiC,EAAA,CAAAM,QAAAA,IAAAA,CAAAA,cAAAA,EAAAA,0BAAAA,EAAAA,WAAAA,CAAA,WAAAc,EAAApB,EAAA,MAAA,yGAQ/B,WAAAA,EAAA,UACU,EAAAW,CAAA,EAAA,CACnBL,QAAAA,IAAAA,CAAAA,EAAAA,UAAAA,CAAAA,CAES,CAAA,CAAA,CAAA,CAAA,CAAA,GAK5B,CACF,CAAA"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { FormItemRule, UploadProps } from 'element-plus';
|
|
2
|
-
import { SkyUploadUserFile } from '../../hooks';
|
|
3
2
|
export interface SkyFileMultipleInputProps {
|
|
4
|
-
reference: string;
|
|
5
3
|
source: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
rules?: FormItemRule | FormItemRule[];
|
|
6
6
|
type?: 'file' | 'image';
|
|
7
|
-
dataId?: string;
|
|
8
7
|
dataName?: string;
|
|
9
8
|
dataUrl?: string;
|
|
10
|
-
label?: string;
|
|
11
|
-
rules?: FormItemRule | FormItemRule[];
|
|
12
|
-
name?: string;
|
|
13
|
-
withCredentials?: boolean;
|
|
14
9
|
limit?: number;
|
|
15
|
-
fileList?: SkyUploadUserFile[];
|
|
16
10
|
autoUpload?: UploadProps['autoUpload'];
|
|
17
11
|
}
|
|
18
12
|
export declare const SkyFileMultipleInput: import('vue').DefineComponent<SkyFileMultipleInputProps & Partial<UploadProps>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SkyFileMultipleInputProps & Partial<UploadProps>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import "element-plus/es/components/dialog/style/css";
|
|
2
1
|
import "element-plus/es/components/form-item/style/css";
|
|
3
|
-
import "
|
|
4
|
-
import "element-plus
|
|
5
|
-
import {
|
|
6
|
-
import { EpPlus as j } from "../../icons/EpPlus.mjs";
|
|
7
|
-
import { ElFormItem as O, ElUpload as z, ElLoadingDirective as H, ElIcon as b, ElDialog as J, genFileId as K } from "element-plus";
|
|
8
|
-
import { useRoute as Q } from "vue-router";
|
|
9
|
-
import { useAsyncState as W } from "@vueuse/core";
|
|
2
|
+
import { defineComponent as c, computed as p, createVNode as r, mergeProps as f } from "vue";
|
|
3
|
+
import { ElFormItem as s } from "element-plus";
|
|
4
|
+
import { useRoute as y } from "vue-router";
|
|
10
5
|
import "../../hooks/useUser.mjs";
|
|
11
6
|
import "../../hooks/usePermission.mjs";
|
|
12
7
|
import "../../hooks/useMenu.mjs";
|
|
@@ -17,36 +12,29 @@ import "../../hooks/useLang.mjs";
|
|
|
17
12
|
import "../../hooks/useTheme.mjs";
|
|
18
13
|
import "../../hooks/useList.mjs";
|
|
19
14
|
import "../../hooks/useHiddenTitle.mjs";
|
|
20
|
-
import { useForm as
|
|
15
|
+
import { useForm as S } from "../../hooks/useForm.mjs";
|
|
21
16
|
import "../../hooks/useShow.mjs";
|
|
22
17
|
import "../../hooks/useReferenceArrayField.mjs";
|
|
23
18
|
import "../../hooks/useTreeWithDetails.mjs";
|
|
24
|
-
import { useFormGrid as
|
|
19
|
+
import { useFormGrid as g } from "../../hooks/useFormGrid.mjs";
|
|
25
20
|
import "../../hooks/useReferenceArrayInput.mjs";
|
|
26
|
-
import
|
|
27
|
-
import { SkyCanAccess as
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
const _e = /* @__PURE__ */ T({
|
|
21
|
+
import "vue-i18n";
|
|
22
|
+
import { SkyCanAccess as U } from "../can-access/index.mjs";
|
|
23
|
+
import { SkyFileMultipleModelInput as F } from "../file-multiple-model-input/index.mjs";
|
|
24
|
+
const H = /* @__PURE__ */ c({
|
|
31
25
|
name: "SkyFileMultipleInput",
|
|
32
26
|
inheritAttrs: !1,
|
|
33
27
|
props: {
|
|
34
|
-
reference: {
|
|
35
|
-
type: String,
|
|
36
|
-
required: !0
|
|
37
|
-
},
|
|
38
28
|
source: {
|
|
39
29
|
type: String,
|
|
40
30
|
required: !0
|
|
41
31
|
},
|
|
32
|
+
label: String,
|
|
33
|
+
rules: Object,
|
|
42
34
|
type: {
|
|
43
35
|
type: String,
|
|
44
36
|
default: "file"
|
|
45
37
|
},
|
|
46
|
-
dataId: {
|
|
47
|
-
type: String,
|
|
48
|
-
default: "id"
|
|
49
|
-
},
|
|
50
38
|
dataName: {
|
|
51
39
|
type: String,
|
|
52
40
|
default: "name"
|
|
@@ -55,147 +43,51 @@ const _e = /* @__PURE__ */ T({
|
|
|
55
43
|
type: String,
|
|
56
44
|
default: "url"
|
|
57
45
|
},
|
|
58
|
-
label: String,
|
|
59
|
-
rules: Object,
|
|
60
46
|
limit: {
|
|
61
47
|
type: Number,
|
|
62
48
|
default: 1
|
|
63
49
|
},
|
|
64
|
-
fileList: {
|
|
65
|
-
type: Array,
|
|
66
|
-
default: () => []
|
|
67
|
-
},
|
|
68
50
|
autoUpload: {
|
|
69
51
|
type: Boolean,
|
|
70
52
|
default: !0
|
|
71
53
|
}
|
|
72
54
|
},
|
|
73
|
-
setup(
|
|
74
|
-
slots:
|
|
75
|
-
attrs:
|
|
55
|
+
setup(t, {
|
|
56
|
+
slots: i,
|
|
57
|
+
attrs: a
|
|
76
58
|
}) {
|
|
77
|
-
const {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
p.value && (r[e.source] = p.value[e.source]);
|
|
84
|
-
const P = (a) => {
|
|
85
|
-
if (e.limit === 1) {
|
|
86
|
-
d.value?.clearFiles();
|
|
87
|
-
const t = a[0];
|
|
88
|
-
t.uid = K(), d.value?.handleStart(t), e.autoUpload && d.value?.submit();
|
|
89
|
-
}
|
|
90
|
-
}, R = () => {
|
|
91
|
-
const a = [];
|
|
92
|
-
for (const t of u.value)
|
|
93
|
-
if (t.id)
|
|
94
|
-
a.push(t.id);
|
|
95
|
-
else {
|
|
96
|
-
const i = t.raw;
|
|
97
|
-
i?.data?.id && (t.id = i.data.id, a.push(i.data.id));
|
|
98
|
-
}
|
|
99
|
-
r[e.source] = a;
|
|
100
|
-
}, n = o(!1), v = o(), _ = (a) => {
|
|
101
|
-
v.value = a.url, n.value = !0;
|
|
102
|
-
};
|
|
103
|
-
let y;
|
|
104
|
-
const {
|
|
105
|
-
isLoading: x
|
|
106
|
-
} = W(async () => {
|
|
107
|
-
const a = r[e.source];
|
|
108
|
-
if (a) {
|
|
109
|
-
y = new AbortController();
|
|
110
|
-
const t = await k.dataProvider?.getMany?.(e.reference, {
|
|
111
|
-
ids: a,
|
|
112
|
-
signal: y.signal
|
|
113
|
-
});
|
|
114
|
-
if (t?.data)
|
|
115
|
-
return u.value = t.data.map((i) => ({
|
|
116
|
-
id: i[e.dataId],
|
|
117
|
-
name: i[e.dataName],
|
|
118
|
-
url: i[e.dataUrl]
|
|
119
|
-
})), t;
|
|
120
|
-
}
|
|
121
|
-
}, void 0, {
|
|
122
|
-
immediate: !0
|
|
123
|
-
}), g = o(""), h = s(), S = s(), U = o(), A = o(), D = async (a) => {
|
|
124
|
-
const t = await k.dataProvider?.getUploadConfig?.({
|
|
125
|
-
file: a
|
|
126
|
-
});
|
|
127
|
-
t?.data && (g.value = t.data.action, h.value = t.data.data, S.value = t.data.headers, U.value = t.data.method, A.value = t.data.name, a.data = {
|
|
128
|
-
id: t.data.file.id,
|
|
129
|
-
name: t.data.file.name,
|
|
130
|
-
url: t.data.file.url
|
|
131
|
-
});
|
|
132
|
-
}, N = m(() => e.type === "image" ? "image/*" : void 0), M = m(() => e.type === "image" ? "picture-card" : "text");
|
|
133
|
-
return () => l(Z, {
|
|
134
|
-
resource: L.resource,
|
|
59
|
+
const l = y(), u = g(), {
|
|
60
|
+
formData: e,
|
|
61
|
+
editData: o
|
|
62
|
+
} = S(), m = p(() => t.label || t.source), d = l.meta;
|
|
63
|
+
return o.value && (e[t.source] = o.value[t.source]), () => r(U, {
|
|
64
|
+
resource: d.resource,
|
|
135
65
|
action: ["create", "edit"],
|
|
136
|
-
column:
|
|
66
|
+
column: t.source
|
|
137
67
|
}, {
|
|
138
|
-
default: () => [
|
|
139
|
-
class: ["sky-file-multiple-input", `is-${
|
|
140
|
-
label:
|
|
141
|
-
prop:
|
|
142
|
-
rules:
|
|
143
|
-
style:
|
|
68
|
+
default: () => [r(s, {
|
|
69
|
+
class: ["sky-file-multiple-input", `is-${t.type}`],
|
|
70
|
+
label: m.value,
|
|
71
|
+
prop: t.source,
|
|
72
|
+
rules: t.rules,
|
|
73
|
+
style: u ? `grid-area: ${t.source}` : ""
|
|
144
74
|
}, {
|
|
145
|
-
default: () => [
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
onExceed: P,
|
|
156
|
-
headers: S.value,
|
|
157
|
-
data: h.value,
|
|
158
|
-
listType: M.value,
|
|
159
|
-
fileList: u.value,
|
|
160
|
-
"onUpdate:file-list": (a) => u.value = a,
|
|
161
|
-
autoUpload: e.autoUpload,
|
|
162
|
-
drag: e.type === "file",
|
|
163
|
-
showFileList: !0,
|
|
164
|
-
onPreview: _,
|
|
165
|
-
accept: N.value
|
|
166
|
-
}, E), {
|
|
167
|
-
default: () => e.type === "image" ? l(b, null, {
|
|
168
|
-
default: () => [l(j, null, null)]
|
|
169
|
-
}) : l(w, null, [l(b, {
|
|
170
|
-
class: "sky-file-multiple-input__icon"
|
|
171
|
-
}, {
|
|
172
|
-
default: () => [l(ee, null, null)]
|
|
173
|
-
}), l("div", {
|
|
174
|
-
class: "sky-file-multiple-input__text"
|
|
175
|
-
}, [f("upload.drop"), l("em", null, [f("upload.click")])])]),
|
|
176
|
-
file: (a) => {
|
|
177
|
-
if (c.default) {
|
|
178
|
-
const t = c.default();
|
|
179
|
-
return B(G(w, t.map((i) => $(i, {
|
|
180
|
-
...a
|
|
181
|
-
}))), [[H, x.value]]);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}), l(J, {
|
|
185
|
-
appendToBody: !0,
|
|
186
|
-
modelValue: n.value,
|
|
187
|
-
"onUpdate:modelValue": (a) => n.value = a
|
|
188
|
-
}, {
|
|
189
|
-
default: () => [l("img", {
|
|
190
|
-
class: "sky-file-multiple-input__img",
|
|
191
|
-
src: v.value
|
|
192
|
-
}, null)]
|
|
75
|
+
default: () => [r(F, f({
|
|
76
|
+
modelValue: e[t.source],
|
|
77
|
+
"onUpdate:modelValue": (n) => e[t.source] = n,
|
|
78
|
+
type: t.type,
|
|
79
|
+
dataName: t.dataName,
|
|
80
|
+
dataUrl: t.dataUrl,
|
|
81
|
+
limit: t.limit,
|
|
82
|
+
autoUpload: t.autoUpload
|
|
83
|
+
}, a), {
|
|
84
|
+
default: () => [i.default?.()]
|
|
193
85
|
})]
|
|
194
86
|
})]
|
|
195
87
|
});
|
|
196
88
|
}
|
|
197
89
|
});
|
|
198
90
|
export {
|
|
199
|
-
|
|
91
|
+
H as SkyFileMultipleInput
|
|
200
92
|
};
|
|
201
93
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/components/file-multiple-input/index.tsx"],"sourcesContent":["import { EpPlus } from '@/icons/EpPlus'\nimport type { GetManyResult, Identifier, SkyUploadRawFile } from '@/provides'\nimport {\n ElDialog,\n ElFormItem,\n ElIcon,\n ElLoadingDirective,\n ElUpload,\n genFileId,\n type FormItemRule,\n type UploadFile,\n type UploadInstance,\n type UploadProps,\n type UploadRawFile,\n} from 'element-plus'\nimport {\n cloneVNode,\n computed,\n defineComponent,\n Fragment,\n h,\n ref,\n shallowRef,\n useTemplateRef,\n withDirectives,\n} from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useAsyncState } from '@vueuse/core'\nimport { useForm, useFormGrid, type SkyUploadUserFile } from '@/hooks'\nimport { skyConfig } from '@/setup'\nimport type { SkyLayoutRouteMeta } from '@/router'\nimport { SkyCanAccess } from '../can-access'\nimport { EpUploadFilled } from '@/icons/EpUploadFilled'\nimport { useI18n } from 'vue-i18n'\n\nexport interface SkyFileMultipleInputProps {\n reference: string\n source: string\n type?: 'file' | 'image'\n dataId?: string\n dataName?: string\n dataUrl?: string\n label?: string\n rules?: FormItemRule | FormItemRule[]\n name?: string\n withCredentials?: boolean\n limit?: number\n fileList?: SkyUploadUserFile[]\n autoUpload?: UploadProps['autoUpload']\n}\n\nexport const SkyFileMultipleInput = defineComponent<\n SkyFileMultipleInputProps & Partial<UploadProps>\n>({\n name: 'SkyFileMultipleInput',\n inheritAttrs: false,\n props: {\n reference: {\n type: String,\n required: true,\n },\n source: {\n type: String,\n required: true,\n },\n type: {\n type: String,\n default: 'file',\n },\n dataId: {\n type: String,\n default: 'id',\n },\n dataName: {\n type: String,\n default: 'name',\n },\n dataUrl: {\n type: String,\n default: 'url',\n },\n label: String,\n rules: Object,\n limit: {\n type: Number,\n default: 1,\n },\n fileList: {\n type: Array,\n default: () => [],\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n const { t } = useI18n()\n const route = useRoute()\n const formGrid = useFormGrid()\n const { formData, editData } = useForm()!\n const title = computed<string>(() => props.label || props.source)\n // init fileList\n const fileList = shallowRef<SkyUploadUserFile[]>(props.fileList!)\n const uploadRef = useTemplateRef<UploadInstance>('uploadRef')\n const routeMeta = route.meta as SkyLayoutRouteMeta\n\n if (editData.value) {\n formData[props.source] = editData.value[props.source]\n }\n\n const onExceed = (files: File[]) => {\n if (props.limit === 1) {\n uploadRef.value?.clearFiles()\n const file = files[0] as UploadRawFile\n file.uid = genFileId()\n uploadRef.value?.handleStart(file)\n if (props.autoUpload) {\n uploadRef.value?.submit()\n }\n }\n }\n\n const onSuccess = () => {\n const ids: Identifier[] = []\n for (const fl of fileList.value) {\n if (fl.id) {\n ids.push(fl.id as Identifier)\n } else {\n const raw = fl.raw as SkyUploadRawFile | undefined\n if (raw?.data?.id) {\n fl.id = raw.data.id as Identifier\n ids.push(raw.data.id as Identifier)\n }\n }\n }\n formData[props.source] = ids\n }\n\n const preview = ref(false)\n const previewUrl = ref<string>()\n const onPreview = (file: UploadFile) => {\n previewUrl.value = file.url\n preview.value = true\n }\n\n let controller: AbortController | undefined\n const { isLoading } = useAsyncState<GetManyResult | undefined>(\n async () => {\n const ids = formData[props.source]\n if (ids) {\n controller = new AbortController()\n const res = await skyConfig.dataProvider?.getMany?.(props.reference, {\n ids: ids as Identifier[],\n signal: controller.signal,\n })\n\n if (res?.data) {\n fileList.value = res.data.map((d) => ({\n id: d[props.dataId!] as Identifier,\n name: d[props.dataName!] as string,\n url: d[props.dataUrl!] as string,\n }))\n return res\n }\n }\n },\n undefined,\n {\n immediate: true,\n },\n )\n\n const action = ref('')\n const data = shallowRef<Record<string, unknown>>()\n const headers = shallowRef<Record<string, unknown>>()\n const method = ref()\n const name = ref<string>()\n const beforeUpload = async (rawFile: SkyUploadRawFile) => {\n const res = await skyConfig.dataProvider?.getUploadConfig?.({\n file: rawFile,\n })\n if (res?.data) {\n action.value = res.data.action\n data.value = res.data.data\n headers.value = res.data.headers\n method.value = res.data.method\n name.value = res.data.name\n rawFile.data = {\n id: res.data.file.id,\n name: res.data.file.name,\n url: res.data.file.url,\n }\n }\n }\n\n const accept = computed(() => (props.type === 'image' ? 'image/*' : undefined))\n const listType = computed(() => (props.type === 'image' ? 'picture-card' : 'text'))\n\n return () => (\n <SkyCanAccess resource={routeMeta.resource} action={['create', 'edit']} column={props.source}>\n <ElFormItem\n class={['sky-file-multiple-input', `is-${props.type}`]}\n label={title.value}\n prop={props.source}\n rules={props.rules}\n style={formGrid ? `grid-area: ${props.source}` : ''}\n >\n <ElUpload\n ref=\"uploadRef\"\n action={action.value}\n method={method.value}\n name={props.name}\n withCredentials={props.withCredentials}\n multiple={props.limit! > 1}\n limit={props.limit}\n beforeUpload={beforeUpload}\n onSuccess={onSuccess}\n onExceed={onExceed}\n headers={headers.value}\n data={data.value}\n listType={listType.value}\n fileList={fileList.value}\n onUpdate:file-list={(fs: SkyUploadUserFile[]) => (fileList.value = fs)}\n autoUpload={props.autoUpload}\n drag={props.type === 'file'}\n showFileList\n onPreview={onPreview}\n // https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Attributes/accept\n accept={accept.value}\n {...attrs}\n >\n {{\n default: () =>\n props.type === 'image' ? (\n <ElIcon>\n <EpPlus />\n </ElIcon>\n ) : (\n <>\n <ElIcon class=\"sky-file-multiple-input__icon\">\n <EpUploadFilled />\n </ElIcon>\n <div class=\"sky-file-multiple-input__text\">\n {t('upload.drop')}\n <em>{t('upload.click')}</em>\n </div>\n </>\n ),\n file: (scope: { file: UploadFile; index: number }) => {\n if (slots.default) {\n const vnodes = slots.default()\n return withDirectives(\n h(\n Fragment,\n vnodes.map((vnode) => cloneVNode(vnode, { ...scope })),\n ),\n [[ElLoadingDirective, isLoading.value]],\n )\n }\n },\n }}\n </ElUpload>\n <ElDialog\n appendToBody\n modelValue={preview.value}\n onUpdate:modelValue={(v) => (preview.value = v)}\n >\n <img class=\"sky-file-multiple-input__img\" src={previewUrl.value} />\n </ElDialog>\n </ElFormItem>\n </SkyCanAccess>\n )\n },\n})\n"],"names":["SkyFileMultipleInput","defineComponent","name","inheritAttrs","props","reference","type","required","source","default","dataId","dataName","dataUrl","label","rules","limit","fileList","autoUpload","attrs","t","route","useRoute","formGrid","useFormGrid","editData","title","computed","shallowRef","uploadRef","useTemplateRef","routeMeta","formData","file","files","fl","ids","raw","preview","ref","previewUrl","controller","isLoading","res","skyConfig","id","url","immediate","action","data","headers","method","beforeUpload","rawFile","accept","listType","onSuccess","onExceed","fs","onPreview","_createVNode","_Fragment","ElIcon","vnodes","slots","withDirectives","h","Fragment","vnode","cloneVNode","ElLoadingDirective","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/components/file-multiple-input/index.tsx"],"sourcesContent":["import { ElFormItem, type FormItemRule, type UploadProps } from 'element-plus'\nimport { computed, defineComponent } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useForm, useFormGrid, type FormContext } from '@/hooks'\nimport type { SkyLayoutRouteMeta } from '@/router'\nimport { SkyCanAccess } from '../can-access'\nimport { SkyFileMultipleModelInput } from '../file-multiple-model-input'\n\nexport interface SkyFileMultipleInputProps {\n source: string\n label?: string\n rules?: FormItemRule | FormItemRule[]\n type?: 'file' | 'image'\n dataName?: string\n dataUrl?: string\n limit?: number\n autoUpload?: UploadProps['autoUpload']\n}\n\nexport const SkyFileMultipleInput = defineComponent<\n SkyFileMultipleInputProps & Partial<UploadProps>\n>({\n name: 'SkyFileMultipleInput',\n inheritAttrs: false,\n props: {\n source: {\n type: String,\n required: true,\n },\n label: String,\n rules: Object,\n type: {\n type: String,\n default: 'file',\n },\n dataName: {\n type: String,\n default: 'name',\n },\n dataUrl: {\n type: String,\n default: 'url',\n },\n limit: {\n type: Number,\n default: 1,\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n const route = useRoute()\n const formGrid = useFormGrid()\n const { formData, editData } = useForm()! as FormContext<\n Record<string, Array<Record<string, unknown>>>\n >\n const title = computed<string>(() => props.label || props.source)\n // init fileList\n const routeMeta = route.meta as SkyLayoutRouteMeta\n\n if (editData.value) {\n formData[props.source] = editData.value[props.source] as Array<Record<string, unknown>>\n }\n\n return () => (\n <SkyCanAccess resource={routeMeta.resource} action={['create', 'edit']} column={props.source}>\n <ElFormItem\n class={['sky-file-multiple-input', `is-${props.type}`]}\n label={title.value}\n prop={props.source}\n rules={props.rules}\n style={formGrid ? `grid-area: ${props.source}` : ''}\n >\n <SkyFileMultipleModelInput\n modelValue={formData[props.source]}\n onUpdate:modelValue={(v) => (formData[props.source] = v)}\n type={props.type}\n dataName={props.dataName}\n dataUrl={props.dataUrl}\n limit={props.limit}\n autoUpload={props.autoUpload}\n {...attrs}\n >\n {slots.default?.()}\n </SkyFileMultipleModelInput>\n </ElFormItem>\n </SkyCanAccess>\n )\n },\n})\n"],"names":["SkyFileMultipleInput","defineComponent","name","inheritAttrs","props","source","type","required","label","rules","default","dataName","dataUrl","limit","autoUpload","attrs","route","useRoute","formGrid","useFormGrid","editData","title","computed","routeMeta","formData"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAAA,IAAA,gBAAAC,EAAA;AAAA,EAGEC,MAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,OAAAA;AAAAA,IACEC,QAAAA;AAAAA,MACEC,MAAAA;AAAAA,MACAC,UAAAA;AAAAA;IAEFC,OAAAA;AAAAA,IACAC,OAAAA;AAAAA,IACAH,MAAAA;AAAAA,MACEA,MAAAA;AAAAA,MACAI,SAAAA;AAAAA;IAEFC,UAAAA;AAAAA,MACEL,MAAAA;AAAAA,MACAI,SAAAA;AAAAA;IAEFE,SAAAA;AAAAA,MACEN,MAAAA;AAAAA,MACAI,SAAAA;AAAAA;IAEFG,OAAAA;AAAAA,MACEP,MAAAA;AAAAA,MACAI,SAAAA;AAAAA;IAEFI,YAAAA;AAAAA,MACER,MAAAA;AAAAA,MACAI,SAAAA;AAAAA,IACF;AAAA;;;IAEoBK,OAAAA;AAAAA,EAAM,GAAA;AAC1B,UAAAC,IAAAC,EAAA,GACAC,IAAAC,EAAA;;MACkBC,UAAAA;AAAAA,aAGlBC,IAAAC,EAAA,MAAAlB,EAAA,SAAAA,EAAA,MAAA,GAEAmB,IAAAP,EAAA;uBAGEQ,EAAAA,EAAAA,MAAAA,IAAAA,EAAAA,MAAAA,EAAAA,MAAAA;;MAI0C,QAAA,CAAA,UAAA,MAAA;AAAA,MAA4B,QAAApB,EAAA;AAAA,IAAsB,GAAA;AAAA,MAAAM,SAAAA,MAAAA,CAAAA,EAAAA,GAAAA;AAAAA;;;;QAKtE,OAAAQ,IAAA,cAAAd,EAAA,MAAA,KAAA;AAAA,MACiC,GAAA;AAAA,QAAAM,SAAAA,MAAAA,CAAAA,EAAAA,GAAAA,EAAAA;AAAAA,UAAA,YAAAc,EAAApB,EAAA,MAAA;AAAA;;;;;UAQ/B,YAAAA,EAAA;AAAA,QACU,GAAAW,CAAA,GAAA;AAAA,UACnBL,SAAAA,MAAAA,CAAAA,EAAAA,UAAAA,CAAAA;AAAAA,QAES,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA;AAAA;EAK5B;AACF,CAAA;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("element-plus/es/components/dialog/style/css");require("element-plus/es/components/icon/style/css");require("element-plus/es/components/upload/style/css");const e=require("vue"),E=require("../../icons/EpPlus.cjs"),a=require("element-plus");require("../../hooks/useUser.cjs");require("../../hooks/usePermission.cjs");require("../../hooks/useMenu.cjs");require("../../hooks/useTab.cjs");require("../../hooks/useRouteKeepAlive.cjs");require("../../hooks/useSize.cjs");require("../../hooks/useLang.cjs");require("../../hooks/useTheme.cjs");require("../../hooks/useList.cjs");require("../../hooks/useHiddenTitle.cjs");require("../../hooks/useForm.cjs");require("../../hooks/useShow.cjs");require("../../hooks/useReferenceArrayField.cjs");require("../../hooks/useTreeWithDetails.cjs");require("../../hooks/useFormGrid.cjs");require("../../hooks/useReferenceArrayInput.cjs");const k=require("../../hooks/useUpload.cjs"),I=require("../../icons/EpUploadFilled.cjs"),w=require("vue-i18n"),M=e.defineComponent({name:"SkyFileMultipleModelInput",inheritAttrs:!1,props:{type:{type:String,default:"file"},dataName:{type:String,default:"name"},dataUrl:{type:String,default:"url"},limit:{type:Number,default:1},autoUpload:{type:Boolean,default:!0},modelValue:{type:Array,default:()=>[]}},emits:{"update:modelValue":t=>t},setup(t,{slots:n,attrs:p,emit:m}){const{t:c}=w.useI18n(),{fileList:i,action:f,data:v,headers:q,method:y,name:g,beforeUpload:V}=k.useUpload(),o=e.useTemplateRef("uploadRef");i.value=t.modelValue.map(l=>({upload:l,name:l[t.dataName],url:l[t.dataUrl]}));const U=l=>{if(t.limit===1){o.value?.clearFiles();const u=l[0];u.uid=a.genFileId(),o.value?.handleStart(u),t.autoUpload&&o.value?.submit()}},N=()=>{const l=[];for(const u of i.value)if(u.upload)l.push(u.upload);else{const r=u.raw;r?.upload&&l.push(r.upload)}m("update:modelValue",l)},d=e.ref(!1),s=e.ref(),F=l=>{s.value=l.url,d.value=!0},S=e.computed(()=>t.type==="image"?"image/*":void 0),h=e.computed(()=>t.type==="image"?"picture-card":"text");return()=>e.createVNode(e.Fragment,null,[e.createVNode(a.ElUpload,e.mergeProps({class:"sky-file-multiple-model-input",ref:"uploadRef",action:f.value,method:y.value,name:g.value,multiple:t.limit>1,limit:t.limit,beforeUpload:V,onSuccess:N,onExceed:U,headers:q.value,data:v.value,listType:h.value,fileList:i.value,"onUpdate:file-list":l=>i.value=l,autoUpload:t.autoUpload,drag:t.type==="file",showFileList:!0,onPreview:F,accept:S.value},p),{default:()=>t.type==="image"?e.createVNode(a.ElIcon,null,{default:()=>[e.createVNode(E.EpPlus,null,null)]}):e.createVNode(e.Fragment,null,[e.createVNode(a.ElIcon,{class:"sky-file-multiple-model-input__icon"},{default:()=>[e.createVNode(I.EpUploadFilled,null,null)]}),e.createVNode("div",{class:"sky-file-multiple-model-input__text"},[c("upload.drop"),e.createVNode("em",null,[c("upload.click")])])]),file:l=>{if(n.default){const u=n.default();return e.h(e.Fragment,u.map(r=>e.cloneVNode(r,{...l})))}}}),e.createVNode(a.ElDialog,{appendToBody:!0,modelValue:d.value,"onUpdate:modelValue":l=>d.value=l},{default:()=>[e.createVNode("img",{class:"sky-file-multiple-model-input__img",src:s.value},null)]})])}});exports.SkyFileMultipleModelInput=M;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/file-multiple-model-input/index.tsx"],"sourcesContent":["import { EpPlus } from '@/icons/EpPlus'\nimport type { SkyUploadRawFile } from '@/provides'\nimport {\n ElDialog,\n ElIcon,\n ElUpload,\n genFileId,\n type UploadFile,\n type UploadInstance,\n type UploadProps,\n type UploadRawFile,\n} from 'element-plus'\nimport {\n cloneVNode,\n computed,\n defineComponent,\n Fragment,\n h,\n ref,\n useTemplateRef,\n type PropType,\n} from 'vue'\nimport { useUpload, type SkyUploadUserFile } from '@/hooks'\nimport { EpUploadFilled } from '@/icons/EpUploadFilled'\nimport { useI18n } from 'vue-i18n'\n\nexport type SkyFileMultipleModelInputProps = {\n type?: 'file' | 'image'\n dataName?: string\n dataUrl?: string\n limit?: number\n autoUpload?: UploadProps['autoUpload']\n modelValue?: Array<Record<string, unknown>>\n} & Partial<UploadProps>\n\nexport const SkyFileMultipleModelInput = defineComponent({\n name: 'SkyFileMultipleModelInput',\n inheritAttrs: false,\n props: {\n // 这样就不能透传了\n // ...uploadProps,\n type: {\n type: String,\n default: 'file',\n },\n dataName: {\n type: String,\n default: 'name',\n },\n dataUrl: {\n type: String,\n default: 'url',\n },\n limit: {\n type: Number,\n default: 1,\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n modelValue: {\n type: Array as PropType<Array<Record<string, unknown>>>,\n default: () => [],\n },\n },\n emits: {\n 'update:modelValue': (value: Array<Record<string, unknown>>) => value,\n },\n setup(props, { slots, attrs, emit }) {\n const { t } = useI18n()\n // init fileList\n const { fileList, action, data, headers, method, name, beforeUpload } = useUpload()\n const uploadRef = useTemplateRef<UploadInstance>('uploadRef')\n\n fileList.value = props.modelValue!.map((md) => ({\n upload: md,\n name: md[props.dataName!] as string,\n url: md[props.dataUrl!] as string,\n }))\n\n const onExceed = (files: File[]) => {\n if (props.limit === 1) {\n uploadRef.value?.clearFiles()\n const file = files[0] as UploadRawFile\n file.uid = genFileId()\n uploadRef.value?.handleStart(file)\n if (props.autoUpload) {\n uploadRef.value?.submit()\n }\n }\n }\n\n const onSuccess = () => {\n const result: Array<Record<string, unknown>> = []\n for (const fl of fileList.value) {\n if (fl.upload) {\n result.push(fl.upload)\n } else {\n const raw = fl.raw as SkyUploadRawFile | undefined\n if (raw?.upload) {\n result.push(raw.upload)\n }\n }\n }\n emit('update:modelValue', result)\n }\n\n const preview = ref(false)\n const previewUrl = ref<string>()\n const onPreview = (file: UploadFile) => {\n previewUrl.value = file.url\n preview.value = true\n }\n\n const accept = computed(() => (props.type === 'image' ? 'image/*' : undefined))\n const listType = computed(() => (props.type === 'image' ? 'picture-card' : 'text'))\n\n return () => (\n <>\n <ElUpload\n class=\"sky-file-multiple-model-input\"\n ref=\"uploadRef\"\n action={action.value}\n method={method.value}\n name={name.value}\n multiple={props.limit! > 1}\n limit={props.limit}\n beforeUpload={beforeUpload}\n onSuccess={onSuccess}\n onExceed={onExceed}\n headers={headers.value}\n data={data.value}\n listType={listType.value}\n fileList={fileList.value}\n onUpdate:file-list={(fs: SkyUploadUserFile[]) => (fileList.value = fs)}\n autoUpload={props.autoUpload}\n drag={props.type === 'file'}\n showFileList\n onPreview={onPreview}\n // https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Attributes/accept\n accept={accept.value}\n {...attrs}\n >\n {{\n default: () =>\n props.type === 'image' ? (\n <ElIcon>\n <EpPlus />\n </ElIcon>\n ) : (\n <>\n <ElIcon class=\"sky-file-multiple-model-input__icon\">\n <EpUploadFilled />\n </ElIcon>\n <div class=\"sky-file-multiple-model-input__text\">\n {t('upload.drop')}\n <em>{t('upload.click')}</em>\n </div>\n </>\n ),\n file: (scope: { file: UploadFile; index: number }) => {\n if (slots.default) {\n const vnodes = slots.default()\n return h(\n Fragment,\n vnodes.map((vnode) => cloneVNode(vnode, { ...scope })),\n )\n }\n },\n }}\n </ElUpload>\n <ElDialog\n appendToBody\n modelValue={preview.value}\n onUpdate:modelValue={(v) => (preview.value = v)}\n >\n <img class=\"sky-file-multiple-model-input__img\" src={previewUrl.value} />\n </ElDialog>\n </>\n )\n },\n})\n"],"names":["SkyFileMultipleModelInput","defineComponent","name","inheritAttrs","props","type","default","dataName","dataUrl","limit","autoUpload","modelValue","emits","emit","t","beforeUpload","uploadRef","useTemplateRef","upload","url","file","files","fl","fileList","result","raw","preview","ref","previewUrl","accept","computed","listType","onSuccess","onExceed","fs","onPreview","attrs","_createVNode","_Fragment","ElIcon","vnodes","slots","h","Fragment","vnode","cloneVNode","v"],"mappings":"2iCAmCAA,EAAAC,EAAAA,gBAAA,CACEC,KAAAA,4BACAC,aAAAA,GACAC,MAAAA,CAGEC,KAAAA,CACEA,KAAAA,OACAC,QAAAA,QAEFC,SAAAA,CACEF,KAAAA,OACAC,QAAAA,QAEFE,QAAAA,CACEH,KAAAA,OACAC,QAAAA,OAEFG,MAAAA,CACEJ,KAAAA,OACAC,QAAAA,GAEFI,WAAAA,CACEL,KAAAA,QACAC,QAAAA,IAEFK,WAAAA,CACEN,KAAAA,oBAEF,GAEFO,MAAAA,oDAG6BC,KAAAA,CAAK,EAAA,OACxBC,EAAAA,qEAE+CC,aAAAA,iBACvDC,EAAAC,EAAAA,eAAA,WAAA,gCAGEC,OAAAA,EACAhB,KAAAA,EAAAA,EAAAA,QAAAA,EACAiB,IAAAA,EAAAA,EAAAA,OAAAA,CACF,EAAA,cAGE,GAAAf,EAAA,QAAA,EAAA,CACEY,EAAAA,OAAAA,WAAAA,EACA,MAAAI,EAAAC,EAAA,CAAA,EACAD,EAAAA,IAAAA,YAAAA,EACAJ,EAAAA,OAAAA,YAAAA,CAAAA,gBAEEA,EAAAA,OAAAA,OAAAA,CAEJ,qBAKA,UAAAM,KAAAC,EAAA,kBAEIC,EAAAA,KAAAA,EAAAA,MAAAA,MACF,CACE,MAAAC,EAAAH,EAAA,eAEEE,EAAAA,KAAAA,EAAAA,MAAAA,CAEJ,CAEFX,EAAAA,oBAAAA,CAAAA,GAGFa,EAAAC,EAAAA,IAAA,EAAA,EACAC,EAAAD,EAAAA,IAAA,QAEEC,EAAAA,MAAAA,EAAAA,gBAIFC,EAAAC,EAAAA,SAAA,IAAA1B,EAAA,OAAA,QAAA,UAAA,MAAA,EACA2B,EAAAD,EAAAA,SAAA,IAAA1B,EAAA,OAAA,QAAA,eAAA,MAAA,kFAEO,MAAA,gCAAA,IAAA,uDAOe,SAAAA,EAAA,MAAA,gBAEE,aAAAW,EACQ,UAAAiB,EACN,SAAAC,iEAKI,qBAAAC,GAAAX,EAAA,MAAAW,0BAEI,KAAA9B,EAAA,OAAA,OACD,aAAA,GAAA,UAAA+B,EAEP,OAAAN,EAAA,KAEA,EAAAO,CAAA,EAAA,2DAKM9B,QAAAA,IAAAA,CAAAA,EAAAA,YAAAA,EAAAA,OAAAA,KAAAA,IAAAA,CAAAA,CAAA,CAAA,EAAA+B,EAAAA,YAAAC,EAAAA,SAAA,KAAA,CAAAD,EAAAA,YAAAE,EAAAA,OAAA,CAAA,MAAA,qCAAA,EAAA,CAAAjC,QAAAA,IAAAA,CAAAA,EAAAA,YAAAA,EAAAA,eAAAA,KAAAA,IAAAA,CAAAA,CAAA,CAAA,EAAA+B,EAAAA,YAAA,MAAA,CAAA,MAAA,iIAiBpB,MAAAG,EAAAC,EAAA,QAAA,EACA,OAAAC,EAAAA,EAAAC,EAAAA,SAAAH,EAAA,IAAAI,GAAAC,EAAAA,WAAAD,EAAA,SAIF,CACF,8BAAC,aAAA,sBAKsB,sBAAAE,GAAApB,EAAA,MAAAoB,CACsB,EAAA,mCAAA,MAAA,qCAAA,IAAAlB,EAAA,KAEsB,EAAA,IAAA,CAAA,KAI7E,CACF,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { UploadProps } from 'element-plus';
|
|
2
|
+
import { PropType } from 'vue';
|
|
3
|
+
export type SkyFileMultipleModelInputProps = {
|
|
4
|
+
type?: 'file' | 'image';
|
|
5
|
+
dataName?: string;
|
|
6
|
+
dataUrl?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
autoUpload?: UploadProps['autoUpload'];
|
|
9
|
+
modelValue?: Array<Record<string, unknown>>;
|
|
10
|
+
} & Partial<UploadProps>;
|
|
11
|
+
export declare const SkyFileMultipleModelInput: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
12
|
+
type: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
dataName: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
dataUrl: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
default: string;
|
|
23
|
+
};
|
|
24
|
+
limit: {
|
|
25
|
+
type: NumberConstructor;
|
|
26
|
+
default: number;
|
|
27
|
+
};
|
|
28
|
+
autoUpload: {
|
|
29
|
+
type: BooleanConstructor;
|
|
30
|
+
default: boolean;
|
|
31
|
+
};
|
|
32
|
+
modelValue: {
|
|
33
|
+
type: PropType<Array<Record<string, unknown>>>;
|
|
34
|
+
default: () => never[];
|
|
35
|
+
};
|
|
36
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
37
|
+
'update:modelValue': (value: Array<Record<string, unknown>>) => Record<string, unknown>[];
|
|
38
|
+
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
39
|
+
type: {
|
|
40
|
+
type: StringConstructor;
|
|
41
|
+
default: string;
|
|
42
|
+
};
|
|
43
|
+
dataName: {
|
|
44
|
+
type: StringConstructor;
|
|
45
|
+
default: string;
|
|
46
|
+
};
|
|
47
|
+
dataUrl: {
|
|
48
|
+
type: StringConstructor;
|
|
49
|
+
default: string;
|
|
50
|
+
};
|
|
51
|
+
limit: {
|
|
52
|
+
type: NumberConstructor;
|
|
53
|
+
default: number;
|
|
54
|
+
};
|
|
55
|
+
autoUpload: {
|
|
56
|
+
type: BooleanConstructor;
|
|
57
|
+
default: boolean;
|
|
58
|
+
};
|
|
59
|
+
modelValue: {
|
|
60
|
+
type: PropType<Array<Record<string, unknown>>>;
|
|
61
|
+
default: () => never[];
|
|
62
|
+
};
|
|
63
|
+
}>> & Readonly<{
|
|
64
|
+
"onUpdate:modelValue"?: ((value: Record<string, unknown>[]) => any) | undefined;
|
|
65
|
+
}>, {
|
|
66
|
+
type: string;
|
|
67
|
+
modelValue: Record<string, unknown>[];
|
|
68
|
+
autoUpload: boolean;
|
|
69
|
+
limit: number;
|
|
70
|
+
dataName: string;
|
|
71
|
+
dataUrl: string;
|
|
72
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import "element-plus/es/components/dialog/style/css";
|
|
2
|
+
import "element-plus/es/components/icon/style/css";
|
|
3
|
+
import "element-plus/es/components/upload/style/css";
|
|
4
|
+
import { defineComponent as I, useTemplateRef as N, ref as f, computed as s, createVNode as t, Fragment as d, mergeProps as b, h as M, cloneVNode as P } from "vue";
|
|
5
|
+
import { EpPlus as R } from "../../icons/EpPlus.mjs";
|
|
6
|
+
import { ElUpload as T, ElIcon as c, ElDialog as L, genFileId as A } from "element-plus";
|
|
7
|
+
import "../../hooks/useUser.mjs";
|
|
8
|
+
import "../../hooks/usePermission.mjs";
|
|
9
|
+
import "../../hooks/useMenu.mjs";
|
|
10
|
+
import "../../hooks/useTab.mjs";
|
|
11
|
+
import "../../hooks/useRouteKeepAlive.mjs";
|
|
12
|
+
import "../../hooks/useSize.mjs";
|
|
13
|
+
import "../../hooks/useLang.mjs";
|
|
14
|
+
import "../../hooks/useTheme.mjs";
|
|
15
|
+
import "../../hooks/useList.mjs";
|
|
16
|
+
import "../../hooks/useHiddenTitle.mjs";
|
|
17
|
+
import "../../hooks/useForm.mjs";
|
|
18
|
+
import "../../hooks/useShow.mjs";
|
|
19
|
+
import "../../hooks/useReferenceArrayField.mjs";
|
|
20
|
+
import "../../hooks/useTreeWithDetails.mjs";
|
|
21
|
+
import "../../hooks/useFormGrid.mjs";
|
|
22
|
+
import "../../hooks/useReferenceArrayInput.mjs";
|
|
23
|
+
import { useUpload as B } from "../../hooks/useUpload.mjs";
|
|
24
|
+
import { EpUploadFilled as C } from "../../icons/EpUploadFilled.mjs";
|
|
25
|
+
import { useI18n as D } from "vue-i18n";
|
|
26
|
+
const ne = /* @__PURE__ */ I({
|
|
27
|
+
name: "SkyFileMultipleModelInput",
|
|
28
|
+
inheritAttrs: !1,
|
|
29
|
+
props: {
|
|
30
|
+
// 这样就不能透传了
|
|
31
|
+
// ...uploadProps,
|
|
32
|
+
type: {
|
|
33
|
+
type: String,
|
|
34
|
+
default: "file"
|
|
35
|
+
},
|
|
36
|
+
dataName: {
|
|
37
|
+
type: String,
|
|
38
|
+
default: "name"
|
|
39
|
+
},
|
|
40
|
+
dataUrl: {
|
|
41
|
+
type: String,
|
|
42
|
+
default: "url"
|
|
43
|
+
},
|
|
44
|
+
limit: {
|
|
45
|
+
type: Number,
|
|
46
|
+
default: 1
|
|
47
|
+
},
|
|
48
|
+
autoUpload: {
|
|
49
|
+
type: Boolean,
|
|
50
|
+
default: !0
|
|
51
|
+
},
|
|
52
|
+
modelValue: {
|
|
53
|
+
type: Array,
|
|
54
|
+
default: () => []
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
emits: {
|
|
58
|
+
"update:modelValue": (l) => l
|
|
59
|
+
},
|
|
60
|
+
setup(l, {
|
|
61
|
+
slots: p,
|
|
62
|
+
attrs: v,
|
|
63
|
+
emit: y
|
|
64
|
+
}) {
|
|
65
|
+
const {
|
|
66
|
+
t: r
|
|
67
|
+
} = D(), {
|
|
68
|
+
fileList: o,
|
|
69
|
+
action: g,
|
|
70
|
+
data: U,
|
|
71
|
+
headers: h,
|
|
72
|
+
method: S,
|
|
73
|
+
name: V,
|
|
74
|
+
beforeUpload: k
|
|
75
|
+
} = B(), u = N("uploadRef");
|
|
76
|
+
o.value = l.modelValue.map((e) => ({
|
|
77
|
+
upload: e,
|
|
78
|
+
name: e[l.dataName],
|
|
79
|
+
url: e[l.dataUrl]
|
|
80
|
+
}));
|
|
81
|
+
const w = (e) => {
|
|
82
|
+
if (l.limit === 1) {
|
|
83
|
+
u.value?.clearFiles();
|
|
84
|
+
const a = e[0];
|
|
85
|
+
a.uid = A(), u.value?.handleStart(a), l.autoUpload && u.value?.submit();
|
|
86
|
+
}
|
|
87
|
+
}, E = () => {
|
|
88
|
+
const e = [];
|
|
89
|
+
for (const a of o.value)
|
|
90
|
+
if (a.upload)
|
|
91
|
+
e.push(a.upload);
|
|
92
|
+
else {
|
|
93
|
+
const i = a.raw;
|
|
94
|
+
i?.upload && e.push(i.upload);
|
|
95
|
+
}
|
|
96
|
+
y("update:modelValue", e);
|
|
97
|
+
}, m = f(!1), n = f(), F = (e) => {
|
|
98
|
+
n.value = e.url, m.value = !0;
|
|
99
|
+
}, _ = s(() => l.type === "image" ? "image/*" : void 0), x = s(() => l.type === "image" ? "picture-card" : "text");
|
|
100
|
+
return () => t(d, null, [t(T, b({
|
|
101
|
+
class: "sky-file-multiple-model-input",
|
|
102
|
+
ref: "uploadRef",
|
|
103
|
+
action: g.value,
|
|
104
|
+
method: S.value,
|
|
105
|
+
name: V.value,
|
|
106
|
+
multiple: l.limit > 1,
|
|
107
|
+
limit: l.limit,
|
|
108
|
+
beforeUpload: k,
|
|
109
|
+
onSuccess: E,
|
|
110
|
+
onExceed: w,
|
|
111
|
+
headers: h.value,
|
|
112
|
+
data: U.value,
|
|
113
|
+
listType: x.value,
|
|
114
|
+
fileList: o.value,
|
|
115
|
+
"onUpdate:file-list": (e) => o.value = e,
|
|
116
|
+
autoUpload: l.autoUpload,
|
|
117
|
+
drag: l.type === "file",
|
|
118
|
+
showFileList: !0,
|
|
119
|
+
onPreview: F,
|
|
120
|
+
accept: _.value
|
|
121
|
+
}, v), {
|
|
122
|
+
default: () => l.type === "image" ? t(c, null, {
|
|
123
|
+
default: () => [t(R, null, null)]
|
|
124
|
+
}) : t(d, null, [t(c, {
|
|
125
|
+
class: "sky-file-multiple-model-input__icon"
|
|
126
|
+
}, {
|
|
127
|
+
default: () => [t(C, null, null)]
|
|
128
|
+
}), t("div", {
|
|
129
|
+
class: "sky-file-multiple-model-input__text"
|
|
130
|
+
}, [r("upload.drop"), t("em", null, [r("upload.click")])])]),
|
|
131
|
+
file: (e) => {
|
|
132
|
+
if (p.default) {
|
|
133
|
+
const a = p.default();
|
|
134
|
+
return M(d, a.map((i) => P(i, {
|
|
135
|
+
...e
|
|
136
|
+
})));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}), t(L, {
|
|
140
|
+
appendToBody: !0,
|
|
141
|
+
modelValue: m.value,
|
|
142
|
+
"onUpdate:modelValue": (e) => m.value = e
|
|
143
|
+
}, {
|
|
144
|
+
default: () => [t("img", {
|
|
145
|
+
class: "sky-file-multiple-model-input__img",
|
|
146
|
+
src: n.value
|
|
147
|
+
}, null)]
|
|
148
|
+
})]);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
export {
|
|
152
|
+
ne as SkyFileMultipleModelInput
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=index.mjs.map
|