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}","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\tvar _react = __webpack_require__(1);\n\n\tvar _react2 = _interopRequireDefault(_react);\n\n\tvar _propTypes = __webpack_require__(2);\n\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\tvar KEYCODE_UP = 38;\n\tvar KEYCODE_DOWN = 40;\n\tvar IS_BROWSER = typeof document != 'undefined';\n\tvar RE_NUMBER = /^[+-]?((\\.\\d+)|(\\d+(\\.\\d+)?))$/;\n\tvar RE_INCOMPLETE_NUMBER = /^([+-]|\\.0*|[+-]\\.0*|[+-]?\\d+\\.)?$/;\n\n\tfunction addClass(element, className) {\n\t if (element.classList) {\n\t return element.classList.add(className);\n\t }\n\t if (!element.className.search(new RegExp(\"\\\\b\" + className + \"\\\\b\"))) {\n\t element.className = \" \" + className;\n\t }\n\t}\n\n\tfunction removeClass(element, className) {\n\t if (element.className) {\n\t if (element.classList) {\n\t return element.classList.remove(className);\n\t }\n\n\t element.className = element.className.replace(new RegExp(\"\\\\b\" + className + \"\\\\b\", \"g\"), \"\");\n\t }\n\t}\n\n\tfunction access(object, prop, defaultValue) {\n\t var result = object[prop];\n\t if (typeof result == \"function\") {\n\t for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n\t args[_key - 3] = arguments[_key];\n\t }\n\n\t result = result.apply(undefined, args);\n\t }\n\t return result === undefined ? defaultValue : result;\n\t}\n\n\tvar NumericInput = function (_Component) {\n\t _inherits(NumericInput, _Component);\n\n\t function NumericInput() {\n\t var _ref;\n\n\t _classCallCheck(this, NumericInput);\n\n\t for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t args[_key2] = arguments[_key2];\n\t }\n\n\t var _this = _possibleConstructorReturn(this, (_ref = NumericInput.__proto__ || Object.getPrototypeOf(NumericInput)).call.apply(_ref, [this].concat(args)));\n\n\t _this._isStrict = !!_this.props.strict;\n\n\t _this.state = _extends({\n\t btnDownHover: false,\n\t btnDownActive: false,\n\t btnUpHover: false,\n\t btnUpActive: false,\n\t stringValue: \"\"\n\t }, _this._propsToState(_this.props));\n\t _this.stop = _this.stop.bind(_this);\n\t _this.onTouchEnd = _this.onTouchEnd.bind(_this);\n\t _this.refsInput = {};\n\t _this.refsWrapper = {};\n\t return _this;\n\t }\n\n\t _createClass(NumericInput, [{\n\t key: '_propsToState',\n\t value: function _propsToState(props) {\n\t var out = {};\n\n\t if (props.hasOwnProperty(\"value\")) {\n\t out.stringValue = String(props.value || props.value === 0 ? props.value : '').trim();\n\n\t out.value = out.stringValue !== '' ? this._parse(props.value) : null;\n\t } else if (!this._isMounted && props.hasOwnProperty(\"defaultValue\")) {\n\t out.stringValue = String(props.defaultValue || props.defaultValue === 0 ? props.defaultValue : '').trim();\n\n\t out.value = props.defaultValue !== '' ? this._parse(props.defaultValue) : null;\n\t }\n\n\t return out;\n\t }\n\t }, {\n\t key: 'componentWillReceiveProps',\n\t value: function componentWillReceiveProps(props) {\n\t var _this2 = this;\n\n\t this._isStrict = !!props.strict;\n\t var nextState = this._propsToState(props);\n\t if (Object.keys(nextState).length) {\n\t this._ignoreValueChange = true;\n\t this.setState(nextState, function () {\n\t _this2._ignoreValueChange = false;\n\t });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUpdate',\n\t value: function componentWillUpdate() {\n\t this.saveSelection();\n\t }\n\t }, {\n\t key: 'componentDidUpdate',\n\t value: function componentDidUpdate(prevProps, prevState) {\n\t if (!this._ignoreValueChange && prevState.value !== this.state.value && (!isNaN(this.state.value) || this.state.value === null)) {\n\t this._invokeEventCallback(\"onChange\", this.state.value, this.refsInput.value, this.refsInput);\n\t }\n\n\t if (this._inputFocus) {\n\t this.refsInput.focus();\n\n\t if (this.state.selectionStart || this.state.selectionStart === 0) {\n\t this.refsInput.selectionStart = this.state.selectionStart;\n\t }\n\n\t if (this.state.selectionEnd || this.state.selectionEnd === 0) {\n\t this.refsInput.selectionEnd = this.state.selectionEnd;\n\t }\n\t }\n\n\t this.checkValidity();\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t this._isMounted = false;\n\t this.stop();\n\t }\n\t }, {\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t var _this3 = this;\n\n\t this._isMounted = true;\n\t this.refsInput.getValueAsNumber = function () {\n\t return _this3.state.value || 0;\n\t };\n\n\t this.refsInput.setValue = function (value) {\n\t _this3.setState({\n\t value: _this3._parse(value),\n\t stringValue: value\n\t });\n\t };\n\n\t if (!this._inputFocus && IS_BROWSER && document.activeElement === this.refsInput) {\n\t this._inputFocus = true;\n\t this.refsInput.focus();\n\t this._invokeEventCallback(\"onFocus\", {\n\t target: this.refsInput,\n\t type: \"focus\"\n\t });\n\t }\n\n\t this.checkValidity();\n\t }\n\t }, {\n\t key: 'saveSelection',\n\t value: function saveSelection() {\n\t this.state.selectionStart = this.refsInput.selectionStart;\n\t this.state.selectionEnd = this.refsInput.selectionEnd;\n\t }\n\t }, {\n\t key: 'checkValidity',\n\t value: function checkValidity() {\n\t var valid = void 0,\n\t validationError = \"\";\n\n\t var supportsValidation = !!this.refsInput.checkValidity;\n\n\t var noValidate = !!(this.props.noValidate && this.props.noValidate != \"false\");\n\n\t this.refsInput.noValidate = noValidate;\n\n\t valid = noValidate || !supportsValidation;\n\n\t if (valid) {\n\t validationError = \"\";\n\t } else {\n\t if (this.refsInput.pattern === \"\") {\n\t this.refsInput.pattern = this.props.required ? \".+\" : \".*\";\n\t }\n\n\t if (supportsValidation) {\n\t this.refsInput.checkValidity();\n\t valid = this.refsInput.validity.valid;\n\n\t if (!valid) {\n\t validationError = this.refsInput.validationMessage;\n\t }\n\t }\n\n\t if (valid && supportsValidation && this.props.maxLength) {\n\t if (this.refsInput.value.length > this.props.maxLength) {\n\t validationError = \"This value is too long\";\n\t }\n\t }\n\t }\n\n\t validationError = validationError || (valid ? \"\" : this.refsInput.validationMessage || \"Unknown Error\");\n\n\t var validStateChanged = this._valid !== validationError;\n\t this._valid = validationError;\n\t if (validationError) {\n\t addClass(this.refsWrapper, \"has-error\");\n\t if (validStateChanged) {\n\t this._invokeEventCallback(\"onInvalid\", validationError, this.state.value, this.refsInput.value);\n\t }\n\t } else {\n\t removeClass(this.refsWrapper, \"has-error\");\n\t if (validStateChanged) {\n\t this._invokeEventCallback(\"onValid\", this.state.value, this.refsInput.value);\n\t }\n\t }\n\t }\n\t }, {\n\t key: '_toNumber',\n\t value: function _toNumber(x) {\n\t var n = parseFloat(x);\n\t if (isNaN(n) || !isFinite(n)) {\n\t n = 0;\n\t }\n\n\t if (this._isStrict) {\n\t var precision = access(this.props, \"precision\", null, this);\n\t var q = Math.pow(10, precision === null ? 10 : precision);\n\t var _min = +access(this.props, \"min\", NumericInput.defaultProps.min, this);\n\t var _max = +access(this.props, \"max\", NumericInput.defaultProps.max, this);\n\t n = Math.min(Math.max(n, _min), _max);\n\t n = Math.round(n * q) / q;\n\t }\n\n\t return n;\n\t }\n\t }, {\n\t key: '_parse',\n\t value: function _parse(x) {\n\t x = String(x);\n\t if (typeof this.props.parse == 'function') {\n\t return parseFloat(this.props.parse(x));\n\t }\n\t return parseFloat(x);\n\t }\n\t }, {\n\t key: '_format',\n\t value: function _format(n) {\n\t var _n = this._toNumber(n);\n\t var precision = access(this.props, \"precision\", null, this);\n\t if (precision !== null) {\n\t _n = n.toFixed(precision);\n\t }\n\n\t _n += \"\";\n\n\t if (this.props.format) {\n\t return this.props.format(_n);\n\t }\n\n\t return _n;\n\t }\n\t }, {\n\t key: '_step',\n\t value: function _step(n, callback) {\n\t var _isStrict = this._isStrict;\n\t this._isStrict = true;\n\n\t var _step = +access(this.props, \"step\", NumericInput.defaultProps.step, this, n > 0 ? NumericInput.DIRECTION_UP : NumericInput.DIRECTION_DOWN);\n\n\t var _n = this._toNumber((this.state.value || 0) + _step * n);\n\n\t if (this.props.snap) {\n\t _n = Math.round(_n / _step) * _step;\n\t }\n\n\t this._isStrict = _isStrict;\n\n\t if (_n !== this.state.value) {\n\t this.setState({ value: _n, stringValue: _n + \"\" }, callback);\n\t return true;\n\t }\n\n\t return false;\n\t }\n\t }, {\n\t key: '_onKeyDown',\n\t value: function _onKeyDown() {\n\t for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n\t args[_key3] = arguments[_key3];\n\t }\n\n\t args[0].persist();\n\t this._invokeEventCallback.apply(this, [\"onKeyDown\"].concat(args));\n\t var e = args[0];\n\t if (!e.isDefaultPrevented()) {\n\t if (e.keyCode === KEYCODE_UP) {\n\t e.preventDefault();\n\t this._step(e.ctrlKey || e.metaKey ? 0.1 : e.shiftKey ? 10 : 1);\n\t } else if (e.keyCode === KEYCODE_DOWN) {\n\t e.preventDefault();\n\t this._step(e.ctrlKey || e.metaKey ? -0.1 : e.shiftKey ? -10 : -1);\n\t } else {\n\t var _value = this.refsInput.value,\n\t length = _value.length;\n\t if (e.keyCode === 8) {\n\t if (this.refsInput.selectionStart == this.refsInput.selectionEnd && this.refsInput.selectionEnd > 0 && _value.length && _value.charAt(this.refsInput.selectionEnd - 1) === \".\") {\n\t e.preventDefault();\n\t this.refsInput.selectionStart = this.refsInput.selectionEnd = this.refsInput.selectionEnd - 1;\n\t }\n\t } else if (e.keyCode === 46) {\n\t if (this.refsInput.selectionStart == this.refsInput.selectionEnd && this.refsInput.selectionEnd < length + 1 && _value.length && _value.charAt(this.refsInput.selectionEnd) === \".\") {\n\t e.preventDefault();\n\t this.refsInput.selectionStart = this.refsInput.selectionEnd = this.refsInput.selectionEnd + 1;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'stop',\n\t value: function stop() {\n\t if (this._timer) {\n\t clearTimeout(this._timer);\n\t }\n\t }\n\t }, {\n\t key: 'increase',\n\t value: function increase() {\n\t var _this4 = this;\n\n\t var _recursive = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t var callback = arguments[1];\n\n\t this.stop();\n\t this._step(1, callback);\n\t var _max = +access(this.props, \"max\", NumericInput.defaultProps.max, this);\n\t if (isNaN(this.state.value) || +this.state.value < _max) {\n\t this._timer = setTimeout(function () {\n\t _this4.increase(true);\n\t }, _recursive ? NumericInput.SPEED : NumericInput.DELAY);\n\t }\n\t }\n\t }, {\n\t key: 'decrease',\n\t value: function decrease() {\n\t var _this5 = this;\n\n\t var _recursive = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t var callback = arguments[1];\n\n\t this.stop();\n\t this._step(-1, callback);\n\t var _min = +access(this.props, \"min\", NumericInput.defaultProps.min, this);\n\t if (isNaN(this.state.value) || +this.state.value > _min) {\n\t this._timer = setTimeout(function () {\n\t _this5.decrease(true);\n\t }, _recursive ? NumericInput.SPEED : NumericInput.DELAY);\n\t }\n\t }\n\t }, {\n\t key: 'onMouseDown',\n\t value: function onMouseDown(dir, callback) {\n\t if (dir == 'down') {\n\t this.decrease(false, callback);\n\t } else if (dir == 'up') {\n\t this.increase(false, callback);\n\t }\n\t }\n\t }, {\n\t key: 'onTouchStart',\n\t value: function onTouchStart(dir, e) {\n\t e.preventDefault();\n\t if (dir == 'down') {\n\t this.decrease();\n\t } else if (dir == 'up') {\n\t this.increase();\n\t }\n\t }\n\t }, {\n\t key: 'onTouchEnd',\n\t value: function onTouchEnd(e) {\n\t e.preventDefault();\n\t this.stop();\n\t }\n\t }, {\n\t key: '_invokeEventCallback',\n\t value: function _invokeEventCallback(callbackName) {\n\t if (typeof this.props[callbackName] == \"function\") {\n\t var _props$callbackName;\n\n\t for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n\t args[_key4 - 1] = arguments[_key4];\n\t }\n\n\t (_props$callbackName = this.props[callbackName]).call.apply(_props$callbackName, [null].concat(args));\n\t }\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _this6 = this;\n\n\t var props = this.props;\n\t var state = this.state;\n\t var css = {};\n\n\t var _props = this.props,\n\t step = _props.step,\n\t min = _props.min,\n\t max = _props.max,\n\t precision = _props.precision,\n\t parse = _props.parse,\n\t format = _props.format,\n\t mobile = _props.mobile,\n\t snap = _props.snap,\n\t componentClass = _props.componentClass,\n\t value = _props.value,\n\t type = _props.type,\n\t style = _props.style,\n\t defaultValue = _props.defaultValue,\n\t onInvalid = _props.onInvalid,\n\t onValid = _props.onValid,\n\t strict = _props.strict,\n\t noStyle = _props.noStyle,\n\t rest = _objectWithoutProperties(_props, ['step', 'min', 'max', 'precision', 'parse', 'format', 'mobile', 'snap', 'componentClass', 'value', 'type', 'style', 'defaultValue', 'onInvalid', 'onValid', 'strict', 'noStyle']);\n\n\t noStyle = noStyle || style === false;\n\n\t for (var x in NumericInput.style) {\n\t css[x] = _extends({}, NumericInput.style[x], style ? style[x] || {} : {});\n\t }\n\n\t var hasFormControl = props.className && /\\bform-control\\b/.test(props.className);\n\n\t if (mobile == 'auto') {\n\t mobile = IS_BROWSER && 'ontouchstart' in document;\n\t }\n\n\t if (typeof mobile == \"function\") {\n\t mobile = mobile.call(this);\n\t }\n\t mobile = !!mobile;\n\n\t var attrs = {\n\t wrap: {\n\t style: noStyle ? null : css.wrap,\n\t className: 'react-numeric-input',\n\t ref: function ref(e) {\n\t if (e != null && e != undefined) {\n\t _this6.refsWrapper = e;\n\t }\n\t },\n\t onMouseUp: undefined,\n\t onMouseLeave: undefined\n\t },\n\t input: _extends({\n\t ref: function ref(e) {\n\t if (e != null && e != undefined) {\n\t _this6.refsInput = e;\n\t }\n\t },\n\t type: 'text',\n\t style: noStyle ? null : _extends({}, css.input, !hasFormControl ? css['input:not(.form-control)'] : {}, this._inputFocus ? css['input:focus'] : {})\n\t }, rest),\n\t btnUp: {\n\t onMouseEnter: undefined,\n\t onMouseDown: undefined,\n\t onMouseUp: undefined,\n\t onMouseLeave: undefined,\n\t onTouchStart: undefined,\n\t onTouchEnd: undefined,\n\t style: noStyle ? null : _extends({}, css.btn, css.btnUp, props.disabled || props.readOnly ? css['btn:disabled'] : state.btnUpActive ? css['btn:active'] : state.btnUpHover ? css['btn:hover'] : {})\n\t },\n\t btnDown: {\n\t onMouseEnter: undefined,\n\t onMouseDown: undefined,\n\t onMouseUp: undefined,\n\t onMouseLeave: undefined,\n\t onTouchStart: undefined,\n\t onTouchEnd: undefined,\n\t style: noStyle ? null : _extends({}, css.btn, css.btnDown, props.disabled || props.readOnly ? css['btn:disabled'] : state.btnDownActive ? css['btn:active'] : state.btnDownHover ? css['btn:hover'] : {})\n\t }\n\t };\n\n\t var stringValue = String(state.stringValue || (state.value || state.value === 0 ? state.value : \"\") || \"\");\n\n\t var loose = !this._isStrict && (this._inputFocus || !this._isMounted);\n\n\t if (loose && RE_INCOMPLETE_NUMBER.test(stringValue)) {\n\t attrs.input.value = stringValue;\n\t } else if (loose && stringValue && !RE_NUMBER.test(stringValue)) {\n\t attrs.input.value = stringValue;\n\t } else if (state.value || state.value === 0) {\n\t attrs.input.value = this._format(state.value);\n\t } else {\n\t attrs.input.value = \"\";\n\t }\n\n\t if (hasFormControl && !noStyle) {\n\t _extends(attrs.wrap.style, css['wrap.hasFormControl']);\n\t }\n\n\t if (mobile && !noStyle) {\n\t _extends(attrs.input.style, css['input.mobile']);\n\t _extends(attrs.btnUp.style, css['btnUp.mobile']);\n\t _extends(attrs.btnDown.style, css['btnDown.mobile']);\n\t }\n\n\t if (!props.disabled && !props.readOnly) {\n\t _extends(attrs.wrap, {\n\t onMouseUp: this.stop,\n\t onMouseLeave: this.stop\n\t });\n\n\t _extends(attrs.btnUp, {\n\t onTouchStart: this.onTouchStart.bind(this, 'up'),\n\t onTouchEnd: this.onTouchEnd,\n\t onMouseEnter: function onMouseEnter() {\n\t _this6.setState({\n\t btnUpHover: true\n\t });\n\t },\n\t onMouseLeave: function onMouseLeave() {\n\t _this6.stop();\n\t _this6.setState({\n\t btnUpHover: false,\n\t btnUpActive: false\n\t });\n\t },\n\t onMouseUp: function onMouseUp() {\n\t _this6.setState({\n\t btnUpHover: true,\n\t btnUpActive: false\n\t });\n\t },\n\t onMouseDown: function onMouseDown() {\n\t for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n\t args[_key5] = arguments[_key5];\n\t }\n\n\t args[0].preventDefault();\n\t args[0].persist();\n\t _this6._inputFocus = true;\n\t _this6.setState({\n\t btnUpHover: true,\n\t btnUpActive: true\n\t }, function () {\n\t _this6._invokeEventCallback.apply(_this6, [\"onFocus\"].concat(args));\n\t _this6.onMouseDown('up');\n\t });\n\t }\n\t });\n\n\t _extends(attrs.btnDown, {\n\t onTouchStart: this.onTouchStart.bind(this, 'down'),\n\t onTouchEnd: this.onTouchEnd,\n\t onMouseEnter: function onMouseEnter() {\n\t _this6.setState({\n\t btnDownHover: true\n\t });\n\t },\n\t onMouseLeave: function onMouseLeave() {\n\t _this6.stop();\n\t _this6.setState({\n\t btnDownHover: false,\n\t btnDownActive: false\n\t });\n\t },\n\t onMouseUp: function onMouseUp() {\n\t _this6.setState({\n\t btnDownHover: true,\n\t btnDownActive: false\n\t });\n\t },\n\t onMouseDown: function onMouseDown() {\n\t for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n\t args[_key6] = arguments[_key6];\n\t }\n\n\t args[0].preventDefault();\n\t args[0].persist();\n\t _this6._inputFocus = true;\n\t _this6.setState({\n\t btnDownHover: true,\n\t btnDownActive: true\n\t }, function () {\n\t _this6._invokeEventCallback.apply(_this6, [\"onFocus\"].concat(args));\n\t _this6.onMouseDown('down');\n\t });\n\t }\n\t });\n\n\t _extends(attrs.input, {\n\t onChange: function onChange(e) {\n\t var original = e.target.value;\n\t var val = _this6._parse(original);\n\t if (isNaN(val)) {\n\t val = null;\n\t }\n\t _this6.setState({\n\t value: _this6._isStrict ? _this6._toNumber(val) : val,\n\t stringValue: original\n\t });\n\t },\n\t onKeyDown: this._onKeyDown.bind(this),\n\t onInput: function onInput() {\n\t for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n\t args[_key7] = arguments[_key7];\n\t }\n\n\t _this6.saveSelection();\n\t _this6._invokeEventCallback.apply(_this6, [\"onInput\"].concat(args));\n\t },\n\t onSelect: function onSelect() {\n\t for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n\t args[_key8] = arguments[_key8];\n\t }\n\n\t _this6.saveSelection();\n\t _this6._invokeEventCallback.apply(_this6, [\"onSelect\"].concat(args));\n\t },\n\t onFocus: function onFocus() {\n\t for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n\t args[_key9] = arguments[_key9];\n\t }\n\n\t args[0].persist();\n\t _this6._inputFocus = true;\n\t var val = _this6._parse(args[0].target.value);\n\t _this6.setState({\n\t value: val,\n\t stringValue: val || val === 0 ? val + \"\" : \"\"\n\t }, function () {\n\t _this6._invokeEventCallback.apply(_this6, [\"onFocus\"].concat(args));\n\t });\n\t },\n\t onBlur: function onBlur() {\n\t for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n\t args[_key10] = arguments[_key10];\n\t }\n\n\t var _isStrict = _this6._isStrict;\n\t _this6._isStrict = true;\n\t args[0].persist();\n\t _this6._inputFocus = false;\n\t var val = _this6._parse(args[0].target.value);\n\t _this6.setState({\n\t value: val\n\t }, function () {\n\t _this6._invokeEventCallback.apply(_this6, [\"onBlur\"].concat(args));\n\t _this6._isStrict = _isStrict;\n\t });\n\t }\n\t });\n\t } else {\n\t if (!noStyle && props.disabled) {\n\t _extends(attrs.input.style, css['input:disabled']);\n\t }\n\t }\n\n\t var InputTag = componentClass || 'input';\n\n\t if (mobile) {\n\t return _react2.default.createElement(\n\t 'span',\n\t attrs.wrap,\n\t _react2.default.createElement(InputTag, attrs.input),\n\t _react2.default.createElement(\n\t 'b',\n\t attrs.btnUp,\n\t _react2.default.createElement('i', { style: noStyle ? null : css.minus }),\n\t _react2.default.createElement('i', { style: noStyle ? null : css.plus })\n\t ),\n\t _react2.default.createElement(\n\t 'b',\n\t attrs.btnDown,\n\t _react2.default.createElement('i', { style: noStyle ? null : css.minus })\n\t )\n\t );\n\t }\n\n\t return _react2.default.createElement(\n\t 'span',\n\t attrs.wrap,\n\t _react2.default.createElement(InputTag, attrs.input),\n\t _react2.default.createElement(\n\t 'b',\n\t attrs.btnUp,\n\t _react2.default.createElement('i', { style: noStyle ? null : css.arrowUp })\n\t ),\n\t _react2.default.createElement(\n\t 'b',\n\t attrs.btnDown,\n\t _react2.default.createElement('i', { style: noStyle ? null : css.arrowDown })\n\t )\n\t );\n\t }\n\t }]);\n\n\t return NumericInput;\n\t}(_react.Component);\n\n\tNumericInput.propTypes = {\n\t step: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n\t min: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n\t max: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n\t precision: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n\t maxLength: _propTypes2.default.number,\n\t parse: _propTypes2.default.func,\n\t format: _propTypes2.default.func,\n\t className: _propTypes2.default.string,\n\t disabled: _propTypes2.default.bool,\n\t readOnly: _propTypes2.default.bool,\n\t required: _propTypes2.default.bool,\n\t snap: _propTypes2.default.bool,\n\t noValidate: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string]),\n\t style: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool]),\n\t noStyle: _propTypes2.default.bool,\n\t type: _propTypes2.default.string,\n\t pattern: _propTypes2.default.string,\n\t onFocus: _propTypes2.default.func,\n\t onBlur: _propTypes2.default.func,\n\t onKeyDown: _propTypes2.default.func,\n\t onChange: _propTypes2.default.func,\n\t onInvalid: _propTypes2.default.func,\n\t onValid: _propTypes2.default.func,\n\t onInput: _propTypes2.default.func,\n\t onSelect: _propTypes2.default.func,\n\t size: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n\t value: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n\t defaultValue: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n\t strict: _propTypes2.default.bool,\n\t componentClass: _propTypes2.default.string,\n\t mobile: function mobile(props, propName) {\n\t var prop = props[propName];\n\t if (prop !== true && prop !== false && prop !== 'auto' && typeof prop != 'function') {\n\t return new Error('The \"mobile\" prop must be true, false, \"auto\" or a function');\n\t }\n\t }\n\t};\n\tNumericInput.defaultProps = {\n\t step: 1,\n\t min: Number.MIN_SAFE_INTEGER || -9007199254740991,\n\t max: Number.MAX_SAFE_INTEGER || 9007199254740991,\n\t precision: null,\n\t parse: null,\n\t format: null,\n\t mobile: 'auto',\n\t strict: false,\n\t componentClass: \"input\",\n\t style: {}\n\t};\n\tNumericInput.style = {\n\t wrap: {\n\t position: 'relative',\n\t display: 'inline-block'\n\t },\n\n\t 'wrap.hasFormControl': {\n\t display: 'block'\n\t },\n\n\t arrowUp: {\n\t position: 'absolute',\n\t top: '50%',\n\t left: '50%',\n\t width: 0,\n\t height: 0,\n\t borderWidth: '0 0.6ex 0.6ex 0.6ex',\n\t borderColor: 'transparent transparent rgba(0, 0, 0, 0.7)',\n\t borderStyle: 'solid',\n\t margin: '-0.3ex 0 0 -0.56ex'\n\t },\n\n\t arrowDown: {\n\t position: 'absolute',\n\t top: '50%',\n\t left: '50%',\n\t width: 0,\n\t height: 0,\n\t borderWidth: '0.6ex 0.6ex 0 0.6ex',\n\t borderColor: 'rgba(0, 0, 0, 0.7) transparent transparent',\n\t borderStyle: 'solid',\n\t margin: '-0.3ex 0 0 -0.56ex'\n\t },\n\n\t plus: {\n\t position: 'absolute',\n\t top: '50%',\n\t left: '50%',\n\t width: 2,\n\t height: 10,\n\t background: 'rgba(0,0,0,.7)',\n\t margin: '-5px 0 0 -1px'\n\t },\n\n\t minus: {\n\t position: 'absolute',\n\t top: '50%',\n\t left: '50%',\n\t width: 10,\n\t height: 2,\n\t background: 'rgba(0,0,0,.7)',\n\t margin: '-1px 0 0 -5px'\n\t },\n\n\t btn: {\n\t position: 'absolute',\n\t right: 2,\n\t width: '2.26ex',\n\t borderColor: 'rgba(0,0,0,.1)',\n\t borderStyle: 'solid',\n\t textAlign: 'center',\n\t cursor: 'default',\n\t transition: 'all 0.1s',\n\t background: 'rgba(0,0,0,.1)',\n\t boxShadow: '-1px -1px 3px rgba(0,0,0,.1) inset,' + '1px 1px 3px rgba(255,255,255,.7) inset'\n\t },\n\n\t btnUp: {\n\t top: 2,\n\t bottom: '50%',\n\t borderRadius: '2px 2px 0 0',\n\t borderWidth: '1px 1px 0 1px'\n\t },\n\n\t 'btnUp.mobile': {\n\t width: '3.3ex',\n\t bottom: 2,\n\t boxShadow: 'none',\n\t borderRadius: 2,\n\t borderWidth: 1\n\t },\n\n\t btnDown: {\n\t top: '50%',\n\t bottom: 2,\n\t borderRadius: '0 0 2px 2px',\n\t borderWidth: '0 1px 1px 1px'\n\t },\n\n\t 'btnDown.mobile': {\n\t width: '3.3ex',\n\t bottom: 2,\n\t left: 2,\n\t top: 2,\n\t right: 'auto',\n\t boxShadow: 'none',\n\t borderRadius: 2,\n\t borderWidth: 1\n\t },\n\n\t 'btn:hover': {\n\t background: 'rgba(0,0,0,.2)'\n\t },\n\n\t 'btn:active': {\n\t background: 'rgba(0,0,0,.3)',\n\t boxShadow: '0 1px 3px rgba(0,0,0,.2) inset,' + '-1px -1px 4px rgba(255,255,255,.5) inset'\n\t },\n\n\t 'btn:disabled': {\n\t opacity: 0.5,\n\t boxShadow: 'none',\n\t cursor: 'not-allowed'\n\t },\n\n\t input: {\n\t paddingRight: '3ex',\n\t boxSizing: 'border-box',\n\t fontSize: 'inherit'\n\t },\n\n\t 'input:not(.form-control)': {\n\t border: '1px solid #ccc',\n\t borderRadius: 2,\n\t paddingLeft: 4,\n\t display: 'block',\n\t WebkitAppearance: 'none',\n\t lineHeight: 'normal'\n\t },\n\n\t 'input.mobile': {\n\t paddingLeft: ' 3.4ex',\n\t paddingRight: '3.4ex',\n\t textAlign: 'center'\n\t },\n\n\t 'input:focus': {},\n\n\t 'input:disabled': {\n\t color: 'rgba(0, 0, 0, 0.3)',\n\t textShadow: '0 1px 0 rgba(255, 255, 255, 0.8)'\n\t }\n\t};\n\tNumericInput.SPEED = 50;\n\tNumericInput.DELAY = 500;\n\tNumericInput.DIRECTION_UP = \"up\";\n\tNumericInput.DIRECTION_DOWN = \"down\";\n\n\n\tmodule.exports = NumericInput;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"react\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"prop-types\");\n\n/***/ })\n/******/ ]);","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactPaginate\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"ReactPaginate\"] = factory(root[\"React\"]);\n})(global, function(__WEBPACK_EXTERNAL_MODULE__1__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","'use strict';\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PageView = (props) => {\n let { pageClassName, pageLinkClassName } = props;\n const {\n page,\n selected,\n activeClassName,\n activeLinkClassName,\n getEventListener,\n pageSelectedHandler,\n href,\n extraAriaContext\n } = props;\n\n let ariaLabel =\n props.ariaLabel ||\n 'Page ' +\n page +\n (extraAriaContext ? ' ' + extraAriaContext : '');\n let ariaCurrent = null;\n\n if (selected) {\n ariaCurrent = 'page';\n\n ariaLabel =\n props.ariaLabel || 'Page ' + page + ' is your current page';\n\n if (typeof pageClassName !== 'undefined') {\n pageClassName = pageClassName + ' ' + activeClassName;\n } else {\n pageClassName = activeClassName;\n }\n\n if (typeof pageLinkClassName !== 'undefined') {\n if (typeof activeLinkClassName !== 'undefined') {\n pageLinkClassName = pageLinkClassName + ' ' + activeLinkClassName;\n }\n } else {\n pageLinkClassName = activeLinkClassName;\n }\n }\n\n return (\n