{"version":3,"file":"dropzone-BxVzFzTV.js","sources":["../../../../node_modules/file-selector/dist/es5/file.js","../../../../node_modules/file-selector/dist/es5/file-selector.js","../../../../node_modules/attr-accept/dist/es/index.js","../../../../node_modules/react-dropzone/dist/es/utils/index.js","../../../../node_modules/react-dropzone/dist/es/index.js"],"sourcesContent":["export var COMMON_MIME_TYPES = new Map([\n ['avi', 'video/avi'],\n ['gif', 'image/gif'],\n ['ico', 'image/x-icon'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['mp4', 'video/mp4'],\n ['pdf', 'application/pdf'],\n ['png', 'image/png'],\n ['zip', 'application/zip'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n]);\nexport function toFileWithPath(file, path) {\n var f = withMimeType(file);\n if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n var webkitRelativePath = file.webkitRelativePath;\n Object.defineProperty(f, 'path', {\n value: typeof path === 'string'\n ? path\n // If is set,\n // the File will have a {webkitRelativePath} property\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n ? webkitRelativePath\n : file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return f;\n}\nfunction withMimeType(file) {\n var name = file.name;\n var hasExtension = name && name.lastIndexOf('.') !== -1;\n if (hasExtension && !file.type) {\n var ext = name.split('.')\n .pop().toLowerCase();\n var type = COMMON_MIME_TYPES.get(ext);\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n return file;\n}\n//# sourceMappingURL=file.js.map","import { __awaiter, __generator, __read, __spread } from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store',\n 'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n * @param evt\n */\nexport function fromEvent(evt) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, isDragEvt(evt) && evt.dataTransfer\n ? getDataTransferFiles(evt.dataTransfer, evt.type)\n : getInputFiles(evt)];\n });\n });\n}\nfunction isDragEvt(value) {\n return !!value.dataTransfer;\n}\nfunction getInputFiles(evt) {\n var files = isInput(evt.target)\n ? evt.target.files\n ? fromList(evt.target.files)\n : []\n : [];\n return files.map(function (file) { return toFileWithPath(file); });\n}\nfunction isInput(value) {\n return value !== null;\n}\nfunction getDataTransferFiles(dt, type) {\n return __awaiter(this, void 0, void 0, function () {\n var items, files;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!dt.items) return [3 /*break*/, 2];\n items = fromList(dt.items)\n .filter(function (item) { return item.kind === 'file'; });\n // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n // only 'dragstart' and 'drop' has access to the data (source node)\n if (type !== 'drop') {\n return [2 /*return*/, items];\n }\n return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, noIgnoredFiles(flatten(files))];\n case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n .map(function (file) { return toFileWithPath(file); }))];\n }\n });\n });\n}\nfunction noIgnoredFiles(files) {\n return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n var files = [];\n // tslint:disable: prefer-for-of\n for (var i = 0; i < items.length; i++) {\n var file = items[i];\n files.push(file);\n }\n return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n if (typeof item.webkitGetAsEntry !== 'function') {\n return fromDataTransferItem(item);\n }\n var entry = item.webkitGetAsEntry();\n // Safari supports dropping an image node from a different window and can be retrieved using\n // the DataTransferItem.getAsFile() API\n // NOTE: FileSystemEntry.file() throws if trying to get the file\n if (entry && entry.isDirectory) {\n return fromDirEntry(entry);\n }\n return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n return items.reduce(function (acc, files) { return __spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n var file = item.getAsFile();\n if (!file) {\n return Promise.reject(item + \" is not a File\");\n }\n var fwp = toFileWithPath(file);\n return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n });\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n var reader = entry.createReader();\n return new Promise(function (resolve, reject) {\n var entries = [];\n function readEntries() {\n var _this = this;\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n reader.readEntries(function (batch) { return __awaiter(_this, void 0, void 0, function () {\n var files, err_1, items;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!batch.length) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, Promise.all(entries)];\n case 2:\n files = _a.sent();\n resolve(files);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n reject(err_1);\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n items = Promise.all(batch.map(fromEntry));\n entries.push(items);\n // Continue reading\n readEntries();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n }); }, function (err) {\n reject(err);\n });\n }\n readEntries();\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n entry.file(function (file) {\n var fwp = toFileWithPath(file, entry.fullPath);\n resolve(fwp);\n }, function (err) {\n reject(err);\n });\n })];\n });\n });\n}\n//# sourceMappingURL=file-selector.js.map","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n if (file && acceptedFiles) {\n var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n var fileName = file.name || '';\n var mimeType = (file.type || '').toLowerCase();\n var baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptedFilesArray.some(function (type) {\n var validType = type.trim().toLowerCase();\n\n if (validType.charAt(0) === '.') {\n return fileName.toLowerCase().endsWith(validType);\n } else if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '');\n }\n\n return mimeType === validType;\n });\n }\n\n return true;\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport accepts from 'attr-accept'; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n return file.type === 'application/x-moz-file' || accepts(file, accept);\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) return file.size >= minSize && file.size <= maxSize;else if (isDefined(minSize)) return file.size >= minSize;else if (isDefined(maxSize)) return file.size <= maxSize;\n }\n\n return true;\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n var files = _ref.files,\n accept = _ref.accept,\n minSize = _ref.minSize,\n maxSize = _ref.maxSize,\n multiple = _ref.multiple;\n\n if (!multiple && files.length > 1) {\n return false;\n }\n\n return files.every(function (file) {\n return fileAccepted(file, accept) && fileMatchSize(file, minSize, maxSize);\n });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n if (typeof event.isPropagationStopped === 'function') {\n return event.isPropagationStopped();\n } else if (typeof event.cancelBubble !== 'undefined') {\n return event.cancelBubble;\n }\n\n return false;\n}\nexport function isEvtWithFiles(event) {\n if (!event.dataTransfer) {\n return !!event.target && !!event.target.files;\n } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n return type === 'Files' || type === 'application/x-moz-file';\n });\n}\nexport function isKindFile(item) {\n return _typeof(item) === 'object' && item !== null && item.kind === 'file';\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1;\n}\n\nfunction isEdge(userAgent) {\n return userAgent.indexOf('Edge/') !== -1;\n}\n\nexport function isIeOrEdge() {\n var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (!isPropagationStopped(event) && fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return isPropagationStopped(event);\n });\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { fromEvent } from 'file-selector';\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver } from './utils/index';\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * \n * {({getRootProps, getInputProps}) => (\n *
\n * \n *
Drag 'n' drop some files here, or click to select files
\n *
\n * )}\n * \n * ```\n */\n\nvar Dropzone = forwardRef(function (_ref, ref) {\n var children = _ref.children,\n params = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useDropzone = useDropzone(params),\n open = _useDropzone.open,\n props = _objectWithoutProperties(_useDropzone, [\"open\"]);\n\n useImperativeHandle(ref, function () {\n return {\n open: open\n };\n }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n return React.createElement(Fragment, null, children(_objectSpread({}, props, {\n open: open\n })));\n});\nDropzone.displayName = 'Dropzone';\nDropzone.propTypes = {\n /**\n * Render function that exposes the dropzone state and prop getter fns\n *\n * @param {object} params\n * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n * @param {Function} params.open Open the native file selection dialog\n * @param {boolean} params.isFocused Dropzone area is in focus\n * @param {boolean} params.isFileDialogActive File dialog is opened\n * @param {boolean} params.isDragActive Active drag is in progress\n * @param {boolean} params.isDragAccept Dragged files are accepted\n * @param {boolean} params.isDragReject Some dragged files are rejected\n * @param {File[]} params.draggedFiles Files in active drag\n * @param {File[]} params.acceptedFiles Accepted files\n * @param {File[]} params.rejectedFiles Rejected files\n */\n children: PropTypes.func,\n\n /**\n * Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n */\n multiple: PropTypes.bool,\n\n /**\n * If false, allow dropped items to take over the current browser window\n */\n preventDropOnDocument: PropTypes.bool,\n\n /**\n * If true, disables click to open the native file selection dialog\n */\n noClick: PropTypes.bool,\n\n /**\n * If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n */\n noKeyboard: PropTypes.bool,\n\n /**\n * If true, disables drag 'n' drop\n */\n noDrag: PropTypes.bool,\n\n /**\n * If true, stops drag event propagation to parents\n */\n noDragEventsBubbling: PropTypes.bool,\n\n /**\n * Minimum file size (in bytes)\n */\n minSize: PropTypes.number,\n\n /**\n * Maximum file size (in bytes)\n */\n maxSize: PropTypes.number,\n\n /**\n * Enable/disable the dropzone\n */\n disabled: PropTypes.bool,\n\n /**\n * Use this to provide a custom file aggregator\n *\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n getFilesFromEvent: PropTypes.func,\n\n /**\n * Cb for when closing the file dialog with no selection\n */\n onFileDialogCancel: PropTypes.func,\n\n /**\n * Cb for when the `dragenter` event occurs.\n *\n * @param {DragEvent} event\n */\n onDragEnter: PropTypes.func,\n\n /**\n * Cb for when the `dragleave` event occurs\n *\n * @param {DragEvent} event\n */\n onDragLeave: PropTypes.func,\n\n /**\n * Cb for when the `dragover` event occurs\n *\n * @param {DragEvent} event\n */\n onDragOver: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n *\n * @param {File[]} acceptedFiles\n * @param {File[]} rejectedFiles\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n onDrop: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are accepted, this callback is not invoked.\n *\n * @param {File[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropAccepted: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are rejected, this callback is not invoked.\n *\n * @param {object[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropRejected: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {File[]} rejectedFiles List of rejected files\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {File[]} rejectedFiles Rejected files\n */\n\nvar initialState = {\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n draggedFiles: [],\n acceptedFiles: [],\n rejectedFiles: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n * const {getRootProps, getInputProps} = useDropzone({\n * onDrop: acceptedFiles => {\n * // do something with the File objects, e.g. upload to some server\n * }\n * });\n * return (\n *
\n * \n *
Drag and drop some files here, or click to select files
\n *
\n * )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n accept = _ref2.accept,\n _ref2$disabled = _ref2.disabled,\n disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,\n _ref2$getFilesFromEve = _ref2.getFilesFromEvent,\n getFilesFromEvent = _ref2$getFilesFromEve === void 0 ? fromEvent : _ref2$getFilesFromEve,\n _ref2$maxSize = _ref2.maxSize,\n maxSize = _ref2$maxSize === void 0 ? Infinity : _ref2$maxSize,\n _ref2$minSize = _ref2.minSize,\n minSize = _ref2$minSize === void 0 ? 0 : _ref2$minSize,\n _ref2$multiple = _ref2.multiple,\n multiple = _ref2$multiple === void 0 ? true : _ref2$multiple,\n onDragEnter = _ref2.onDragEnter,\n onDragLeave = _ref2.onDragLeave,\n onDragOver = _ref2.onDragOver,\n onDrop = _ref2.onDrop,\n onDropAccepted = _ref2.onDropAccepted,\n onDropRejected = _ref2.onDropRejected,\n onFileDialogCancel = _ref2.onFileDialogCancel,\n _ref2$preventDropOnDo = _ref2.preventDropOnDocument,\n preventDropOnDocument = _ref2$preventDropOnDo === void 0 ? true : _ref2$preventDropOnDo,\n _ref2$noClick = _ref2.noClick,\n noClick = _ref2$noClick === void 0 ? false : _ref2$noClick,\n _ref2$noKeyboard = _ref2.noKeyboard,\n noKeyboard = _ref2$noKeyboard === void 0 ? false : _ref2$noKeyboard,\n _ref2$noDrag = _ref2.noDrag,\n noDrag = _ref2$noDrag === void 0 ? false : _ref2$noDrag,\n _ref2$noDragEventsBub = _ref2.noDragEventsBubbling,\n noDragEventsBubbling = _ref2$noDragEventsBub === void 0 ? false : _ref2$noDragEventsBub;\n\n var rootRef = useRef(null);\n var inputRef = useRef(null);\n\n var _useReducer = useReducer(reducer, initialState),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n dispatch = _useReducer2[1];\n\n var isFocused = state.isFocused,\n isFileDialogActive = state.isFileDialogActive,\n draggedFiles = state.draggedFiles; // Fn for opening the file dialog programmatically\n\n var openFileDialog = useCallback(function () {\n if (inputRef.current) {\n dispatch({\n type: 'openDialog'\n });\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }, [dispatch]); // Update file dialog active state when the window is focused on\n\n var onWindowFocus = function onWindowFocus() {\n // Execute the timeout only if the file dialog is opened in the browser\n if (isFileDialogActive) {\n setTimeout(function () {\n if (inputRef.current) {\n var files = inputRef.current.files;\n\n if (!files.length) {\n dispatch({\n type: 'closeDialog'\n });\n\n if (typeof onFileDialogCancel === 'function') {\n onFileDialogCancel();\n }\n }\n }\n }, 300);\n }\n };\n\n useEffect(function () {\n window.addEventListener('focus', onWindowFocus, false);\n return function () {\n window.removeEventListener('focus', onWindowFocus, false);\n };\n }, [inputRef, isFileDialogActive, onFileDialogCancel]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n var onKeyDownCb = useCallback(function (event) {\n // Ignore keyboard events bubbling up the DOM tree\n if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n return;\n }\n\n if (event.keyCode === 32 || event.keyCode === 13) {\n event.preventDefault();\n openFileDialog();\n }\n }, [rootRef, inputRef]); // Update focus state for the dropzone\n\n var onFocusCb = useCallback(function () {\n dispatch({\n type: 'focus'\n });\n }, []);\n var onBlurCb = useCallback(function () {\n dispatch({\n type: 'blur'\n });\n }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n var onClickCb = useCallback(function () {\n if (noClick) {\n return;\n } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n // to ensure React can handle state changes\n // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n if (isIeOrEdge()) {\n setTimeout(openFileDialog, 0);\n } else {\n openFileDialog();\n }\n }, [inputRef, noClick]);\n var dragTargetsRef = useRef([]);\n\n var onDocumentDrop = function onDocumentDrop(event) {\n if (rootRef.current && rootRef.current.contains(event.target)) {\n // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n return;\n }\n\n event.preventDefault();\n dragTargetsRef.current = [];\n };\n\n useEffect(function () {\n if (preventDropOnDocument) {\n document.addEventListener('dragover', onDocumentDragOver, false);\n document.addEventListener('drop', onDocumentDrop, false);\n }\n\n return function () {\n if (preventDropOnDocument) {\n document.removeEventListener('dragover', onDocumentDragOver);\n document.removeEventListener('drop', onDocumentDrop);\n }\n };\n }, [rootRef, preventDropOnDocument]);\n var onDragEnterCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event); // Count the dropzone and any children that are entered.\n\n if (dragTargetsRef.current.indexOf(event.target) === -1) {\n dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n }\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n dispatch({\n draggedFiles: draggedFiles,\n isDragActive: true,\n type: 'setDraggedFiles'\n });\n\n if (onDragEnter) {\n onDragEnter(event);\n }\n });\n }\n }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n var onDragOverCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event);\n\n if (event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = 'copy';\n } catch (_unused) {}\n /* eslint-disable-line no-empty */\n\n }\n\n if (isEvtWithFiles(event) && onDragOver) {\n onDragOver(event);\n }\n\n return false;\n }, [onDragOver, noDragEventsBubbling]);\n var onDragLeaveCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n var targets = dragTargetsRef.current.filter(function (target) {\n return target !== event.target && rootRef.current && rootRef.current.contains(target);\n });\n dragTargetsRef.current = targets;\n\n if (targets.length > 0) {\n return;\n }\n\n dispatch({\n isDragActive: false,\n type: 'setDraggedFiles',\n draggedFiles: []\n });\n\n if (isEvtWithFiles(event) && onDragLeave) {\n onDragLeave(event);\n }\n }, [rootRef, onDragLeave, noDragEventsBubbling]);\n var onDropCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [];\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n var acceptedFiles = [];\n var rejectedFiles = [];\n files.forEach(function (file) {\n if (fileAccepted(file, accept) && fileMatchSize(file, minSize, maxSize)) {\n acceptedFiles.push(file);\n } else {\n rejectedFiles.push(file);\n }\n });\n\n if (!multiple && acceptedFiles.length > 1) {\n rejectedFiles.push.apply(rejectedFiles, _toConsumableArray(acceptedFiles.splice(0))); // Reject everything and empty accepted files\n }\n\n dispatch({\n acceptedFiles: acceptedFiles,\n rejectedFiles: rejectedFiles,\n type: 'setFiles'\n });\n\n if (onDrop) {\n onDrop(acceptedFiles, rejectedFiles, event);\n }\n\n if (rejectedFiles.length > 0 && onDropRejected) {\n onDropRejected(rejectedFiles, event);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted(acceptedFiles, event);\n }\n });\n }\n\n dispatch({\n type: 'reset'\n });\n }, [multiple, accept, minSize, maxSize, getFilesFromEvent, onDrop, onDropAccepted, onDropRejected, noDragEventsBubbling]);\n\n var composeHandler = function composeHandler(fn) {\n return disabled ? null : fn;\n };\n\n var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n return noKeyboard ? null : composeHandler(fn);\n };\n\n var composeDragHandler = function composeDragHandler(fn) {\n return noDrag ? null : composeHandler(fn);\n };\n\n var stopPropagation = function stopPropagation(event) {\n if (noDragEventsBubbling) {\n event.stopPropagation();\n }\n };\n\n var getRootProps = useMemo(function () {\n return function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$refKey = _ref3.refKey,\n refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n onKeyDown = _ref3.onKeyDown,\n onFocus = _ref3.onFocus,\n onBlur = _ref3.onBlur,\n onClick = _ref3.onClick,\n onDragEnter = _ref3.onDragEnter,\n onDragOver = _ref3.onDragOver,\n onDragLeave = _ref3.onDragLeave,\n onDrop = _ref3.onDrop,\n rest = _objectWithoutProperties(_ref3, [\"refKey\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"]);\n\n return _objectSpread(_defineProperty({\n onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))\n }, refKey, rootRef), !disabled && !noKeyboard ? {\n tabIndex: 0\n } : {}, {}, rest);\n };\n }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n var onInputElementClick = useCallback(function (event) {\n event.stopPropagation();\n }, []);\n var getInputProps = useMemo(function () {\n return function () {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$refKey = _ref4.refKey,\n refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,\n onChange = _ref4.onChange,\n onClick = _ref4.onClick,\n rest = _objectWithoutProperties(_ref4, [\"refKey\", \"onChange\", \"onClick\"]);\n\n var inputProps = _defineProperty({\n accept: accept,\n multiple: multiple,\n type: 'file',\n style: {\n display: 'none'\n },\n onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n autoComplete: 'off',\n tabIndex: -1\n }, refKey, inputRef);\n\n return _objectSpread({}, inputProps, {}, rest);\n };\n }, [inputRef, accept, multiple, onDropCb, disabled]);\n var fileCount = draggedFiles.length;\n var isDragAccept = fileCount > 0 && allFilesAccepted({\n files: draggedFiles,\n accept: accept,\n minSize: minSize,\n maxSize: maxSize,\n multiple: multiple\n });\n var isDragReject = fileCount > 0 && !isDragAccept;\n return _objectSpread({}, state, {\n isDragAccept: isDragAccept,\n isDragReject: isDragReject,\n isFocused: isFocused && !disabled,\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n rootRef: rootRef,\n inputRef: inputRef,\n open: composeHandler(openFileDialog)\n });\n}\n\nfunction reducer(state, action) {\n /* istanbul ignore next */\n switch (action.type) {\n case 'focus':\n return _objectSpread({}, state, {\n isFocused: true\n });\n\n case 'blur':\n return _objectSpread({}, state, {\n isFocused: false\n });\n\n case 'openDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: true\n });\n\n case 'closeDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: false\n });\n\n case 'setDraggedFiles':\n /* eslint no-case-declarations: 0 */\n var isDragActive = action.isDragActive,\n draggedFiles = action.draggedFiles;\n return _objectSpread({}, state, {\n draggedFiles: draggedFiles,\n isDragActive: isDragActive\n });\n\n case 'setFiles':\n return _objectSpread({}, state, {\n acceptedFiles: action.acceptedFiles,\n rejectedFiles: action.rejectedFiles\n });\n\n case 'reset':\n return _objectSpread({}, state, {\n isFileDialogActive: false,\n isDragActive: false,\n draggedFiles: [],\n acceptedFiles: [],\n rejectedFiles: []\n });\n\n default:\n return state;\n }\n}"],"names":["COMMON_MIME_TYPES","toFileWithPath","file","path","f","withMimeType","webkitRelativePath","name","hasExtension","ext","type","FILES_TO_IGNORE","fromEvent","evt","__awaiter","__generator","_a","isDragEvt","getDataTransferFiles","getInputFiles","value","files","isInput","fromList","dt","items","item","toFilePromises","noIgnoredFiles","flatten","i","fromDataTransferItem","entry","fromDirEntry","acc","__spread","fwp","fromEntry","fromFileEntry","reader","resolve","reject","entries","readEntries","_this","batch","err_1","err","_default","acceptedFiles","acceptedFilesArray","fileName","mimeType","baseMimeType","validType","fileAccepted","accept","accepts","fileMatchSize","minSize","maxSize","isDefined","allFilesAccepted","_ref","multiple","isPropagationStopped","event","isEvtWithFiles","onDocumentDragOver","isIe","userAgent","isEdge","isIeOrEdge","composeEventHandlers","_len","fns","_key","_len2","args","_key2","fn","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","arr2","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_e","_i","_s","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","source","key","_defineProperty","obj","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","Dropzone","forwardRef","ref","children","params","_useDropzone","useDropzone","open","props","useImperativeHandle","React","Fragment","PropTypes","initialState","_ref2","_ref2$disabled","disabled","_ref2$getFilesFromEve","getFilesFromEvent","_ref2$maxSize","_ref2$minSize","_ref2$multiple","onDragEnter","onDragLeave","onDragOver","onDrop","onDropAccepted","onDropRejected","onFileDialogCancel","_ref2$preventDropOnDo","preventDropOnDocument","_ref2$noClick","noClick","_ref2$noKeyboard","noKeyboard","_ref2$noDrag","noDrag","_ref2$noDragEventsBub","noDragEventsBubbling","rootRef","useRef","inputRef","_useReducer","useReducer","reducer","_useReducer2","state","dispatch","isFocused","isFileDialogActive","draggedFiles","openFileDialog","useCallback","onWindowFocus","useEffect","onKeyDownCb","onFocusCb","onBlurCb","onClickCb","dragTargetsRef","onDocumentDrop","onDragEnterCb","stopPropagation","onDragOverCb","_unused","onDragLeaveCb","targets","onDropCb","rejectedFiles","composeHandler","composeKeyboardHandler","composeDragHandler","getRootProps","useMemo","_ref3","_ref3$refKey","refKey","onKeyDown","onFocus","onBlur","onClick","rest","onInputElementClick","getInputProps","_ref4","_ref4$refKey","onChange","inputProps","fileCount","isDragAccept","isDragReject","action","isDragActive"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}