{"version":3,"file":"CTSkczDg.js","sources":["../../../../node_modules/quasar/src/composables/private.use-file/use-file.js","../../../../node_modules/quasar/src/components/file/QFile.js"],"sourcesContent":["import { h, ref, computed, getCurrentInstance } from 'vue'\n\nimport { client } from '../../plugins/platform/Platform.js'\nimport { stop, stopAndPrevent } from '../../utils/event/event.js'\n\nfunction filterFiles (files, rejectedFiles, failedPropValidation, filterFn) {\n const acceptedFiles = []\n\n files.forEach(file => {\n if (filterFn(file) === true) {\n acceptedFiles.push(file)\n }\n else {\n rejectedFiles.push({ failedPropValidation, file })\n }\n })\n\n return acceptedFiles\n}\n\nfunction stopAndPreventDrag (e) {\n e && e.dataTransfer && (e.dataTransfer.dropEffect = 'copy')\n stopAndPrevent(e)\n}\n\nexport const useFileProps = {\n multiple: Boolean,\n accept: String,\n capture: String,\n maxFileSize: [ Number, String ],\n maxTotalSize: [ Number, String ],\n maxFiles: [ Number, String ],\n filter: Function\n}\n\nexport const useFileEmits = [ 'rejected' ]\n\nexport default function ({\n editable,\n dnd,\n getFileInput,\n addFilesToQueue\n}) {\n const { props, emit, proxy } = getCurrentInstance()\n\n const dndRef = ref(null)\n\n const extensions = computed(() => (\n props.accept !== void 0\n ? props.accept.split(',').map(ext => {\n ext = ext.trim()\n if (ext === '*') { // support \"*\"\n return '*/'\n }\n else if (ext.endsWith('/*')) { // support \"image/*\" or \"*/*\"\n ext = ext.slice(0, ext.length - 1)\n }\n return ext.toUpperCase()\n })\n : null\n ))\n\n const maxFilesNumber = computed(() => parseInt(props.maxFiles, 10))\n const maxTotalSizeNumber = computed(() => parseInt(props.maxTotalSize, 10))\n\n function pickFiles (e) {\n if (editable.value) {\n if (e !== Object(e)) {\n e = { target: null }\n }\n\n if (e.target !== null && e.target.matches('input[type=\"file\"]') === true) {\n // stop propagation if it's not a real pointer event\n e.clientX === 0 && e.clientY === 0 && stop(e)\n }\n else {\n const input = getFileInput()\n input && input !== e.target && input.click(e)\n }\n }\n }\n\n function addFiles (files) {\n if (editable.value && files) {\n addFilesToQueue(null, files)\n }\n }\n\n function processFiles (e, filesToProcess, currentFileList, append) {\n let files = Array.from(filesToProcess || e.target.files)\n const rejectedFiles = []\n\n const done = () => {\n if (rejectedFiles.length !== 0) {\n emit('rejected', rejectedFiles)\n }\n }\n\n // filter file types\n if (props.accept !== void 0 && extensions.value.indexOf('*/') === -1) {\n files = filterFiles(files, rejectedFiles, 'accept', file => {\n return extensions.value.some(ext => (\n file.type.toUpperCase().startsWith(ext)\n || file.name.toUpperCase().endsWith(ext)\n ))\n })\n\n if (files.length === 0) { return done() }\n }\n\n // filter max file size\n if (props.maxFileSize !== void 0) {\n const maxFileSize = parseInt(props.maxFileSize, 10)\n files = filterFiles(files, rejectedFiles, 'max-file-size', file => {\n return file.size <= maxFileSize\n })\n\n if (files.length === 0) { return done() }\n }\n\n // Cordova/iOS allows selecting multiple files even when the\n // multiple attribute is not specified. We also normalize drag'n'dropped\n // files here:\n if (props.multiple !== true && files.length !== 0) {\n files = [ files[ 0 ] ]\n }\n\n // Compute key to use for each file\n files.forEach(file => {\n file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size\n })\n\n if (append === true) {\n // Avoid duplicate files\n const filenameMap = currentFileList.map(entry => entry.__key)\n files = filterFiles(files, rejectedFiles, 'duplicate', file => {\n return filenameMap.includes(file.__key) === false\n })\n }\n\n if (files.length === 0) { return done() }\n\n if (props.maxTotalSize !== void 0) {\n let size = append === true\n ? currentFileList.reduce((total, file) => total + file.size, 0)\n : 0\n\n files = filterFiles(files, rejectedFiles, 'max-total-size', file => {\n size += file.size\n return size <= maxTotalSizeNumber.value\n })\n\n if (files.length === 0) { return done() }\n }\n\n // do we have custom filter function?\n if (typeof props.filter === 'function') {\n const filteredFiles = props.filter(files)\n files = filterFiles(files, rejectedFiles, 'filter', file => {\n return filteredFiles.includes(file)\n })\n }\n\n if (props.maxFiles !== void 0) {\n let filesNumber = append === true\n ? currentFileList.length\n : 0\n\n files = filterFiles(files, rejectedFiles, 'max-files', () => {\n filesNumber++\n return filesNumber <= maxFilesNumber.value\n })\n\n if (files.length === 0) { return done() }\n }\n\n done()\n\n if (files.length !== 0) {\n return files\n }\n }\n\n function onDragover (e) {\n stopAndPreventDrag(e)\n dnd.value !== true && (dnd.value = true)\n }\n\n function onDragleave (e) {\n stopAndPrevent(e)\n\n // Safari bug: relatedTarget is null for over 10 years\n // https://bugs.webkit.org/show_bug.cgi?id=66547\n const gone = e.relatedTarget !== null || client.is.safari !== true\n ? e.relatedTarget !== dndRef.value\n : document.elementsFromPoint(e.clientX, e.clientY).includes(dndRef.value) === false\n\n gone === true && (dnd.value = false)\n }\n\n function onDrop (e) {\n stopAndPreventDrag(e)\n const files = e.dataTransfer.files\n\n if (files.length !== 0) {\n addFilesToQueue(null, files)\n }\n\n dnd.value = false\n }\n\n function getDndNode (type) {\n if (dnd.value === true) {\n return h('div', {\n ref: dndRef,\n class: `q-${ type }__dnd absolute-full`,\n onDragenter: stopAndPreventDrag,\n onDragover: stopAndPreventDrag,\n onDragleave,\n onDrop\n })\n }\n }\n\n // expose public methods\n Object.assign(proxy, { pickFiles, addFiles })\n\n return {\n pickFiles,\n addFiles,\n onDragover,\n onDragleave,\n processFiles,\n getDndNode,\n\n maxFilesNumber,\n maxTotalSizeNumber\n }\n}\n","import { h, ref, computed, getCurrentInstance } from 'vue'\n\nimport QChip from '../chip/QChip.js'\n\nimport useField, { useFieldState, useNonInputFieldProps, useFieldEmits, fieldValueIsFilled } from '../../composables/private.use-field/use-field.js'\nimport { useFormProps, useFormInputNameAttr } from '../../composables/use-form/private.use-form.js'\nimport useFile, { useFileProps, useFileEmits } from '../../composables/private.use-file/use-file.js'\nimport useFileFormDomProps from '../../composables/private.use-file/use-file-dom-props.js'\n\nimport { createComponent } from '../../utils/private.create/create.js'\nimport { humanStorageSize } from '../../utils/format/format.js'\nimport { prevent } from '../../utils/event/event.js'\nimport { injectProp } from '../../utils/private.inject-obj-prop/inject-obj-prop.js'\n\nexport default createComponent({\n name: 'QFile',\n\n inheritAttrs: false,\n\n props: {\n ...useNonInputFieldProps,\n ...useFormProps,\n ...useFileProps,\n\n /* SSR does not know about File & FileList */\n modelValue: __QUASAR_SSR_SERVER__\n ? {}\n : [ File, FileList, Array ],\n\n append: Boolean,\n useChips: Boolean,\n displayValue: [ String, Number ],\n\n tabindex: {\n type: [ String, Number ],\n default: 0\n },\n\n counterLabel: Function,\n\n inputClass: [ Array, String, Object ],\n inputStyle: [ Array, String, Object ]\n },\n\n emits: [\n ...useFieldEmits,\n ...useFileEmits\n ],\n\n setup (props, { slots, emit, attrs }) {\n const { proxy } = getCurrentInstance()\n\n const state = useFieldState()\n\n const inputRef = ref(null)\n const dnd = ref(false)\n const nameProp = useFormInputNameAttr(props)\n\n const {\n pickFiles,\n onDragover,\n onDragleave,\n processFiles,\n getDndNode\n } = useFile({ editable: state.editable, dnd, getFileInput, addFilesToQueue })\n\n const formDomProps = useFileFormDomProps(props)\n\n const innerValue = computed(() => (\n Object(props.modelValue) === props.modelValue\n ? ('length' in props.modelValue ? Array.from(props.modelValue) : [ props.modelValue ])\n : []\n ))\n\n const hasValue = computed(() => fieldValueIsFilled(innerValue.value))\n\n const selectedString = computed(() =>\n innerValue.value\n .map(file => file.name)\n .join(', ')\n )\n\n const totalSize = computed(() =>\n humanStorageSize(\n innerValue.value.reduce((acc, file) => acc + file.size, 0)\n )\n )\n\n const counterProps = computed(() => ({\n totalSize: totalSize.value,\n filesNumber: innerValue.value.length,\n maxFiles: props.maxFiles\n }))\n\n const inputAttrs = computed(() => ({\n tabindex: -1,\n type: 'file',\n title: '', // try to remove default tooltip,\n accept: props.accept,\n capture: props.capture,\n name: nameProp.value,\n ...attrs,\n id: state.targetUid.value,\n disabled: state.editable.value !== true\n }))\n\n const fieldClass = computed(() =>\n 'q-file q-field--auto-height'\n + (dnd.value === true ? ' q-file--dnd' : '')\n )\n\n const isAppending = computed(() =>\n props.multiple === true && props.append === true\n )\n\n function removeAtIndex (index) {\n const files = innerValue.value.slice()\n files.splice(index, 1)\n emitValue(files)\n }\n\n function removeFile (file) {\n const index = innerValue.value.indexOf(file)\n if (index !== -1) {\n removeAtIndex(index)\n }\n }\n\n function emitValue (files) {\n emit('update:modelValue', props.multiple === true ? files : files[ 0 ])\n }\n\n function onKeydown (e) {\n // prevent form submit if ENTER is pressed\n e.keyCode === 13 && prevent(e)\n }\n\n function onKeyup (e) {\n // only on ENTER and SPACE to match native input field\n if (e.keyCode === 13 || e.keyCode === 32) {\n pickFiles(e)\n }\n }\n\n function getFileInput () {\n return inputRef.value\n }\n\n function addFilesToQueue (e, fileList) {\n const files = processFiles(e, fileList, innerValue.value, isAppending.value)\n const fileInput = getFileInput()\n\n if (fileInput !== void 0 && fileInput !== null) {\n fileInput.value = ''\n }\n\n // if nothing to do...\n if (files === void 0) return\n\n // protect against input @change being called in a loop\n // like it happens on Safari, so don't emit same thing:\n if (\n props.multiple === true\n ? props.modelValue && files.every(f => innerValue.value.includes(f))\n : props.modelValue === files[ 0 ]\n ) {\n return\n }\n\n emitValue(\n isAppending.value === true\n ? innerValue.value.concat(files)\n : files\n )\n }\n\n function getFiller () {\n return [\n h('input', {\n class: [ props.inputClass, 'q-file__filler' ],\n style: props.inputStyle\n })\n ]\n }\n\n function getSelection () {\n if (slots.file !== void 0) {\n return innerValue.value.length === 0\n ? getFiller()\n : innerValue.value.map(\n (file, index) => slots.file({ index, file, ref: this })\n )\n }\n\n if (slots.selected !== void 0) {\n return innerValue.value.length === 0\n ? getFiller()\n : slots.selected({ files: innerValue.value, ref: this })\n }\n\n if (props.useChips === true) {\n return innerValue.value.length === 0\n ? getFiller()\n : innerValue.value.map((file, i) => h(QChip, {\n key: 'file-' + i,\n removable: state.editable.value,\n dense: true,\n textColor: props.color,\n tabindex: props.tabindex,\n onRemove: () => { removeAtIndex(i) }\n }, () => h('span', {\n class: 'ellipsis',\n textContent: file.name\n })))\n }\n\n const textContent = props.displayValue !== void 0\n ? props.displayValue\n : selectedString.value\n\n return textContent.length !== 0\n ? [\n h('div', {\n class: props.inputClass,\n style: props.inputStyle,\n textContent\n })\n ]\n : getFiller()\n }\n\n function getInput () {\n const data = {\n ref: inputRef,\n ...inputAttrs.value,\n ...formDomProps.value,\n class: 'q-field__input fit absolute-full cursor-pointer',\n onChange: addFilesToQueue\n }\n\n if (props.multiple === true) {\n data.multiple = true\n }\n\n return h('input', data)\n }\n\n Object.assign(state, {\n fieldClass,\n emitValue,\n hasValue,\n inputRef,\n innerValue,\n\n floatingLabel: computed(() =>\n hasValue.value === true\n || fieldValueIsFilled(props.displayValue)\n ),\n\n computedCounter: computed(() => {\n if (props.counterLabel !== void 0) {\n return props.counterLabel(counterProps.value)\n }\n\n const max = props.maxFiles\n return `${ innerValue.value.length }${ max !== void 0 ? ' / ' + max : '' } (${ totalSize.value })`\n }),\n\n getControlChild: () => getDndNode('file'),\n getControl: () => {\n const data = {\n ref: state.targetRef,\n class: 'q-field__native row items-center cursor-pointer',\n tabindex: props.tabindex\n }\n\n if (state.editable.value === true) {\n Object.assign(data, { onDragover, onDragleave, onKeydown, onKeyup })\n }\n\n return h('div', data, [ getInput() ].concat(getSelection()))\n }\n })\n\n // expose public methods\n Object.assign(proxy, {\n removeAtIndex,\n removeFile,\n getNativeElement: () => inputRef.value // deprecated\n })\n\n injectProp(proxy, 'nativeEl', () => inputRef.value)\n\n return useField(state)\n }\n})\n"],"names":["filterFiles","files","rejectedFiles","failedPropValidation","filterFn","acceptedFiles","file","stopAndPreventDrag","stopAndPrevent","useFileProps","useFileEmits","useFile","editable","dnd","getFileInput","addFilesToQueue","props","emit","proxy","getCurrentInstance","dndRef","ref","extensions","computed","ext","maxFilesNumber","maxTotalSizeNumber","pickFiles","e","stop","input","addFiles","processFiles","filesToProcess","currentFileList","append","done","maxFileSize","filenameMap","entry","size","total","filteredFiles","filesNumber","onDragover","onDragleave","client","onDrop","getDndNode","type","h","__nuxt_component_8","createComponent","useNonInputFieldProps","useFormProps","useFieldEmits","slots","attrs","state","useFieldState","inputRef","nameProp","useFormInputNameAttr","formDomProps","useFileFormDomProps","innerValue","hasValue","fieldValueIsFilled","selectedString","totalSize","humanStorageSize","acc","counterProps","inputAttrs","fieldClass","isAppending","removeAtIndex","index","emitValue","removeFile","onKeydown","prevent","onKeyup","fileList","fileInput","f","getFiller","getSelection","i","QChip","textContent","getInput","data","max","injectProp","useField"],"mappings":"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","x_google_ignoreList":[0,1]}