UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 46.7 kB
{"version":3,"file":"upload.mjs","sources":["../../../components/upload/upload.tsx"],"sourcesContent":["import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { UploadList } from '@/components/upload-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, defineComponent, onBeforeUnmount, ref, renderSlot, toRef, watch } from 'vue'\n\nimport {\n createIconProp,\n createStateProp,\n emitEvent,\n useIcons,\n useLocale,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { isClient, isDefined, isFalse, isPromise, noop, randomString } from '@vexip-ui/utils'\nimport { uploadProps } from './props'\nimport { upload } from './request'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type {\n DirectoryEntity,\n UploadFileOptions,\n UploadFileState,\n UploadHttpError,\n UploadSourceFile,\n} from './symbol'\n\nfunction getDefaultFileState(): UploadFileState {\n return {\n id: randomString(),\n name: '',\n size: 0,\n type: '',\n base64: null,\n status: StatusType.PENDING,\n percentage: 0,\n source: null,\n url: null,\n path: '',\n xhr: null,\n response: null,\n error: null,\n abort: noop,\n }\n}\n\nexport default defineComponent({\n name: 'Upload',\n props: uploadProps,\n emits: ['update:file-list'],\n setup(_props, { slots, emit, expose }) {\n const {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n getFieldValue,\n setFieldValue,\n } = useFieldStore<UploadFileOptions[]>(focus)\n\n const props = useProps('upload', _props, {\n state: createStateProp(state),\n locale: null,\n url: {\n default: '',\n static: true,\n },\n fileList: {\n default: () => getFieldValue(),\n static: true,\n },\n multiple: false,\n tip: '',\n accept: null,\n filter: '',\n maxSize: {\n default: null,\n validator: value => value >= 0,\n },\n field: 'file',\n data: () => ({}),\n headers: () => ({}),\n withCredentials: false,\n manual: false,\n hiddenFiles: false,\n countLimit: {\n default: 0,\n validator: value => value >= 0,\n },\n allowDrag: false,\n onBeforeUpload: {\n default: null,\n isFunc: true,\n },\n onBeforeSelect: {\n default: null,\n isFunc: true,\n },\n iconRenderer: {\n default: null,\n isFunc: true,\n },\n selectToAdd: false,\n listType: {\n default: 'name',\n validator: value => uploadListTypes.includes(value),\n },\n block: false,\n loadingText: null,\n directory: false,\n pathField: 'path',\n disabledClick: false,\n buttonLabel: null,\n disabled: () => disabled.value,\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n image: false,\n defaultFiles: () => [],\n // canPreview: don't set, using UploadFile default value\n listStyle: null,\n name: {\n default: '',\n static: true,\n },\n customFetch: {\n default: null,\n isFunc: true,\n },\n slots: () => ({}),\n })\n\n const nh = useNameHelper('upload')\n const locale = useLocale('upload', toRef(props, 'locale'))\n const icons = useIcons()\n const fileStates = ref([]) as Ref<UploadFileState[]>\n const isDragOver = ref(false)\n\n const input = ref<HTMLInputElement>()\n const button = ref<InstanceType<typeof Button>>()\n const panel = ref<HTMLElement>()\n\n const readonly = computed(() => props.loading && props.loadingLock)\n const className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n nh.bm(`type-${props.listType}`),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('multiple')]: props.multiple,\n [nh.bm('drag')]: props.allowDrag,\n [nh.bm('to-add')]: props.selectToAdd,\n [nh.bm('block')]: props.block,\n [nh.bm('drag-only')]: props.disabledClick,\n [nh.bm('image')]: props.image,\n [nh.bm('has-file')]: !props.hiddenFiles && renderFiles.value.length,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: props.loading,\n },\n ]\n })\n const controlClass = computed(() => {\n if (props.image) {\n return {\n [nh.be('image-control')]: true,\n [nh.bem('image-control', 'drag-over')]: isDragOver.value,\n [nh.bem('image-control', 'disabled')]: props.disabled,\n }\n }\n\n return {\n [nh.be('control')]: true,\n [nh.bem('control', 'drag-over')]: isDragOver.value,\n }\n })\n const acceptString = computed(() => {\n const accept = props.image ? (props.accept?.length ? props.accept : 'image/*') : props.accept\n\n return accept && (typeof accept === 'string' ? accept : accept.join())\n })\n const defaultList = computed(() => props.defaultFiles.map(file => createFileState(file)))\n const renderFiles = computed(() => {\n return defaultList.value\n .concat(fileStates.value)\n .filter(item => item.status !== StatusType.DELETE)\n })\n\n watch(\n () => props.fileList,\n value => {\n const idMap = new Map<string | number, UploadFileState>()\n const fileMap = new Map<UploadSourceFile, UploadFileState>()\n\n for (const state of fileStates.value) {\n if (isDefined(state.id)) {\n idMap.set(state.id, state)\n }\n\n if (state.source) {\n fileMap.set(state.source, state)\n }\n }\n\n fileStates.value = (value || []).map(file =>\n createFileState(\n file,\n file.id ? idMap.get(file.id) : file.source ? fileMap.get(file.source) : undefined,\n ),\n )\n syncInputFiles()\n },\n { immediate: true, deep: true },\n )\n\n expose({\n isDragOver,\n execute,\n handleDelete,\n focus,\n blur: () => {\n button.value?.$el.blur()\n panel.value?.blur()\n },\n })\n\n function focus(options?: FocusOptions) {\n if (button.value?.$el) {\n button.value.$el.focus(options)\n } else {\n panel.value?.focus(options)\n }\n }\n\n function handleClick() {\n if (props.disabled || readonly.value) return\n\n !props.disabledClick && input.value?.click()\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n const key = event.code || event.key\n\n if (key === 'Enter' || key === 'Space') {\n handleClick()\n }\n }\n\n function handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement\n\n if (target?.files) {\n handleFilesChange(target.files)\n }\n }\n\n async function handleFilesChange(inputFiles: FileList | UploadSourceFile[]) {\n const originFiles = Array.from(inputFiles || []) as UploadSourceFile[]\n const shouldAdd = props.selectToAdd\n const files = shouldAdd ? Array.from(fileStates.value) : []\n\n for (const file of originFiles) {\n if (!file.path) {\n file.path = file.webkitRelativePath\n }\n\n let fileState = getFileStateBySource(file)\n\n if (fileState) {\n if (\n fileState.status !== StatusType.SUCCESS &&\n fileState.status !== StatusType.UPLOADING\n ) {\n fileState.status = StatusType.PENDING\n }\n } else {\n fileState = createFileState({\n name: file.name,\n size: file.size,\n type: file.type,\n source: file,\n })\n }\n\n if (typeof props.onBeforeSelect === 'function') {\n let result = props.onBeforeSelect(fileState, files)\n\n if (isPromise(result)) {\n result = await result\n }\n\n if (isFalse(result)) continue\n }\n\n if (!files.includes(fileState)) {\n files.push(fileState)\n }\n }\n\n const countLimit = props.countLimit\n\n if (countLimit > 0 && files.length > countLimit) {\n const exceedFiles = files.slice(countLimit)\n\n emitEvent(props.onExceed, exceedFiles)\n fileStates.value = files.slice(0, countLimit)\n } else {\n fileStates.value = files\n }\n\n syncInputFiles()\n emitChangeEvent()\n\n if (!props.manual) {\n execute()\n }\n }\n\n function emitChangeEvent() {\n emit('update:file-list', fileStates.value)\n setFieldValue(fileStates.value)\n emitEvent(props.onChange, fileStates.value)\n validateField()\n }\n\n function getFileStateBySource(file: UploadSourceFile) {\n const { name, size, type } = file\n const path = file.path || file.webkitRelativePath\n\n return fileStates.value.find(({ source }) => {\n return (\n source &&\n (source.path || source.webkitRelativePath) === path &&\n source.name === name &&\n source.size === size &&\n source.type === type\n )\n })\n }\n\n function createFileState(\n file: UploadFileOptions,\n defaults = getDefaultFileState(),\n ): UploadFileState {\n const { id, name, size, type, base64, status, percentage, source, url, path } = file\n\n Object.assign(defaults, {\n id: id ?? defaults.id ?? randomString(),\n name: name || '',\n size: size || 0,\n type: type || '',\n base64: base64 || null,\n status: status ?? StatusType.PENDING,\n percentage: percentage || 0,\n source: source || null,\n url: url || null,\n path: path || '',\n xhr: null,\n response: null,\n error: null,\n })\n\n return defaults\n }\n\n function getFileExtension(file: UploadFileState) {\n return file.name.split('.').pop()!.toLocaleLowerCase()\n }\n\n async function execute() {\n if (!props.url || !verifyFiles()) {\n return false\n }\n\n const uploadFiles = fileStates.value.filter(\n item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n )\n const requests: Promise<any>[] = []\n\n for (const file of uploadFiles) {\n requests.push(uploadFile(file).catch(noop))\n }\n\n return await Promise.all(requests).then(responses => responses.filter(response => response))\n }\n\n async function uploadFile(file: UploadFileState) {\n if (typeof props.onBeforeUpload === 'function') {\n let result = props.onBeforeUpload(\n file,\n fileStates.value.filter(\n item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n ),\n )\n\n if (isPromise(result)) {\n try {\n result = await result\n } catch (e) {\n return\n }\n }\n\n if (isFalse(result)) return\n\n if (result instanceof Blob) {\n if (result instanceof File) {\n file.source = result\n } else {\n file.source = new File([result], file.name, {\n type: file.type,\n })\n }\n }\n }\n\n if (!file.source) return\n\n file.status = StatusType.UPLOADING\n\n const { url, headers, withCredentials, data, field, pathField } = props\n\n return await new Promise((resolve, reject) => {\n file.abort = (props.customFetch || upload)({\n url,\n headers,\n withCredentials,\n data,\n field,\n pathField,\n file: file.source!,\n onProgress: percent => {\n handleProgress(percent, file)\n },\n onSuccess: response => {\n handleSuccess(response, file)\n resolve(response)\n },\n onError: error => {\n handleError(error, file)\n reject(error)\n },\n onAbort: () => {\n resolve(null)\n },\n })\n })\n }\n\n function verifyFiles() {\n const limitSize = props.maxSize ? props.maxSize * 1024 : Infinity\n const filter =\n typeof props.filter === 'string'\n ? props.filter\n ? [props.filter]\n : []\n : props.filter.filter(item => item)\n\n for (let i = 0, len = fileStates.value.length; i < len; ++i) {\n const file = fileStates.value[i]\n const extension = getFileExtension(file)\n\n if (filter.length && !filter.includes(extension)) {\n emitEvent(props.onFilterError, file)\n\n return false\n }\n\n if (file.size > limitSize) {\n emitEvent(props.onSizeError, file)\n\n return false\n }\n }\n\n return true\n }\n\n function handleDelete(file: UploadFileState) {\n file.status = StatusType.DELETE\n\n file.abort?.()\n syncInputFiles()\n emitEvent(props.onDelete, file)\n emitChangeEvent()\n }\n\n function handlePreview(file: UploadFileState) {\n emitEvent(props.onPreview, file)\n }\n\n function syncInputFiles() {\n if (!isClient) return\n\n const dataTransfer = new DataTransfer()\n fileStates.value = fileStates.value.filter(item => item.status !== StatusType.DELETE)\n\n fileStates.value.forEach(item => {\n item.source && dataTransfer.items.add(item.source)\n })\n\n if (input.value) {\n input.value.files = dataTransfer.files\n }\n }\n\n function handleProgress(percent: number, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.percentage = percent\n\n emitEvent(props.onProgress, file, percent)\n emitChangeEvent()\n }\n\n function handleSuccess(response: any, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.status = StatusType.SUCCESS\n file.response = response\n file.error = null\n\n emitEvent(props.onSuccess, file, response)\n emitChangeEvent()\n }\n\n function handleError(error: UploadHttpError, file: UploadFileState) {\n if (file.status === StatusType.DELETE) return\n\n file.status = StatusType.FAIL\n file.error = error\n\n emitEvent(props.onError, file, error)\n emitChangeEvent()\n }\n\n let dragTimer: ReturnType<typeof setTimeout>\n\n onBeforeUnmount(() => {\n clearTimeout(dragTimer)\n })\n\n async function handleDrop(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n clearTimeout(dragTimer)\n event.preventDefault()\n\n isDragOver.value = false\n\n if (event.dataTransfer) {\n const files = await collectDropFiles(event.dataTransfer)\n\n files.length && handleFilesChange(files)\n }\n }\n\n function handleDragEnter(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n clearTimeout(dragTimer)\n event.preventDefault()\n\n isDragOver.value = true\n }\n\n function handleDragLeave(event: DragEvent) {\n if (!props.allowDrag || props.disabled || readonly.value) return\n\n event.preventDefault()\n\n dragTimer = setTimeout(() => {\n isDragOver.value = false\n }, 100)\n }\n\n async function collectDropFiles(dataTransfer: DataTransfer) {\n const { items, files } = dataTransfer\n\n if (!items.length) return []\n\n const collectedFiles: File[] = []\n const dirLoop: Array<{ dir: DirectoryEntity, prefix: string }> = []\n const processes: Promise<void>[] = []\n\n for (let i = 0, len = items.length; i < len; ++i) {\n const entity = items[i].webkitGetAsEntry?.()\n\n // 内核不支持\n if (!entity) return files\n\n if (entity.isFile) {\n collectedFiles.push(files[i])\n } else {\n dirLoop.push({ dir: entity as unknown as DirectoryEntity, prefix: '' })\n // directories.push(entity as unknown as DirectoryEntity)\n }\n }\n\n if (!props.directory || !dirLoop.length) return collectedFiles\n\n const fileEntries: Array<{ entry: DirectoryEntity, prefix: string }> = []\n\n let countLimit = props.countLimit - (props.selectToAdd ? fileStates.value.length : 0)\n countLimit = Math.round(countLimit) > 0 ? countLimit : 100\n\n const doProcess = () => {\n while (dirLoop.length) {\n const loop = dirLoop.shift()!\n const dir = loop.dir\n const prefix = loop.prefix ? `${loop.prefix}/${dir.name}` : dir.name\n const reader = dir.createReader()\n\n processes.push(\n new Promise<void>(resolve => {\n reader.readEntries(entries => {\n entries.forEach(entry => {\n if (entry.isFile) {\n fileEntries.push({ entry, prefix })\n } else {\n dirLoop.push({ dir: entry, prefix })\n }\n })\n\n resolve()\n })\n }),\n )\n }\n }\n\n while (true) {\n doProcess()\n await Promise.all(processes)\n\n if (!dirLoop.length || fileEntries.length >= countLimit) {\n break\n }\n }\n\n if (fileEntries.length > 0) {\n return collectedFiles.concat(\n await Promise.all(\n fileEntries.map(\n ({ entry, prefix }) =>\n new Promise<File>(resolve =>\n entry.file(file => {\n file.path = `${prefix}/${file.name}`\n resolve(file)\n }),\n ),\n ),\n ),\n )\n }\n\n return collectedFiles\n }\n\n function preventDefault(event: Event) {\n event.preventDefault()\n }\n\n function renderNormalAction() {\n return !props.allowDrag && !props.disabledClick ? (\n <>\n <Button\n ref={button}\n inherit\n size={size.value}\n type={props.state}\n disabled={props.disabled}\n loading={props.loading}\n >\n {{\n default: () => props.buttonLabel ?? locale.value.upload,\n icon: () => <Icon {...icons.value.upload} />,\n loading: () => (\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n />\n ),\n }}\n </Button>\n {renderSlot(slots, 'tip', undefined, () => [\n <Renderer renderer={props.slots.tip}>\n {props.tip && <p class={nh.be('tip')}>{props.tip}</p>}\n </Renderer>,\n ])}\n </>\n ) : (\n <div\n ref={panel}\n class={[nh.be('drag-panel'), props.disabled && nh.bem('drag-panel', 'disabled')]}\n tabindex={0}\n >\n {renderSlot(slots, 'cloud', undefined, () => [\n <Renderer renderer={props.slots.cloud}>\n <Icon\n {...icons.value.uploadCloud}\n class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n scale={+(icons.value.uploadCloud.scale || 1) * 4}\n />\n </Renderer>,\n ])}\n {renderSlot(slots, 'tip', undefined, () => [\n <Renderer renderer={props.slots.tip}>\n <p class={nh.be('tip')}>{props.tip || locale.value.dragOrClick}</p>\n </Renderer>,\n ])}\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n style={{ opacity: props.loading ? '100%' : '0%' }}\n />\n </div>\n )\n }\n\n function renderImageAction() {\n return (\n <button\n class={[nh.be('image-action'), props.disabled && nh.bem('image-action', 'disabled')]}\n type={'button'}\n >\n {renderSlot(\n slots,\n 'default',\n {\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n },\n () => [\n <Renderer\n renderer={props.slots.default}\n data={{ isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value }}\n >\n {props.loading ? (\n <Icon\n {...icons.value.loading}\n class={nh.be('loading-icon')}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n style={{ marginBottom: '6px' }}\n />\n ) : (\n <Icon\n {...icons.value.plus}\n class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n scale={+(icons.value.plus.scale || 1) * 1.2}\n style={{ marginBottom: '6px' }}\n />\n )}\n <span>{props.buttonLabel ?? locale.value.upload}</span>\n </Renderer>,\n ],\n )}\n </button>\n )\n }\n\n function renderControl() {\n const HtmlTag = props.image ? 'li' : 'div'\n\n return (\n <HtmlTag\n class={controlClass.value}\n tabindex={-1}\n onClick={handleClick}\n onDrop={handleDrop}\n onDragover={handleDragEnter}\n onDragleave={handleDragLeave}\n onKeydown={handleKeyDown}\n >\n {!props.disabledClick && (\n <input\n ref={input}\n type={'file'}\n class={nh.be('input')}\n disabled={props.disabled}\n multiple={props.multiple}\n name={props.name}\n accept={acceptString.value}\n webkitdirectory={props.directory || undefined}\n onChange={handleInputChange}\n onSubmit={preventDefault}\n />\n )}\n {props.image\n ? renderImageAction()\n : renderSlot(\n slots,\n 'default',\n {\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n },\n () => [\n <Renderer\n renderer={props.slots.default}\n data={{\n isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n }}\n >\n {renderNormalAction()}\n </Renderer>,\n ],\n )}\n </HtmlTag>\n )\n }\n\n function renderFileList() {\n return (\n <UploadList\n inherit\n files={renderFiles.value}\n select-to-add={props.selectToAdd}\n type={props.image ? 'thumbnail' : props.listType}\n icon-renderer={props.iconRenderer}\n loading-text={props.loadingText}\n can-preview={props.canPreview}\n style={props.listStyle}\n onDelete={handleDelete}\n onPreview={handlePreview}\n >\n {{\n item:\n slots.item || props.slots.item\n ? (params: any) =>\n renderSlot(slots, 'item', params, () => [\n <Renderer renderer={props.slots.item} data={params}></Renderer>,\n ])\n : null,\n icon:\n slots.icon || props.slots.icon\n ? (params: any) =>\n renderSlot(slots, 'icon', params, () => [\n <Renderer renderer={props.slots.icon} data={params}></Renderer>,\n ])\n : null,\n suffix: () =>\n props.image && (!props.countLimit || renderFiles.value.length < props.countLimit)\n ? renderControl()\n : null,\n }}\n </UploadList>\n )\n }\n\n return () => (\n <div id={idFor.value} class={className.value} role={'group'} aria-labelledby={labelId.value}>\n {!props.image && renderControl()}\n {!props.hiddenFiles && renderFileList()}\n </div>\n )\n },\n methods: {\n execute: noop as () => Promise<false | any[]>,\n handleDelete: noop as (file: UploadFileState) => void,\n focus: noop as (options?: FocusOptions) => void,\n blur: noop as () => void,\n },\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","getDefaultFileState","id","randomString","name","size","type","base64","status","StatusType","PENDING","percentage","source","url","path","xhr","response","error","abort","noop","defineComponent","props","uploadProps","emits","setup","_props","slots","emit","expose","idFor","labelId","state","disabled","loading","validateField","getFieldValue","setFieldValue","useFieldStore","focus","useProps","createStateProp","locale","default","static","fileList","multiple","tip","accept","filter","maxSize","validator","value","field","data","headers","withCredentials","manual","hiddenFiles","countLimit","allowDrag","onBeforeUpload","isFunc","onBeforeSelect","iconRenderer","selectToAdd","listType","uploadListTypes","includes","block","loadingText","directory","pathField","disabledClick","buttonLabel","loadingIcon","createIconProp","loadingLock","loadingEffect","image","defaultFiles","listStyle","customFetch","nh","useNameHelper","useLocale","toRef","icons","useIcons","fileStates","ref","isDragOver","input","button","panel","readonly","computed","className","b","bs","bm","inherit","renderFiles","length","controlClass","be","bem","acceptString","join","defaultList","map","file","createFileState","concat","item","DELETE","watch","idMap","Map","fileMap","isDefined","set","get","undefined","syncInputFiles","immediate","deep","execute","handleDelete","blur","$el","options","handleClick","click","handleKeyDown","event","key","code","handleInputChange","target","files","handleFilesChange","inputFiles","originFiles","Array","from","webkitRelativePath","fileState","getFileStateBySource","SUCCESS","UPLOADING","result","isPromise","isFalse","push","exceedFiles","slice","emitEvent","onExceed","emitChangeEvent","onChange","find","defaults","assign","getFileExtension","split","pop","toLocaleLowerCase","verifyFiles","uploadFiles","requests","uploadFile","catch","Promise","all","then","responses","Blob","File","resolve","reject","upload","onProgress","percent","handleProgress","onSuccess","handleSuccess","onError","handleError","onAbort","limitSize","Infinity","i","len","extension","onFilterError","onSizeError","onDelete","handlePreview","onPreview","isClient","dataTransfer","DataTransfer","forEach","items","add","FAIL","dragTimer","onBeforeUnmount","clearTimeout","handleDrop","preventDefault","collectDropFiles","handleDragEnter","handleDragLeave","setTimeout","collectedFiles","dirLoop","processes","entity","webkitGetAsEntry","isFile","dir","prefix","fileEntries","Math","round","doProcess","loop","shift","reader","createReader","readEntries","entries","entry","renderNormalAction","_createVNode","_Fragment","Button","icon","Icon","_mergeProps","effect","renderSlot","Renderer","cloud","uploadCloud","scale","dragOrClick","opacity","renderImageAction","marginBottom","plus","renderControl","HtmlTag","_slot","renderFileList","UploadList","canPreview","params","suffix","methods"],"mappings":";;;;;;;;;;;;;;;;AAoBsD,SAAAA,GAAAC,GAAA;AAAA,SAAA,OAAAA,KAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,MAAAK,qBAAAA,CAAAA,GAAAL,CAAA;AAAA;AAWtD,SAASM,KAAuC;AAC9C,SAAO;AAAA,IACLC,IAAIC,EAAc;AAAA,IAClBC,MAAM;AAAA,IACNC,MAAM;AAAA,IACNC,MAAM;AAAA,IACNC,QAAQ;AAAA,IACRC,QAAQC,EAAWC;AAAAA,IACnBC,YAAY;AAAA,IACZC,QAAQ;AAAA,IACRC,KAAK;AAAA,IACLC,MAAM;AAAA,IACNC,KAAK;AAAA,IACLC,UAAU;AAAA,IACVC,OAAO;AAAA,IACPC,OAAOC;AAAAA,EACR;AACH;AAEA,MAAeC,wBAAgB;AAAA,EAC7BhB,MAAM;AAAA,EACNiB,OAAOC;AAAAA,EACPC,OAAO,CAAC,kBAAkB;AAAA,EAC1BC,MAAMC,GAAQ;AAAA,IAAEC,OAAAA;AAAAA,IAAOC,MAAAA;AAAAA,IAAMC,QAAAA;AAAAA,EAAO,GAAG;AACrC,UAAM;AAAA,MACJC,OAAAA;AAAAA,MACAC,SAAAA;AAAAA,MACAC,OAAAA;AAAAA,MACAC,UAAAA;AAAAA,MACAC,SAAAA;AAAAA,MACA5B,MAAAA;AAAAA,MACA6B,eAAAA;AAAAA,MACAC,eAAAA;AAAAA,MACAC,eAAAA;AAAAA,IACF,IAAIC,GAAmCC,CAAK,GAEtCjB,IAAQkB,GAAS,UAAUd,GAAQ;AAAA,MACvCM,OAAOS,GAAgBT,EAAK;AAAA,MAC5BU,QAAQ;AAAA,MACR5B,KAAK;AAAA,QACH6B,SAAS;AAAA,QACTC,QAAQ;AAAA,MACT;AAAA,MACDC,UAAU;AAAA,QACRF,SAASA,MAAMP,GAAe;AAAA,QAC9BQ,QAAQ;AAAA,MACT;AAAA,MACDE,UAAU;AAAA,MACVC,KAAK;AAAA,MACLC,QAAQ;AAAA,MACRC,QAAQ;AAAA,MACRC,SAAS;AAAA,QACPP,SAAS;AAAA,QACTQ,WAAWC,CAAAA,MAASA,KAAS;AAAA,MAC9B;AAAA,MACDC,OAAO;AAAA,MACPC,MAAMA,OAAO,CAAA;AAAA,MACbC,SAASA,OAAO,CAAA;AAAA,MAChBC,iBAAiB;AAAA,MACjBC,QAAQ;AAAA,MACRC,aAAa;AAAA,MACbC,YAAY;AAAA,QACVhB,SAAS;AAAA,QACTQ,WAAWC,CAAAA,MAASA,KAAS;AAAA,MAC9B;AAAA,MACDQ,WAAW;AAAA,MACXC,gBAAgB;AAAA,QACdlB,SAAS;AAAA,QACTmB,QAAQ;AAAA,MACT;AAAA,MACDC,gBAAgB;AAAA,QACdpB,SAAS;AAAA,QACTmB,QAAQ;AAAA,MACT;AAAA,MACDE,cAAc;AAAA,QACZrB,SAAS;AAAA,QACTmB,QAAQ;AAAA,MACT;AAAA,MACDG,aAAa;AAAA,MACbC,UAAU;AAAA,QACRvB,SAAS;AAAA,QACTQ,WAAWC,CAAAA,MAASe,GAAgBC,SAAShB,CAAK;AAAA,MACnD;AAAA,MACDiB,OAAO;AAAA,MACPC,aAAa;AAAA,MACbC,WAAW;AAAA,MACXC,WAAW;AAAA,MACXC,eAAe;AAAA,MACfC,aAAa;AAAA,MACbzC,UAAUA,MAAMA,GAASmB;AAAAA,MACzBlB,SAASA,MAAMA,GAAQkB;AAAAA,MACvBuB,aAAaC,GAAgB;AAAA,MAC7BC,aAAa;AAAA,MACbC,eAAe;AAAA,MACfC,OAAO;AAAA,MACPC,cAAcA,MAAM,CAAE;AAAA;AAAA,MAEtBC,WAAW;AAAA,MACX5E,MAAM;AAAA,QACJsC,SAAS;AAAA,QACTC,QAAQ;AAAA,MACT;AAAA,MACDsC,aAAa;AAAA,QACXvC,SAAS;AAAA,QACTmB,QAAQ;AAAA,MACT;AAAA,MACDnC,OAAOA,OAAO,CAAE;AAAA,IAClB,CAAC,GAEKwD,IAAKC,GAAc,QAAQ,GAC3B1C,IAAS2C,GAAU,UAAUC,GAAMhE,GAAO,QAAQ,CAAC,GACnDiE,IAAQC,GAAU,GAClBC,IAAaC,EAAI,EAAE,GACnBC,IAAaD,EAAI,EAAK,GAEtBE,IAAQF,EAAuB,GAC/BG,IAASH,EAAkC,GAC3CI,IAAQJ,EAAkB,GAE1BK,IAAWC,EAAS,MAAM1E,EAAMY,WAAWZ,EAAMuD,WAAW,GAC5DoB,KAAYD,EAAS,MAClB,CACLb,EAAGe,EAAG,GACNf,EAAGgB,GAAG,MAAM,GACZhB,EAAGiB,GAAG,QAAQ9E,EAAM4C,QAAQ,EAAE,GAC9B;AAAA,MACE,CAACiB,EAAGiB,GAAG,SAAS,CAAC,GAAG9E,EAAM+E;AAAAA,MAC1B,CAAClB,EAAGiB,GAAG9E,EAAMU,KAAK,CAAC,GAAGV,EAAMU,UAAU;AAAA,MACtC,CAACmD,EAAGiB,GAAG,UAAU,CAAC,GAAG9E,EAAMwB;AAAAA,MAC3B,CAACqC,EAAGiB,GAAG,MAAM,CAAC,GAAG9E,EAAMsC;AAAAA,MACvB,CAACuB,EAAGiB,GAAG,QAAQ,CAAC,GAAG9E,EAAM2C;AAAAA,MACzB,CAACkB,EAAGiB,GAAG,OAAO,CAAC,GAAG9E,EAAM+C;AAAAA,MACxB,CAACc,EAAGiB,GAAG,WAAW,CAAC,GAAG9E,EAAMmD;AAAAA,MAC5B,CAACU,EAAGiB,GAAG,OAAO,CAAC,GAAG9E,EAAMyD;AAAAA,MACxB,CAACI,EAAGiB,GAAG,UAAU,CAAC,GAAG,CAAC9E,EAAMoC,eAAe4C,EAAYlD,MAAMmD;AAAAA,MAC7D,CAACpB,EAAGiB,GAAG,UAAU,CAAC,GAAGL,EAAS3C;AAAAA,MAC9B,CAAC+B,EAAGiB,GAAG,SAAS,CAAC,GAAG9E,EAAMY;AAAAA,IAC5B,CAAC,CAEJ,GACKsE,KAAeR,EAAS,MACxB1E,EAAMyD,QACD;AAAA,MACL,CAACI,EAAGsB,GAAG,eAAe,CAAC,GAAG;AAAA,MAC1B,CAACtB,EAAGuB,IAAI,iBAAiB,WAAW,CAAC,GAAGf,EAAWvC;AAAAA,MACnD,CAAC+B,EAAGuB,IAAI,iBAAiB,UAAU,CAAC,GAAGpF,EAAMW;AAAAA,IAC9C,IAGI;AAAA,MACL,CAACkD,EAAGsB,GAAG,SAAS,CAAC,GAAG;AAAA,MACpB,CAACtB,EAAGuB,IAAI,WAAW,WAAW,CAAC,GAAGf,EAAWvC;AAAAA,IAC9C,CACF,GACKuD,KAAeX,EAAS,MAAM;;AAClC,YAAMhD,IAAS1B,EAAMyD,SAASzD,IAAAA,EAAM0B,WAAN1B,QAAAA,EAAciF,SAASjF,EAAM0B,SAAS,YAAa1B,EAAM0B;AAEvF,aAAOA,MAAW,OAAOA,KAAW,WAAWA,IAASA,EAAO4D;IACjE,CAAC,GACKC,KAAcb,EAAS,MAAM1E,EAAM0D,aAAa8B,IAAIC,CAAAA,MAAQC,EAAgBD,CAAI,CAAC,CAAC,GAClFT,IAAcN,EAAS,MACpBa,GAAYzD,MAChB6D,OAAOxB,EAAWrC,KAAK,EACvBH,OAAOiE,CAAAA,MAAQA,EAAKzG,WAAWC,EAAWyG,MAAM,CACpD;AAEDC,IAAAA,GACE,MAAM9F,EAAMuB,UACZO,CAAAA,MAAS;AACP,YAAMiE,IAAQ,oBAAIC,IAAuC,GACnDC,IAAU,oBAAID,IAAwC;AAE5D,iBAAWtF,KAASyD,EAAWrC;AAC7B,QAAIoE,GAAUxF,EAAM7B,EAAE,KACpBkH,EAAMI,IAAIzF,EAAM7B,IAAI6B,CAAK,GAGvBA,EAAMnB,UACR0G,EAAQE,IAAIzF,EAAMnB,QAAQmB,CAAK;AAInCyD,MAAAA,EAAWrC,SAASA,KAAS,IAAI0D,IAAIC,CAAAA,MACnCC,EACED,GACAA,EAAK5G,KAAKkH,EAAMK,IAAIX,EAAK5G,EAAE,IAAI4G,EAAKlG,SAAS0G,EAAQG,IAAIX,EAAKlG,MAAM,IAAI8G,MAC1E,CACF,GACAC,EAAgB;AAAA,IAClB,GACA;AAAA,MAAEC,WAAW;AAAA,MAAMC,MAAM;AAAA,IAAK,CAChC,GAEAjG,EAAO;AAAA,MACL8D,YAAAA;AAAAA,MACAoC,SAAAA;AAAAA,MACAC,cAAAA;AAAAA,MACAzF,OAAAA;AAAAA,MACA0F,MAAMA,MAAM;;AACVpC,SAAAA,IAAAA,EAAOzC,UAAPyC,QAAAA,EAAcqC,IAAID,SAClBnC,IAAAA,EAAM1C,UAAN0C,QAAAA,EAAamC;AAAAA,MACf;AAAA,IACF,CAAC;AAED,aAAS1F,EAAM4F,GAAwB;;AACrC,OAAItC,IAAAA,EAAOzC,UAAPyC,QAAAA,EAAcqC,MAChBrC,EAAOzC,MAAM8E,IAAI3F,MAAM4F,CAAO,KAE9BrC,IAAAA,EAAM1C,UAAN0C,QAAAA,EAAavD,MAAM4F;AAAAA,IAEvB;AAEA,aAASC,IAAc;;AACrB,MAAI9G,EAAMW,YAAY8D,EAAS3C,SAE/B,CAAC9B,EAAMmD,mBAAiBmB,IAAAA,EAAMxC,UAANwC,QAAAA,EAAayC;AAAAA,IACvC;AAEA,aAASC,GAAcC,GAAsB;AAC3C,YAAMC,IAAMD,EAAME,QAAQF,EAAMC;AAEhC,OAAIA,MAAQ,WAAWA,MAAQ,YAC7BJ,EAAa;AAAA,IAEjB;AAEA,aAASM,GAAkBH,GAAc;AACvC,YAAMI,IAASJ,EAAMI;AAErB,MAAIA,KAAAA,QAAAA,EAAQC,SACVC,EAAkBF,EAAOC,KAAK;AAAA,IAElC;AAEA,mBAAeC,EAAkBC,GAA2C;AAC1E,YAAMC,IAAcC,MAAMC,KAAKH,KAAc,CAAA,CAAE,GAEzCF,IADYtH,EAAM2C,cACE+E,MAAMC,KAAKxD,EAAWrC,KAAK,IAAI,CAAE;AAE3D,iBAAW2D,KAAQgC,GAAa;AAC9B,QAAKhC,EAAKhG,SACRgG,EAAKhG,OAAOgG,EAAKmC;AAGnB,YAAIC,IAAYC,GAAqBrC,CAAI;AAkBzC,YAhBIoC,IAEAA,EAAU1I,WAAWC,EAAW2I,WAChCF,EAAU1I,WAAWC,EAAW4I,cAEhCH,EAAU1I,SAASC,EAAWC,WAGhCwI,IAAYnC,EAAgB;AAAA,UAC1B3G,MAAM0G,EAAK1G;AAAAA,UACXC,MAAMyG,EAAKzG;AAAAA,UACXC,MAAMwG,EAAKxG;AAAAA,UACXM,QAAQkG;AAAAA,QACV,CAAC,GAGC,OAAOzF,EAAMyC,kBAAmB,YAAY;AAC9C,cAAIwF,IAASjI,EAAMyC,eAAeoF,GAAWP,CAAK;AAMlD,cAJIY,EAAUD,CAAM,MAClBA,IAAS,MAAMA,IAGbE,EAAQF,CAAM,EAAG;AAAA,QACvB;AAEA,QAAKX,EAAMxE,SAAS+E,CAAS,KAC3BP,EAAMc,KAAKP,CAAS;AAAA,MAExB;AAEA,YAAMxF,IAAarC,EAAMqC;AAEzB,UAAIA,IAAa,KAAKiF,EAAMrC,SAAS5C,GAAY;AAC/C,cAAMgG,IAAcf,EAAMgB,MAAMjG,CAAU;AAE1CkG,QAAAA,EAAUvI,EAAMwI,UAAUH,CAAW,GACrClE,EAAWrC,QAAQwF,EAAMgB,MAAM,GAAGjG,CAAU;AAAA,MAC9C;AACE8B,QAAAA,EAAWrC,QAAQwF;AAGrBhB,MAAAA,EAAgB,GAChBmC,EAAiB,GAEZzI,EAAMmC,UACTsE,EAAS;AAAA,IAEb;AAEA,aAASgC,IAAkB;AACzBnI,MAAAA,EAAK,oBAAoB6D,EAAWrC,KAAK,GACzCf,GAAcoD,EAAWrC,KAAK,GAC9ByG,EAAUvI,EAAM0I,UAAUvE,EAAWrC,KAAK,GAC1CjB,GAAe;AAAA,IACjB;AAEA,aAASiH,GAAqBrC,GAAwB;AACpD,YAAM;AAAA,QAAE1G,MAAAA;AAAAA,QAAMC,MAAAA;AAAAA,QAAMC,MAAAA;AAAAA,MAAK,IAAIwG,GACvBhG,IAAOgG,EAAKhG,QAAQgG,EAAKmC;AAE/B,aAAOzD,EAAWrC,MAAM6G,KAAK,CAAC;AAAA,QAAEpJ,QAAAA;AAAAA,MAAO,MAEnCA,MACCA,EAAOE,QAAQF,EAAOqI,wBAAwBnI,KAC/CF,EAAOR,SAASA,KAChBQ,EAAOP,SAASA,KAChBO,EAAON,SAASA,CAEnB;AAAA,IACH;AAEA,aAASyG,EACPD,GACAmD,IAAWhK,GAAmB,GACb;AACjB,YAAM;AAAA,QAAEC,IAAAA;AAAAA,QAAIE,MAAAA;AAAAA,QAAMC,MAAAA;AAAAA,QAAMC,MAAAA;AAAAA,QAAMC,QAAAA;AAAAA,QAAQC,QAAAA;AAAAA,QAAQG,YAAAA;AAAAA,QAAYC,QAAAA;AAAAA,QAAQC,KAAAA;AAAAA,QAAKC,MAAAA;AAAAA,MAAK,IAAIgG;AAEhFlH,oBAAOsK,OAAOD,GAAU;AAAA,QACtB/J,IAAIA,KAAM+J,EAAS/J,MAAMC,EAAc;AAAA,QACvCC,MAAMA,KAAQ;AAAA,QACdC,MAAMA,KAAQ;AAAA,QACdC,MAAMA,KAAQ;AAAA,QACdC,QAAQA,KAAU;AAAA,QAClBC,QAAQA,KAAUC,EAAWC;AAAAA,QAC7BC,YAAYA,KAAc;AAAA,QAC1BC,QAAQA,KAAU;AAAA,QAClBC,KAAKA,KAAO;AAAA,QACZC,MAAMA,KAAQ;AAAA,QACdC,KAAK;AAAA,QACLC,UAAU;AAAA,QACVC,OAAO;AAAA,MACT,CAAC,GAEMgJ;AAAAA,IACT;AAEA,aAASE,GAAiBrD,GAAuB;AAC/C,aAAOA,EAAK1G,KAAKgK,MAAM,GAAG,EAAEC,IAAK,EAAEC,kBAAmB;AAAA,IACxD;AAEA,mBAAexC,IAAU;AACvB,UAAI,CAACzG,EAAMR,OAAO,CAAC0J,GAAW;AAC5B,eAAO;AAGT,YAAMC,IAAchF,EAAWrC,MAAMH,OACnCiE,CAAAA,MAAQA,EAAKzG,WAAWC,EAAW2I,WAAWnC,EAAKzG,WAAWC,EAAWyG,MAC3E,GACMuD,IAA2B,CAAE;AAEnC,iBAAW3D,KAAQ0D;AACjBC,QAAAA,EAAShB,KAAKiB,GAAW5D,CAAI,EAAE6D,MAAMxJ,CAAI,CAAC;AAG5C,aAAO,MAAMyJ,QAAQC,IAAIJ,CAAQ,EAAEK,KAAKC,CAAAA,MAAaA,EAAU/H,OAAOhC,CAAAA,MAAYA,CAAQ,CAAC;AAAA,IAC7F;AAEA,mBAAe0J,GAAW5D,GAAuB;AAC/C,UAAI,OAAOzF,EAAMuC,kBAAmB,YAAY;AAC9C,YAAI0F,IAASjI,EAAMuC,eACjBkD,GACAtB,EAAWrC,MAAMH,OACfiE,CAAAA,MAAQA,EAAKzG,WAAWC,EAAW2I,WAAWnC,EAAKzG,WAAWC,EAAWyG,MAC3E,CACF;AAEA,YAAIqC,EAAUD,CAAM;AAClB,cAAI;AACFA,YAAAA,IAAS,MAAMA;AAAAA,UAChB,QAAW;AACV;AAAA,UACF;AAGF,YAAIE,EAAQF,CAAM,EAAG;AAErB,QAAIA,aAAkB0B,SAChB1B,aAAkB2B,OACpBnE,EAAKlG,SAAS0I,IAEdxC,EAAKlG,SAAS,IAAIqK,KAAK,CAAC3B,CAAM,GAAGxC,EAAK1G,MAAM;AAAA,UAC1CE,MAAMwG,EAAKxG;AAAAA,QACb,CAAC;AAAA,MAGP;AAEA,UAAI,CAACwG,EAAKlG,OAAQ;AAElBkG,MAAAA,EAAKtG,SAASC,EAAW4I;AAEzB,YAAM;AAAA,QAAExI,KAAAA;AAAAA,QAAKyC,SAAAA;AAAAA,QAASC,iBAAAA;AAAAA,QAAiBF,MAAAA;AAAAA,QAAMD,OAAAA;AAAAA,QAAOmB,WAAAA;AAAAA,MAAU,IAAIlD;AAElE,aAAO,MAAM,IAAIuJ,QAAQ,CAACM,GAASC,MAAW;AAC5CrE,QAAAA,EAAK5F,SAASG,EAAM4D,eAAemG,IAAQ;AAAA,UACzCvK,KAAAA;AAAAA,UACAyC,SAAAA;AAAAA,UACAC,iBAAAA;AAAAA,UACAF,MAAAA;AAAAA,UACAD,OAAAA;AAAAA,UACAmB,WAAAA;AAAAA,UACAuC,MAAMA,EAAKlG;AAAAA,UACXyK,YAAYC,CAAAA,MAAW;AACrBC,YAAAA,GAAeD,GAASxE,CAAI;AAAA,UAC7B;AAAA,UACD0E,WAAWxK,CAAAA,MAAY;AACrByK,YAAAA,GAAczK,GAAU8F,CAAI,GAC5BoE,EAAQlK,CAAQ;AAAA,UACjB;AAAA,UACD0K,SAASzK,CAAAA,MAAS;AAChB0K,YAAAA,GAAY1K,GAAO6F,CAAI,GACvBqE,EAAOlK,CAAK;AAAA,UACb;AAAA,UACD2K,SAASA,MAAM;AACbV,YAAAA,EAAQ,IAAI;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,aAASX,KAAc;AACrB,YAAMsB,IAAYxK,EAAM4B,UAAU5B,EAAM4B,UAAU,OAAO6I,OACnD9I,IACJ,OAAO3B,EAAM2B,UAAW,WACpB3B,EAAM2B,SACJ,CAAC3B,EAAM2B,MAAM,IACb,CAAA,IACF3B,EAAM2B,OAAOA,OAAOiE,CAAAA,MAAQA,CAAI;AAEtC,eAAS8E,IAAI,GAAGC,IAAMxG,EAAWrC,MAAMmD,QAAQyF,IAAIC,GAAK,EAAED,GAAG;AAC3D,cAAMjF,IAAOtB,EAAWrC,MAAM4I,CAAC,GACzBE,IAAY9B,GAAiBrD,CAAI;AAEvC,YAAI9D,EAAOsD,UAAU,CAACtD,EAAOmB,SAAS8H,CAAS;AAC7CrC,iBAAAA,EAAUvI,EAAM6K,eAAepF,CAAI,GAE5B;AAGT,YAAIA,EAAKzG,OAAOwL;AACdjC,iBAAAA,EAAUvI,EAAM8K,aAAarF,CAAI,GAE1B;AAAA,MAEX;AAEA,aAAO;AAAA,IACT;AAEA,aAASiB,EAAajB,GAAuB;;AAC3CA,MAAAA,EAAKtG,SAASC,EAAWyG,SAEzBJ,IAAAA,EAAK5F,UAAL4F,QAAAA,EAAAA,KAAAA,IACAa,EAAgB,GAChBiC,EAAUvI,EAAM+K,UAAUtF,CAAI,GAC9BgD,EAAiB;AAAA,IACnB;AAEA,aAASuC,GAAcvF,GAAuB;AAC5C8C,MAAAA,EAAUvI,EAAMiL,WAAWxF,CAAI;AAAA,IACjC;AAEA,aAASa,IAAiB;AACxB,UAAI,CAAC4E,GAAU;AAEf,YAAMC,IAAe,IAAIC,aAAc;AACvCjH,MAAAA,EAAWrC,QAAQqC,EAAWrC,MAAMH,OAAOiE,CAAAA,MAAQA,EAAKzG,WAAWC,EAAWyG,MAAM,GAEpF1B,EAAWrC,MAAMuJ,QAAQzF,CAAAA,MAAQ;AAC/BA,QAAAA,EAAKrG,UAAU4L,EAAaG,MAAMC,IAAI3F,EAAKrG,MAAM;AAAA,MACnD,CAAC,GAEG+E,EAAMxC,UACRwC,EAAMxC,MAAMwF,QAAQ6D,EAAa7D;AAAAA,IAErC;AAEA,aAAS4C,GAAeD,GAAiBxE,GAAuB;AAC9D,MAAIA,EAAKtG,WAAWC,EAAWyG,WAE/BJ,EAAKnG,aAAa2K,GAElB1B,EAAUvI,EAAMgK,YAAYvE,GAAMwE,CAAO,GACzCxB,EAAiB;AAAA,IACnB;AAEA,aAAS2B,GAAczK,GAAe8F,GAAuB;AAC3D,MAAIA,EAAKtG,WAAWC,EAAWyG,WAE/BJ,EAAKtG,SAASC,EAAW2I,SACzBtC,EAAK9F,WAAWA,GAChB8F,EAAK7F,QAAQ,MAEb2I,EAAUvI,EAAMmK,WAAW1E,GAAM9F,CAAQ,GACzC8I,EAAiB;AAAA,IACnB;AAEA,aAAS6B,GAAY1K,GAAwB6F,GAAuB;AAClE,MAAIA,EAAKtG,WAAWC,EAAWyG,WAE/BJ,EAAKtG,SAASC,EAAWoM,MACzB/F,EAAK7F,QAAQA,GAEb2I,EAAUvI,EAAMqK,SAAS5E,GAAM7F,CAAK,GACpC6I,EAAiB;AAAA,IACnB;AAEA,QAAIgD;AAEJC,IAAAA,GAAgB,MAAM;AACpBC,mBAAaF,CAAS;AAAA,IACxB,CAAC;AAED,mBAAeG,GAAW3E,GAAkB;AAC1C,UAAI,GAACjH,EAAMsC,aAAatC,EAAMW,YAAY8D,EAAS3C,WAEnD6J,aAAaF,CAAS,GACtBxE,EAAM4E,eAAgB,GAEtBxH,EAAWvC,QAAQ,IAEfmF,EAAMkE,eAAc;AACtB,cAAM7D,IAAQ,MAAMwE,GAAiB7E,EAAMkE,YAAY;AAEvD7D,QAAAA,EAAMrC,UAAUsC,EAAkBD,CAAK;AAAA,MACzC;AAAA,IACF;AAEA,aAASyE,GAAgB9E,GAAkB;AACzC,MAAI,CAACjH,EAAMsC,aAAatC,EAAMW,YAAY8D,EAAS3C,UAEnD6J,aAAaF,CAAS,GACtBxE,EAAM4E,eAAgB,GAEtBxH,EAAWvC,QAAQ;AAAA,IACrB;AAEA,aAASkK,GAAgB/E,GAAkB;AACzC,MAAI,CAACjH,EAAMsC,aAAatC,EAAMW,YAAY8D,EAAS3C,UAEnDmF,EAAM4E,eAAgB,GAEtBJ,IAAYQ,WAAW,MAAM;AAC3B5H,QAAAA,EAAWvC,QAAQ;AAAA,MACpB,GAAE,GAAG;AAAA,IACR;AAEA,mBAAegK,GAAiBX,GAA4B;;AAC1D,YAAM;AAAA,QAAEG,OAAAA;AAAAA,QAAOhE,OAAAA;AAAAA,MAAM,IAAI6D;AAEzB,UAAI,CAACG,EAAMrG,OAAQ,QAAO,CAAE;AAE5B,YAAMiH,IAAyB,CAAE,GAC3BC,IAA2D,CAAE,GAC7DC,IAA6B,CAAE;AAErC,eAAS1B,IAAI,GAAGC,IAAMW,EAAMrG,QAAQyF,IAAIC,GAAK,EAAED,GAAG;AAChD,cAAM2B,KAASf,KAAAA,IAAAA,EAAMZ,CAAC,GAAE4B,qBAAThB,gBAAAA,EAAAA,KAAAA;AAGf,YAAI,CAACe,EAAQ,QAAO/E;AAEpB,QAAI+E,EAAOE,SACTL,EAAe9D,KAAKd,EAAMoD,CAAC,CAAC,IAE5ByB,EAAQ/D,KAAK;AAAA,UAAEoE,KAAKH;AAAAA,UAAsCI,QAAQ;AAAA,QAAG,CAAC;AAAA,MAG1E;AAEA,UAAI,CAACzM,EAAMiD,aAAa,CAACkJ,EAAQlH,OAAQ,QAAOiH;AAEhD,YAAMQ,IAAiE,CAAE;AAEzE,UAAIrK,IAAarC,EAAMqC,cAAcrC,EAAM2C,cAAcwB,EAAWrC,MAAMmD,SAAS;AACnF5C,MAAAA,IAAasK,KAAKC,MAAMvK,CAAU,IAAI,IAAIA,IAAa;AAEvD,YAAMwK,IAAYA,MAAM;AACtB,eAAOV,EAAQlH,UAAQ;AACrB,gBAAM6H,IAAOX,EAAQY,MAAQ,GACvBP,IAAMM,EAAKN,KACXC,IAASK,EAAKL,SAAS,GAAGK,EAAKL,MAAM,IAAID,EAAIzN,IAAI,KAAKyN,EAAIzN,MAC1DiO,IAASR,EAAIS,aAAc;AAEjCb,UAAAA,EAAUhE,KACR,IAAImB,QAAcM,CAAAA,OAAW;AAC3BmD,YAAAA,EAAOE,YAAYC,CAAAA,OAAW;AAC5BA,cAAAA,GAAQ9B,QAAQ+B,CAAAA,MAAS;AACvB,gBAAIA,EAAMb,SACRG,EAAYtE,KAAK;AAAA,kBAAEgF,OAAAA;AAAAA,kBAAOX,QAAAA;AAAAA,gBAAO,CAAC,IAElCN,EAAQ/D,KAAK;AAAA,kBAAEoE,KAAKY;AAAAA,kBAAOX,QAAAA;AAAAA,gBAAO,CAAC;AAAA,cAEvC,CAAC,GAED5C,GAAS;AAAA,YACX,CAAC;AAAA,UACH,CAAC,CACH;AAAA,QACF;AAAA,MACD;AAED,aACEgD,EAAW,GACX,MAAMtD,QAAQC,IAAI4C,CAAS,GAEvB,GAACD,EAAQlH,UAAUyH,EAAYzH,UAAU5C;AAA7C;AAKF,aAAIqK,EAAYzH,SAAS,IAChBiH,EAAevG,OACpB,MAAM4D,QAAQC,IACZkD,EAAYlH,IACV,CAAC;AAAA,QAAE4H,OAAAA;AAAAA,QAAOX,QAAAA;AAAAA,MAAQ,MAChB,IAAIlD,QAAcM,CAAAA,MAChBuD,EAAM3H,KAAKA,CAAAA,MAAQ;AACjBA,QAAAA,EAAKhG,OAAO,GAAGgN,CAAM,IAAIhH,EAAK1G,IAAI,IAClC8K,EAAQpE,CAAI;AAAA,MACd,CAAC,CACH,CACJ,CACF,CACF,IAGKyG;AAAAA,IACT;AAEA,aAASL,GAAe5E,GAAc;AACpCA,MAAAA,EAAM4E,eAAgB;AAAA,IACxB;AAEA,aAASwB,KAAqB;AAC5B,aAAO,CAACrN,EAAMsC,aAAa,CAACtC,EAAMmD,gBAAamK,EAAAC,IAAAD,MAAAA,CAAAA,EAAAE,IAAA;AAAA,QAAA,KAGpCjJ;AAAAA,QAAM,SAAA;AAAA,QAAA,MAELvF,GAAK8C;AAAAA,QAAK,MACV9B,EAAMU;AAAAA,QAAK,UACPV,EAAMW;AAAAA,QAAQ,SACfX,EAAMY;AAAAA,MAAO,GAAA;AAAA,QAGpBS,SAASA,MAAMrB,EAAMoD,eAAehC,EAAOU,MAAMiI;AAAAA,QACjD0D,MAAMA,MAAAH,EAAAI,GAAgBzJ,EAAMnC,MAAMiI,QAAU,IAAA;AAAA,QAC5CnJ,SAASA,MAAA0M,EAAAI,GAAAC,EAED1J,EAAMnC,MAAMlB,SAAO;AAAA,UAAA,OAChBiD,EAAGsB,GAAG,cAAc;AAAA,UAAC,QACpBnF,EAAMwD,iBAAiBS,EAAMnC,MAAMlB,QAAQgN;AAAAA,UAAM,MACnD5N,EAAMqD,eAAeY,EAAMnC,MAAMlB,QAAQ6M;AAAAA,UAAI,OAC5C;AAAA,QAAS,CAAA,GAAA,IAAA;AAAA,MAEnB,CAAA,GAGJI,EAAWxN,GAAO,OAAOgG,QAAW,MAAM,CAAAiH,EAAAQ,GAAA;AAAA,QAAA,UACrB9N,EAAMK,MAAMoB;AAAAA,MAAG,GAAA;AAAA,QAAAJ,SAAAA,MAAA,CAChCrB,EAAMyB,OAAG6L,EAAA,KAAA;AAAA,UAAA,OAAczJ,EAAGsB,GAAG,KAAK;AAAA,WAAInF,CAAAA,EAAMyB,GAAG,CAAK,CAAA;AAAA,MAExD,CAAA,CAAA,CAAA,CAAC,KAAA6L,EAAA,OAAA;AAAA,QAAA,KAIG9I;AAAAA,QAAK,OACH,CAACX,EAAGsB,GAAG,YAAY,GAAGnF,EAAMW,YAAYkD,EAAGuB,IAAI,cAAc,UAAU,CAAC;AAAA,QAAC,UACtE;AAAA,MAAC,GAAA,CAEVyI,EAAWxN,GAAO,SAASgG,QAAW,MAAM,CAAAiH,EAAAQ,GAAA;AAAA,QAAA,UACvB9N,EAAMK,MAAM0N;AAAAA,MAAK,GAAA;AAAA,QAAA1M,SAAAA,MAAAiM,CAAAA,EAAAI,GAAAC,EAE7B1J,EAAMnC,MAAMkM,aAAW;AAAA,UAAA,OACpB,CAACnK,EAAGsB,GAAG,OAAO,GAAGnF,EAAMW,YAAYkD,EAAGuB,IAAI,SAAS,UAAU,CAAC;AAAA,UAAC,OAC/D,EAAEnB,EAAMnC,MAAMkM,YAAYC,SAAS,KAAK;AAAA,QAAC,CAAA,GAAA,IAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAGrD,GACAJ,EAAWxN,GAAO,OAAOgG,QAAW,MAAM,CAAAiH,EAAAQ,GAAA;AAAA,QAAA,UACrB9N,EAAMK,MAAMoB;AAAAA,MAAG,GAAA;AAAA,QAAAJ,SAAAA,MAAA,CAAAiM,EAAA,KAAA;AAAA,UAAA,OACvBzJ,EAAGsB,GAAG,KAAK;AAAA,WAAInF,CAAAA,EAAMyB,OAAOL,EAAOU,MAAMoM,WAAW,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAEjE,GAACZ,EAAAI,GAAAC,EAEI1J,EAAMnC,MAAMlB,SAAO;AAAA,QAAA,OAChBiD,EAAGsB,GAAG,cAAc;AAAA,QAAC,QACpBnF,EAAMwD,iBAAiBS,EAAMnC,MAAMlB,QAAQgN;AAAAA,QAAM,MACnD5N,EAAMqD,eAAeY,EAAMnC,MAAMlB,QAAQ6M;AAAAA,QAAI,OAC5C;AAAA,QAAS,OACT;AAAA,UAAEU,SAASnO,EAAMY,UAAU,SAAS;AAAA,QAAK;AAAA,OAGrD,GAAA,IAAA,CAAA,CAAA;AAAA,IACH;AAEA,aAASwN,KAAoB;AAC3B,aAAAd,EAAA,UAAA;AAAA,QAAA,OAEW,CAACzJ,EAAGsB,GAAG,cAAc,GAAGnF,EAAMW,YAAYkD,EAAGuB,IAAI,gBAAgB,UAAU,CAAC;AAAA,QAAC,MAC9E;AAAA,MAAQ,GAAA,CAEbyI,EACCxN,GACA,WACA;AAAA,QACEgE,aAAarE,EAAMsC,aAAatC,EAAMmD,kBAAkBkB,EAAWvC;AAAAA,MACrE,GACA,MAAM,CAAAwL,EAAAQ,GAAA;AAAA,QAAA,UAEQ9N,EAAMK,MAAMgB;AAAAA,QAAO,MACvB;AAAA,UAAEgD,aAAarE,EAAMsC,aAAatC,EAAMmD,kBAAkBkB,EAAWvC;AAAAA,QAAM;AAAA,MAAC,GAAA;AAAA,QAAAT,SAAAA,MAAA,CAEjFrB,EAAMY,UAAO0M,EAAAI,GAAAC,EAEN1J,EAAMnC,MAAMlB,SAAO;AAAA,UAAA,OAChBiD,EAAGsB,GAAG,cAAc;AAAA,UAAC,QACpBnF,EAAMwD,iBAAiBS,EAAMnC,MAAMlB,QAAQgN;AAAAA,UAAM,MACnD5N,EAAMqD,eAAeY,EAAMnC,MAAMlB,QAAQ6M;AAAAA,UAAI,OAC5C;AAAA,UAAS,OACT;AAAA,YAAEY,cAAc;AAAA,UAAM;AAAA,SAACf,GAAAA,IAAAA,IAAAA,EAAAI,GAAAC,EAI1B1J,EAAMnC,MAAMwM,MAAI;AAAA,UAAA,OACb,CAACzK,EAAGsB,GAAG,OAAO,GAAGnF,EAAMW,YAAYkD,EAAGuB,IAAI,SAAS,UAAU,CAAC;AAAA,UAAC,OAC/D,EAAEnB,EAAMnC,MAAMwM,KAAKL,SAAS,KAAK;AAAA,UAAG,OACpC;AAAA,YAAEI,cAAc;AAAA,UAAM;AAAA,QAEhC,CAAA,GAAA,IAAA,GAAAf,EAAA,QAAA,MAAA,CACMtN,EAAMoD,eAAehC,EAAOU,MAAMiI,MAAM,CAAA,CAAA;AAAA,MAAA,CAAA,CAAA,CAGrD,CAAC,CAAA;AAAA,IAGP;AAEA,aAASwE,IAAgB;AACvB,YAAMC,IAAUxO,EAAMyD,QAAQ,OAAO;AAErC,aAAA6J,EAAAkB,GAAA;AAAA,QAAA,OAEWtJ,GAAapD;AAAAA,QAAK,UACf;AAAA,QAAE,SACHgF;AAAAA,QAAW,QACZ8E;AAAAA,QAAU,YACNG;AAAAA,QAAe,aACdC;AAAAA,QAAe,WACjBhF;AAAAA,MAAa,GAAA;AAAA,QAAA3F,SAAAA,MAEvB,CAAA,CAACrB,EAAMmD,iBAAamK,EAAA,SAAA;AAAA,UAAA,KAEZhJ;AAAAA,UAAK,MACJ;AAAA,UAAM,OACLT,EAAGsB,GAAG,OAAO;AAAA,UAAC,UACXnF,EAAMW;AAAAA,UAAQ,UACdX,EAAMwB;AAAAA,UAAQ,MAClBxB,EAAMjB;AAAAA,UAAI,QACRsG,GAAavD;AAAAA,UAAK,iBACT9B,EAAMiD,aAAaoD;AAAAA,UAAS,UACnCe;AAAAA,UAAiB,UACjByE;AAAAA,QAAc,GAAA,IAAA,GAG3B7L,EAAMyD,QACH2K,GAAiB,IACjBP,EACAxN,GACA,WACA;AAAA,UACEgE,aAAarE,EAAMsC,aAAatC,EAAMmD,kBAAkBkB,EAAWvC;AAAAA,QACrE,GACA,MAAA;AAAA,cAAA2M;AAAA,iBAAM,CAAAnB,EAAAQ,GAAA;AAAA,YAAA,UAEQ9N,EAAMK,MAAMgB;AAAAA,YAAO,MACvB;AAAA,cACJgD,aAAarE,EAAMsC,aAAatC,EAAMmD,kBAAkBkB,EAAWvC;AAAAA,YACrE;AAAA,UAACzD,GAAAA,GAAAoQ,IAEApB,GAAoB,CAAA,IAAAoB,IAAA;AAAA,YAAApN,SAAAA,MAAA,CAAAoN,CAAA;AAAA,WAExB,CAAA;AAAA,QAAA,CACH,CAAC;AAAA,MAAA,CAAA;AAAA,IAGT;AAEA,aAASC,KAAiB;AACxB,aAAApB,EAAAqB,IAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAGW3J,EAAYlD;AAAAA,QAAK,iBACT9B,EAAM2C;AAAAA,QAAW,MAC1B3C,EAAMyD,QAAQ,cAAczD,EAAM4C;AAAAA,QAAQ,iBACjC5C,EAAM0C;AAAAA,QAAY,gBACnB1C,EAAMgD;AAAAA,QAAW,eAClBhD,EAAM4O;AAAAA,QAAU,OACtB5O,EAAM2D;AAAAA,QAAS,UACZ+C;AAAAA,QAAY,WACXsE;AAAAA,MAAa,GAAA;AAAA,QAGtBpF,MACEvF,EAAMuF,QAAQ5F,EAAMK,MAAMuF,OACrBiJ,CAAAA,MACDhB,EAAWxN,GAAO,QAAQwO,GAAQ,MAAM,CAAAvB,EAAAQ,GAAA;AAAA,UAAA,UAClB9N,EAAMK,MAAMuF;AAAAA,UAAI,MAAQiJ;AAAAA,WAC7C,IAAA,CAAA,CAAA,IACD;AAAA,QACNpB,MACEpN,EAAMoN,QAAQzN,EAAMK,MAAMoN,OACrBoB,CAAAA,MACDhB,EAAWxN,GAAO,QAAQwO,GAAQ,MAAM,CAAAvB,EAAAQ,GAAA;AAAA,UAAA,UAClB9N,EAAMK,MAAMoN;AAAAA,UAAI,MAAQoB;AAAAA,WAC7C,IAAA,CAAA,CAAA,IACD;AAAA,QACNC,QAAQA,MACN9O,EAAMyD,UAAU,CAACzD,EAAMqC,cAAc2C,EAAYlD,MAAMmD,SAASjF,EAAMqC,cAClEkM,EAAa,IACb;AAAA,MAAI,CAAA;AAAA,IAIlB;AAEA,WAAO,MAAAjB,EAAA,OAAA;AAAA,MAAA,IACI9M,GAAMsB;AAAAA,MAAK,OAAS6C,GAAU7C;AAAAA,MAAK,MAAQ;AAAA,MAAO,mBAAmBrB,GAAQqB;AAAAA,IAAK,GAAA,CACxF,CAAC9B,EAAMyD,SAAS8K,EAAa,GAC7B,CAACvO,EAAMoC,eAAesM,GAAc,CAAE,CAE1C;AAAA,EACF;AAAA,EACDK,SAAS;AAAA,IACPtI,SAAS3G;AAAAA,IACT4G,cAAc5G;AAAAA,IACdmB,OAAOnB;AAAAA,IACP6G,MAAM7G;AAAAA,EACR;AACF,CAAC;"}