react-dropzone 11.5.3 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var _excluded = ["children"],
2
2
  _excluded2 = ["open"],
3
- _excluded3 = ["refKey", "onKeyDown", "onFocus", "onBlur", "onClick", "onDragEnter", "onDragOver", "onDragLeave", "onDrop"],
3
+ _excluded3 = ["refKey", "role", "onKeyDown", "onFocus", "onBlur", "onClick", "onDragEnter", "onDragOver", "onDragLeave", "onDrop"],
4
4
  _excluded4 = ["refKey", "onChange", "onClick"];
5
5
 
6
6
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
@@ -23,9 +23,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
23
23
 
24
24
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
25
25
 
26
- function 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; }
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
27
 
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
29
 
30
30
  function _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; }
31
31
 
@@ -34,10 +34,10 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
34
34
  function _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; }
35
35
 
36
36
  /* eslint prefer-template: 0 */
37
- import React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';
38
- import PropTypes from 'prop-types';
39
- import { fromEvent } from 'file-selector';
40
- import { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from './utils/index';
37
+ import React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from "react";
38
+ import PropTypes from "prop-types";
39
+ import { fromEvent } from "file-selector";
40
+ import { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, filePickerOptionsTypes, canUseFileSystemAccessAPI, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from "./utils/index";
41
41
  /**
42
42
  * Convenience wrapper component for the `useDropzone` hook
43
43
  *
@@ -71,7 +71,7 @@ var Dropzone = /*#__PURE__*/forwardRef(function (_ref, ref) {
71
71
  open: open
72
72
  })));
73
73
  });
74
- Dropzone.displayName = 'Dropzone'; // Add default props for react-docgen
74
+ Dropzone.displayName = "Dropzone"; // Add default props for react-docgen
75
75
 
