UNPKG

@extclp/vexip-ui

Version:

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

1 lines 19.9 kB
{"version":3,"file":"upload-file.vue2.mjs","sources":["../../../components/upload/upload-file.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Progress } from '@/components/progress'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, reactive, shallowReadonly, toRef } from 'vue'\r\n\r\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { toFixed } from '@vexip-ui/utils'\r\nimport { uploadFileProps } from './props'\r\nimport { useFileIcons } from './file-icon'\r\nimport { StatusType, uploadListTypes } from './symbol'\r\n\r\nimport type { UploadFileSlots, UploadFileState } from './symbol'\r\n\r\ndefineOptions({ name: 'UploadFile' })\r\n\r\nconst imageExtRE = /\\.(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i\r\nconst imageBase64RE = /^data:image\\//\r\n\r\nfunction isImage(file: UploadFileState) {\r\n if (file.type) {\r\n return file.type.startsWith('image/')\r\n }\r\n\r\n const { name, url, base64 } = file\r\n\r\n return !!(\r\n imageExtRE.test(name) ||\r\n (url && (imageExtRE.test(url) || imageBase64RE.test(url))) ||\r\n (base64 && imageBase64RE.test(base64))\r\n )\r\n}\r\n\r\nconst _props = defineProps(uploadFileProps)\r\nconst props = useProps('uploadFile', _props, {\r\n locale: null,\r\n file: {\r\n default: () => ({}) as UploadFileState,\r\n static: true,\r\n },\r\n iconRenderer: {\r\n default: null,\r\n isFunc: true,\r\n },\r\n listType: {\r\n default: 'name',\r\n validator: value => uploadListTypes.includes(value),\r\n },\r\n loadingText: null,\r\n selectToAdd: false,\r\n precision: 2,\r\n canPreview: {\r\n default: isImage,\r\n isFunc: true,\r\n },\r\n slots: () => ({}),\r\n})\r\n\r\ndefineSlots<UploadFileSlots>()\r\n\r\nconst nh = useNameHelper('upload')\r\nconst locale = useLocale('upload', toRef(props, 'locale'))\r\nconst icons = useIcons()\r\nconst fileIcons = useFileIcons(icons)\r\n\r\nconst useIconRenderer = computed(() => typeof props.iconRenderer === 'function')\r\nconst fileName = computed(() => props.file.path || props.file.name)\r\nconst status = computed(() => props.file.status)\r\nconst percentage = computed(() => toFixed(props.file.percentage, props.precision))\r\nconst showThumb = computed(() => isImage(props.file) && (props.file.url || props.file.base64))\r\n\r\nconst slotParams = shallowReadonly(\r\n reactive({\r\n file: toRef(props, 'file'),\r\n status,\r\n percentage,\r\n }),\r\n)\r\n\r\nfunction getFileExtension(file: UploadFileState) {\r\n return file.name.split('.').pop()!.toLocaleLowerCase()\r\n}\r\n\r\nfunction getFileIcon(file: UploadFileState, scale = 1) {\r\n const extension = getFileExtension(file)\r\n const icon = extension\r\n ? fileIcons.value[extension] || fileIcons.value.default\r\n : fileIcons.value.default\r\n\r\n return { ...icon, scale: +(icon.scale || 1) * scale }\r\n}\r\n\r\nfunction handleDelete(file: UploadFileState) {\r\n emitEvent(props.onDelete, file)\r\n}\r\n\r\nfunction handlePreview(file: UploadFileState) {\r\n emitEvent(props.onPreview, file)\r\n}\r\n\r\nfunction imageToBase64(file: UploadFileState) {\r\n if (!file.source || !isImage(props.file)) return\r\n\r\n const reader = new FileReader()\r\n\r\n reader.readAsDataURL(file.source)\r\n reader.onload = () => {\r\n if (file.status !== StatusType.DELETE) {\r\n file.base64 = reader.result?.toString() ?? null\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <li\r\n :class=\"[\r\n nh.be('file'),\r\n nh.bem('file', props.listType),\r\n nh.bem('file', status),\r\n props.inherit && nh.bem('file', 'inherit')\r\n ]\"\r\n :title=\"fileName\"\r\n tabindex=\"-1\"\r\n >\r\n <slot v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\">\r\n <template v-if=\"props.listType === 'name'\">\r\n <div :class=\"nh.be('label')\">\r\n <div :class=\"[nh.be('icon'), nh.be('file-icon')]\">\r\n <slot name=\"icon\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\r\n <Renderer\r\n v-if=\"useIconRenderer\"\r\n :renderer=\"props.iconRenderer\"\r\n :data=\"{ file: props.file }\"\r\n ></Renderer>\r\n <Icon v-else v-bind=\"getFileIcon(props.file)\"></Icon>\r\n </Renderer>\r\n </slot>\r\n </div>\r\n <span :class=\"nh.be('filename')\">\r\n {{ fileName }}\r\n </span>\r\n </div>\r\n <div :class=\"nh.be('actions')\">\r\n <span\r\n v-if=\"status === 'uploading'\"\r\n style=\"margin-inline-end: 0.5em\"\r\n :class=\"nh.be('percentage')\"\r\n >\r\n {{ `${percentage}%` }}\r\n </span>\r\n <div v-if=\"status === 'success'\" :class=\"[nh.be('icon'), nh.be('success')]\">\r\n <Icon v-bind=\"icons.success\"></Icon>\r\n </div>\r\n <div v-else-if=\"status === 'fail'\" :class=\"[nh.be('icon'), nh.be('fail')]\">\r\n <Icon v-bind=\"icons.warning\"></Icon>\r\n </div>\r\n <div v-else-if=\"status === 'uploading'\" :class=\"[nh.be('icon'), nh.be('loading')]\">\r\n <Icon v-bind=\"icons.loading\"></Icon>\r\n </div>\r\n <button\r\n type=\"button\"\r\n :class=\"[nh.be('icon'), nh.be('close')]\"\r\n :aria-label=\"locale.ariaLabel.delete\"\r\n @click=\"handleDelete(props.file)\"\r\n >\r\n <Icon v-bind=\"icons.delete\"></Icon>\r\n </button>\r\n </div>\r\n <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\r\n <Progress\r\n inherit\r\n info-type=\"none\"\r\n :stroke-width=\"2\"\r\n :percentage=\"props.file.percentage\"\r\n :precision=\"props.precision\"\r\n ></Progress>\r\n </div>\r\n </template>\r\n <template v-else-if=\"props.listType === 'thumbnail' || props.listType === 'card'\">\r\n <div :class=\"nh.be('card')\">\r\n <div :class=\"nh.be('thumbnail')\">\r\n <template v-if=\"status === 'uploading'\">\r\n <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('progress')\">\r\n <span style=\"margin-bottom: 0.3em\">\r\n {{ props.loadingText ?? locale.uploading }}\r\n </span>\r\n <Progress\r\n inherit\r\n info-type=\"none\"\r\n :stroke-width=\"2\"\r\n :percentage=\"props.file.percentage\"\r\n :precision=\"props.precision\"\r\n ></Progress>\r\n <span style=\"margin-top: 3px\" :class=\"nh.be('percentage')\">\r\n {{ `${percentage}%` }}\r\n </span>\r\n </div>\r\n <Icon\r\n v-else\r\n v-bind=\"icons.loading\"\r\n :scale=\"+(icons.loading.scale || 1) * 1.8\"\r\n label=\"loading\"\r\n ></Icon>\r\n </template>\r\n <img\r\n v-else-if=\"showThumb\"\r\n :class=\"nh.be('image')\"\r\n :src=\"props.file.url || props.file.base64 || ''\"\r\n :alt=\"fileName\"\r\n />\r\n <template v-else>\r\n {{ imageToBase64(props.file) }}\r\n <slot name=\"icon\" v-bind=\"slotParams\">\r\n <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\r\n <Renderer\r\n v-if=\"useIconRenderer\"\r\n :renderer=\"props.iconRenderer\"\r\n :data=\"{ file: props.file }\"\r\n ></Renderer>\r\n <Icon v-else v-bind=\"getFileIcon(props.file, 2.8)\"></Icon>\r\n </Renderer>\r\n </slot>\r\n </template>\r\n </div>\r\n <div v-if=\"props.listType === 'card'\" :class=\"nh.be('info')\">\r\n <span :class=\"nh.be('filename')\">\r\n {{ fileName }}\r\n </span>\r\n <CollapseTransition>\r\n <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\r\n <Progress\r\n inherit\r\n info-type=\"none\"\r\n :stroke-width=\"4\"\r\n :percentage=\"props.file.percentage\"\r\n :precision=\"props.precision\"\r\n ></Progress>\r\n </div>\r\n </CollapseTransition>\r\n </div>\r\n <div\r\n v-if=\"props.listType === 'card' || status !== 'uploading'\"\r\n :class=\"nh.be('actions')\"\r\n >\r\n <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('mask')\"></div>\r\n <button\r\n type=\"button\"\r\n :class=\"[\r\n nh.be('icon'),\r\n nh.be('action'),\r\n {\r\n [nh.bem('action', 'disabled')]: !props.canPreview(props.file)\r\n }\r\n ]\"\r\n :disabled=\"!props.canPreview(props.file)\"\r\n :aria-label=\"locale.ariaLabel.preview\"\r\n @click=\"handlePreview(props.file)\"\r\n >\r\n <Icon v-bind=\"icons.preview\" :scale=\"+(icons.preview.scale || 1) * 1.4\"></Icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n :class=\"[nh.be('icon'), nh.be('action')]\"\r\n :aria-label=\"locale.ariaLabel.delete\"\r\n @click=\"handleDelete(props.file)\"\r\n >\r\n <Icon v-bind=\"icons.delete\" :scale=\"+(icons.delete.scale || 1) * 1.4\"></Icon>\r\n </button>\r\n </div>\r\n </div>\r\n </template>\r\n </Renderer>\r\n </slot>\r\n </li>\r\n</template>\r\n"],"names":["imageExtRE","imageBase64RE","isImage","file","name","url","base64","props","useProps","__props","value","uploadListTypes","nh","useNameHelper","locale","useLocale","toRef","icons","useIcons","fileIcons","useFileIcons","useIconRenderer","computed","fileName","status","percentage","toFixed","showThumb","slotParams","shallowReadonly","reactive","getFileExtension","getFileIcon","scale","extension","icon","handleDelete","emitEvent","handlePreview","imageToBase64","reader","StatusType","_a","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","_createVNode","Renderer","_Fragment","_createElementVNode","_createBlock","_openBlock","Icon","_mergeProps","_cache","$event","Progress","_hoisted_3","_toDisplayString","_createTextVNode","CollapseTransition"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAa,oDACbC,IAAgB;AAEtB,aAASC,EAAQC,GAAuB;AACtC,UAAIA,EAAK;AACA,eAAAA,EAAK,KAAK,WAAW,QAAQ;AAGtC,YAAM,EAAE,MAAAC,GAAM,KAAAC,GAAK,QAAAC,EAAW,IAAAH;AAE9B,aAAO,CAAC,EACNH,EAAW,KAAKI,CAAI,KACnBC,MAAQL,EAAW,KAAKK,CAAG,KAAKJ,EAAc,KAAKI,CAAG,MACtDC,KAAUL,EAAc,KAAKK,CAAM;AAAA,IAAA;AAKlC,UAAAC,IAAQC,EAAS,cADRC,GAC8B;AAAA,MAC3C,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,SAAS,OAAO,CAAA;AAAA,QAChB,QAAQ;AAAA,MACV;AAAA,MACA,cAAc;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,UAAU;AAAA,QACR,SAAS;AAAA,QACT,WAAW,CAAAC,MAASC,GAAgB,SAASD,CAAK;AAAA,MACpD;AAAA,MACA,aAAa;AAAA,MACb,aAAa;AAAA,MACb,WAAW;AAAA,MACX,YAAY;AAAA,QACV,SAASR;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,OAAO,OAAO,CAAC;AAAA,IAAA,CAChB,GAIKU,IAAKC,EAAc,QAAQ,GAC3BC,IAASC,EAAU,UAAUC,EAAMT,GAAO,QAAQ,CAAC,GACnDU,IAAQC,EAAS,GACjBC,IAAYC,GAAaH,CAAK,GAE9BI,IAAkBC,EAAS,MAAM,OAAOf,EAAM,gBAAiB,UAAU,GACzEgB,IAAWD,EAAS,MAAMf,EAAM,KAAK,QAAQA,EAAM,KAAK,IAAI,GAC5DiB,IAASF,EAAS,MAAMf,EAAM,KAAK,MAAM,GACzCkB,IAAaH,EAAS,MAAMI,EAAQnB,EAAM,KAAK,YAAYA,EAAM,SAAS,CAAC,GAC3EoB,IAAYL,EAAS,MAAMpB,EAAQK,EAAM,IAAI,MAAMA,EAAM,KAAK,OAAOA,EAAM,KAAK,OAAO,GAEvFqB,IAAaC;AAAA,MACjBC,EAAS;AAAA,QACP,MAAMd,EAAMT,GAAO,MAAM;AAAA,QACzB,QAAAiB;AAAA,QACA,YAAAC;AAAA,MACD,CAAA;AAAA,IACH;AAEA,aAASM,EAAiB5B,GAAuB;AAC/C,aAAOA,EAAK,KAAK,MAAM,GAAG,EAAE,MAAO,kBAAkB;AAAA,IAAA;AAG9C,aAAA6B,EAAY7B,GAAuB8B,IAAQ,GAAG;AAC/C,YAAAC,IAAYH,EAAiB5B,CAAI,GACjCgC,IAAOD,KACTf,EAAU,MAAMe,CAAS,KAAKf,EAAU,MAAM;AAG3C,aAAA,EAAE,GAAGgB,GAAM,OAAO,EAAEA,EAAK,SAAS,KAAKF,EAAM;AAAA,IAAA;AAGtD,aAASG,EAAajC,GAAuB;AACjC,MAAAkC,EAAA9B,EAAM,UAAUJ,CAAI;AAAA,IAAA;AAGhC,aAASmC,EAAcnC,GAAuB;AAClC,MAAAkC,EAAA9B,EAAM,WAAWJ,CAAI;AAAA,IAAA;AAGjC,aAASoC,EAAcpC,GAAuB;AAC5C,UAAI,CAACA,EAAK,UAAU,CAACD,EAAQK,EAAM,IAAI,EAAG;AAEpC,YAAAiC,IAAS,IAAI,WAAW;AAEvB,MAAAA,EAAA,cAAcrC,EAAK,MAAM,GAChCqC,EAAO,SAAS,MAAM;;AAChB,QAAArC,EAAK,WAAWsC,GAAW,WAC7BtC,EAAK,WAASuC,IAAAF,EAAO,WAAP,gBAAAE,EAAe,eAAc;AAAA,MAE/C;AAAA,IAAA;2BAKAC,EAiKK,MAAA;AAAA,MAhKF,OAAKC,EAAA;AAAA,QAAWC,EAAAjC,CAAA,EAAG,GAAE,MAAA;AAAA,QAAiBiC,EAAAjC,CAAA,EAAG,IAAY,QAAAiC,EAAAtC,CAAA,EAAM,QAAQ;AAAA,QAAUsC,EAAEjC,CAAA,EAAC,IAAG,QAASY,EAAM,KAAA;AAAA,QAAUqB,EAAAtC,CAAA,EAAM,WAAWsC,EAAAjC,CAAA,EAAG,IAAG,QAAA,SAAA;AAAA,MAAA;MAMnI,OAAOW,EAAQ;AAAA,MAChB,UAAS;AAAA,IAAA;MAETuB,EAsJOC,EAAA,QAAA,WAAAC,EAAAC,EAtJOJ,EAAUjB,CAAA,CAAA,CAAA,GAAxB,MAsJO;AAAA,QArJLsB,EAoJWL,EAAAM,CAAA,GAAA;AAAA,UApJA,UAAUN,EAAAtC,CAAA,EAAM,MAAM;AAAA,UAAU,MAAMsC,EAAUjB,CAAA;AAAA,QAAA;qBACzD,MAqDW;AAAA,YArDKiB,EAAAtC,CAAA,EAAM,aAAQ,eAA9BoC,EAqDWS,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,cApDTC,EAgBM,OAAA;AAAA,gBAhBA,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,cAAA;gBAChByC,EAWM,OAAA;AAAA,kBAXA,UAAQR,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,WAAA,CAAA,CAAA;AAAA,gBAAA;kBAChCkC,EASOC,EAAA,QAAA,QAAAC,EAAAC,EATmBJ,EAAUjB,CAAA,CAAA,CAAA,GAApC,MASO;AAAA,oBARLsB,EAOWL,EAAAM,CAAA,GAAA;AAAA,sBAPA,UAAUN,EAAAtC,CAAA,EAAM,MAAM;AAAA,sBAAO,MAAMsC,EAAUjB,CAAA;AAAA,oBAAA;iCACtD,MAIY;AAAA,wBAHJP,EAAe,cADvBiC,EAIYT,EAAAM,CAAA,GAAA;AAAA;0BAFT,UAAUN,EAAKtC,CAAA,EAAC;AAAA,0BAChB,MAAI,EAAA,MAAUsC,EAAKtC,CAAA,EAAC,KAAI;AAAA,8DAE3BgD,KAAAD,EAAqDT,EAAhCW,CAAA,GAAAR,EAAAS,EAAA,EAAA,KAAA,EAAA,GAAAzB,EAAYa,EAAAtC,CAAA,EAAM,IAAI,CAAA,CAAA,GAAA,MAAA,EAAA;AAAA,sBAAA;;;;;gBAIjD8C,EAEO,QAAA;AAAA,kBAFA,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,UAAA,CAAA;AAAA,qBACdW,EAAQ,KAAA,GAAA,CAAA;AAAA;cAGf8B,EAyBM,OAAA;AAAA,gBAzBA,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,SAAA,CAAA;AAAA,cAAA;gBAERY,EAAM,UAAA,oBADdmB,EAMO,QAAA;AAAA;kBAJL,OAAA,EAAgC,qBAAA,QAAA;AAAA,kBAC/B,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,YAAA,CAAA;AAAA,wBAEPa,EAAU,KAAA,GAAA,GAAA,CAAA;gBAEPD,EAAM,UAAA,kBAAjBmB,EAEM,OAAA;AAAA;kBAF4B,UAAQE,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA;AAAA,gBAAA;kBAC5DsC,EAAoCL,EAAAW,CAAA,GAAAR,EAAAC,EAAtBJ,EAAK5B,CAAA,EAAC,OAAO,CAAA,GAAA,MAAA,EAAA;AAAA,gBAAA,SAEbO,EAAM,UAAA,YAAtB,GAAAmB,EAEM,OAAA;AAAA;kBAF8B,UAAQE,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA;AAAA,gBAAA;kBAC9DsC,EAAoCL,EAAAW,CAAA,GAAAR,EAAAC,EAAtBJ,EAAK5B,CAAA,EAAC,OAAO,CAAA,GAAA,MAAA,EAAA;AAAA,gBAAA,SAEbO,EAAM,UAAA,iBAAtB,GAAAmB,EAEM,OAAA;AAAA;kBAFmC,UAAQE,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA;AAAA,gBAAA;kBACnEsC,EAAoCL,EAAAW,CAAA,GAAAR,EAAAC,EAAtBJ,EAAK5B,CAAA,EAAC,OAAO,CAAA,GAAA,MAAA,EAAA;AAAA;gBAE7BoC,EAOS,UAAA;AAAA,kBANP,MAAK;AAAA,kBACJ,UAAQR,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA;AAAA,kBAC5B,cAAYiC,EAAA/B,CAAA,EAAO,UAAU;AAAA,kBAC7B,SAAO4C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAvB,EAAaS,EAAAtC,CAAA,EAAM,IAAI;AAAA,gBAAA;kBAE/B2C,EAAmCL,EAAAW,CAAA,GAAAR,EAAAC,EAArBJ,EAAK5B,CAAA,EAAC,MAAM,CAAA,GAAA,MAAA,EAAA;AAAA;;cAGnBO,EAAM,UAAA,oBAAjBmB,EAQM,OAAA;AAAA;gBAR8B,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,UAAA,CAAA;AAAA,cAAA;gBAC9CsC,EAMYL,EAAAe,CAAA,GAAA;AAAA,kBALV,SAAA;AAAA,kBACA,aAAU;AAAA,kBACT,gBAAc;AAAA,kBACd,YAAYf,EAAAtC,CAAA,EAAM,KAAK;AAAA,kBACvB,WAAWsC,EAAKtC,CAAA,EAAC;AAAA;;sBAIHsC,EAAAtC,CAAA,EAAM,aAA4B,eAAAsC,EAAAtC,CAAA,EAAM,aAAQ,eACnEoC,EA0FM,OAAA;AAAA;cA1FA,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,MAAA,CAAA;AAAA,YAAA;cAChByC,EA2CM,OAAA;AAAA,gBA3CA,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,WAAA,CAAA;AAAA,cAAA;gBACAY,EAAM,UAAA,oBAAtBmB,EAsBWS,GAAA,EAAA,KAAA,KAAA;AAAA,kBArBEP,EAAAtC,CAAA,EAAM,aAAQ,oBAAzBoC,EAcM,OAAA;AAAA;oBAdsC,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,UAAA,CAAA;AAAA,kBAAA;oBACtDyC,EAEO,QAFPQ,IACKC,EAAAjB,EAAAtC,CAAA,EAAM,eAAesC,EAAM/B,CAAA,EAAC,SAAS,GAAA,CAAA;AAAA,oBAE1CoC,EAMYL,EAAAe,CAAA,GAAA;AAAA,sBALV,SAAA;AAAA,sBACA,aAAU;AAAA,sBACT,gBAAc;AAAA,sBACd,YAAYf,EAAAtC,CAAA,EAAM,KAAK;AAAA,sBACvB,WAAWsC,EAAKtC,CAAA,EAAC;AAAA;oBAEpB8C,EAEO,QAAA;AAAA,sBAFD,OAAA,EAAuB,cAAA,MAAA;AAAA,sBAAE,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,YAAA,CAAA;AAAA,oBAAA,QACnCa,EAAU,KAAA,GAAA,GAAA,CAAA;AAAA,kBAAA,UAGpB8B,EAAA,GAAAD,EAKQT,EALRW,CAAA,GAAAC,EAKQ,EAHE,KAAA,KAAAZ,EAAA5B,CAAA,EAAM,SAAO;AAAA,oBACpB,OAAS,EAAA4B,EAAA5B,CAAA,EAAM,QAAQ,SAAK,KAAA;AAAA,oBAC7B,OAAM;AAAA;0BAIGU,EAAS,cADtBgB,EAKE,OAAA;AAAA;kBAHC,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,kBACZ,KAAKiC,EAAKtC,CAAA,EAAC,KAAK,OAAOsC,EAAKtC,CAAA,EAAC,KAAK,UAAM;AAAA,kBACxC,KAAKgB,EAAQ;AAAA,0CAEhBoB,EAYWS,GAAA,EAAA,KAAA,KAAA;AAAA,kBAXNW,EAAAD,EAAAvB,EAAcM,EAAAtC,CAAA,EAAM,IAAI,KAAI,KAC/B,CAAA;AAAA,kBAAAuC,EASOC,EAAA,QAAA,QAAAC,EAAAC,EATmBJ,EAAUjB,CAAA,CAAA,CAAA,GAApC,MASO;AAAA,oBARLsB,EAOWL,EAAAM,CAAA,GAAA;AAAA,sBAPA,UAAUN,EAAAtC,CAAA,EAAM,MAAM;AAAA,sBAAO,MAAMsC,EAAUjB,CAAA;AAAA,oBAAA;iCACtD,MAIY;AAAA,wBAHJP,EAAe,cADvBiC,EAIYT,EAAAM,CAAA,GAAA;AAAA;0BAFT,UAAUN,EAAKtC,CAAA,EAAC;AAAA,0BAChB,MAAI,EAAA,MAAUsC,EAAKtC,CAAA,EAAC,KAAI;AAAA,8DAE3BgD,EAAA,GAAAD,EAA0DT,EAArCW,CAAA,GAAAR,EAAAS,EAAA,EAAA,KAAA,KAAAzB,EAAYa,EAAAtC,CAAA,EAAM,MAAI,GAAA,CAAA,CAAA,GAAA,MAAA,EAAA;AAAA,sBAAA;;;;;;cAKxCsC,EAAAtC,CAAA,EAAM,aAAQ,eAAzBoC,EAeM,OAAA;AAAA;gBAfiC,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,MAAA,CAAA;AAAA,cAAA;gBACjDyC,EAEO,QAAA;AAAA,kBAFA,OAAKT,EAAEC,EAAEjC,CAAA,EAAC,GAAE,UAAA,CAAA;AAAA,qBACdW,EAAQ,KAAA,GAAA,CAAA;AAAA,gBAEb2B,EAUqBL,EAAAmB,EAAA,GAAA,MAAA;AAAA,6BATnB,MAQM;AAAA,oBARKxC,EAAM,UAAA,oBAAjBmB,EAQM,OAAA;AAAA;sBAR8B,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,UAAA,CAAA;AAAA,oBAAA;sBAC9CsC,EAMYL,EAAAe,CAAA,GAAA;AAAA,wBALV,SAAA;AAAA,wBACA,aAAU;AAAA,wBACT,gBAAc;AAAA,wBACd,YAAYf,EAAAtC,CAAA,EAAM,KAAK;AAAA,wBACvB,WAAWsC,EAAKtC,CAAA,EAAC;AAAA;;;;;;cAMlBsC,EAAKtC,CAAA,EAAC,aAAQ,UAAeiB,EAAM,UAAA,oBAD3CmB,EA4BM,OAAA;AAAA;gBA1BH,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,SAAA,CAAA;AAAA,cAAA;gBAEFiC,EAAAtC,CAAA,EAAM,aAAQ,oBAAzBoC,EAAwE,OAAA;AAAA;kBAA5B,OAAKC,EAAEC,EAAEjC,CAAA,EAAC,GAAE,MAAA,CAAA;AAAA;gBACxDyC,EAcS,UAAA;AAAA,kBAbP,MAAK;AAAA,kBACJ,OAAKT,EAAA;AAAA,oBAAuBC,EAAAjC,CAAA,EAAG,GAAE,MAAA;AAAA,oBAA6BiC,EAAAjC,CAAA,EAAG,GAAE,QAAA;AAAA;uBAAuDiC,EAAEjC,CAAA,EAAC,IAA6B,UAAA,UAAA,CAAA,GAAA,CAAAiC,EAAAtC,CAAA,EAAM,WAAWsC,EAAKtC,CAAA,EAAC,IAAI;AAAA,oBAAA;AAAA;kBAOrL,WAAWsC,EAAKtC,CAAA,EAAC,WAAWsC,EAAAtC,CAAA,EAAM,IAAI;AAAA,kBACtC,cAAYsC,EAAA/B,CAAA,EAAO,UAAU;AAAA,kBAC7B,SAAO4C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAArB,EAAcO,EAAAtC,CAAA,EAAM,IAAI;AAAA,gBAAA;kBAEhC2C,EAA+EL,EAA/EW,CAAA,GAAAC,EAAcZ,EAAiE5B,CAAA,EAA3D,SAAO;AAAA,oBAAG,OAAS,EAAA4B,EAAA5B,CAAA,EAAM,QAAQ,SAAK,KAAA;AAAA;;gBAE5DoC,EAOS,UAAA;AAAA,kBANP,MAAK;AAAA,kBACJ,UAAQR,EAAEjC,CAAA,EAAC,GAAY,MAAA,GAAAiC,EAAAjC,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA;AAAA,kBAC5B,cAAYiC,EAAA/B,CAAA,EAAO,UAAU;AAAA,kBAC7B,SAAO4C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAvB,EAAaS,EAAAtC,CAAA,EAAM,IAAI;AAAA,gBAAA;kBAE/B2C,EAA6EL,EAA7EW,CAAA,GAAAC,EAAcZ,EAA+D5B,CAAA,EAAzD,QAAM;AAAA,oBAAG,OAAS,EAAA4B,EAAA5B,CAAA,EAAM,OAAO,SAAK,KAAA;AAAA;;;;;;;;;;;"}