{"version":3,"file":"index.modern.mjs","sources":["../src/index.js"],"sourcesContent":["import { useState } from 'react'\n// import styles from './styles.module.css'\n\nfunction createInputComponent({ multiple, accept }) {\n  const el = document.createElement('input')\n  // set input config\n  el.type = 'file'\n  el.accept = accept\n  el.multiple = multiple\n  // return file input element\n  return el\n}\n\nexport const useFileUpload = () => {\n  const [files, setFiles] = useState(null)\n  const clearFiles = () => setFiles(null)\n\n  // Handle upload\n  const uploadFile = (\n    { accept = '', multiple = false, onCancel } = {\n      accept: '',\n      multiple: false,\n      onCancel: undefined\n    },\n    cb\n  ) => {\n    const userCallback = typeof cb === 'function' ? cb : () => {}\n    const cancelCallback = typeof onCancel === 'function' ? onCancel : () => {}\n    let isSelectionMade = false\n    let focusTimeout\n\n    // create virtual input element\n    const inputEL = createInputComponent({ multiple, accept })\n\n    const cleanup = () => {\n      inputEL.removeEventListener('change', onChange)\n      window.removeEventListener('focus', onFocus, true)\n      if (focusTimeout) {\n        clearTimeout(focusTimeout)\n      }\n      inputEL.remove()\n    }\n\n    const onChange = (e) => {\n      isSelectionMade = true\n      const target = e.target\n      const selectedFiles = Array.from(target.files || [])\n      const parsedFiles = selectedFiles.map((file) => ({\n        source: URL.createObjectURL(file),\n        name: file.name,\n        size: file.size,\n        file // original file object\n      }))\n\n      cleanup()\n\n      if (target.multiple) {\n        setFiles(parsedFiles)\n        userCallback(parsedFiles)\n        return\n      }\n\n      setFiles(parsedFiles[0] || null)\n      userCallback(parsedFiles[0] || null)\n    }\n\n    const onFocus = () => {\n      // Allow the file picker change event to fire before treating focus as cancel.\n      focusTimeout = setTimeout(() => {\n        if (!isSelectionMade) {\n          cleanup()\n          cancelCallback()\n        }\n      }, 300)\n    }\n\n    // add event listener\n    inputEL.addEventListener('change', onChange)\n    window.addEventListener('focus', onFocus, true)\n    inputEL.click()\n  }\n\n  return [files, uploadFile, clearFiles]\n}\n"],"names":["createInputComponent","multiple","accept","el","document","createElement","type","useFileUpload","files","setFiles","useState","clearFiles","uploadFile","onCancel","undefined","cb","userCallback","cancelCallback","isSelectionMade","focusTimeout","inputEL","cleanup","removeEventListener","onChange","window","onFocus","clearTimeout","remove","e","target","selectedFiles","Array","from","parsedFiles","map","file","source","URL","createObjectURL","name","size","setTimeout","addEventListener","click"],"mappings":"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"}