76
76
  var defaultProps = {
77
77
  disabled: false,
@@ -85,7 +85,8 @@ var defaultProps = {
85
85
  noKeyboard: false,
86
86
  noDrag: false,
87
87
  noDragEventsBubbling: false,
88
- validator: null
88
+ validator: null,
89
+ useFsAccessApi: true
89
90
  };
90
91
  Dropzone.defaultProps = defaultProps;
91
92
  Dropzone.propTypes = {
@@ -186,6 +187,12 @@ Dropzone.propTypes = {
186
187
  */
187
188
  onFileDialogOpen: PropTypes.func,
188
189
 
190
+ /**
191
+ * Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API
192
+ * to open the file picker instead of using an `<input type="file">` click event.
193
+ */
194
+ useFsAccessApi: PropTypes.bool,
195
+
189
196
  /**
190
197
  * Cb for when the `dragenter` event occurs.
191
198
  *
@@ -379,6 +386,8 @@ var initialState = {
379
386
  * @param {boolean} [props.disabled=false] Enable/disable the dropzone
380
387
  * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator
381
388
  * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection
389
+ * @param {boolean} [props.useFsAccessApi] Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API
390
+ * to open the file picker instead of using an `<input type="file">` click event.
382
391
  * @param {Function} [props.onFileDialogOpen] Cb for when opening the file dialog
383
392
  * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.
384
393
  * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs
@@ -432,6 +441,7 @@ export function useDropzone() {
432
441
  onDropRejected = _defaultProps$options.onDropRejected,
433
442
  onFileDialogCancel = _defaultProps$options.onFileDialogCancel,
434
443
  onFileDialogOpen = _defaultProps$options.onFileDialogOpen,
444
+ useFsAccessApi = _defaultProps$options.useFsAccessApi,
435
445
  preventDropOnDocument = _defaultProps$options.preventDropOnDocument,
436
446
  noClick = _defaultProps$options.noClick,
437
447
  noKeyboard = _defaultProps$options.noKeyboard,
@@ -439,6 +449,12 @@ export function useDropzone() {
439
449
  noDragEventsBubbling = _defaultProps$options.noDragEventsBubbling,
440
450
  validator = _defaultProps$options.validator;
441
451
 
452
+ var onFileDialogOpenCb = useMemo(function () {
453
+ return typeof onFileDialogOpen === "function" ? onFileDialogOpen : noop;
454
+ }, [onFileDialogOpen]);
455
+ var onFileDialogCancelCb = useMemo(function () {
456
+ return typeof onFileDialogCancel === "function" ? onFileDialogCancel : noop;
457
+ }, [onFileDialogCancel]);
442
458
  var rootRef = useRef(null);
443
459
  var inputRef = useRef(null);
444
460
 
@@ -449,22 +465,7 @@ export function useDropzone() {
449
465
 
450
466
  var isFocused = state.isFocused,
451
467
  isFileDialogActive = state.isFileDialogActive,
452
- draggedFiles = state.draggedFiles; // Fn for opening the file dialog programmatically
453
-
454
- var openFileDialog = useCallback(function () {
455
- if (inputRef.current) {
456
- dispatch({
457
- type: 'openDialog'
458
- });
459
-
460
- if (typeof onFileDialogOpen === 'function') {
461
- onFileDialogOpen();
462
- }
463
-
464
- inputRef.current.value = null;
465
- inputRef.current.click();
466
- }
467
- }, [dispatch, onFileDialogOpen]); // Update file dialog active state when the window is focused on
468
+ draggedFiles = state.draggedFiles; // Update file dialog active state when the window is focused on
468
469
 
469
470
  var onWindowFocus = function onWindowFocus() {
470
471
  // Execute the timeout only if the file dialog is opened in the browser
@@ -475,12 +476,9 @@ export function useDropzone() {
475
476
 
476
477
  if (!files.length) {
477
478
  dispatch({
478
- type: 'closeDialog'
479
+ type: "closeDialog"
479
480
  });
480
-
481
- if (typeof onFileDialogCancel === 'function') {
482
- onFileDialogCancel();
483
- }
481
+ onFileDialogCancelCb();
484
482
  }
485
483
  }
486
484
  }, 300);
@@ -488,49 +486,15 @@ export function useDropzone() {
488
486
  };
489
487
 
490
488
  useEffect(function () {
491
- window.addEventListener('focus', onWindowFocus, false);
492
- return function () {
493
- window.removeEventListener('focus', onWindowFocus, false);
494
- };
495
- }, [inputRef, isFileDialogActive, onFileDialogCancel]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone
496
-
497
- var onKeyDownCb = useCallback(function (event) {
498
- // Ignore keyboard events bubbling up the DOM tree
499
- if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {
500
- return;
501
- }
502
-
503
- if (event.keyCode === 32 || event.keyCode === 13) {
504
- event.preventDefault();
505
- openFileDialog();
489
+ if (useFsAccessApi && canUseFileSystemAccessAPI()) {
490
+ return function () {};
506
491
  }
507
- }, [rootRef, inputRef, openFileDialog]); // Update focus state for the dropzone
508
-
509
- var onFocusCb = useCallback(function () {
510
- dispatch({
511
- type: 'focus'
512
- });
513
- }, []);
514
- var onBlurCb = useCallback(function () {
515
- dispatch({
516
- type: 'blur'
517
- });
518
- }, []); // Cb to open the file dialog when click occurs on the dropzone
519
492
 
520
- var onClickCb = useCallback(function () {
521
- if (noClick) {
522
- return;
523
- } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()
524
- // to ensure React can handle state changes
525
- // See: https://github.com/react-dropzone/react-dropzone/issues/450
526
-
527
-
528
- if (isIeOrEdge()) {
529
- setTimeout(openFileDialog, 0);
530
- } else {
531
- openFileDialog();
532
- }
533
- }, [inputRef, noClick, openFileDialog]);
493
+ window.addEventListener("focus", onWindowFocus, false);
494
+ return function () {
495
+ window.removeEventListener("focus", onWindowFocus, false);
496
+ };
497
+ }, [inputRef, isFileDialogActive, onFileDialogCancelCb, useFsAccessApi]);
534
498
  var dragTargetsRef = useRef([]);
535
499
 
536
500
  var onDocumentDrop = function onDocumentDrop(event) {
@@ -545,14 +509,14 @@ export function useDropzone() {
545
509
 
546
510
  useEffect(function () {
547
511
  if (preventDropOnDocument) {
548
- document.addEventListener('dragover', onDocumentDragOver, false);
549
- document.addEventListener('drop', onDocumentDrop, false);
512
+ document.addEventListener("dragover", onDocumentDragOver, false);
513
+ document.addEventListener("drop", onDocumentDrop, false);
550
514
  }
551
515
 
552
516
  return function () {
553
517
  if (preventDropOnDocument) {
554
- document.removeEventListener('dragover', onDocumentDragOver);
555
- document.removeEventListener('drop', onDocumentDrop);
518
+ document.removeEventListener("dragover", onDocumentDragOver);
519
+ document.removeEventListener("drop", onDocumentDrop);
556
520
  }
557
521
  };
558
522
  }, [rootRef, preventDropOnDocument]);
@@ -572,7 +536,7 @@ export function useDropzone() {
572
536
  dispatch({
573
537
  draggedFiles: draggedFiles,
574
538
  isDragActive: true,
575
- type: 'setDraggedFiles'
539
+ type: "setDraggedFiles"
576
540
  });
577
541
 
578
542
  if (onDragEnter) {
@@ -589,7 +553,7 @@ export function useDropzone() {
589
553
 
590
554
  if (hasFiles && event.dataTransfer) {
591
555
  try {
592
- event.dataTransfer.dropEffect = 'copy';
556
+ event.dataTransfer.dropEffect = "copy";
593
557
  } catch (_unused) {}
594
558
  /* eslint-disable-line no-empty */
595
559
 
@@ -625,7 +589,7 @@ export function useDropzone() {
625
589
 
626
590
  dispatch({
627
591
  isDragActive: false,
628
- type: 'setDraggedFiles',
592
+ type: "setDraggedFiles",
629
593
  draggedFiles: []
630
594
  });
631
595
 
@@ -633,6 +597,69 @@ export function useDropzone() {
633
597
  onDragLeave(event);
634
598
  }
635
599
  }, [rootRef, onDragLeave, noDragEventsBubbling]);
600
+ var setFiles = useCallback(function (files, event) {
601
+ var acceptedFiles = [];
602
+ var fileRejections = [];
603
+ files.forEach(function (file) {
604
+ var _fileAccepted = fileAccepted(file, accept),
605
+ _fileAccepted2 = _slicedToArray(_fileAccepted, 2),
606
+ accepted = _fileAccepted2[0],
607
+ acceptError = _fileAccepted2[1];
608
+
609
+ var _fileMatchSize = fileMatchSize(file, minSize, maxSize),
610
+ _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),
611
+ sizeMatch = _fileMatchSize2[0],
612
+ sizeError = _fileMatchSize2[1];
613
+
614
+ var customErrors = validator ? validator(file) : null;
615
+
616
+ if (accepted && sizeMatch && !customErrors) {
617
+ acceptedFiles.push(file);
618
+ } else {
619
+ var errors = [acceptError, sizeError];
620
+
621
+ if (customErrors) {
622
+ errors = errors.concat(customErrors);
623
+ }
624
+
625
+ fileRejections.push({
626
+ file: file,
627
+ errors: errors.filter(function (e) {
628
+ return e;
629
+ })
630
+ });
631
+ }
632
+ });
633
+
634
+ if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {
635
+ // Reject everything and empty accepted files
636
+ acceptedFiles.forEach(function (file) {
637
+ fileRejections.push({
638
+ file: file,
639
+ errors: [TOO_MANY_FILES_REJECTION]
640
+ });
641
+ });
642
+ acceptedFiles.splice(0);
643
+ }
644
+
645
+ dispatch({
646
+ acceptedFiles: acceptedFiles,
647
+ fileRejections: fileRejections,
648
+ type: "setFiles"
649
+ });
650
+
651
+ if (onDrop) {
652
+ onDrop(acceptedFiles, fileRejections, event);
653
+ }
654
+
655
+ if (fileRejections.length > 0 && onDropRejected) {
656
+ onDropRejected(fileRejections, event);
657
+ }
658
+
659
+ if (acceptedFiles.length > 0 && onDropAccepted) {
660
+ onDropAccepted(acceptedFiles, event);
661
+ }
662
+ }, [dispatch, multiple, accept, minSize, maxSize, maxFiles, onDrop, onDropAccepted, onDropRejected, validator]);
636
663
  var onDropCb = useCallback(function (event) {
637
664
  event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done
638
665
 
@@ -646,74 +673,87 @@ export function useDropzone() {
646
673
  return;
647
674
  }
648
675
 
649
- var acceptedFiles = [];
650
- var fileRejections = [];
651
- files.forEach(function (file) {
652
- var _fileAccepted = fileAccepted(file, accept),
653
- _fileAccepted2 = _slicedToArray(_fileAccepted, 2),
654
- accepted = _fileAccepted2[0],
655
- acceptError = _fileAccepted2[1];
656
-
657
- var _fileMatchSize = fileMatchSize(file, minSize, maxSize),
658
- _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),
659
- sizeMatch = _fileMatchSize2[0],
660
- sizeError = _fileMatchSize2[1];
661
-
662
- var customErrors = validator ? validator(file) : null;
663
-
664
- if (accepted && sizeMatch && !customErrors) {
665
- acceptedFiles.push(file);
666
- } else {
667
- var errors = [acceptError, sizeError];
668
-
669
- if (customErrors) {
670
- errors = errors.concat(customErrors);
671
- }
672
-
673
- fileRejections.push({
674
- file: file,
675
- errors: errors.filter(function (e) {
676
- return e;
677
- })
678
- });
679
- }
680
- });
676
+ setFiles(files, event);
677
+ });
678
+ }
681
679
 
682
- if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {
683
- // Reject everything and empty accepted files
684
- acceptedFiles.forEach(function (file) {
685
- fileRejections.push({
686
- file: file,
687
- errors: [TOO_MANY_FILES_REJECTION]
688
- });
689
- });
690
- acceptedFiles.splice(0);
691
- }
680
+ dispatch({
681
+ type: "reset"
682
+ });
683
+ }, [getFilesFromEvent, setFiles, noDragEventsBubbling]); // Fn for opening the file dialog programmatically
692
684
 
693
- dispatch({
694
- acceptedFiles: acceptedFiles,
695
- fileRejections: fileRejections,
696
- type: 'setFiles'
685
+ var openFileDialog = useCallback(function () {
686
+ if (useFsAccessApi && canUseFileSystemAccessAPI()) {
687
+ dispatch({
688
+ type: "openDialog"
689
+ });
690
+ onFileDialogOpenCb(); // https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker
691
+
692
+ var opts = {
693
+ multiple: multiple,
694
+ types: filePickerOptionsTypes(accept)
695
+ };
696
+ window.showOpenFilePicker(opts).then(function (handles) {
697
+ return getFilesFromEvent(handles);
698
+ }).then(function (files) {
699
+ return setFiles(files, null);
700
+ }).catch(function (e) {
701
+ return onFileDialogCancelCb(e);
702
+ }).finally(function () {
703
+ return dispatch({
704
+ type: "closeDialog"
697
705
  });
706
+ });
707
+ return;
708
+ }
698
709
 
699
- if (onDrop) {
700
- onDrop(acceptedFiles, fileRejections, event);
701
- }
710
+ if (inputRef.current) {
711
+ dispatch({
712
+ type: "openDialog"
713
+ });
714
+ onFileDialogOpenCb();
715
+ inputRef.current.value = null;
716
+ inputRef.current.click();
717
+ }
718
+ }, [dispatch, onFileDialogOpenCb, onFileDialogCancelCb, useFsAccessApi, setFiles, accept, multiple]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone
702
719
 
703
- if (fileRejections.length > 0 && onDropRejected) {
704
- onDropRejected(fileRejections, event);
705
- }
720
+ var onKeyDownCb = useCallback(function (event) {
721
+ // Ignore keyboard events bubbling up the DOM tree
722
+ if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {
723
+ return;
724
+ }
706
725
 
707
- if (acceptedFiles.length > 0 && onDropAccepted) {
708
- onDropAccepted(acceptedFiles, event);
709
- }
710
- });
726
+ if (event.keyCode === 32 || event.keyCode === 13) {
727
+ event.preventDefault();
728
+ openFileDialog();
711
729
  }
730
+ }, [rootRef, inputRef, openFileDialog]); // Update focus state for the dropzone
712
731
 
732
+ var onFocusCb = useCallback(function () {
733
+ dispatch({
734
+ type: "focus"
735
+ });
736
+ }, []);
737
+ var onBlurCb = useCallback(function () {
713
738
  dispatch({
714
- type: 'reset'
739
+ type: "blur"
715
740
  });
716
- }, [multiple, accept, minSize, maxSize, maxFiles, getFilesFromEvent, onDrop, onDropAccepted, onDropRejected, noDragEventsBubbling, validator]);
741
+ }, []); // Cb to open the file dialog when click occurs on the dropzone
742
+
743
+ var onClickCb = useCallback(function () {
744
+ if (noClick) {
745
+ return;
746
+ } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()
747
+ // to ensure React can handle state changes
748
+ // See: https://github.com/react-dropzone/react-dropzone/issues/450
749
+
750
+
751
+ if (isIeOrEdge()) {
752
+ setTimeout(openFileDialog, 0);
753
+ } else {
754
+ openFileDialog();
755
+ }
756
+ }, [inputRef, noClick, openFileDialog]);
717
757
 
718
758
  var composeHandler = function composeHandler(fn) {
719
759
  return disabled ? null : fn;
@@ -737,7 +777,8 @@ export function useDropzone() {
737
777
  return function () {
738
778
  var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
739
779
  _ref2$refKey = _ref2.refKey,
740
- refKey = _ref2$refKey === void 0 ? 'ref' : _ref2$refKey,
780
+ refKey = _ref2$refKey === void 0 ? "ref" : _ref2$refKey,
781
+ role = _ref2.role,
741
782
  onKeyDown = _ref2.onKeyDown,
742
783
  onFocus = _ref2.onFocus,
743
784
  onBlur = _ref2.onBlur,
@@ -756,7 +797,8 @@ export function useDropzone() {
756
797
  onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),
757
798
  onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),
758
799
  onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),
759
- onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))
800
+ onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),
801
+ role: typeof role === "string" && role !== "" ? role : "button"
760
802
  }, refKey, rootRef), !disabled && !noKeyboard ? {
761
803
  tabIndex: 0
762
804
  } : {}), rest);
@@ -769,7 +811,7 @@ export function useDropzone() {
769
811
  return function () {
770
812
  var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
771
813
  _ref3$refKey = _ref3.refKey,
772
- refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
814
+ refKey = _ref3$refKey === void 0 ? "ref" : _ref3$refKey,
773
815
  onChange = _ref3.onChange,
774
816
  onClick = _ref3.onClick,
775
817
  rest = _objectWithoutProperties(_ref3, _excluded4);
@@ -777,13 +819,13 @@ export function useDropzone() {
777
819
  var inputProps = _defineProperty({
778
820
  accept: accept,
779
821
  multiple: multiple,
780
- type: 'file',
822
+ type: "file",
781
823
  style: {
782
- display: 'none'
824
+ display: "none"
783
825
  },
784
826
  onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),
785
827
  onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),
786
- autoComplete: 'off',
828
+ autoComplete: "off",
787
829
  tabIndex: -1
788
830
  }, refKey, inputRef);
789
831
 
@@ -815,27 +857,27 @@ export function useDropzone() {
815
857
  function reducer(state, action) {
816
858
  /* istanbul ignore next */
817
859
  switch (action.type) {
818
- case 'focus':
860
+ case "focus":
819
861
  return _objectSpread(_objectSpread({}, state), {}, {
820
862
  isFocused: true
821
863
  });
822
864
 
823
- case 'blur':
865
+ case "blur":
824
866
  return _objectSpread(_objectSpread({}, state), {}, {
825
867
  isFocused: false
826
868
  });
827
869
 
828
- case 'openDialog':
829
- return _objectSpread(_objectSpread({}, state), {}, {
870
+ case "openDialog":
871
+ return _objectSpread(_objectSpread({}, initialState), {}, {
830
872
  isFileDialogActive: true
831
873
  });
832
874
 
833
- case 'closeDialog':
875
+ case "closeDialog":
834
876
  return _objectSpread(_objectSpread({}, state), {}, {
835
877
  isFileDialogActive: false
836
878
  });
837
879
 
838
- case 'setDraggedFiles':
880
+ case "setDraggedFiles":
839
881
  /* eslint no-case-declarations: 0 */
840
882
  var isDragActive = action.isDragActive,
841
883
  draggedFiles = action.draggedFiles;
@@ -844,13 +886,13 @@ function reducer(state, action) {
844
886
  isDragActive: isDragActive
845
887
  });
846
888
 
847
- case 'setFiles':
889
+ case "setFiles":
848
890
  return _objectSpread(_objectSpread({}, state), {}, {
849
891
  acceptedFiles: action.acceptedFiles,
850
892
  fileRejections: action.fileRejections
851
893
  });
852
894
 
853
- case 'reset':
895
+ case "reset":
854
896
  return _objectSpread({}, initialState);
855
897
 
856
898
  default:
@@ -858,4 +900,6 @@ function reducer(state, action) {
858
900
  }
859
901
  }
860
902
 
861
- export { ErrorCode } from './utils';
903
+ function noop() {}
904
+
905
+ export { ErrorCode } from "./utils";