{"version":3,"file":"84.33fb694159a035a0c648.js","mappings":"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","sources":["webpack://matrix-licensor/./node_modules/change-emitter/lib/index.js","webpack://matrix-licensor/./node_modules/decimal.js-light/decimal.js","webpack://matrix-licensor/./node_modules/eases/back-in-out.js","webpack://matrix-licensor/./node_modules/eases/back-in.js","webpack://matrix-licensor/./node_modules/eases/back-out.js","webpack://matrix-licensor/./node_modules/eases/bounce-in-out.js","webpack://matrix-licensor/./node_modules/eases/bounce-in.js","webpack://matrix-licensor/./node_modules/eases/bounce-out.js","webpack://matrix-licensor/./node_modules/eases/circ-in-out.js","webpack://matrix-licensor/./node_modules/eases/circ-in.js","webpack://matrix-licensor/./node_modules/eases/circ-out.js","webpack://matrix-licensor/./node_modules/eases/cubic-in-out.js","webpack://matrix-licensor/./node_modules/eases/cubic-in.js","webpack://matrix-licensor/./node_modules/eases/cubic-out.js","webpack://matrix-licensor/./node_modules/eases/elastic-in-out.js","webpack://matrix-licensor/./node_modules/eases/elastic-in.js","webpack://matrix-licensor/./node_modules/eases/elastic-out.js","webpack://matrix-licensor/./node_modules/eases/expo-in-out.js","webpack://matrix-licensor/./node_modules/eases/expo-in.js","webpack://matrix-licensor/./node_modules/eases/expo-out.js","webpack://matrix-licensor/./node_modules/eases/index.js","webpack://matrix-licensor/./node_modules/eases/linear.js","webpack://matrix-licensor/./node_modules/eases/quad-in-out.js","webpack://matrix-licensor/./node_modules/eases/quad-in.js","webpack://matrix-licensor/./node_modules/eases/quad-out.js","webpack://matrix-licensor/./node_modules/eases/quart-in-out.js","webpack://matrix-licensor/./node_modules/eases/quart-in.js","webpack://matrix-licensor/./node_modules/eases/quart-out.js","webpack://matrix-licensor/./node_modules/eases/quint-in-out.js","webpack://matrix-licensor/./node_modules/eases/quint-in.js","webpack://matrix-licensor/./node_modules/eases/quint-out.js","webpack://matrix-licensor/./node_modules/eases/sine-in-out.js","webpack://matrix-licensor/./node_modules/eases/sine-in.js","webpack://matrix-licensor/./node_modules/eases/sine-out.js","webpack://matrix-licensor/./node_modules/fbjs/lib/shallowEqual.js","webpack://matrix-licensor/./node_modules/pbs-dataexplorer/dataExplorerCommandConfig.js","webpack://matrix-licensor/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://matrix-licensor/./node_modules/prop-types/index.js","webpack://matrix-licensor/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://matrix-licensor/./node_modules/redux/es/redux.js","webpack://matrix-licensor/./node_modules/react-redux/es/components/Context.js","webpack://matrix-licensor/./node_modules/react-redux/es/utils/batch.js","webpack://matrix-licensor/./node_modules/react-redux/es/utils/Subscription.js","webpack://matrix-licensor/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://matrix-licensor/./node_modules/react-redux/es/components/Provider.js","webpack://matrix-licensor/./node_modules/react-redux/es/components/connectAdvanced.js","webpack://matrix-licensor/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://matrix-licensor/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/mergeProps.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://matrix-licensor/./node_modules/react-redux/es/connect/connect.js","webpack://matrix-licensor/./node_modules/react-redux/es/hooks/useSelector.js","webpack://matrix-licensor/./node_modules/use-memo-one/dist/use-memo-one.esm.js","webpack://matrix-licensor/./node_modules/react-redux/es/index.js","webpack://matrix-licensor/./node_modules/css-box-model/dist/css-box-model.esm.js","webpack://matrix-licensor/./node_modules/css-box-model/node_modules/tiny-invariant/dist/tiny-invariant.esm.js","webpack://matrix-licensor/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://matrix-licensor/./node_modules/raf-schd/dist/raf-schd.esm.js","webpack://matrix-licensor/./node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/constants.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/FocusGuard.js","webpack://matrix-licensor/./node_modules/tslib/tslib.es6.js","webpack://matrix-licensor/./node_modules/use-sidecar/dist/es2015/medium.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/medium.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/Lock.js","webpack://matrix-licensor/./node_modules/use-callback-ref/dist/es2015/useMergeRef.js","webpack://matrix-licensor/./node_modules/use-callback-ref/dist/es2015/useRef.js","webpack://matrix-licensor/./node_modules/use-callback-ref/dist/es2015/assignRef.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/array.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/all-affected.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/focusInside.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/correctFocus.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/firstFocus.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/is.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/solver.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/tabOrder.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/tabUtils.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/tabbables.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/DOMutils.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/utils/parenting.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/focusMerge.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/setFocus.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/index.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/util.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/Trap.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/focusables.js","webpack://matrix-licensor/./node_modules/focus-lock/dist/es2015/focusIsHidden.js","webpack://matrix-licensor/./node_modules/react-clientside-effect/lib/index.es.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/Combination.js","webpack://matrix-licensor/./node_modules/react-focus-lock/dist/es2015/index.js","webpack://matrix-licensor/./node_modules/react-is/cjs/react-is.production.min.js","webpack://matrix-licensor/./node_modules/react-is/index.js","webpack://matrix-licensor/./node_modules/react-keyed-flatten-children/index.js","webpack://matrix-licensor/./node_modules/react-popper/lib/Manager.js","webpack://matrix-licensor/./node_modules/react-popper/lib/Target.js","webpack://matrix-licensor/../../src/utils/debounce.js","webpack://matrix-licensor/../../src/utils/isBrowser.js","webpack://matrix-licensor/../../src/utils/isFunction.js","webpack://matrix-licensor/../../src/utils/getStyleComputedProperty.js","webpack://matrix-licensor/../../src/utils/getParentNode.js","webpack://matrix-licensor/../../src/utils/getScrollParent.js","webpack://matrix-licensor/../../src/utils/isIE.js","webpack://matrix-licensor/../../src/utils/getOffsetParent.js","webpack://matrix-licensor/../../src/utils/getRoot.js","webpack://matrix-licensor/../../src/utils/findCommonOffsetParent.js","webpack://matrix-licensor/../../src/utils/isOffsetContainer.js","webpack://matrix-licensor/../../src/utils/getScroll.js","webpack://matrix-licensor/../../src/utils/getBordersSize.js","webpack://matrix-licensor/../../src/utils/getWindowSizes.js","webpack://matrix-licensor/../../src/utils/getClientRect.js","webpack://matrix-licensor/../../src/utils/getBoundingClientRect.js","webpack://matrix-licensor/../../src/utils/getOffsetRectRelativeToArbitraryNode.js","webpack://matrix-licensor/../../src/utils/includeScroll.js","webpack://matrix-licensor/../../src/utils/isFixed.js","webpack://matrix-licensor/../../src/utils/getFixedPositionOffsetParent.js","webpack://matrix-licensor/../../src/utils/getBoundaries.js","webpack://matrix-licensor/../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","webpack://matrix-licensor/../../src/utils/computeAutoPlacement.js","webpack://matrix-licensor/../../src/utils/getReferenceOffsets.js","webpack://matrix-licensor/../../src/utils/getOuterSizes.js","webpack://matrix-licensor/../../src/utils/getOppositePlacement.js","webpack://matrix-licensor/../../src/utils/getPopperOffsets.js","webpack://matrix-licensor/../../src/utils/find.js","webpack://matrix-licensor/../../src/utils/runModifiers.js","webpack://matrix-licensor/../../src/utils/findIndex.js","webpack://matrix-licensor/../../src/methods/update.js","webpack://matrix-licensor/../../src/utils/isModifierEnabled.js","webpack://matrix-licensor/../../src/utils/getSupportedPropertyName.js","webpack://matrix-licensor/../../src/methods/destroy.js","webpack://matrix-licensor/../../src/utils/getWindow.js","webpack://matrix-licensor/../../src/utils/setupEventListeners.js","webpack://matrix-licensor/../../src/methods/enableEventListeners.js","webpack://matrix-licensor/../../src/methods/disableEventListeners.js","webpack://matrix-licensor/../../src/utils/removeEventListeners.js","webpack://matrix-licensor/../../src/utils/isNumeric.js","webpack://matrix-licensor/../../src/utils/setStyles.js","webpack://matrix-licensor/../../src/modifiers/computeStyle.js","webpack://matrix-licensor/../../src/utils/isModifierRequired.js","webpack://matrix-licensor/../../src/methods/placements.js","webpack://matrix-licensor/../../src/utils/clockwise.js","webpack://matrix-licensor/../../src/modifiers/index.js","webpack://matrix-licensor/../../src/modifiers/shift.js","webpack://matrix-licensor/../../src/modifiers/offset.js","webpack://matrix-licensor/../../src/modifiers/preventOverflow.js","webpack://matrix-licensor/../../src/modifiers/keepTogether.js","webpack://matrix-licensor/../../src/modifiers/arrow.js","webpack://matrix-licensor/../../src/modifiers/flip.js","webpack://matrix-licensor/../../src/utils/getOppositeVariation.js","webpack://matrix-licensor/../../src/modifiers/inner.js","webpack://matrix-licensor/../../src/modifiers/hide.js","webpack://matrix-licensor/../../src/utils/getRoundedOffsets.js","webpack://matrix-licensor/../../src/modifiers/applyStyle.js","webpack://matrix-licensor/../../src/utils/setAttributes.js","webpack://matrix-licensor/../../src/methods/defaults.js","webpack://matrix-licensor/../../src/index.js","webpack://matrix-licensor/./node_modules/react-popper/lib/Popper.js","webpack://matrix-licensor/./node_modules/react-popper/lib/Arrow.js","webpack://matrix-licensor/./node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://matrix-licensor/./node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","webpack://matrix-licensor/./node_modules/react-redux/node_modules/react-is/index.js","webpack://matrix-licensor/./node_modules/recompose/dist/Recompose.esm.js","webpack://matrix-licensor/./node_modules/recompose/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://matrix-licensor/./node_modules/spry-react/Tabs/tabSwitcherDialogDoneButton.js","webpack://matrix-licensor/./node_modules/spry-react/ActionButtons/actionButtons.js","webpack://matrix-licensor/./node_modules/spry-react/Animation/animation.js","webpack://matrix-licensor/./node_modules/spry-react/Animation/transitionGroup.js","webpack://matrix-licensor/./node_modules/spry-react/Confirmation/confirmation.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/useDialogStack.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/getOpenConfirmationCallback.js","webpack://matrix-licensor/./node_modules/spry-react/PartialCover/partialCover.js","webpack://matrix-licensor/./node_modules/spry-react/DialogPortal/dialogPortal.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/dialogStack.js","webpack://matrix-licensor/./node_modules/spry-react/App/appContext.js","webpack://matrix-licensor/./node_modules/spry-react/App/app.js","webpack://matrix-licensor/./node_modules/spry-react/App/useBeforeUnload.js","webpack://matrix-licensor/./node_modules/spry-react/App/useFlashMessage.js","webpack://matrix-licensor/./node_modules/spry-react/App/useSerialOperation.js","webpack://matrix-licensor/./node_modules/spry-react/App/useSetWindowLocationHref.js","webpack://matrix-licensor/./node_modules/spry-react/SerialOperation/setWindowLocationHref.js","webpack://matrix-licensor/./node_modules/spry-react/Buttons/button.js","webpack://matrix-licensor/./node_modules/spry-react/Checkbox/checkboxField.js","webpack://matrix-licensor/./node_modules/spry-react/Checkbox/labeledCheckboxStyles.js","webpack://matrix-licensor/./node_modules/spry-react/Checkbox/labeledCheckboxField.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useArrowKeyFocus.js","webpack://matrix-licensor/./node_modules/spry-react/ContextMenu/contextMenu.js","webpack://matrix-licensor/./node_modules/spry-react/ContextMenu/useContextMenuOpenerRefClassWrapper.js","webpack://matrix-licensor/./node_modules/spry-react/DialogPortal/spryReactDialogRoot.js","webpack://matrix-licensor/./node_modules/spry-react/DialogPortal/dialogRoots.js","webpack://matrix-licensor/./node_modules/spry-react/DialogPortal/spryDialogRoot.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/dialogBlueHeader.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/dialogSimpleHeader.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/dialogSingleTab.js","webpack://matrix-licensor/./node_modules/spry-react/Dialog/dialog.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/403ErrorDialog.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/404ErrorDialog.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/500ErrorDialog.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/errorPageBody.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/errorDialog.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/errorDisplayList.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/errorList.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/errorMessages.js","webpack://matrix-licensor/./node_modules/spry-react/Errors/networkErrorDialog.js","webpack://matrix-licensor/./node_modules/spry-react/Field/cssGridPropsHelper.js","webpack://matrix-licensor/./node_modules/spry-react/Field/field.js","webpack://matrix-licensor/./node_modules/spry-react/Flyout/flyout.js","webpack://matrix-licensor/./node_modules/spry-react/Flyout/flyoutToggle.js","webpack://matrix-licensor/../src/index.ts","webpack://matrix-licensor/./node_modules/scroll-into-view-if-needed/es/index.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/gridRow.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useElementFlasher.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/useRowKeysToFlash.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useTransientState.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/grid.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/useGridVerticalScrollbarObserver.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/gridAttributes.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/gridCells.js","webpack://matrix-licensor/./node_modules/spry-react/Pager/pager.js","webpack://matrix-licensor/./node_modules/spry-react/Pager/pagerModel.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/gridFooter.js","webpack://matrix-licensor/./node_modules/spry-react/Grid/gridStyles.js","webpack://matrix-licensor/./node_modules/spry-react/Icon/fontIcon.js","webpack://matrix-licensor/./node_modules/spry-react/Icon/iconInfo.js","webpack://matrix-licensor/./node_modules/spry-react/Icon/icon.js","webpack://matrix-licensor/./node_modules/spry-react/Label/fieldLabel.js","webpack://matrix-licensor/./node_modules/spry-react/Label/labeled.js","webpack://matrix-licensor/./node_modules/spry-react/Label/lockToggle.js","webpack://matrix-licensor/../history.ts","webpack://matrix-licensor/../utils.ts","webpack://matrix-licensor/../router.ts","webpack://matrix-licensor/../lib/context.ts","webpack://matrix-licensor/../lib/hooks.tsx","webpack://matrix-licensor/../lib/components.tsx","webpack://matrix-licensor/../dom.ts","webpack://matrix-licensor/../index.tsx","webpack://matrix-licensor/./node_modules/spry-react/Link/link.js","webpack://matrix-licensor/./node_modules/spry-react/LoadingCover/delayedLoadingCover.js","webpack://matrix-licensor/./node_modules/spry-react/LoadingCover/transparentCover.js","webpack://matrix-licensor/./node_modules/spry-react/LoadingCover/loadingCover.js","webpack://matrix-licensor/./node_modules/spry-react/Name/nameField.js","webpack://matrix-licensor/./node_modules/spry-react/Number/currency.js","webpack://matrix-licensor/./node_modules/spry-react/Page/fullPage.js","webpack://matrix-licensor/./node_modules/spry-react/Page/scrollBarAdapter.js","webpack://matrix-licensor/./node_modules/spry-react/Page/page.js","webpack://matrix-licensor/./node_modules/spry-react/Page/siteHeader.js","webpack://matrix-licensor/./node_modules/spry-react/Phone/phoneField.js","webpack://matrix-licensor/./node_modules/spry-react/Popper/matrixPopper.js","webpack://matrix-licensor/./node_modules/spry-react/Popper/matrixPopperStyles.js","webpack://matrix-licensor/./node_modules/spry-react/RadioButton/radioButtonField.js","webpack://matrix-licensor/./node_modules/spry-react/Select/selectField.js","webpack://matrix-licensor/./node_modules/spry-react/Selection/selectionStrategy.js","webpack://matrix-licensor/./node_modules/spry-react/SerialOperation/serialOperation.js","webpack://matrix-licensor/./node_modules/spry-react/SerialOperation/delayedLoadingBanner.js","webpack://matrix-licensor/./node_modules/spry-react/SpaceBox/spaceBox.js","webpack://matrix-licensor/./node_modules/spry-react/Tabs/tabList.js","webpack://matrix-licensor/./node_modules/spry-react/Text/reactEventHandling.js","webpack://matrix-licensor/./node_modules/spry-react/Text/textField.js","webpack://matrix-licensor/./node_modules/spry-react/VerticalSelectList/verticalSelectList.js","webpack://matrix-licensor/./node_modules/spry-react/utils/apiClient.js","webpack://matrix-licensor/./node_modules/spry-react/utils/arrayExtensions.js","webpack://matrix-licensor/./node_modules/spry-react/utils/autoCompleteHelpers.js","webpack://matrix-licensor/./node_modules/spry-react/utils/buttonKeyPressHandler.js","webpack://matrix-licensor/./node_modules/spry-react/utils/colors.js","webpack://matrix-licensor/./node_modules/spry-react/utils/errorUtils.js","webpack://matrix-licensor/./node_modules/spry-react/utils/fetchWithSerialOperationHandling.js","webpack://matrix-licensor/./node_modules/spry-react/utils/flatChildren.js","webpack://matrix-licensor/./node_modules/spry-react/utils/insertIf.js","webpack://matrix-licensor/./node_modules/spry-react/utils/getDataDashProps.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useFocusRef.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useIsFirstRender.js","webpack://matrix-licensor/./node_modules/spry-react/utils/hooks/useUpdateEffect.js","webpack://matrix-licensor/./node_modules/spry-react/utils/htmlUtils.js","webpack://matrix-licensor/./node_modules/spry-react/utils/idGenerator.js","webpack://matrix-licensor/./node_modules/spry-react/utils/listUtils.js","webpack://matrix-licensor/./node_modules/spry-react/utils/numberUtils.js","webpack://matrix-licensor/./node_modules/spry-react/utils/positioning.js","webpack://matrix-licensor/./node_modules/spry-react/utils/readOnlyUtils.js","webpack://matrix-licensor/./node_modules/symbol-observable/es/index.js","webpack://matrix-licensor/./node_modules/symbol-observable/es/ponyfill.js","webpack://matrix-licensor/./node_modules/classnames/index.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://matrix-licensor/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createChangeEmitter = exports.createChangeEmitter = function createChangeEmitter() {\n var currentListeners = [];\n var nextListeners = currentListeners;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n function listen(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function () {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n function emit() {\n currentListeners = nextListeners;\n var listeners = currentListeners;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(listeners, arguments);\n }\n }\n\n return {\n listen: listen,\n emit: emit\n };\n};","/*! decimal.js-light v2.5.0 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*\r\n * decimal.js-light v2.5.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js-light\r\n * Copyright (c) 2018 Michael Mclaughlin \r\n * MIT Expat Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n var MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n Decimal = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -MAX_E\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to MAX_E\r\n\r\n // The natural logarithm of 10.\r\n // 115 digits\r\n LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n ONE,\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE), // 1286742750677284\r\n\r\n // Decimal.prototype object\r\n P = {};\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * comparedTo cmp\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy idiv\r\n * equals eq\r\n * exponent\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * isInteger isint\r\n * isNegative isneg\r\n * isPositive ispos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * squareRoot sqrt\r\n * times mul\r\n * toDecimalPlaces todp\r\n * toExponential\r\n * toFixed\r\n * toInteger toint\r\n * toNumber\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits tosd\r\n * toString\r\n * valueOf val\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this;\r\n\r\n y = new x.constructor(y);\r\n\r\n // Signs differ?\r\n if (x.s !== y.s) return x.s || -y.s;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n xdL = x.d.length;\r\n ydL = y.d.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var x = this,\r\n w = x.d.length - 1,\r\n dp = (w - x.e) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = x.d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n return dp < 0 ? 0 : dp;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, truncated to `precision` significant digits.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\n P.exponent = function () {\r\n return getBase10Exponent(this);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n return this.cmp(y) >= 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isint = function () {\r\n return this.e > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isneg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.ispos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return this.s === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `precision` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var r,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n wpr = pr + 5;\r\n\r\n // Default base is 10.\r\n if (base === void 0) {\r\n base = new Ctor(10);\r\n } else {\r\n base = new Ctor(base);\r\n\r\n // log[-b](x) = NaN\r\n // log[0](x) = NaN\r\n // log[1](x) = NaN\r\n if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n }\r\n\r\n // log[b](-x) = NaN\r\n // log[b](0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // log[b](1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n external = false;\r\n r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n y = new Ctor(y);\r\n\r\n // x % 0 = NaN\r\n if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n // Return x if x is 0.\r\n if (!x.s) return round(new Ctor(x), pr);\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n q = divide(x, y, 0, 1).times(y);\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return exp(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `precision` significant digits.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return ln(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s || 0;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var e, sd, w,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n e = getBase10Exponent(x) + 1;\r\n w = x.d.length - 1;\r\n sd = w * LOG_BASE + 1;\r\n w = x.d[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n }\r\n\r\n return z && e > sd ? e : sd;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var e, n, pr, r, s, t, wpr,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n // Negative or zero?\r\n if (x.s < 1) {\r\n if (!x.s) return new Ctor(0);\r\n\r\n // sqrt(-x) = NaN\r\n throw Error(decimalError + 'NaN');\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(x.d);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '1e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n pr = Ctor.precision;\r\n s = wpr = pr + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n n = n.slice(wpr - 3, wpr + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (s == wpr && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n round(t, pr + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n } else if (n != '9999') {\r\n break;\r\n }\r\n\r\n wpr += 4;\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n // Return 0 if either is 0.\r\n if (!x.s || !y.s) return new Ctor(0);\r\n\r\n y.s *= x.s;\r\n e = x.e + y.e;\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = e;\r\n\r\n return external ? round(y, Ctor.precision) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = toString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), dp + 1, rm);\r\n str = toString(x, true, dp + 1);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) return toString(x);\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isneg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\n P.toInteger = P.toint = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n * truncated to `precision` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, sign, yIsInt,\r\n x = this,\r\n Ctor = x.constructor,\r\n guard = 12,\r\n yn = +(y = new Ctor(y));\r\n\r\n // pow(x, 0) = 1\r\n if (!y.s) return new Ctor(ONE);\r\n\r\n x = new Ctor(x);\r\n\r\n // pow(0, y > 0) = 0\r\n // pow(0, y < 0) = Infinity\r\n if (!x.s) {\r\n if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n return x;\r\n }\r\n\r\n // pow(1, y) = 1\r\n if (x.eq(ONE)) return x;\r\n\r\n pr = Ctor.precision;\r\n\r\n // pow(x, 1) = x\r\n if (y.eq(ONE)) return round(x, pr);\r\n\r\n e = y.e;\r\n k = y.d.length - 1;\r\n yIsInt = e >= k;\r\n sign = x.s;\r\n\r\n if (!yIsInt) {\r\n\r\n // pow(x < 0, y non-integer) = NaN\r\n if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = new Ctor(ONE);\r\n\r\n // Max k of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (k % 2) {\r\n r = r.times(x);\r\n truncate(r.d, e);\r\n }\r\n\r\n k = mathfloor(k / 2);\r\n if (k === 0) break;\r\n\r\n x = x.times(x);\r\n truncate(x.d, e);\r\n }\r\n\r\n external = true;\r\n\r\n return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n }\r\n\r\n // Result is negative if x is negative and the last digit of integer y is odd.\r\n sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n x.s = 1;\r\n external = false;\r\n r = y.times(ln(x, pr + guard));\r\n external = true;\r\n r = exp(r);\r\n r.s = sign;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var e, str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n e = getBase10Exponent(x);\r\n str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), sd, rm);\r\n e = getBase10Exponent(x);\r\n str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return round(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\n P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n var x = this,\r\n e = getBase10Exponent(x),\r\n Ctor = x.constructor;\r\n\r\n return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * add P.minus, P.plus\r\n * checkInt32 P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n * digitsToString P.log, P.sqrt, P.pow, toString, exp, ln\r\n * divide P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n * exp P.exp, P.pow\r\n * getBase10Exponent P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n * P.toString, divide, round, toString, exp, ln\r\n * getLn10 P.log, ln\r\n * getZeroString digitsToString, toString\r\n * ln P.log, P.ln, P.pow, exp\r\n * parseDecimal Decimal\r\n * round P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n * P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n * divide, getLn10, exp, ln\r\n * subtract P.minus, P.plus\r\n * toString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n * truncate P.pow\r\n *\r\n * Throws: P.log, P.mod, P.sd, P.sqrt, P.pow, checkInt32, divide, round,\r\n * getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\n function add(x, y) {\r\n var carry, d, e, i, k, len, xd, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // If either is zero...\r\n if (!x.s || !y.s) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!y.s) y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n k = x.e;\r\n e = y.e;\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % BASE | 0;\r\n carry = temp / BASE | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * BASE + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, dp) {\r\n var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either 0?\r\n if (!x.s) return new Ctor(x);\r\n if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n e = x.e - y.e;\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n } else if (dp) {\r\n sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) return new Ctor(0);\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / LOG_BASE + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * BASE + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n k = BASE / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k);\r\n xd = multiplyInteger(xd, k);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= BASE) k = BASE - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n\r\n q.e = e;\r\n\r\n return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\n function exp(x, sd) {\r\n var denominator, guard, pow, sum, t, wpr,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n // exp(0) = 1\r\n if (!x.s) return new Ctor(ONE);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n while (x.abs().gte(0.1)) {\r\n x = x.times(t); // x = x / 2^5\r\n k += 5;\r\n }\r\n\r\n // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(ONE);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = round(pow.times(x), wpr);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n while (k--) sum = round(sum.times(sum), wpr);\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(x) {\r\n var e = x.e * LOG_BASE,\r\n w = x.d[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for (; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n\r\n if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(decimalError + 'LN10 precision limit exceeded');\r\n }\r\n\r\n return round(new Ctor(Ctor.LN10), sd);\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n * digits.\r\n *\r\n * ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\n function ln(y, sd) {\r\n var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // ln(-x) = NaN\r\n // ln(0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // ln(1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n if (x.eq(10)) {\r\n if (sd == null) external = true;\r\n return getLn10(Ctor, wpr);\r\n }\r\n\r\n wpr += guard;\r\n Ctor.precision = wpr;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n e = getBase10Exponent(x);\r\n\r\n if (Math.abs(e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(x, pr)) : x;\r\n }\r\n\r\n // x is reduced to a value near 1.\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n x2 = round(x.times(x), wpr);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = round(numerator.times(x2), wpr);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n e = e - i - 1;\r\n x.e = mathfloor(e / LOG_BASE);\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n } else {\r\n\r\n // Zero.\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n var i, j, k, n, rd, doRound, w, xdi,\r\n xd = x.d;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // n: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n i = sd - n;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) return x;\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - n.\r\n j = i - LOG_BASE + n;\r\n }\r\n\r\n if (rm !== void 0) {\r\n k = mathpow(10, n - j - 1);\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / k % 10 | 0;\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n // 714.\r\n\r\n doRound = rm < 4\r\n ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n }\r\n\r\n if (sd < 1 || !xd[0]) {\r\n if (doRound) {\r\n k = getBase10Exponent(x);\r\n xd.length = 1;\r\n\r\n // Convert sd to decimal places.\r\n sd = sd - k - 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n } else {\r\n xd.length = 1;\r\n\r\n // Zero.\r\n xd[0] = x.e = x.s = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (doRound) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n if ((xd[0] += k) == BASE) {\r\n xd[0] = 1;\r\n ++x.e;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function subtract(x, y) {\r\n var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // Return y negated if x is zero.\r\n // Return x if y is zero and x is non-zero.\r\n if (!x.s || !y.s) {\r\n if (y.s) y.s = -y.s;\r\n else y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are non-zero numbers with the same sign.\r\n\r\n e = y.e;\r\n xe = x.e;\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of zeros\r\n // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to xd if shorter.\r\n // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(0);\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function toString(x, isExp, sd) {\r\n var k,\r\n e = getBase10Exponent(x),\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (e < 0 ? 'e' : 'e+') + e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * clone\r\n * config/set\r\n */\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * value {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(value) {\r\n var x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (value instanceof Decimal) {\r\n x.s = value.s;\r\n x.e = value.e;\r\n x.d = (value = value.d) ? value.slice() : value;\r\n return;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n\r\n // Reject Infinity/NaN.\r\n if (value * 0 !== 0) {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n if (value > 0) {\r\n x.s = 1;\r\n } else if (value < 0) {\r\n value = -value;\r\n x.s = -1;\r\n } else {\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (value === ~~value && value < 1e7) {\r\n x.e = 0;\r\n x.d = [value];\r\n return;\r\n }\r\n\r\n return parseDecimal(x, value.toString());\r\n } else if (typeof value !== 'string') {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n // Minus sign?\r\n if (value.charCodeAt(0) === 45) {\r\n value = value.slice(1);\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n if (isDecimal.test(value)) parseDecimal(x, value);\r\n else throw Error(invalidArgument + value);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n Decimal.clone = clone;\r\n Decimal.config = Decimal.set = config;\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n throw Error(decimalError + 'Object expected');\r\n }\r\n var i, p, v,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -1 / 0, 0,\r\n 'toExpPos', 0, 1 / 0\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if ((v = obj[p = ps[i]]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if ((v = obj[p = 'LN10']) !== void 0) {\r\n if (v == Math.LN10) this[p] = new this(v);\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(Decimal);\r\n\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Internal constant.\r\n ONE = new Decimal(1);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self\r\n ? self : Function('return this')();\r\n }\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n","function backInOut(t) {\n var s = 1.70158 * 1.525\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s))\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2)\n}\n\nmodule.exports = backInOut","function backIn(t) {\n var s = 1.70158\n return t * t * ((s + 1) * t - s)\n}\n\nmodule.exports = backIn","function backOut(t) {\n var s = 1.70158\n return --t * t * ((s + 1) * t + s) + 1\n}\n\nmodule.exports = backOut","var bounceOut = require('./bounce-out')\n\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5\n}\n\nmodule.exports = bounceInOut","var bounceOut = require('./bounce-out')\n\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t)\n}\n\nmodule.exports = bounceIn","function bounceOut(t) {\n var a = 4.0 / 11.0\n var b = 8.0 / 11.0\n var c = 9.0 / 10.0\n\n var ca = 4356.0 / 361.0\n var cb = 35442.0 / 1805.0\n var cc = 16061.0 / 1805.0\n\n var t2 = t * t\n\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72\n}\n\nmodule.exports = bounceOut","function circInOut(t) {\n if ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1)\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1)\n}\n\nmodule.exports = circInOut","function circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t)\n}\n\nmodule.exports = circIn","function circOut(t) {\n return Math.sqrt(1 - ( --t * t ))\n}\n\nmodule.exports = circOut","function cubicInOut(t) {\n return t < 0.5\n ? 4.0 * t * t * t\n : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0\n}\n\nmodule.exports = cubicInOut","function cubicIn(t) {\n return t * t * t\n}\n\nmodule.exports = cubicIn","function cubicOut(t) {\n var f = t - 1.0\n return f * f * f + 1.0\n}\n\nmodule.exports = cubicOut","function elasticInOut(t) {\n return t < 0.5\n ? 0.5 * Math.sin(+13.0 * Math.PI/2 * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 * Math.sin(-13.0 * Math.PI/2 * ((2.0 * t - 1.0) + 1.0)) * Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) + 1.0\n}\n\nmodule.exports = elasticInOut","function elasticIn(t) {\n return Math.sin(13.0 * t * Math.PI/2) * Math.pow(2.0, 10.0 * (t - 1.0))\n}\n\nmodule.exports = elasticIn","function elasticOut(t) {\n return Math.sin(-13.0 * (t + 1.0) * Math.PI/2) * Math.pow(2.0, -10.0 * t) + 1.0\n}\n\nmodule.exports = elasticOut","function expoInOut(t) {\n return (t === 0.0 || t === 1.0)\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, (20.0 * t) - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - (t * 20.0)) + 1.0\n}\n\nmodule.exports = expoInOut","function expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0))\n}\n\nmodule.exports = expoIn","function expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t)\n}\n\nmodule.exports = expoOut","module.exports = {\n\t'backInOut': require('./back-in-out'),\n\t'backIn': require('./back-in'),\n\t'backOut': require('./back-out'),\n\t'bounceInOut': require('./bounce-in-out'),\n\t'bounceIn': require('./bounce-in'),\n\t'bounceOut': require('./bounce-out'),\n\t'circInOut': require('./circ-in-out'),\n\t'circIn': require('./circ-in'),\n\t'circOut': require('./circ-out'),\n\t'cubicInOut': require('./cubic-in-out'),\n\t'cubicIn': require('./cubic-in'),\n\t'cubicOut': require('./cubic-out'),\n\t'elasticInOut': require('./elastic-in-out'),\n\t'elasticIn': require('./elastic-in'),\n\t'elasticOut': require('./elastic-out'),\n\t'expoInOut': require('./expo-in-out'),\n\t'expoIn': require('./expo-in'),\n\t'expoOut': require('./expo-out'),\n\t'linear': require('./linear'),\n\t'quadInOut': require('./quad-in-out'),\n\t'quadIn': require('./quad-in'),\n\t'quadOut': require('./quad-out'),\n\t'quartInOut': require('./quart-in-out'),\n\t'quartIn': require('./quart-in'),\n\t'quartOut': require('./quart-out'),\n\t'quintInOut': require('./quint-in-out'),\n\t'quintIn': require('./quint-in'),\n\t'quintOut': require('./quint-out'),\n\t'sineInOut': require('./sine-in-out'),\n\t'sineIn': require('./sine-in'),\n\t'sineOut': require('./sine-out')\n}","function linear(t) {\n return t\n}\n\nmodule.exports = linear","function quadInOut(t) {\n t /= 0.5\n if (t < 1) return 0.5*t*t\n t--\n return -0.5 * (t*(t-2) - 1)\n}\n\nmodule.exports = quadInOut","function quadIn(t) {\n return t * t\n}\n\nmodule.exports = quadIn","function quadOut(t) {\n return -t * (t - 2.0)\n}\n\nmodule.exports = quadOut","function quarticInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0\n}\n\nmodule.exports = quarticInOut","function quarticIn(t) {\n return Math.pow(t, 4.0)\n}\n\nmodule.exports = quarticIn","function quarticOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0\n}\n\nmodule.exports = quarticOut","function qinticInOut(t) {\n if ( ( t *= 2 ) < 1 ) return 0.5 * t * t * t * t * t\n return 0.5 * ( ( t -= 2 ) * t * t * t * t + 2 )\n}\n\nmodule.exports = qinticInOut","function qinticIn(t) {\n return t * t * t * t * t\n}\n\nmodule.exports = qinticIn","function qinticOut(t) {\n return --t * t * t * t * t + 1\n}\n\nmodule.exports = qinticOut","function sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI*t) - 1)\n}\n\nmodule.exports = sineInOut","function sineIn (t) {\n var v = Math.cos(t * Math.PI * 0.5)\n if (Math.abs(v) < 1e-14) return 1\n else return 1 - v\n}\n\nmodule.exports = sineIn\n","function sineOut(t) {\n return Math.sin(t * Math.PI/2)\n}\n\nmodule.exports = sineOut","/**\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 * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;","/**\n * Gives Pbs.DataExplorer access to the app's buildCommandRequest function. This allows DataExplorer to use generated\n * RPC Commands from Pbs.DataExplorer.Web but without coupling to the application's setup of how to build commands.\n * The App has to register it's buildCommandRequest with dataexplorer once on load, and then all DataExplorer generated commands\n * will be access it through here.\n */\nexport function registerBuildCommandRequest(buildCommandRequest) {\n window.DataExplorer = {\n buildCommandRequest: buildCommandRequest\n };\n}\nexport function buildCommandRequest(commandName, exeOrLoad, request) {\n return window.DataExplorer.buildCommandRequest(commandName, exeOrLoad, request);\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 = 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\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","/**\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","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nexport { _objectSpread2 as default };","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n var batch = getBatch();\n var first = null;\n var last = null;\n return {\n clear: function clear() {\n first = null;\n last = null;\n },\n notify: function notify() {\n batch(function () {\n var listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get: function get() {\n var listeners = [];\n var listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n subscribe: function subscribe(callback) {\n var isSubscribed = true;\n var listener = last = {\n callback: callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\n\nvar nullListeners = {\n notify: function notify() {},\n get: function get() {\n return [];\n }\n};\nexport function createSubscription(store, parentSub) {\n var unsubscribe;\n var listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n var subscription = {\n addNestedSub: addNestedSub,\n notifyNestedSubs: notifyNestedSubs,\n handleChangeWrapper: handleChangeWrapper,\n isSubscribed: isSubscribed,\n trySubscribe: trySubscribe,\n tryUnsubscribe: tryUnsubscribe,\n getListeners: function getListeners() {\n return listeners;\n }\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n var store = _ref.store,\n context = _ref.context,\n children = _ref.children;\n var contextValue = useMemo(function () {\n var subscription = createSubscription(store);\n subscription.onStateChange = subscription.notifyNestedSubs;\n return {\n store: store,\n subscription: subscription\n };\n }, [store]);\n var previousState = useMemo(function () {\n return store.getState();\n }, [store]);\n useIsomorphicLayoutEffect(function () {\n var subscription = contextValue.subscription;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return function () {\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n };\n }, [contextValue, previousState]);\n var Context = context || ReactReduxContext;\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n Provider.propTypes = {\n store: PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n }),\n context: PropTypes.object,\n children: PropTypes.any\n };\n}\n\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n var updateCount = state[1];\n return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(function () {\n return effectFunc.apply(void 0, effectArgs);\n }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n lastChildProps.current = actualChildProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n var didUnsubscribe = false;\n var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n var checkForUpdates = function checkForUpdates() {\n if (didUnsubscribe) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n }\n\n var latestStoreState = store.getState();\n var newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n forceComponentUpdateDispatch({\n type: 'STORE_UPDATED',\n payload: {\n error: error\n }\n });\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n var unsubscribeWrapper = function unsubscribeWrapper() {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n selectorFactory is a func that is responsible for returning the selector function used to\r\n compute new props from state, props, and dispatch. For example:\r\n export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n thing: state.things[props.thingId],\r\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n }))(YourComponent)\r\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n if (process.env.NODE_ENV !== 'production') {\n if (renderCountProp !== undefined) {\n throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n }\n\n if (withRef) {\n throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n }\n\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: . ' + 'You may also pass a {context : MyContext} option to connect';\n\n if (storeKey !== 'store') {\n throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n }\n }\n\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n\n function createChildSelector(store) {\n return selectorFactory(store.dispatch, selectorFactoryOptions);\n } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n // that just executes the given callback immediately.\n\n\n var usePureOnlyMemo = pure ? useMemo : function (callback) {\n return callback();\n };\n\n function ConnectFunction(props) {\n var _useMemo = useMemo(function () {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n var reactReduxForwardedRef = props.reactReduxForwardedRef,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]),\n propsContext = _useMemo[0],\n reactReduxForwardedRef = _useMemo[1],\n wrapperProps = _useMemo[2];\n\n var ContextToUse = useMemo(function () {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a , \") + \"or pass a custom React context provider to and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n } // Based on the previous check, one of these must be true\n\n\n var store = didStoreComeFromProps ? props.store : contextValue.store;\n var childPropsSelector = useMemo(function () {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return createChildSelector(store);\n }, [store]);\n\n var _useMemo2 = useMemo(function () {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]),\n subscription = _useMemo2[0],\n notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n\n var overriddenContextValue = useMemo(function () {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription: subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n // causes a change to the calculated child component props (or we caught an error in mapState)\n\n var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n _useReducer$ = _useReducer[0],\n previousStateUpdateResult = _useReducer$[0],\n forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n if (previousStateUpdateResult && previousStateUpdateResult.error) {\n throw previousStateUpdateResult.error;\n } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n var lastChildProps = useRef();\n var lastWrapperProps = useRef(wrapperProps);\n var childPropsFromStoreUpdate = useRef();\n var renderIsScheduled = useRef(false);\n var actualChildProps = usePureOnlyMemo(function () {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n var renderedWrappedComponent = useMemo(function () {\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }));\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n var renderedChild = useMemo(function () {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","export default function bindActionCreators(actionCreators, dispatch) {\n var boundActionCreators = {};\n\n var _loop = function _loop(key) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = function () {\n return dispatch(actionCreator.apply(void 0, arguments));\n };\n }\n };\n\n for (var key in actionCreators) {\n _loop(key);\n }\n\n return boundActionCreators;\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n connect is a facade over connectAdvanced. It turns its args into a compatible\r\n selectorFactory, which has the signature:\r\n\r\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n \r\n connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n selectorFactory returns a final props selector from its mapStateToProps,\r\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n mergePropsFactories, and pure args.\r\n\r\n The resulting final props selector is called by the Connect component instance whenever\r\n it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default /*#__PURE__*/createConnect();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","import { useState, useRef, useEffect } from 'react';\n\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction useMemoOne(getResult, inputs) {\n var initial = useState(function () {\n return {\n inputs: inputs,\n result: getResult()\n };\n })[0];\n var isFirstRun = useRef(true);\n var committed = useRef(initial);\n var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n var cache = useCache ? committed.current : {\n inputs: inputs,\n result: getResult()\n };\n useEffect(function () {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallbackOne(callback, inputs) {\n return useMemoOne(function () {\n return callback;\n }, inputs);\n}\nvar useMemo = useMemoOne;\nvar useCallback = useCallbackOne;\n\nexport { useCallback, useCallbackOne, useMemo, useMemoOne };\n","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","import React, { useLayoutEffect, useEffect, useRef, useState, useContext } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { createStore as createStore$1, applyMiddleware, compose, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { useMemo, useCallback } from 'use-memo-one';\nimport { getRect, expand, offset, withScroll, getBox, createBox, calculateBox } from 'css-box-model';\nimport memoizeOne from 'memoize-one';\nimport rafSchd from 'raf-schd';\nimport ReactDOM from 'react-dom';\n\nvar isProduction = process.env.NODE_ENV === 'production';\nvar spacesAndTabs = /[ \\t]{2,}/g;\nvar lineStartWithSpaces = /^[ \\t]*/gm;\n\nvar clean = function clean(value) {\n return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\n};\n\nvar getDevMessage = function getDevMessage(message) {\n return clean(\"\\n %creact-beautiful-dnd\\n\\n %c\" + clean(message) + \"\\n\\n %c\\uD83D\\uDC77\\u200D This is a development only message. It will be removed in production builds.\\n\");\n};\n\nvar getFormattedMessage = function getFormattedMessage(message) {\n return [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\n};\nvar isDisabledFlag = '__react-beautiful-dnd-disable-dev-warnings';\nfunction log(type, message) {\n var _console;\n\n if (isProduction) {\n return;\n }\n\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n\n (_console = console)[type].apply(_console, getFormattedMessage(message));\n}\nvar warning = log.bind(null, 'warn');\nvar error = log.bind(null, 'error');\n\nfunction noop() {}\n\nfunction getOptions(shared, fromBinding) {\n return _extends({}, shared, {}, fromBinding);\n}\n\nfunction bindEvents(el, bindings, sharedOptions) {\n var unbindings = bindings.map(function (binding) {\n var options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(function (unbind) {\n unbind();\n });\n };\n}\n\nvar isProduction$1 = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction RbdInvariant(message) {\n this.message = message;\n}\n\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\n\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n\n if (isProduction$1) {\n throw new RbdInvariant(prefix);\n } else {\n throw new RbdInvariant(prefix + \": \" + (message || ''));\n }\n}\n\nvar ErrorBoundary = function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.callbacks = null;\n _this.unbind = noop;\n\n _this.onWindowError = function (event) {\n var callbacks = _this.getCallbacks();\n\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n An error was caught by our window 'error' event listener while a drag was occurring.\\n The active drag has been aborted.\\n \") : void 0;\n }\n\n var err = event.error;\n\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n\n _this.getCallbacks = function () {\n if (!_this.callbacks) {\n throw new Error('Unable to find AppCallbacks in ');\n }\n\n return _this.callbacks;\n };\n\n _this.setCallbacks = function (callbacks) {\n _this.callbacks = callbacks;\n };\n\n return _this;\n }\n\n var _proto = ErrorBoundary.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n };\n\n _proto.componentDidCatch = function componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n\n this.setState({});\n return;\n }\n\n throw err;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.unbind();\n };\n\n _proto.render = function render() {\n return this.props.children(this.setCallbacks);\n };\n\n return ErrorBoundary;\n}(React.Component);\n\nvar dragHandleUsageInstructions = \"\\n Press space bar to start a drag.\\n When dragging you can use the arrow keys to move the item around and escape to cancel.\\n Some screen readers may require you to be in focus mode or to use your pass through key\\n\";\n\nvar position = function position(index) {\n return index + 1;\n};\n\nvar onDragStart = function onDragStart(start) {\n return \"\\n You have lifted an item in position \" + position(start.source.index) + \"\\n\";\n};\n\nvar withLocation = function withLocation(source, destination) {\n var isInHomeList = source.droppableId === destination.droppableId;\n var startPosition = position(source.index);\n var endPosition = position(destination.index);\n\n if (isInHomeList) {\n return \"\\n You have moved the item from position \" + startPosition + \"\\n to position \" + endPosition + \"\\n \";\n }\n\n return \"\\n You have moved the item from position \" + startPosition + \"\\n in list \" + source.droppableId + \"\\n to list \" + destination.droppableId + \"\\n in position \" + endPosition + \"\\n \";\n};\n\nvar withCombine = function withCombine(id, source, combine) {\n var inHomeList = source.droppableId === combine.droppableId;\n\n if (inHomeList) {\n return \"\\n The item \" + id + \"\\n has been combined with \" + combine.draggableId;\n }\n\n return \"\\n The item \" + id + \"\\n in list \" + source.droppableId + \"\\n has been combined with \" + combine.draggableId + \"\\n in list \" + combine.droppableId + \"\\n \";\n};\n\nvar onDragUpdate = function onDragUpdate(update) {\n var location = update.destination;\n\n if (location) {\n return withLocation(update.source, location);\n }\n\n var combine = update.combine;\n\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n\n return 'You are over an area that cannot be dropped on';\n};\n\nvar returnedToStart = function returnedToStart(source) {\n return \"\\n The item has returned to its starting position\\n of \" + position(source.index) + \"\\n\";\n};\n\nvar onDragEnd = function onDragEnd(result) {\n if (result.reason === 'CANCEL') {\n return \"\\n Movement cancelled.\\n \" + returnedToStart(result.source) + \"\\n \";\n }\n\n var location = result.destination;\n var combine = result.combine;\n\n if (location) {\n return \"\\n You have dropped the item.\\n \" + withLocation(result.source, location) + \"\\n \";\n }\n\n if (combine) {\n return \"\\n You have dropped the item.\\n \" + withCombine(result.draggableId, result.source, combine) + \"\\n \";\n }\n\n return \"\\n The item has been dropped while not over a drop area.\\n \" + returnedToStart(result.source) + \"\\n \";\n};\n\nvar preset = {\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n onDragStart: onDragStart,\n onDragUpdate: onDragUpdate,\n onDragEnd: onDragEnd\n};\n\nvar origin = {\n x: 0,\n y: 0\n};\nvar add = function add(point1, point2) {\n return {\n x: point1.x + point2.x,\n y: point1.y + point2.y\n };\n};\nvar subtract = function subtract(point1, point2) {\n return {\n x: point1.x - point2.x,\n y: point1.y - point2.y\n };\n};\nvar isEqual = function isEqual(point1, point2) {\n return point1.x === point2.x && point1.y === point2.y;\n};\nvar negate = function negate(point) {\n return {\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n };\n};\nvar patch = function patch(line, value, otherValue) {\n var _ref;\n\n if (otherValue === void 0) {\n otherValue = 0;\n }\n\n return _ref = {}, _ref[line] = value, _ref[line === 'x' ? 'y' : 'x'] = otherValue, _ref;\n};\nvar distance = function distance(point1, point2) {\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\n};\nvar closest = function closest(target, points) {\n return Math.min.apply(Math, points.map(function (point) {\n return distance(target, point);\n }));\n};\nvar apply = function apply(fn) {\n return function (point) {\n return {\n x: fn(point.x),\n y: fn(point.y)\n };\n };\n};\n\nvar executeClip = (function (frame, subject) {\n var result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n\n return result;\n});\n\nvar offsetByPosition = function offsetByPosition(spacing, point) {\n return {\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n };\n};\nvar getCorners = function getCorners(spacing) {\n return [{\n x: spacing.left,\n y: spacing.top\n }, {\n x: spacing.right,\n y: spacing.top\n }, {\n x: spacing.left,\n y: spacing.bottom\n }, {\n x: spacing.right,\n y: spacing.bottom\n }];\n};\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nvar scroll = function scroll(target, frame) {\n if (!frame) {\n return target;\n }\n\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\n\nvar increase = function increase(target, axis, withPlaceholder) {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n var _extends2;\n\n return _extends({}, target, (_extends2 = {}, _extends2[axis.end] = target[axis.end] + withPlaceholder.increasedBy[axis.line], _extends2));\n }\n\n return target;\n};\n\nvar clip = function clip(target, frame) {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n\n return getRect(target);\n};\n\nvar getSubject = (function (_ref) {\n var page = _ref.page,\n withPlaceholder = _ref.withPlaceholder,\n axis = _ref.axis,\n frame = _ref.frame;\n var scrolled = scroll(page.marginBox, frame);\n var increased = increase(scrolled, axis, withPlaceholder);\n var clipped = clip(increased, frame);\n return {\n page: page,\n withPlaceholder: withPlaceholder,\n active: clipped\n };\n});\n\nvar scrollDroppable = (function (droppable, newScroll) {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n var scrollable = droppable.frame;\n var scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n var scrollDisplacement = negate(scrollDiff);\n\n var frame = _extends({}, scrollable, {\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n });\n\n var subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame: frame\n });\n\n var result = _extends({}, droppable, {\n frame: frame,\n subject: subject\n });\n\n return result;\n});\n\nfunction isInteger(value) {\n if (Number.isInteger) {\n return Number.isInteger(value);\n }\n\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\nfunction values(map) {\n if (Object.values) {\n return Object.values(map);\n }\n\n return Object.keys(map).map(function (key) {\n return map[key];\n });\n}\nfunction findIndex(list, predicate) {\n if (list.findIndex) {\n return list.findIndex(predicate);\n }\n\n for (var i = 0; i < list.length; i++) {\n if (predicate(list[i])) {\n return i;\n }\n }\n\n return -1;\n}\nfunction find(list, predicate) {\n if (list.find) {\n return list.find(predicate);\n }\n\n var index = findIndex(list, predicate);\n\n if (index !== -1) {\n return list[index];\n }\n\n return undefined;\n}\nfunction toArray(list) {\n return Array.prototype.slice.call(list);\n}\n\nvar toDroppableMap = memoizeOne(function (droppables) {\n return droppables.reduce(function (previous, current) {\n previous[current.descriptor.id] = current;\n return previous;\n }, {});\n});\nvar toDraggableMap = memoizeOne(function (draggables) {\n return draggables.reduce(function (previous, current) {\n previous[current.descriptor.id] = current;\n return previous;\n }, {});\n});\nvar toDroppableList = memoizeOne(function (droppables) {\n return values(droppables);\n});\nvar toDraggableList = memoizeOne(function (draggables) {\n return values(draggables);\n});\n\nvar getDraggablesInsideDroppable = memoizeOne(function (droppableId, draggables) {\n var result = toDraggableList(draggables).filter(function (draggable) {\n return droppableId === draggable.descriptor.droppableId;\n }).sort(function (a, b) {\n return a.descriptor.index - b.descriptor.index;\n });\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne(function (remove, list) {\n return list.filter(function (item) {\n return item.descriptor.id !== remove.descriptor.id;\n });\n});\n\nvar moveToNextCombine = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n draggable = _ref.draggable,\n destination = _ref.destination,\n insideDestination = _ref.insideDestination,\n previousImpact = _ref.previousImpact;\n\n if (!destination.isCombineEnabled) {\n return null;\n }\n\n var location = tryGetDestination(previousImpact);\n\n if (!location) {\n return null;\n }\n\n function getImpact(target) {\n var at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return _extends({}, previousImpact, {\n at: at\n });\n }\n\n var all = previousImpact.displaced.all;\n var closestId = all.length ? all[0] : null;\n\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n\n var withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n\n var last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n\n var indexOfClosest = findIndex(withoutDraggable, function (d) {\n return d.descriptor.id === closestId;\n });\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant(false) : void 0;\n var proposedIndex = indexOfClosest - 1;\n\n if (proposedIndex < 0) {\n return null;\n }\n\n var before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n});\n\nvar isHomeOf = (function (draggable, destination) {\n return draggable.descriptor.droppableId === destination.descriptor.id;\n});\n\nvar noDisplacedBy = {\n point: origin,\n value: 0\n};\nvar emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nvar noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (function (lowerBound, upperBound) {\n return function (value) {\n return lowerBound <= value && value <= upperBound;\n };\n});\n\nvar isPartiallyVisibleThroughFrame = (function (frame) {\n var isWithinVertical = isWithin(frame.top, frame.bottom);\n var isWithinHorizontal = isWithin(frame.left, frame.right);\n return function (subject) {\n var isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n\n if (isContained) {\n return true;\n }\n\n var isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n var isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n var isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n\n if (isPartiallyContained) {\n return true;\n }\n\n var isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n var isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n var isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n\n if (isTargetBiggerThanFrame) {\n return true;\n }\n\n var isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n});\n\nvar isTotallyVisibleThroughFrame = (function (frame) {\n var isWithinVertical = isWithin(frame.top, frame.bottom);\n var isWithinHorizontal = isWithin(frame.left, frame.right);\n return function (subject) {\n var isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n});\n\nvar vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nvar horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = (function (axis) {\n return function (frame) {\n var isWithinVertical = isWithin(frame.top, frame.bottom);\n var isWithinHorizontal = isWithin(frame.left, frame.right);\n return function (subject) {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n };\n});\n\nvar getDroppableDisplaced = function getDroppableDisplaced(target, destination) {\n var displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\n\nvar isVisibleInDroppable = function isVisibleInDroppable(target, destination, isVisibleThroughFrameFn) {\n if (!destination.subject.active) {\n return false;\n }\n\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\n\nvar isVisibleInViewport = function isVisibleInViewport(target, viewport, isVisibleThroughFrameFn) {\n return isVisibleThroughFrameFn(viewport)(target);\n};\n\nvar isVisible = function isVisible(_ref) {\n var toBeDisplaced = _ref.target,\n destination = _ref.destination,\n viewport = _ref.viewport,\n withDroppableDisplacement = _ref.withDroppableDisplacement,\n isVisibleThroughFrameFn = _ref.isVisibleThroughFrameFn;\n var displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\n\nvar isPartiallyVisible = function isPartiallyVisible(args) {\n return isVisible(_extends({}, args, {\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n }));\n};\nvar isTotallyVisible = function isTotallyVisible(args) {\n return isVisible(_extends({}, args, {\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n }));\n};\nvar isTotallyVisibleOnAxis = function isTotallyVisibleOnAxis(args) {\n return isVisible(_extends({}, args, {\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n }));\n};\n\nvar getShouldAnimate = function getShouldAnimate(id, last, forceShouldAnimate) {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n\n if (!last) {\n return true;\n }\n\n var invisible = last.invisible,\n visible = last.visible;\n\n if (invisible[id]) {\n return false;\n }\n\n var previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\n\nfunction getTarget(draggable, displacedBy) {\n var marginBox = draggable.page.marginBox;\n var expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\n\nfunction getDisplacementGroups(_ref) {\n var afterDragging = _ref.afterDragging,\n destination = _ref.destination,\n displacedBy = _ref.displacedBy,\n viewport = _ref.viewport,\n forceShouldAnimate = _ref.forceShouldAnimate,\n last = _ref.last;\n return afterDragging.reduce(function process(groups, draggable) {\n var target = getTarget(draggable, displacedBy);\n var id = draggable.descriptor.id;\n groups.all.push(id);\n var isVisible = isPartiallyVisible({\n target: target,\n destination: destination,\n viewport: viewport,\n withDroppableDisplacement: true\n });\n\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n\n var shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n var displacement = {\n draggableId: id,\n shouldAnimate: shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n\n var indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\n\nfunction goAtEnd(_ref) {\n var insideDestination = _ref.insideDestination,\n inHomeList = _ref.inHomeList,\n displacedBy = _ref.displacedBy,\n destination = _ref.destination;\n var newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList: inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy: displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\n\nfunction calculateReorderImpact(_ref2) {\n var draggable = _ref2.draggable,\n insideDestination = _ref2.insideDestination,\n destination = _ref2.destination,\n viewport = _ref2.viewport,\n displacedBy = _ref2.displacedBy,\n last = _ref2.last,\n index = _ref2.index,\n forceShouldAnimate = _ref2.forceShouldAnimate;\n var inHomeList = isHomeOf(draggable, destination);\n\n if (index == null) {\n return goAtEnd({\n insideDestination: insideDestination,\n inHomeList: inHomeList,\n displacedBy: displacedBy,\n destination: destination\n });\n }\n\n var match = find(insideDestination, function (item) {\n return item.descriptor.index === index;\n });\n\n if (!match) {\n return goAtEnd({\n insideDestination: insideDestination,\n inHomeList: inHomeList,\n displacedBy: displacedBy,\n destination: destination\n });\n }\n\n var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n var sliceFrom = insideDestination.indexOf(match);\n var impacted = withoutDragging.slice(sliceFrom);\n var displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination: destination,\n displacedBy: displacedBy,\n last: last,\n viewport: viewport.frame,\n forceShouldAnimate: forceShouldAnimate\n });\n return {\n displaced: displaced,\n displacedBy: displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n destination = _ref.destination,\n draggables = _ref.draggables,\n combine = _ref.combine,\n afterCritical = _ref.afterCritical;\n\n if (!destination.isCombineEnabled) {\n return null;\n }\n\n var combineId = combine.draggableId;\n var combineWith = draggables[combineId];\n var combineWithIndex = combineWith.descriptor.index;\n var didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n\n return combineWithIndex - 1;\n }\n\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n\n return combineWithIndex;\n});\n\nvar fromReorder = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n isInHomeList = _ref.isInHomeList,\n insideDestination = _ref.insideDestination,\n location = _ref.location;\n\n if (!insideDestination.length) {\n return null;\n }\n\n var currentIndex = location.index;\n var proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n var firstIndex = insideDestination[0].descriptor.index;\n var lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n var upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n\n if (proposedIndex < firstIndex) {\n return null;\n }\n\n if (proposedIndex > upperBound) {\n return null;\n }\n\n return proposedIndex;\n});\n\nvar moveToNextIndex = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n isInHomeList = _ref.isInHomeList,\n draggable = _ref.draggable,\n draggables = _ref.draggables,\n destination = _ref.destination,\n insideDestination = _ref.insideDestination,\n previousImpact = _ref.previousImpact,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n var wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant(false) : void 0;\n\n if (wasAt.type === 'REORDER') {\n var _newIndex = fromReorder({\n isMovingForward: isMovingForward,\n isInHomeList: isInHomeList,\n location: wasAt.destination,\n insideDestination: insideDestination\n });\n\n if (_newIndex == null) {\n return null;\n }\n\n return calculateReorderImpact({\n draggable: draggable,\n insideDestination: insideDestination,\n destination: destination,\n viewport: viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: _newIndex\n });\n }\n\n var newIndex = fromCombine({\n isMovingForward: isMovingForward,\n destination: destination,\n displaced: previousImpact.displaced,\n draggables: draggables,\n combine: wasAt.combine,\n afterCritical: afterCritical\n });\n\n if (newIndex == null) {\n return null;\n }\n\n return calculateReorderImpact({\n draggable: draggable,\n insideDestination: insideDestination,\n destination: destination,\n viewport: viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n});\n\nvar getCombinedItemDisplacement = (function (_ref) {\n var displaced = _ref.displaced,\n afterCritical = _ref.afterCritical,\n combineWith = _ref.combineWith,\n displacedBy = _ref.displacedBy;\n var isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n\n return isDisplaced ? displacedBy.point : origin;\n});\n\nvar whenCombining = (function (_ref) {\n var afterCritical = _ref.afterCritical,\n impact = _ref.impact,\n draggables = _ref.draggables;\n var combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n var combineWith = combine.draggableId;\n var center = draggables[combineWith].page.borderBox.center;\n var displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical: afterCritical,\n combineWith: combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n});\n\nvar distanceFromStartToBorderBoxCenter = function distanceFromStartToBorderBoxCenter(axis, box) {\n return box.margin[axis.start] + box.borderBox[axis.size] / 2;\n};\n\nvar distanceFromEndToBorderBoxCenter = function distanceFromEndToBorderBoxCenter(axis, box) {\n return box.margin[axis.end] + box.borderBox[axis.size] / 2;\n};\n\nvar getCrossAxisBorderBoxCenter = function getCrossAxisBorderBoxCenter(axis, target, isMoving) {\n return target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\n};\n\nvar goAfter = function goAfter(_ref) {\n var axis = _ref.axis,\n moveRelativeTo = _ref.moveRelativeTo,\n isMoving = _ref.isMoving;\n return patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\n};\nvar goBefore = function goBefore(_ref2) {\n var axis = _ref2.axis,\n moveRelativeTo = _ref2.moveRelativeTo,\n isMoving = _ref2.isMoving;\n return patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\n};\nvar goIntoStart = function goIntoStart(_ref3) {\n var axis = _ref3.axis,\n moveInto = _ref3.moveInto,\n isMoving = _ref3.isMoving;\n return patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n};\n\nvar whenReordering = (function (_ref) {\n var impact = _ref.impact,\n draggable = _ref.draggable,\n draggables = _ref.draggables,\n droppable = _ref.droppable,\n afterCritical = _ref.afterCritical;\n var insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n var draggablePage = draggable.page;\n var axis = droppable.axis;\n\n if (!insideDestination.length) {\n return goIntoStart({\n axis: axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n\n var displaced = impact.displaced,\n displacedBy = impact.displacedBy;\n var closestAfter = displaced.all[0];\n\n if (closestAfter) {\n var closest = draggables[closestAfter];\n\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis: axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n\n var withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis: axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n\n var last = insideDestination[insideDestination.length - 1];\n\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n var page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis: axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n\n return goAfter({\n axis: axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n});\n\nvar withDroppableDisplacement = (function (droppable, point) {\n var frame = droppable.frame;\n\n if (!frame) {\n return point;\n }\n\n return add(point, frame.scroll.diff.displacement);\n});\n\nvar getResultWithoutDroppableDisplacement = function getResultWithoutDroppableDisplacement(_ref) {\n var impact = _ref.impact,\n draggable = _ref.draggable,\n droppable = _ref.droppable,\n draggables = _ref.draggables,\n afterCritical = _ref.afterCritical;\n var original = draggable.page.borderBox.center;\n var at = impact.at;\n\n if (!droppable) {\n return original;\n }\n\n if (!at) {\n return original;\n }\n\n if (at.type === 'REORDER') {\n return whenReordering({\n impact: impact,\n draggable: draggable,\n draggables: draggables,\n droppable: droppable,\n afterCritical: afterCritical\n });\n }\n\n return whenCombining({\n impact: impact,\n draggables: draggables,\n afterCritical: afterCritical\n });\n};\n\nvar getPageBorderBoxCenterFromImpact = (function (args) {\n var withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n var droppable = args.droppable;\n var withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n});\n\nvar scrollViewport = (function (viewport, newScroll) {\n var diff = subtract(newScroll, viewport.scroll.initial);\n var displacement = negate(diff);\n var frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n var updated = {\n frame: frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement: displacement\n }\n }\n };\n return updated;\n});\n\nfunction getDraggables(ids, draggables) {\n return ids.map(function (id) {\n return draggables[id];\n });\n}\n\nfunction tryGetVisible(id, groups) {\n for (var i = 0; i < groups.length; i++) {\n var displacement = groups[i].visible[id];\n\n if (displacement) {\n return displacement;\n }\n }\n\n return null;\n}\n\nvar speculativelyIncrease = (function (_ref) {\n var impact = _ref.impact,\n viewport = _ref.viewport,\n destination = _ref.destination,\n draggables = _ref.draggables,\n maxScrollChange = _ref.maxScrollChange;\n var scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n var scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n var last = impact.displaced;\n var withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables(last.all, draggables),\n destination: destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last: last,\n forceShouldAnimate: false\n });\n var withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last: last,\n forceShouldAnimate: false\n });\n var invisible = {};\n var visible = {};\n var groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(function (id) {\n var displacement = tryGetVisible(id, groups);\n\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n\n invisible[id] = true;\n });\n\n var newImpact = _extends({}, impact, {\n displaced: {\n all: last.all,\n invisible: invisible,\n visible: visible\n }\n });\n\n return newImpact;\n});\n\nvar withViewportDisplacement = (function (viewport, point) {\n return add(viewport.scroll.diff.displacement, point);\n});\n\nvar getClientFromPageBorderBoxCenter = (function (_ref) {\n var pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n draggable = _ref.draggable,\n viewport = _ref.viewport;\n var withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n var offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n});\n\nvar isTotallyVisibleInNewLocation = (function (_ref) {\n var draggable = _ref.draggable,\n destination = _ref.destination,\n newPageBorderBoxCenter = _ref.newPageBorderBoxCenter,\n viewport = _ref.viewport,\n withDroppableDisplacement = _ref.withDroppableDisplacement,\n _ref$onlyOnMainAxis = _ref.onlyOnMainAxis,\n onlyOnMainAxis = _ref$onlyOnMainAxis === void 0 ? false : _ref$onlyOnMainAxis;\n var changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n var shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n var args = {\n target: shifted,\n destination: destination,\n withDroppableDisplacement: withDroppableDisplacement,\n viewport: viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n});\n\nvar moveToNextPlace = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n draggable = _ref.draggable,\n destination = _ref.destination,\n draggables = _ref.draggables,\n previousImpact = _ref.previousImpact,\n viewport = _ref.viewport,\n previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n previousClientSelection = _ref.previousClientSelection,\n afterCritical = _ref.afterCritical;\n\n if (!destination.isEnabled) {\n return null;\n }\n\n var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n var isInHomeList = isHomeOf(draggable, destination);\n var impact = moveToNextCombine({\n isMovingForward: isMovingForward,\n draggable: draggable,\n destination: destination,\n insideDestination: insideDestination,\n previousImpact: previousImpact\n }) || moveToNextIndex({\n isMovingForward: isMovingForward,\n isInHomeList: isInHomeList,\n draggable: draggable,\n draggables: draggables,\n destination: destination,\n insideDestination: insideDestination,\n previousImpact: previousImpact,\n viewport: viewport,\n afterCritical: afterCritical\n });\n\n if (!impact) {\n return null;\n }\n\n var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: impact,\n draggable: draggable,\n droppable: destination,\n draggables: draggables,\n afterCritical: afterCritical\n });\n var isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable: draggable,\n destination: destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n\n if (isVisibleInNewLocation) {\n var clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter: pageBorderBoxCenter,\n draggable: draggable,\n viewport: viewport\n });\n return {\n clientSelection: clientSelection,\n impact: impact,\n scrollJumpRequest: null\n };\n }\n\n var distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n var cautious = speculativelyIncrease({\n impact: impact,\n viewport: viewport,\n destination: destination,\n draggables: draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n});\n\nvar getKnownActive = function getKnownActive(droppable) {\n var rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant(false) : void 0;\n return rect;\n};\n\nvar getBestCrossAxisDroppable = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n source = _ref.source,\n droppables = _ref.droppables,\n viewport = _ref.viewport;\n var active = source.subject.active;\n\n if (!active) {\n return null;\n }\n\n var axis = source.axis;\n var isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n var candidates = toDroppableList(droppables).filter(function (droppable) {\n return droppable !== source;\n }).filter(function (droppable) {\n return droppable.isEnabled;\n }).filter(function (droppable) {\n return Boolean(droppable.subject.active);\n }).filter(function (droppable) {\n return isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable));\n }).filter(function (droppable) {\n var activeOfTarget = getKnownActive(droppable);\n\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(function (droppable) {\n var activeOfTarget = getKnownActive(droppable);\n var isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort(function (a, b) {\n var first = getKnownActive(a)[axis.crossAxisStart];\n var second = getKnownActive(b)[axis.crossAxisStart];\n\n if (isMovingForward) {\n return first - second;\n }\n\n return second - first;\n }).filter(function (droppable, index, array) {\n return getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart];\n });\n\n if (!candidates.length) {\n return null;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n var contains = candidates.filter(function (droppable) {\n var isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n\n if (contains.length === 1) {\n return contains[0];\n }\n\n if (contains.length > 1) {\n return contains.sort(function (a, b) {\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n }\n\n return candidates.sort(function (a, b) {\n var first = closest(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n var second = closest(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n\n if (first !== second) {\n return first - second;\n }\n\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n});\n\nvar getCurrentPageBorderBoxCenter = function getCurrentPageBorderBoxCenter(draggable, afterCritical) {\n var original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nvar getCurrentPageBorderBox = function getCurrentPageBorderBox(draggable, afterCritical) {\n var original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = (function (_ref) {\n var pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n viewport = _ref.viewport,\n destination = _ref.destination,\n insideDestination = _ref.insideDestination,\n afterCritical = _ref.afterCritical;\n var sorted = insideDestination.filter(function (draggable) {\n return isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination: destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n });\n }).sort(function (a, b) {\n var distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n var distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n\n if (distanceToA < distanceToB) {\n return -1;\n }\n\n if (distanceToB < distanceToA) {\n return 1;\n }\n\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n});\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n var displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nvar getRequiredGrowthForPlaceholder = function getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables) {\n var axis = droppable.axis;\n\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n\n var availableSpace = droppable.subject.page.contentBox[axis.size];\n var insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n var spaceUsed = insideDroppable.reduce(function (sum, dimension) {\n return sum + dimension.client.marginBox[axis.size];\n }, 0);\n var requiredSpace = spaceUsed + placeholderSize[axis.line];\n var needsToGrowBy = requiredSpace - availableSpace;\n\n if (needsToGrowBy <= 0) {\n return null;\n }\n\n return patch(axis.line, needsToGrowBy);\n};\n\nvar withMaxScroll = function withMaxScroll(frame, max) {\n return _extends({}, frame, {\n scroll: _extends({}, frame.scroll, {\n max: max\n })\n });\n};\n\nvar addPlaceholder = function addPlaceholder(droppable, draggable, draggables) {\n var frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant(false) : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant(false) : void 0;\n var placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n var requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n var added = {\n placeholderSize: placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n\n if (!frame) {\n var _subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n\n return _extends({}, droppable, {\n subject: _subject\n });\n }\n\n var maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n var newFrame = withMaxScroll(frame, maxScroll);\n var subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return _extends({}, droppable, {\n subject: subject,\n frame: newFrame\n });\n};\nvar removePlaceholder = function removePlaceholder(droppable) {\n var added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant(false) : void 0;\n var frame = droppable.frame;\n\n if (!frame) {\n var _subject2 = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n\n return _extends({}, droppable, {\n subject: _subject2\n });\n }\n\n var oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant(false) : void 0;\n var newFrame = withMaxScroll(frame, oldMaxScroll);\n var subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return _extends({}, droppable, {\n subject: subject,\n frame: newFrame\n });\n};\n\nvar moveToNewDroppable = (function (_ref) {\n var previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n moveRelativeTo = _ref.moveRelativeTo,\n insideDestination = _ref.insideDestination,\n draggable = _ref.draggable,\n draggables = _ref.draggables,\n destination = _ref.destination,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n\n var proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n var proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable: draggable,\n droppable: destination,\n draggables: draggables,\n afterCritical: afterCritical\n });\n var withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n var isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable: draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n\n var isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n\n var proposedIndex = function () {\n var relativeTo = moveRelativeTo.descriptor.index;\n\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n\n return relativeTo + 1;\n }();\n\n var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable: draggable,\n insideDestination: insideDestination,\n destination: destination,\n viewport: viewport,\n displacedBy: displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n});\n\nvar moveCrossAxis = (function (_ref) {\n var isMovingForward = _ref.isMovingForward,\n previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n draggable = _ref.draggable,\n isOver = _ref.isOver,\n draggables = _ref.draggables,\n droppables = _ref.droppables,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n var destination = getBestCrossAxisDroppable({\n isMovingForward: isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables: droppables,\n viewport: viewport\n });\n\n if (!destination) {\n return null;\n }\n\n var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n var moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport: viewport,\n destination: destination,\n insideDestination: insideDestination,\n afterCritical: afterCritical\n });\n var impact = moveToNewDroppable({\n previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n destination: destination,\n draggable: draggable,\n draggables: draggables,\n moveRelativeTo: moveRelativeTo,\n insideDestination: insideDestination,\n viewport: viewport,\n afterCritical: afterCritical\n });\n\n if (!impact) {\n return null;\n }\n\n var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: impact,\n draggable: draggable,\n droppable: destination,\n draggables: draggables,\n afterCritical: afterCritical\n });\n var clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter: pageBorderBoxCenter,\n draggable: draggable,\n viewport: viewport\n });\n return {\n clientSelection: clientSelection,\n impact: impact,\n scrollJumpRequest: null\n };\n});\n\nvar whatIsDraggedOver = (function (impact) {\n var at = impact.at;\n\n if (!at) {\n return null;\n }\n\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n\n return at.combine.droppableId;\n});\n\nvar getDroppableOver = function getDroppableOver(impact, droppables) {\n var id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\n\nvar moveInDirection = (function (_ref) {\n var state = _ref.state,\n type = _ref.type;\n var isActuallyOver = getDroppableOver(state.impact, state.dimensions.droppables);\n var isMainAxisMovementAllowed = Boolean(isActuallyOver);\n var home = state.dimensions.droppables[state.critical.droppable.id];\n var isOver = isActuallyOver || home;\n var direction = isOver.axis.direction;\n var isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n\n var isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n var draggable = state.dimensions.draggables[state.critical.draggable.id];\n var previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n var _state$dimensions = state.dimensions,\n draggables = _state$dimensions.draggables,\n droppables = _state$dimensions.droppables;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward: isMovingForward,\n previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n draggable: draggable,\n destination: isOver,\n draggables: draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward: isMovingForward,\n previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n draggable: draggable,\n isOver: isOver,\n draggables: draggables,\n droppables: droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n});\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n var isWithinVertical = isWithin(frame.top, frame.bottom);\n var isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\n\nfunction getFurthestAway(_ref) {\n var pageBorderBox = _ref.pageBorderBox,\n draggable = _ref.draggable,\n candidates = _ref.candidates;\n var startCenter = draggable.page.borderBox.center;\n var sorted = candidates.map(function (candidate) {\n var axis = candidate.axis;\n var target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort(function (a, b) {\n return b.distance - a.distance;\n });\n return sorted[0] ? sorted[0].id : null;\n}\n\nfunction getDroppableOver$1(_ref2) {\n var pageBorderBox = _ref2.pageBorderBox,\n draggable = _ref2.draggable,\n droppables = _ref2.droppables;\n var candidates = toDroppableList(droppables).filter(function (item) {\n if (!item.isEnabled) {\n return false;\n }\n\n var active = item.subject.active;\n\n if (!active) {\n return false;\n }\n\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n\n var axis = item.axis;\n var childCenter = active.center[axis.crossAxisLine];\n var crossAxisStart = pageBorderBox[axis.crossAxisStart];\n var crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n var isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n var isStartContained = isContained(crossAxisStart);\n var isEndContained = isContained(crossAxisEnd);\n\n if (!isStartContained && !isEndContained) {\n return true;\n }\n\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n\n return crossAxisEnd > childCenter;\n });\n\n if (!candidates.length) {\n return null;\n }\n\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n\n return getFurthestAway({\n pageBorderBox: pageBorderBox,\n draggable: draggable,\n candidates: candidates\n });\n}\n\nvar offsetRectByPosition = function offsetRectByPosition(rect, point) {\n return getRect(offsetByPosition(rect, point));\n};\n\nvar withDroppableScroll = (function (droppable, area) {\n var frame = droppable.frame;\n\n if (!frame) {\n return area;\n }\n\n return offsetRectByPosition(area, frame.scroll.diff.value);\n});\n\nfunction getIsDisplaced(_ref) {\n var displaced = _ref.displaced,\n id = _ref.id;\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex(_ref) {\n var draggable = _ref.draggable,\n closest = _ref.closest,\n inHomeList = _ref.inHomeList;\n\n if (!closest) {\n return null;\n }\n\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n\n return closest.descriptor.index;\n}\n\nvar getReorderImpact = (function (_ref2) {\n var targetRect = _ref2.pageBorderBoxWithDroppableScroll,\n draggable = _ref2.draggable,\n destination = _ref2.destination,\n insideDestination = _ref2.insideDestination,\n last = _ref2.last,\n viewport = _ref2.viewport,\n afterCritical = _ref2.afterCritical;\n var axis = destination.axis;\n var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n var displacement = displacedBy.value;\n var targetStart = targetRect[axis.start];\n var targetEnd = targetRect[axis.end];\n var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n var closest = find(withoutDragging, function (child) {\n var id = child.descriptor.id;\n var childCenter = child.page.borderBox.center[axis.line];\n var didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n var isDisplaced = getIsDisplaced({\n displaced: last,\n id: id\n });\n\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n\n return targetStart < childCenter - displacement;\n }\n\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n\n return targetStart < childCenter;\n });\n var newIndex = atIndex({\n draggable: draggable,\n closest: closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable: draggable,\n insideDestination: insideDestination,\n destination: destination,\n viewport: viewport,\n last: last,\n displacedBy: displacedBy,\n index: newIndex\n });\n});\n\nvar combineThresholdDivisor = 4;\nvar getCombineImpact = (function (_ref) {\n var draggable = _ref.draggable,\n targetRect = _ref.pageBorderBoxWithDroppableScroll,\n previousImpact = _ref.previousImpact,\n destination = _ref.destination,\n insideDestination = _ref.insideDestination,\n afterCritical = _ref.afterCritical;\n\n if (!destination.isCombineEnabled) {\n return null;\n }\n\n var axis = destination.axis;\n var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n var displacement = displacedBy.value;\n var targetStart = targetRect[axis.start];\n var targetEnd = targetRect[axis.end];\n var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n var combineWith = find(withoutDragging, function (child) {\n var id = child.descriptor.id;\n var childRect = child.page.borderBox;\n var childSize = childRect[axis.size];\n var threshold = childSize / combineThresholdDivisor;\n var didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n var isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id: id\n });\n\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n\n if (!combineWith) {\n return null;\n }\n\n var impact = {\n displacedBy: displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n});\n\nvar getDragImpact = (function (_ref) {\n var pageOffset = _ref.pageOffset,\n draggable = _ref.draggable,\n draggables = _ref.draggables,\n droppables = _ref.droppables,\n previousImpact = _ref.previousImpact,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n var pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n var destinationId = getDroppableOver$1({\n pageBorderBox: pageBorderBox,\n draggable: draggable,\n droppables: droppables\n });\n\n if (!destinationId) {\n return noImpact;\n }\n\n var destination = droppables[destinationId];\n var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n var pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll: pageBorderBoxWithDroppableScroll,\n draggable: draggable,\n previousImpact: previousImpact,\n destination: destination,\n insideDestination: insideDestination,\n afterCritical: afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll: pageBorderBoxWithDroppableScroll,\n draggable: draggable,\n destination: destination,\n insideDestination: insideDestination,\n last: previousImpact.displaced,\n viewport: viewport,\n afterCritical: afterCritical\n });\n});\n\nvar patchDroppableMap = (function (droppables, updated) {\n var _extends2;\n\n return _extends({}, droppables, (_extends2 = {}, _extends2[updated.descriptor.id] = updated, _extends2));\n});\n\nvar clearUnusedPlaceholder = function clearUnusedPlaceholder(_ref) {\n var previousImpact = _ref.previousImpact,\n impact = _ref.impact,\n droppables = _ref.droppables;\n var last = whatIsDraggedOver(previousImpact);\n var now = whatIsDraggedOver(impact);\n\n if (!last) {\n return droppables;\n }\n\n if (last === now) {\n return droppables;\n }\n\n var lastDroppable = droppables[last];\n\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n\n var updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\n\nvar recomputePlaceholders = (function (_ref2) {\n var draggable = _ref2.draggable,\n draggables = _ref2.draggables,\n droppables = _ref2.droppables,\n previousImpact = _ref2.previousImpact,\n impact = _ref2.impact;\n var cleaned = clearUnusedPlaceholder({\n previousImpact: previousImpact,\n impact: impact,\n droppables: droppables\n });\n var isOver = whatIsDraggedOver(impact);\n\n if (!isOver) {\n return cleaned;\n }\n\n var droppable = droppables[isOver];\n\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n\n var patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n});\n\nvar update = (function (_ref) {\n var state = _ref.state,\n forcedClientSelection = _ref.clientSelection,\n forcedDimensions = _ref.dimensions,\n forcedViewport = _ref.viewport,\n forcedImpact = _ref.impact,\n scrollJumpRequest = _ref.scrollJumpRequest;\n var viewport = forcedViewport || state.viewport;\n var dimensions = forcedDimensions || state.dimensions;\n var clientSelection = forcedClientSelection || state.current.client.selection;\n var offset = subtract(clientSelection, state.initial.client.selection);\n var client = {\n offset: offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n var page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n var current = {\n client: client,\n page: page\n };\n\n if (state.phase === 'COLLECTING') {\n return _extends({\n phase: 'COLLECTING'\n }, state, {\n dimensions: dimensions,\n viewport: viewport,\n current: current\n });\n }\n\n var draggable = dimensions.draggables[state.critical.draggable.id];\n var newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable: draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport: viewport,\n afterCritical: state.afterCritical\n });\n var withUpdatedPlaceholders = recomputePlaceholders({\n draggable: draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n\n var result = _extends({}, state, {\n current: current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport: viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n });\n\n return result;\n});\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(function (id) {\n return draggables[id];\n });\n}\n\nvar recompute = (function (_ref) {\n var impact = _ref.impact,\n viewport = _ref.viewport,\n draggables = _ref.draggables,\n destination = _ref.destination,\n forceShouldAnimate = _ref.forceShouldAnimate;\n var last = impact.displaced;\n var afterDragging = getDraggables$1(last.all, draggables);\n var displaced = getDisplacementGroups({\n afterDragging: afterDragging,\n destination: destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate: forceShouldAnimate,\n last: last\n });\n return _extends({}, impact, {\n displaced: displaced\n });\n});\n\nvar getClientBorderBoxCenter = (function (_ref) {\n var impact = _ref.impact,\n draggable = _ref.draggable,\n droppable = _ref.droppable,\n draggables = _ref.draggables,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: impact,\n draggable: draggable,\n draggables: draggables,\n droppable: droppable,\n afterCritical: afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter: pageBorderBoxCenter,\n draggable: draggable,\n viewport: viewport\n });\n});\n\nvar refreshSnap = (function (_ref) {\n var state = _ref.state,\n forcedDimensions = _ref.dimensions,\n forcedViewport = _ref.viewport;\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n var needsVisibilityCheck = state.impact;\n var viewport = forcedViewport || state.viewport;\n var dimensions = forcedDimensions || state.dimensions;\n var draggables = dimensions.draggables,\n droppables = dimensions.droppables;\n var draggable = draggables[state.critical.draggable.id];\n var isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant(false) : void 0;\n var destination = droppables[isOver];\n var impact = recompute({\n impact: needsVisibilityCheck,\n viewport: viewport,\n destination: destination,\n draggables: draggables\n });\n var clientSelection = getClientBorderBoxCenter({\n impact: impact,\n draggable: draggable,\n droppable: destination,\n draggables: draggables,\n viewport: viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact: impact,\n clientSelection: clientSelection,\n state: state,\n dimensions: dimensions,\n viewport: viewport\n });\n});\n\nvar getHomeLocation = (function (descriptor) {\n return {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n };\n});\n\nvar getLiftEffect = (function (_ref) {\n var draggable = _ref.draggable,\n home = _ref.home,\n draggables = _ref.draggables,\n viewport = _ref.viewport;\n var displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n var insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n var rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant(false) : void 0;\n var afterDragging = insideHome.slice(rawIndex + 1);\n var effected = afterDragging.reduce(function (previous, item) {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n var afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy: displacedBy,\n effected: effected\n };\n var displaced = getDisplacementGroups({\n afterDragging: afterDragging,\n destination: home,\n displacedBy: displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n var impact = {\n displaced: displaced,\n displacedBy: displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact: impact,\n afterCritical: afterCritical\n };\n});\n\nvar patchDimensionMap = (function (dimensions, updated) {\n return {\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n };\n});\n\nvar start = function start(key) {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nvar finish = function finish(key) {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = (function (_ref) {\n var draggable = _ref.draggable,\n offset$1 = _ref.offset,\n initialWindowScroll = _ref.initialWindowScroll;\n var client = offset(draggable.client, offset$1);\n var page = withScroll(client, initialWindowScroll);\n\n var moved = _extends({}, draggable, {\n placeholder: _extends({}, draggable.placeholder, {\n client: client\n }),\n client: client,\n page: page\n });\n\n return moved;\n});\n\nvar getFrame = (function (droppable) {\n var frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant(false) : void 0;\n return frame;\n});\n\nvar adjustAdditionsForScrollChanges = (function (_ref) {\n var additions = _ref.additions,\n updatedDroppables = _ref.updatedDroppables,\n viewport = _ref.viewport;\n var windowScrollChange = viewport.scroll.diff.value;\n return additions.map(function (draggable) {\n var droppableId = draggable.descriptor.droppableId;\n var modified = updatedDroppables[droppableId];\n var frame = getFrame(modified);\n var droppableScrollChange = frame.scroll.diff.value;\n var totalChange = add(windowScrollChange, droppableScrollChange);\n var moved = offsetDraggable({\n draggable: draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n});\n\nvar publishWhileDraggingInVirtual = (function (_ref) {\n var state = _ref.state,\n published = _ref.published;\n start();\n var withScrollChange = published.modified.map(function (update) {\n var existing = state.dimensions.droppables[update.droppableId];\n var scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n\n var droppables = _extends({}, state.dimensions.droppables, {}, toDroppableMap(withScrollChange));\n\n var updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n\n var draggables = _extends({}, state.dimensions.draggables, {}, updatedAdditions);\n\n published.removals.forEach(function (id) {\n delete draggables[id];\n });\n var dimensions = {\n droppables: droppables,\n draggables: draggables\n };\n var wasOverId = whatIsDraggedOver(state.impact);\n var wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n var draggable = dimensions.draggables[state.critical.draggable.id];\n var home = dimensions.droppables[state.critical.droppable.id];\n\n var _getLiftEffect = getLiftEffect({\n draggable: draggable,\n home: home,\n draggables: draggables,\n viewport: state.viewport\n }),\n onLiftImpact = _getLiftEffect.impact,\n afterCritical = _getLiftEffect.afterCritical;\n\n var previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n var impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: previousImpact,\n viewport: state.viewport,\n afterCritical: afterCritical\n });\n finish();\n\n var draggingState = _extends({\n phase: 'DRAGGING'\n }, state, {\n phase: 'DRAGGING',\n impact: impact,\n onLiftImpact: onLiftImpact,\n dimensions: dimensions,\n afterCritical: afterCritical,\n forceShouldAnimate: false\n });\n\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n\n var dropPending = _extends({\n phase: 'DROP_PENDING'\n }, draggingState, {\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n });\n\n return dropPending;\n});\n\nvar isSnapping = function isSnapping(state) {\n return state.movementMode === 'SNAP';\n};\n\nvar postDroppableChange = function postDroppableChange(state, updated, isEnabledChanging) {\n var dimensions = patchDimensionMap(state.dimensions, updated);\n\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state: state,\n dimensions: dimensions\n });\n }\n\n return refreshSnap({\n state: state,\n dimensions: dimensions\n });\n};\n\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return _extends({\n phase: 'DRAGGING'\n }, state, {\n scrollJumpRequest: null\n });\n }\n\n return state;\n}\n\nvar idle = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (function (state, action) {\n if (state === void 0) {\n state = idle;\n }\n\n if (action.type === 'FLUSH') {\n return _extends({}, idle, {\n shouldFlush: true\n });\n }\n\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant(false) : void 0;\n var _action$payload = action.payload,\n critical = _action$payload.critical,\n clientSelection = _action$payload.clientSelection,\n viewport = _action$payload.viewport,\n dimensions = _action$payload.dimensions,\n movementMode = _action$payload.movementMode;\n var draggable = dimensions.draggables[critical.draggable.id];\n var home = dimensions.droppables[critical.droppable.id];\n var client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n var initial = {\n client: client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n var isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(function (item) {\n return !item.isFixedOnPage;\n });\n\n var _getLiftEffect = getLiftEffect({\n draggable: draggable,\n home: home,\n draggables: dimensions.draggables,\n viewport: viewport\n }),\n impact = _getLiftEffect.impact,\n afterCritical = _getLiftEffect.afterCritical;\n\n var result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical: critical,\n movementMode: movementMode,\n dimensions: dimensions,\n initial: initial,\n current: initial,\n isWindowScrollAllowed: isWindowScrollAllowed,\n impact: impact,\n afterCritical: afterCritical,\n onLiftImpact: impact,\n viewport: viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Collection cannot start from phase \" + state.phase) : invariant(false) : void 0;\n\n var _result = _extends({\n phase: 'COLLECTING'\n }, state, {\n phase: 'COLLECTING'\n });\n\n return _result;\n }\n\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unexpected \" + action.type + \" received in phase \" + state.phase) : invariant(false) : void 0;\n return publishWhileDraggingInVirtual({\n state: state,\n published: action.payload\n });\n }\n\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" not permitted in phase \" + state.phase) : invariant(false) : void 0;\n var _clientSelection = action.payload.client;\n\n if (isEqual(_clientSelection, state.current.client.selection)) {\n return state;\n }\n\n return update({\n state: state,\n clientSelection: _clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" not permitted in phase \" + state.phase) : invariant(false) : void 0;\n var _action$payload2 = action.payload,\n id = _action$payload2.id,\n newScroll = _action$payload2.newScroll;\n var target = state.dimensions.droppables[id];\n\n if (!target) {\n return state;\n }\n\n var scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Attempting to move in an unsupported phase \" + state.phase) : invariant(false) : void 0;\n var _action$payload3 = action.payload,\n _id = _action$payload3.id,\n isEnabled = _action$payload3.isEnabled;\n var _target = state.dimensions.droppables[_id];\n !_target ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find Droppable[id: \" + _id + \"] to toggle its enabled state\") : invariant(false) : void 0;\n !(_target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Trying to set droppable isEnabled to \" + String(isEnabled) + \"\\n but it is already \" + String(_target.isEnabled)) : invariant(false) : void 0;\n\n var updated = _extends({}, _target, {\n isEnabled: isEnabled\n });\n\n return postDroppableChange(state, updated, true);\n }\n\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Attempting to move in an unsupported phase \" + state.phase) : invariant(false) : void 0;\n var _action$payload4 = action.payload,\n _id2 = _action$payload4.id,\n isCombineEnabled = _action$payload4.isCombineEnabled;\n var _target2 = state.dimensions.droppables[_id2];\n !_target2 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find Droppable[id: \" + _id2 + \"] to toggle its isCombineEnabled state\") : invariant(false) : void 0;\n !(_target2.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Trying to set droppable isCombineEnabled to \" + String(isCombineEnabled) + \"\\n but it is already \" + String(_target2.isCombineEnabled)) : invariant(false) : void 0;\n\n var _updated = _extends({}, _target2, {\n isCombineEnabled: isCombineEnabled\n });\n\n return postDroppableChange(state, _updated, true);\n }\n\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot move by window in phase \" + state.phase) : invariant(false) : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant(false) : void 0;\n var _newScroll = action.payload.newScroll;\n\n if (isEqual(state.viewport.scroll.current, _newScroll)) {\n return removeScrollJumpRequest(state);\n }\n\n var _viewport = scrollViewport(state.viewport, _newScroll);\n\n if (isSnapping(state)) {\n return refreshSnap({\n state: state,\n viewport: _viewport\n });\n }\n\n return update({\n state: state,\n viewport: _viewport\n });\n }\n\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n\n var maxScroll = action.payload.maxScroll;\n\n if (isEqual(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n\n var withMaxScroll = _extends({}, state.viewport, {\n scroll: _extends({}, state.viewport.scroll, {\n max: maxScroll\n })\n });\n\n return _extends({\n phase: 'DRAGGING'\n }, state, {\n viewport: withMaxScroll\n });\n }\n\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" received while not in DRAGGING phase\") : invariant(false) : void 0;\n\n var _result2 = moveInDirection({\n state: state,\n type: action.type\n });\n\n if (!_result2) {\n return state;\n }\n\n return update({\n state: state,\n impact: _result2.impact,\n clientSelection: _result2.clientSelection,\n scrollJumpRequest: _result2.scrollJumpRequest\n });\n }\n\n if (action.type === 'DROP_PENDING') {\n var reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant(false) : void 0;\n\n var newState = _extends({\n phase: 'DROP_PENDING'\n }, state, {\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason: reason\n });\n\n return newState;\n }\n\n if (action.type === 'DROP_ANIMATE') {\n var _action$payload5 = action.payload,\n completed = _action$payload5.completed,\n dropDuration = _action$payload5.dropDuration,\n newHomeClientOffset = _action$payload5.newHomeClientOffset;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot animate drop from phase \" + state.phase) : invariant(false) : void 0;\n var _result3 = {\n phase: 'DROP_ANIMATING',\n completed: completed,\n dropDuration: dropDuration,\n newHomeClientOffset: newHomeClientOffset,\n dimensions: state.dimensions\n };\n return _result3;\n }\n\n if (action.type === 'DROP_COMPLETE') {\n var _completed = action.payload.completed;\n return {\n phase: 'IDLE',\n completed: _completed,\n shouldFlush: false\n };\n }\n\n return state;\n});\n\nvar beforeInitialCapture = function beforeInitialCapture(args) {\n return {\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n };\n};\nvar lift = function lift(args) {\n return {\n type: 'LIFT',\n payload: args\n };\n};\nvar initialPublish = function initialPublish(args) {\n return {\n type: 'INITIAL_PUBLISH',\n payload: args\n };\n};\nvar publishWhileDragging = function publishWhileDragging(args) {\n return {\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n };\n};\nvar collectionStarting = function collectionStarting() {\n return {\n type: 'COLLECTION_STARTING',\n payload: null\n };\n};\nvar updateDroppableScroll = function updateDroppableScroll(args) {\n return {\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n };\n};\nvar updateDroppableIsEnabled = function updateDroppableIsEnabled(args) {\n return {\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n };\n};\nvar updateDroppableIsCombineEnabled = function updateDroppableIsCombineEnabled(args) {\n return {\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n };\n};\nvar move = function move(args) {\n return {\n type: 'MOVE',\n payload: args\n };\n};\nvar moveByWindowScroll = function moveByWindowScroll(args) {\n return {\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n };\n};\nvar updateViewportMaxScroll = function updateViewportMaxScroll(args) {\n return {\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n };\n};\nvar moveUp = function moveUp() {\n return {\n type: 'MOVE_UP',\n payload: null\n };\n};\nvar moveDown = function moveDown() {\n return {\n type: 'MOVE_DOWN',\n payload: null\n };\n};\nvar moveRight = function moveRight() {\n return {\n type: 'MOVE_RIGHT',\n payload: null\n };\n};\nvar moveLeft = function moveLeft() {\n return {\n type: 'MOVE_LEFT',\n payload: null\n };\n};\nvar flush = function flush() {\n return {\n type: 'FLUSH',\n payload: null\n };\n};\nvar animateDrop = function animateDrop(args) {\n return {\n type: 'DROP_ANIMATE',\n payload: args\n };\n};\nvar completeDrop = function completeDrop(args) {\n return {\n type: 'DROP_COMPLETE',\n payload: args\n };\n};\nvar drop = function drop(args) {\n return {\n type: 'DROP',\n payload: args\n };\n};\nvar dropPending = function dropPending(args) {\n return {\n type: 'DROP_PENDING',\n payload: args\n };\n};\nvar dropAnimationFinished = function dropAnimationFinished() {\n return {\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n };\n};\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n\n var indexes = insideDestination.map(function (d) {\n return d.descriptor.index;\n });\n var errors = {};\n\n for (var i = 1; i < indexes.length; i++) {\n var current = indexes[i];\n var previous = indexes[i - 1];\n\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n\n if (!Object.keys(errors).length) {\n return;\n }\n\n var formatted = indexes.map(function (index) {\n var hasError = Boolean(errors[index]);\n return hasError ? \"[\\uD83D\\uDD25\" + index + \"]\" : \"\" + index;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Detected non-consecutive indexes.\\n\\n (This can cause unexpected bugs)\\n\\n \" + formatted + \"\\n \") : void 0;\n}\n\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n var insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift$1 = (function (marshal) {\n return function (_ref) {\n var getState = _ref.getState,\n dispatch = _ref.dispatch;\n return function (next) {\n return function (action) {\n if (action.type !== 'LIFT') {\n next(action);\n return;\n }\n\n var _action$payload = action.payload,\n id = _action$payload.id,\n clientSelection = _action$payload.clientSelection,\n movementMode = _action$payload.movementMode;\n var initial = getState();\n\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant(false) : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode: movementMode\n }));\n var scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n var request = {\n draggableId: id,\n scrollOptions: scrollOptions\n };\n\n var _marshal$startPublish = marshal.startPublishing(request),\n critical = _marshal$startPublish.critical,\n dimensions = _marshal$startPublish.dimensions,\n viewport = _marshal$startPublish.viewport;\n\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical: critical,\n dimensions: dimensions,\n clientSelection: clientSelection,\n movementMode: movementMode,\n viewport: viewport\n }));\n };\n };\n };\n});\n\nvar style = (function (marshal) {\n return function () {\n return function (next) {\n return function (action) {\n if (action.type === 'INITIAL_PUBLISH') {\n marshal.dragging();\n }\n\n if (action.type === 'DROP_ANIMATE') {\n marshal.dropping(action.payload.completed.result.reason);\n }\n\n if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE') {\n marshal.resting();\n }\n\n next(action);\n };\n };\n };\n});\n\nvar curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nvar combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nvar timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nvar outOfTheWayTiming = timings.outOfTheWay + \"s \" + curves.outOfTheWay;\nvar transitions = {\n fluid: \"opacity \" + outOfTheWayTiming,\n snap: \"transform \" + outOfTheWayTiming + \", opacity \" + outOfTheWayTiming,\n drop: function drop(duration) {\n var timing = duration + \"s \" + curves.drop;\n return \"transform \" + timing + \", opacity \" + timing;\n },\n outOfTheWay: \"transform \" + outOfTheWayTiming,\n placeholder: \"height \" + outOfTheWayTiming + \", width \" + outOfTheWayTiming + \", margin \" + outOfTheWayTiming\n};\n\nvar moveTo = function moveTo(offset) {\n return isEqual(offset, origin) ? null : \"translate(\" + offset.x + \"px, \" + offset.y + \"px)\";\n};\n\nvar transforms = {\n moveTo: moveTo,\n drop: function drop(offset, isCombining) {\n var translate = moveTo(offset);\n\n if (!translate) {\n return null;\n }\n\n if (!isCombining) {\n return translate;\n }\n\n return translate + \" scale(\" + combine.scale.drop + \")\";\n }\n};\n\nvar minDropTime = timings.minDropTime,\n maxDropTime = timings.maxDropTime;\nvar dropTimeRange = maxDropTime - minDropTime;\nvar maxDropTimeAtDistance = 1500;\nvar cancelDropModifier = 0.6;\nvar getDropDuration = (function (_ref) {\n var current = _ref.current,\n destination = _ref.destination,\n reason = _ref.reason;\n var distance$1 = distance(current, destination);\n\n if (distance$1 <= 0) {\n return minDropTime;\n }\n\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n\n var percentage = distance$1 / maxDropTimeAtDistance;\n var duration = minDropTime + dropTimeRange * percentage;\n var withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n});\n\nvar getNewHomeClientOffset = (function (_ref) {\n var impact = _ref.impact,\n draggable = _ref.draggable,\n dimensions = _ref.dimensions,\n viewport = _ref.viewport,\n afterCritical = _ref.afterCritical;\n var draggables = dimensions.draggables,\n droppables = dimensions.droppables;\n var droppableId = whatIsDraggedOver(impact);\n var destination = droppableId ? droppables[droppableId] : null;\n var home = droppables[draggable.descriptor.droppableId];\n var newClientCenter = getClientBorderBoxCenter({\n impact: impact,\n draggable: draggable,\n draggables: draggables,\n afterCritical: afterCritical,\n droppable: destination || home,\n viewport: viewport\n });\n var offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n});\n\nvar getDropImpact = (function (_ref) {\n var draggables = _ref.draggables,\n reason = _ref.reason,\n lastImpact = _ref.lastImpact,\n home = _ref.home,\n viewport = _ref.viewport,\n onLiftImpact = _ref.onLiftImpact;\n\n if (!lastImpact.at || reason !== 'DROP') {\n var recomputedHomeImpact = recompute({\n draggables: draggables,\n impact: onLiftImpact,\n destination: home,\n viewport: viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n\n var withoutMovement = _extends({}, lastImpact, {\n displaced: emptyGroups\n });\n\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n});\n\nvar drop$1 = (function (_ref) {\n var getState = _ref.getState,\n dispatch = _ref.dispatch;\n return function (next) {\n return function (action) {\n if (action.type !== 'DROP') {\n next(action);\n return;\n }\n\n var state = getState();\n var reason = action.payload.reason;\n\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason: reason\n }));\n return;\n }\n\n if (state.phase === 'IDLE') {\n return;\n }\n\n var isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant(false) : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot drop in phase: \" + state.phase) : invariant(false) : void 0;\n var critical = state.critical;\n var dimensions = state.dimensions;\n var draggable = dimensions.draggables[state.critical.draggable.id];\n\n var _getDropImpact = getDropImpact({\n reason: reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n }),\n impact = _getDropImpact.impact,\n didDropInsideDroppable = _getDropImpact.didDropInsideDroppable;\n\n var destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n var combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n var source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n var result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source: source,\n reason: reason,\n mode: state.movementMode,\n destination: destination,\n combine: combine\n };\n var newHomeClientOffset = getNewHomeClientOffset({\n impact: impact,\n draggable: draggable,\n dimensions: dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n var completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result: result,\n impact: impact\n };\n var isAnimationRequired = !isEqual(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed: completed\n }));\n return;\n }\n\n var dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason: reason\n });\n var args = {\n newHomeClientOffset: newHomeClientOffset,\n dropDuration: dropDuration,\n completed: completed\n };\n dispatch(animateDrop(args));\n };\n };\n});\n\nvar getWindowScroll = (function () {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: function fn(event) {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n\n update();\n }\n };\n}\n\nfunction getScrollListener(_ref) {\n var onWindowScroll = _ref.onWindowScroll;\n\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n\n var scheduled = rafSchd(updateScroll);\n var binding = getWindowScrollBinding(scheduled);\n var unbind = noop;\n\n function isActive() {\n return unbind !== noop;\n }\n\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant(false) : void 0;\n unbind = bindEvents(window, [binding]);\n }\n\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant(false) : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop;\n }\n\n return {\n start: start,\n stop: stop,\n isActive: isActive\n };\n}\n\nvar shouldEnd = function shouldEnd(action) {\n return action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH';\n};\n\nvar scrollListener = (function (store) {\n var listener = getScrollListener({\n onWindowScroll: function onWindowScroll(newScroll) {\n store.dispatch(moveByWindowScroll({\n newScroll: newScroll\n }));\n }\n });\n return function (next) {\n return function (action) {\n if (!listener.isActive() && action.type === 'INITIAL_PUBLISH') {\n listener.start();\n }\n\n if (listener.isActive() && shouldEnd(action)) {\n listener.stop();\n }\n\n next(action);\n };\n };\n});\n\nvar getExpiringAnnounce = (function (announce) {\n var wasCalled = false;\n var isExpired = false;\n var timeoutId = setTimeout(function () {\n isExpired = true;\n });\n\n var result = function result(message) {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Announcements cannot be made asynchronously.\\n Default message has already been announced.\\n \") : void 0;\n return;\n }\n\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n\n result.wasCalled = function () {\n return wasCalled;\n };\n\n return result;\n});\n\nvar getAsyncMarshal = (function () {\n var entries = [];\n\n var execute = function execute(timerId) {\n var index = findIndex(entries, function (item) {\n return item.timerId === timerId;\n });\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant(false) : void 0;\n\n var _entries$splice = entries.splice(index, 1),\n entry = _entries$splice[0];\n\n entry.callback();\n };\n\n var add = function add(fn) {\n var timerId = setTimeout(function () {\n return execute(timerId);\n });\n var entry = {\n timerId: timerId,\n callback: fn\n };\n entries.push(entry);\n };\n\n var flush = function flush() {\n if (!entries.length) {\n return;\n }\n\n var shallow = [].concat(entries);\n entries.length = 0;\n shallow.forEach(function (entry) {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n\n return {\n add: add,\n flush: flush\n };\n});\n\nvar areLocationsEqual = function areLocationsEqual(first, second) {\n if (first == null && second == null) {\n return true;\n }\n\n if (first == null || second == null) {\n return false;\n }\n\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nvar isCombineEqual = function isCombineEqual(first, second) {\n if (first == null && second == null) {\n return true;\n }\n\n if (first == null || second == null) {\n return false;\n }\n\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nvar isCriticalEqual = function isCriticalEqual(first, second) {\n if (first === second) {\n return true;\n }\n\n var isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n var isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nvar withTimings = function withTimings(key, fn) {\n start();\n fn();\n finish();\n};\n\nvar getDragStart = function getDragStart(critical, mode) {\n return {\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode: mode\n };\n};\n\nvar execute = function execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n\n var willExpire = getExpiringAnnounce(announce);\n var provided = {\n announce: willExpire\n };\n responder(data, provided);\n\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n};\n\nvar getPublisher = (function (getResponders, announce) {\n var asyncMarshal = getAsyncMarshal();\n var dragging = null;\n\n var beforeCapture = function beforeCapture(draggableId, mode) {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant(false) : void 0;\n withTimings('onBeforeCapture', function () {\n var fn = getResponders().onBeforeCapture;\n\n if (fn) {\n var before = {\n draggableId: draggableId,\n mode: mode\n };\n fn(before);\n }\n });\n };\n\n var beforeStart = function beforeStart(critical, mode) {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant(false) : void 0;\n withTimings('onBeforeDragStart', function () {\n var fn = getResponders().onBeforeDragStart;\n\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n\n var start = function start(critical, mode) {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant(false) : void 0;\n var data = getDragStart(critical, mode);\n dragging = {\n mode: mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(function () {\n withTimings('onDragStart', function () {\n return execute(getResponders().onDragStart, data, announce, preset.onDragStart);\n });\n });\n };\n\n var update = function update(critical, impact) {\n var location = tryGetDestination(impact);\n var combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant(false) : void 0;\n var hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n\n var hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n\n var hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n\n var data = _extends({}, getDragStart(critical, dragging.mode), {\n combine: combine,\n destination: location\n });\n\n asyncMarshal.add(function () {\n withTimings('onDragUpdate', function () {\n return execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate);\n });\n });\n };\n\n var flush = function flush() {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant(false) : void 0;\n asyncMarshal.flush();\n };\n\n var drop = function drop(result) {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant(false) : void 0;\n dragging = null;\n withTimings('onDragEnd', function () {\n return execute(getResponders().onDragEnd, result, announce, preset.onDragEnd);\n });\n };\n\n var abort = function abort() {\n if (!dragging) {\n return;\n }\n\n var result = _extends({}, getDragStart(dragging.lastCritical, dragging.mode), {\n combine: null,\n destination: null,\n reason: 'CANCEL'\n });\n\n drop(result);\n };\n\n return {\n beforeCapture: beforeCapture,\n beforeStart: beforeStart,\n start: start,\n update: update,\n flush: flush,\n drop: drop,\n abort: abort\n };\n});\n\nvar responders = (function (getResponders, announce) {\n var publisher = getPublisher(getResponders, announce);\n return function (store) {\n return function (next) {\n return function (action) {\n if (action.type === 'BEFORE_INITIAL_CAPTURE') {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n\n if (action.type === 'INITIAL_PUBLISH') {\n var critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n\n if (action.type === 'DROP_COMPLETE') {\n var result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n\n next(action);\n\n if (action.type === 'FLUSH') {\n publisher.abort();\n return;\n }\n\n var state = store.getState();\n\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n };\n };\n});\n\nvar dropAnimationFinish = (function (store) {\n return function (next) {\n return function (action) {\n if (action.type !== 'DROP_ANIMATION_FINISHED') {\n next(action);\n return;\n }\n\n var state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant(false) : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n };\n };\n});\n\nvar dropAnimationFlushOnScroll = (function (store) {\n var unbind = null;\n var frameId = null;\n\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n\n return function (next) {\n return function (action) {\n if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATION_FINISHED') {\n clear();\n }\n\n next(action);\n\n if (action.type !== 'DROP_ANIMATE') {\n return;\n }\n\n var binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n var state = store.getState();\n\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(function () {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n };\n});\n\nvar dimensionMarshalStopper = (function (marshal) {\n return function () {\n return function (next) {\n return function (action) {\n if (action.type === 'DROP_COMPLETE' || action.type === 'FLUSH' || action.type === 'DROP_ANIMATE') {\n marshal.stopPublishing();\n }\n\n next(action);\n };\n };\n };\n});\n\nvar focus = (function (marshal) {\n var isWatching = false;\n return function () {\n return function (next) {\n return function (action) {\n if (action.type === 'INITIAL_PUBLISH') {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n\n next(action);\n\n if (!isWatching) {\n return;\n }\n\n if (action.type === 'FLUSH') {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n\n if (action.type === 'DROP_COMPLETE') {\n isWatching = false;\n var result = action.payload.completed.result;\n\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n\n marshal.tryRestoreFocusRecorded();\n }\n };\n };\n };\n});\n\nvar shouldStop = function shouldStop(action) {\n return action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH';\n};\n\nvar autoScroll = (function (autoScroller) {\n return function (store) {\n return function (next) {\n return function (action) {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n\n if (action.type === 'INITIAL_PUBLISH') {\n next(action);\n var state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant(false) : void 0;\n autoScroller.start(state);\n return;\n }\n\n next(action);\n autoScroller.scroll(store.getState());\n };\n };\n };\n});\n\nvar pendingDrop = (function (store) {\n return function (next) {\n return function (action) {\n next(action);\n\n if (action.type !== 'PUBLISH_WHILE_DRAGGING') {\n return;\n }\n\n var postActionState = store.getState();\n\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n\n if (postActionState.isWaiting) {\n return;\n }\n\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n };\n };\n});\n\nvar composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: 'react-beautiful-dnd'\n}) : compose;\nvar createStore = (function (_ref) {\n var dimensionMarshal = _ref.dimensionMarshal,\n focusMarshal = _ref.focusMarshal,\n styleMarshal = _ref.styleMarshal,\n getResponders = _ref.getResponders,\n announce = _ref.announce,\n autoScroller = _ref.autoScroller;\n return createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift$1(dimensionMarshal), drop$1, dropAnimationFinish, dropAnimationFlushOnScroll, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n});\n\nvar clean$1 = function clean() {\n return {\n additions: {},\n removals: {},\n modified: {}\n };\n};\nfunction createPublisher(_ref) {\n var registry = _ref.registry,\n callbacks = _ref.callbacks;\n var staging = clean$1();\n var frameId = null;\n\n var collect = function collect() {\n if (frameId) {\n return;\n }\n\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(function () {\n frameId = null;\n start();\n var _staging = staging,\n additions = _staging.additions,\n removals = _staging.removals,\n modified = _staging.modified;\n var added = Object.keys(additions).map(function (id) {\n return registry.draggable.getById(id).getDimension(origin);\n }).sort(function (a, b) {\n return a.descriptor.index - b.descriptor.index;\n });\n var updated = Object.keys(modified).map(function (id) {\n var entry = registry.droppable.getById(id);\n var scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll: scroll\n };\n });\n var result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n\n var add = function add(entry) {\n var id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n\n collect();\n };\n\n var remove = function remove(entry) {\n var descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n\n collect();\n };\n\n var stop = function stop() {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n\n return {\n add: add,\n remove: remove,\n stop: stop\n };\n}\n\nvar getMaxScroll = (function (_ref) {\n var scrollHeight = _ref.scrollHeight,\n scrollWidth = _ref.scrollWidth,\n height = _ref.height,\n width = _ref.width;\n var maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n var adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n});\n\nvar getDocumentElement = (function () {\n var doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant(false) : void 0;\n return doc;\n});\n\nvar getMaxWindowScroll = (function () {\n var doc = getDocumentElement();\n var maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n});\n\nvar getViewport = (function () {\n var scroll = getWindowScroll();\n var maxScroll = getMaxWindowScroll();\n var top = scroll.y;\n var left = scroll.x;\n var doc = getDocumentElement();\n var width = doc.clientWidth;\n var height = doc.clientHeight;\n var right = left + width;\n var bottom = top + height;\n var frame = getRect({\n top: top,\n left: left,\n right: right,\n bottom: bottom\n });\n var viewport = {\n frame: frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n});\n\nvar getInitialPublish = (function (_ref) {\n var critical = _ref.critical,\n scrollOptions = _ref.scrollOptions,\n registry = _ref.registry;\n start();\n var viewport = getViewport();\n var windowScroll = viewport.scroll.current;\n var home = critical.droppable;\n var droppables = registry.droppable.getAllByType(home.type).map(function (entry) {\n return entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions);\n });\n var draggables = registry.draggable.getAllByType(critical.draggable.type).map(function (entry) {\n return entry.getDimension(windowScroll);\n });\n var dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n var result = {\n dimensions: dimensions,\n critical: critical,\n viewport: viewport\n };\n return result;\n});\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n\n var home = registry.droppable.getById(entry.descriptor.droppableId);\n\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n You are attempting to add or remove a Draggable [id: \" + entry.descriptor.id + \"]\\n while a drag is occurring. This is only supported for virtual lists.\\n\\n See https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/patterns/virtual-lists.md\\n \") : void 0;\n return false;\n }\n\n return true;\n}\n\nvar createDimensionMarshal = (function (registry, callbacks) {\n var collection = null;\n var publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry: registry\n });\n\n var updateDroppableIsEnabled = function updateDroppableIsEnabled(id, isEnabled) {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update is enabled flag of Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n\n if (!collection) {\n return;\n }\n\n callbacks.updateDroppableIsEnabled({\n id: id,\n isEnabled: isEnabled\n });\n };\n\n var updateDroppableIsCombineEnabled = function updateDroppableIsCombineEnabled(id, isCombineEnabled) {\n if (!collection) {\n return;\n }\n\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update isCombineEnabled flag of Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id: id,\n isCombineEnabled: isCombineEnabled\n });\n };\n\n var updateDroppableScroll = function updateDroppableScroll(id, newScroll) {\n if (!collection) {\n return;\n }\n\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update the scroll on Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n callbacks.updateDroppableScroll({\n id: id,\n newScroll: newScroll\n });\n };\n\n var scrollDroppable = function scrollDroppable(id, change) {\n if (!collection) {\n return;\n }\n\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n\n var stopPublishing = function stopPublishing() {\n if (!collection) {\n return;\n }\n\n publisher.stop();\n var home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(function (entry) {\n return entry.callbacks.dragStopped();\n });\n collection.unsubscribe();\n collection = null;\n };\n\n var subscriber = function subscriber(event) {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant(false) : void 0;\n var dragging = collection.critical.draggable;\n\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n\n var startPublishing = function startPublishing(request) {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant(false) : void 0;\n var entry = registry.draggable.getById(request.draggableId);\n var home = registry.droppable.getById(entry.descriptor.droppableId);\n var critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n var unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical: critical,\n unsubscribe: unsubscribe\n };\n return getInitialPublish({\n critical: critical,\n registry: registry,\n scrollOptions: request.scrollOptions\n });\n };\n\n var marshal = {\n updateDroppableIsEnabled: updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled: updateDroppableIsCombineEnabled,\n scrollDroppable: scrollDroppable,\n updateDroppableScroll: updateDroppableScroll,\n startPublishing: startPublishing,\n stopPublishing: stopPublishing\n };\n return marshal;\n});\n\nvar canStartDrag = (function (state, id) {\n if (state.phase === 'IDLE') {\n return true;\n }\n\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n\n if (state.completed.result.draggableId === id) {\n return false;\n }\n\n return state.completed.result.reason === 'DROP';\n});\n\nvar scrollWindow = (function (change) {\n window.scrollBy(change.x, change.y);\n});\n\nvar getScrollableDroppables = memoizeOne(function (droppables) {\n return toDroppableList(droppables).filter(function (droppable) {\n if (!droppable.isEnabled) {\n return false;\n }\n\n if (!droppable.frame) {\n return false;\n }\n\n return true;\n });\n});\n\nvar getScrollableDroppableOver = function getScrollableDroppableOver(target, droppables) {\n var maybe = find(getScrollableDroppables(droppables), function (droppable) {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant(false) : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n });\n return maybe;\n};\n\nvar getBestScrollableDroppable = (function (_ref) {\n var center = _ref.center,\n destination = _ref.destination,\n droppables = _ref.droppables;\n\n if (destination) {\n var _dimension = droppables[destination];\n\n if (!_dimension.frame) {\n return null;\n }\n\n return _dimension;\n }\n\n var dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n});\n\nvar config = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: function ease(percentage) {\n return Math.pow(percentage, 2);\n },\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n }\n};\n\nvar getDistanceThresholds = (function (container, axis) {\n var startScrollingFrom = container[axis.size] * config.startFromPercentage;\n var maxScrollValueAt = container[axis.size] * config.maxScrollAtPercentage;\n var thresholds = {\n startScrollingFrom: startScrollingFrom,\n maxScrollValueAt: maxScrollValueAt\n };\n return thresholds;\n});\n\nvar getPercentage = (function (_ref) {\n var startOfRange = _ref.startOfRange,\n endOfRange = _ref.endOfRange,\n current = _ref.current;\n var range = endOfRange - startOfRange;\n\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Detected distance range of 0 in the fluid auto scroller\\n This is unexpected and would cause a divide by 0 issue.\\n Not allowing an auto scroll\\n \") : void 0;\n return 0;\n }\n\n var currentInRange = current - startOfRange;\n var percentage = currentInRange / range;\n return percentage;\n});\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (function (distanceToEdge, thresholds) {\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return config.maxPixelScroll;\n }\n\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n\n var percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n var percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n var scroll = config.maxPixelScroll * config.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n});\n\nvar accelerateAt = config.durationDampening.accelerateAt;\nvar stopAt = config.durationDampening.stopDampeningAt;\nvar dampenValueByTime = (function (proposedScroll, dragStartTime) {\n var startOfRange = dragStartTime;\n var endOfRange = stopAt;\n var now = Date.now();\n var runTime = now - startOfRange;\n\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n\n if (runTime < accelerateAt) {\n return minScroll;\n }\n\n var betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange: endOfRange,\n current: runTime\n });\n var scroll = proposedScroll * config.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n});\n\nvar getValue = (function (_ref) {\n var distanceToEdge = _ref.distanceToEdge,\n thresholds = _ref.thresholds,\n dragStartTime = _ref.dragStartTime,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n var scroll = getValueFromDistance(distanceToEdge, thresholds);\n\n if (scroll === 0) {\n return 0;\n }\n\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n\n return Math.max(dampenValueByTime(scroll, dragStartTime), minScroll);\n});\n\nvar getScrollOnAxis = (function (_ref) {\n var container = _ref.container,\n distanceToEdges = _ref.distanceToEdges,\n dragStartTime = _ref.dragStartTime,\n axis = _ref.axis,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n var thresholds = getDistanceThresholds(container, axis);\n var isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds: thresholds,\n dragStartTime: dragStartTime,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n }\n\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds: thresholds,\n dragStartTime: dragStartTime,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n});\n\nvar adjustForSizeLimits = (function (_ref) {\n var container = _ref.container,\n subject = _ref.subject,\n proposedScroll = _ref.proposedScroll;\n var isTooBigVertically = subject.height > container.height;\n var isTooBigHorizontally = subject.width > container.width;\n\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n});\n\nvar clean$2 = apply(function (value) {\n return value === 0 ? 0 : value;\n});\nvar getScroll = (function (_ref) {\n var dragStartTime = _ref.dragStartTime,\n container = _ref.container,\n subject = _ref.subject,\n center = _ref.center,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n var distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n var y = getScrollOnAxis({\n container: container,\n distanceToEdges: distanceToEdges,\n dragStartTime: dragStartTime,\n axis: vertical,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n var x = getScrollOnAxis({\n container: container,\n distanceToEdges: distanceToEdges,\n dragStartTime: dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n var required = clean$2({\n x: x,\n y: y\n });\n\n if (isEqual(required, origin)) {\n return null;\n }\n\n var limited = adjustForSizeLimits({\n container: container,\n subject: subject,\n proposedScroll: required\n });\n\n if (!limited) {\n return null;\n }\n\n return isEqual(limited, origin) ? null : limited;\n});\n\nvar smallestSigned = apply(function (value) {\n if (value === 0) {\n return 0;\n }\n\n return value > 0 ? 1 : -1;\n});\nvar getOverlap = function () {\n var getRemainder = function getRemainder(target, max) {\n if (target < 0) {\n return target;\n }\n\n if (target > max) {\n return target - max;\n }\n\n return 0;\n };\n\n return function (_ref) {\n var current = _ref.current,\n max = _ref.max,\n change = _ref.change;\n var targetScroll = add(current, change);\n var overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n\n if (isEqual(overlap, origin)) {\n return null;\n }\n\n return overlap;\n };\n}();\nvar canPartiallyScroll = function canPartiallyScroll(_ref2) {\n var rawMax = _ref2.max,\n current = _ref2.current,\n change = _ref2.change;\n var max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n var smallestChange = smallestSigned(change);\n var overlap = getOverlap({\n max: max,\n current: current,\n change: smallestChange\n });\n\n if (!overlap) {\n return true;\n }\n\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n\n return false;\n};\nvar canScrollWindow = function canScrollWindow(viewport, change) {\n return canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change: change\n });\n};\nvar getWindowOverlap = function getWindowOverlap(viewport, change) {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n\n var max = viewport.scroll.max;\n var current = viewport.scroll.current;\n return getOverlap({\n current: current,\n max: max,\n change: change\n });\n};\nvar canScrollDroppable = function canScrollDroppable(droppable, change) {\n var frame = droppable.frame;\n\n if (!frame) {\n return false;\n }\n\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change: change\n });\n};\nvar getDroppableOverlap = function getDroppableOverlap(droppable, change) {\n var frame = droppable.frame;\n\n if (!frame) {\n return null;\n }\n\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change: change\n });\n};\n\nvar getWindowScrollChange = (function (_ref) {\n var viewport = _ref.viewport,\n subject = _ref.subject,\n center = _ref.center,\n dragStartTime = _ref.dragStartTime,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n var scroll = getScroll({\n dragStartTime: dragStartTime,\n container: viewport.frame,\n subject: subject,\n center: center,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n});\n\nvar getDroppableScrollChange = (function (_ref) {\n var droppable = _ref.droppable,\n subject = _ref.subject,\n center = _ref.center,\n dragStartTime = _ref.dragStartTime,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n var frame = droppable.frame;\n\n if (!frame) {\n return null;\n }\n\n var scroll = getScroll({\n dragStartTime: dragStartTime,\n container: frame.pageMarginBox,\n subject: subject,\n center: center,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n});\n\nvar scroll$1 = (function (_ref) {\n var state = _ref.state,\n dragStartTime = _ref.dragStartTime,\n shouldUseTimeDampening = _ref.shouldUseTimeDampening,\n scrollWindow = _ref.scrollWindow,\n scrollDroppable = _ref.scrollDroppable;\n var center = state.current.page.borderBoxCenter;\n var draggable = state.dimensions.draggables[state.critical.draggable.id];\n var subject = draggable.page.marginBox;\n\n if (state.isWindowScrollAllowed) {\n var viewport = state.viewport;\n\n var _change = getWindowScrollChange({\n dragStartTime: dragStartTime,\n viewport: viewport,\n subject: subject,\n center: center,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n\n if (_change) {\n scrollWindow(_change);\n return;\n }\n }\n\n var droppable = getBestScrollableDroppable({\n center: center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n\n if (!droppable) {\n return;\n }\n\n var change = getDroppableScrollChange({\n dragStartTime: dragStartTime,\n droppable: droppable,\n subject: subject,\n center: center,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n});\n\nvar createFluidScroller = (function (_ref) {\n var scrollWindow = _ref.scrollWindow,\n scrollDroppable = _ref.scrollDroppable;\n var scheduleWindowScroll = rafSchd(scrollWindow);\n var scheduleDroppableScroll = rafSchd(scrollDroppable);\n var dragging = null;\n\n var tryScroll = function tryScroll(state) {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant(false) : void 0;\n var _dragging = dragging,\n shouldUseTimeDampening = _dragging.shouldUseTimeDampening,\n dragStartTime = _dragging.dragStartTime;\n scroll$1({\n state: state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime: dragStartTime,\n shouldUseTimeDampening: shouldUseTimeDampening\n });\n };\n\n var start$1 = function start$1(state) {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant(false) : void 0;\n var dragStartTime = Date.now();\n var wasScrollNeeded = false;\n\n var fakeScrollCallback = function fakeScrollCallback() {\n wasScrollNeeded = true;\n };\n\n scroll$1({\n state: state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback\n });\n dragging = {\n dragStartTime: dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n\n var stop = function stop() {\n if (!dragging) {\n return;\n }\n\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n\n return {\n start: start$1,\n stop: stop,\n scroll: tryScroll\n };\n});\n\nvar createJumpScroller = (function (_ref) {\n var move = _ref.move,\n scrollDroppable = _ref.scrollDroppable,\n scrollWindow = _ref.scrollWindow;\n\n var moveByOffset = function moveByOffset(state, offset) {\n var client = add(state.current.client.selection, offset);\n move({\n client: client\n });\n };\n\n var scrollDroppableAsMuchAsItCan = function scrollDroppableAsMuchAsItCan(droppable, change) {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n\n var overlap = getDroppableOverlap(droppable, change);\n\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n\n var whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n var remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n\n var scrollWindowAsMuchAsItCan = function scrollWindowAsMuchAsItCan(isWindowScrollAllowed, viewport, change) {\n if (!isWindowScrollAllowed) {\n return change;\n }\n\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n\n var overlap = getWindowOverlap(viewport, change);\n\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n\n var whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n var remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n\n var jumpScroller = function jumpScroller(state) {\n var request = state.scrollJumpRequest;\n\n if (!request) {\n return;\n }\n\n var destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant(false) : void 0;\n var droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n\n if (!droppableRemainder) {\n return;\n }\n\n var viewport = state.viewport;\n var windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n\n if (!windowRemainder) {\n return;\n }\n\n moveByOffset(state, windowRemainder);\n };\n\n return jumpScroller;\n});\n\nvar createAutoScroller = (function (_ref) {\n var scrollDroppable = _ref.scrollDroppable,\n scrollWindow = _ref.scrollWindow,\n move = _ref.move;\n var fluidScroller = createFluidScroller({\n scrollWindow: scrollWindow,\n scrollDroppable: scrollDroppable\n });\n var jumpScroll = createJumpScroller({\n move: move,\n scrollWindow: scrollWindow,\n scrollDroppable: scrollDroppable\n });\n\n var scroll = function scroll(state) {\n if (state.phase !== 'DRAGGING') {\n return;\n }\n\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n\n if (!state.scrollJumpRequest) {\n return;\n }\n\n jumpScroll(state);\n };\n\n var scroller = {\n scroll: scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n});\n\nvar prefix$1 = 'data-rbd';\nvar dragHandle = function () {\n var base = prefix$1 + \"-drag-handle\";\n return {\n base: base,\n draggableId: base + \"-draggable-id\",\n contextId: base + \"-context-id\"\n };\n}();\nvar draggable = function () {\n var base = prefix$1 + \"-draggable\";\n return {\n base: base,\n contextId: base + \"-context-id\",\n id: base + \"-id\"\n };\n}();\nvar droppable = function () {\n var base = prefix$1 + \"-droppable\";\n return {\n base: base,\n contextId: base + \"-context-id\",\n id: base + \"-id\"\n };\n}();\nvar scrollContainer = {\n contextId: prefix$1 + \"-scroll-container-context-id\"\n};\n\nvar makeGetSelector = function makeGetSelector(context) {\n return function (attribute) {\n return \"[\" + attribute + \"=\\\"\" + context + \"\\\"]\";\n };\n};\n\nvar getStyles = function getStyles(rules, property) {\n return rules.map(function (rule) {\n var value = rule.styles[property];\n\n if (!value) {\n return '';\n }\n\n return rule.selector + \" { \" + value + \" }\";\n }).join(' ');\n};\n\nvar noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = (function (contextId) {\n var getSelector = makeGetSelector(contextId);\n\n var dragHandle$1 = function () {\n var grabCursor = \"\\n cursor: -webkit-grab;\\n cursor: grab;\\n \";\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: \"\\n -webkit-touch-callout: none;\\n -webkit-tap-highlight-color: rgba(0,0,0,0);\\n touch-action: manipulation;\\n \",\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n }();\n\n var draggable$1 = function () {\n var transition = \"\\n transition: \" + transitions.outOfTheWay + \";\\n \";\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n }();\n\n var droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: \"overflow-anchor: none;\"\n }\n };\n var body = {\n selector: 'body',\n styles: {\n dragging: \"\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n user-select: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n overflow-anchor: none;\\n \"\n }\n };\n var rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n});\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nvar getHead = function getHead() {\n var head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant(false) : void 0;\n return head;\n};\n\nvar createStyleEl = function createStyleEl(nonce) {\n var el = document.createElement('style');\n\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n\n el.type = 'text/css';\n return el;\n};\n\nfunction useStyleMarshal(contextId, nonce) {\n var styles = useMemo(function () {\n return getStyles$1(contextId);\n }, [contextId]);\n var alwaysRef = useRef(null);\n var dynamicRef = useRef(null);\n var setDynamicStyle = useCallback(memoizeOne(function (proposed) {\n var el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant(false) : void 0;\n el.textContent = proposed;\n }), []);\n var setAlwaysStyle = useCallback(function (proposed) {\n var el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant(false) : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(function () {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant(false) : void 0;\n var always = createStyleEl(nonce);\n var dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(prefix$1 + \"-always\", contextId);\n dynamic.setAttribute(prefix$1 + \"-dynamic\", contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return function () {\n var remove = function remove(ref) {\n var current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant(false) : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n var dragging = useCallback(function () {\n return setDynamicStyle(styles.dragging);\n }, [setDynamicStyle, styles.dragging]);\n var dropping = useCallback(function (reason) {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n var resting = useCallback(function () {\n if (!dynamicRef.current) {\n return;\n }\n\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n var marshal = useMemo(function () {\n return {\n dragging: dragging,\n dropping: dropping,\n resting: resting\n };\n }, [dragging, dropping, resting]);\n return marshal;\n}\n\nvar getWindowFromEl = (function (el) {\n return el && el.ownerDocument ? el.ownerDocument.defaultView : window;\n});\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n var selector = \"[\" + dragHandle.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n var possible = toArray(document.querySelectorAll(selector));\n\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find any drag handles in the context \\\"\" + contextId + \"\\\"\") : void 0;\n return null;\n }\n\n var handle = find(possible, function (el) {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find drag handle with id \\\"\" + draggableId + \"\\\" as no handle with a matching id was found\") : void 0;\n return null;\n }\n\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n var entriesRef = useRef({});\n var recordRef = useRef(null);\n var restoreFocusFrameRef = useRef(null);\n var isMountedRef = useRef(false);\n var register = useCallback(function register(id, focus) {\n var entry = {\n id: id,\n focus: focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n var entries = entriesRef.current;\n var current = entries[id];\n\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n var tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n var handle = findDragHandle(contextId, tryGiveFocusTo);\n\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n var tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n var tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n\n if (!isMountedRef.current) {\n return;\n }\n\n restoreFocusFrameRef.current = requestAnimationFrame(function () {\n restoreFocusFrameRef.current = null;\n var record = recordRef.current;\n\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n var tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n var focused = document.activeElement;\n\n if (!focused) {\n return;\n }\n\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(function () {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n var frameId = restoreFocusFrameRef.current;\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n var marshal = useMemo(function () {\n return {\n register: register,\n tryRecordFocus: tryRecordFocus,\n tryRestoreFocusRecorded: tryRestoreFocusRecorded,\n tryShiftRecord: tryShiftRecord\n };\n }, [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n var entries = {\n draggables: {},\n droppables: {}\n };\n var subscribers = [];\n\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n var index = subscribers.indexOf(cb);\n\n if (index === -1) {\n return;\n }\n\n subscribers.splice(index, 1);\n };\n }\n\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(function (cb) {\n return cb(event);\n });\n }\n }\n\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n\n function getDraggableById(id) {\n var entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find draggable entry with id [\" + id + \"]\") : invariant(false) : void 0;\n return entry;\n }\n\n var draggableAPI = {\n register: function register(entry) {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: function update(entry, last) {\n var current = entries.draggables[last.descriptor.id];\n\n if (!current) {\n return;\n }\n\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: function unregister(entry) {\n var draggableId = entry.descriptor.id;\n var current = findDraggableById(draggableId);\n\n if (!current) {\n return;\n }\n\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n\n delete entries.draggables[draggableId];\n notify({\n type: 'REMOVAL',\n value: entry\n });\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: function exists(id) {\n return Boolean(findDraggableById(id));\n },\n getAllByType: function getAllByType(type) {\n return values(entries.draggables).filter(function (entry) {\n return entry.descriptor.type === type;\n });\n }\n };\n\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n\n function getDroppableById(id) {\n var entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find droppable entry with id [\" + id + \"]\") : invariant(false) : void 0;\n return entry;\n }\n\n var droppableAPI = {\n register: function register(entry) {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: function unregister(entry) {\n var current = findDroppableById(entry.descriptor.id);\n\n if (!current) {\n return;\n }\n\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: function exists(id) {\n return Boolean(findDroppableById(id));\n },\n getAllByType: function getAllByType(type) {\n return values(entries.droppables).filter(function (entry) {\n return entry.descriptor.type === type;\n });\n }\n };\n\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe: subscribe,\n clean: clean\n };\n}\n\nfunction useRegistry() {\n var registry = useMemo(createRegistry, []);\n useEffect(function () {\n return function unmount() {\n requestAnimationFrame(registry.clean);\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = (function () {\n var body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant(false) : void 0;\n return body;\n});\n\nvar visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nvar getId = function getId(contextId) {\n return \"rbd-announcement-\" + contextId;\n};\nfunction useAnnouncer(contextId) {\n var id = useMemo(function () {\n return getId(contextId);\n }, [contextId]);\n var ref = useRef(null);\n useEffect(function setup() {\n var el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n\n _extends(el.style, visuallyHidden);\n\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n var body = getBodyElement();\n\n if (body.contains(el)) {\n body.removeChild(el);\n }\n\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n var announce = useCallback(function (message) {\n var el = ref.current;\n\n if (el) {\n el.textContent = message;\n return;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n A screen reader message was trying to be announced but it was unable to do so.\\n This can occur if you unmount your in your onDragEnd.\\n Consider calling provided.announce() before the unmount so that the instruction will\\n not be lost for users relying on a screen reader.\\n\\n Message not passed to screen reader:\\n\\n \\\"\" + message + \"\\\"\\n \") : void 0;\n }, []);\n return announce;\n}\n\nvar count = 0;\nvar defaults = {\n separator: '::'\n};\nfunction reset() {\n count = 0;\n}\nfunction useUniqueId(prefix, options) {\n if (options === void 0) {\n options = defaults;\n }\n\n return useMemo(function () {\n return \"\" + prefix + options.separator + count++;\n }, [options.separator, prefix]);\n}\n\nfunction getElementId(_ref) {\n var contextId = _ref.contextId,\n uniqueId = _ref.uniqueId;\n return \"rbd-hidden-text-\" + contextId + \"-\" + uniqueId;\n}\nfunction useHiddenTextElement(_ref2) {\n var contextId = _ref2.contextId,\n text = _ref2.text;\n var uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n var id = useMemo(function () {\n return getElementId({\n contextId: contextId,\n uniqueId: uniqueId\n });\n }, [uniqueId, contextId]);\n useEffect(function mount() {\n var el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n var body = getBodyElement();\n\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^16.8.5 || ^17.0.0\",\n\t\"react-dom\": \"^16.8.5 || ^17.0.0\"\n};\n\nvar semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\n\nvar getVersion = function getVersion(value) {\n var result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unable to parse React version \" + value) : invariant(false) : void 0;\n var major = Number(result[1]);\n var minor = Number(result[2]);\n var patch = Number(result[3]);\n return {\n major: major,\n minor: minor,\n patch: patch,\n raw: value\n };\n};\n\nvar isSatisfied = function isSatisfied(expected, actual) {\n if (actual.major > expected.major) {\n return true;\n }\n\n if (actual.major < expected.major) {\n return false;\n }\n\n if (actual.minor > expected.minor) {\n return true;\n }\n\n if (actual.minor < expected.minor) {\n return false;\n }\n\n return actual.patch >= expected.patch;\n};\n\nvar checkReactVersion = (function (peerDepValue, actualValue) {\n var peerDep = getVersion(peerDepValue);\n var actual = getVersion(actualValue);\n\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n React version: [\" + actual.raw + \"]\\n does not satisfy expected peer dependency version: [\" + peerDep.raw + \"]\\n\\n This can result in run time bugs, and even fatal crashes\\n \") : void 0;\n});\n\nvar suffix = \"\\n We expect a html5 doctype: \\n This is to ensure consistent browser layout and measurement\\n\\n More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/doctype.md\\n\";\nvar checkDoctype = (function (doc) {\n var doctype = doc.doctype;\n\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n No found.\\n\\n \" + suffix + \"\\n \") : void 0;\n return;\n }\n\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Unexpected found: (\" + doctype.name + \")\\n\\n \" + suffix + \"\\n \") : void 0;\n }\n\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Unexpected publicId found: (\" + doctype.publicId + \")\\n A html5 doctype does not have a publicId\\n\\n \" + suffix + \"\\n \") : void 0;\n }\n});\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(function () {\n useEffect(function () {\n try {\n fn();\n } catch (e) {\n error(\"\\n A setup problem was encountered.\\n\\n > \" + e.message + \"\\n \");\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(function () {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n var ref = useRef(current);\n useEffect(function () {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n var lock = null;\n\n function isClaimed() {\n return Boolean(lock);\n }\n\n function isActive(value) {\n return value === lock;\n }\n\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant(false) : void 0;\n var newLock = {\n abandon: abandon\n };\n lock = newLock;\n return newLock;\n }\n\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant(false) : void 0;\n lock = null;\n }\n\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n\n return {\n isClaimed: isClaimed,\n isActive: isActive,\n claim: claim,\n release: release,\n tryAbandon: tryAbandon\n };\n}\n\nvar tab = 9;\nvar enter = 13;\nvar escape = 27;\nvar space = 32;\nvar pageUp = 33;\nvar pageDown = 34;\nvar end = 35;\nvar home = 36;\nvar arrowLeft = 37;\nvar arrowUp = 38;\nvar arrowRight = 39;\nvar arrowDown = 40;\n\nvar _preventedKeys;\nvar preventedKeys = (_preventedKeys = {}, _preventedKeys[enter] = true, _preventedKeys[tab] = true, _preventedKeys);\nvar preventStandardKeyEvents = (function (event) {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n});\n\nvar supportedEventName = function () {\n var base = 'visibilitychange';\n\n if (typeof document === 'undefined') {\n return base;\n }\n\n var candidates = [base, \"ms\" + base, \"webkit\" + base, \"moz\" + base, \"o\" + base];\n var supported = find(candidates, function (eventName) {\n return \"on\" + eventName in document;\n });\n return supported || base;\n}();\n\nvar primaryButton = 0;\nvar sloppyClickThreshold = 5;\n\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\n\nvar idle$1 = {\n type: 'IDLE'\n};\n\nfunction getCaptureBindings(_ref) {\n var cancel = _ref.cancel,\n completed = _ref.completed,\n getPhase = _ref.getPhase,\n setPhase = _ref.setPhase;\n return [{\n eventName: 'mousemove',\n fn: function fn(event) {\n var button = event.button,\n clientX = event.clientX,\n clientY = event.clientY;\n\n if (button !== primaryButton) {\n return;\n }\n\n var point = {\n x: clientX,\n y: clientY\n };\n var phase = getPhase();\n\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant(false) : void 0;\n var pending = phase.point;\n\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n\n event.preventDefault();\n var actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions: actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: function fn(event) {\n var phase = getPhase();\n\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: function fn(event) {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: function fn(event) {\n var phase = getPhase();\n\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: function fn() {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: function fn(event) {\n var phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant(false) : void 0;\n\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\n\nfunction useMouseSensor(api) {\n var phaseRef = useRef(idle$1);\n var unbindEventsRef = useRef(noop);\n var startCaptureBinding = useMemo(function () {\n return {\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.button !== primaryButton) {\n return;\n }\n\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n\n var draggableId = api.findClosestDraggableId(event);\n\n if (!draggableId) {\n return;\n }\n\n var actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n\n if (!actions) {\n return;\n }\n\n event.preventDefault();\n var point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n };\n }, [api]);\n var preventForcePressBinding = useMemo(function () {\n return {\n eventName: 'webkitmouseforcewillbegin',\n fn: function fn(event) {\n if (event.defaultPrevented) {\n return;\n }\n\n var id = api.findClosestDraggableId(event);\n\n if (!id) {\n return;\n }\n\n var options = api.findOptionsForDraggable(id);\n\n if (!options) {\n return;\n }\n\n if (options.shouldRespectForcePress) {\n return;\n }\n\n if (!api.canGetLock(id)) {\n return;\n }\n\n event.preventDefault();\n }\n };\n }, [api]);\n var listenForCapture = useCallback(function listenForCapture() {\n var options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n var stop = useCallback(function () {\n var current = phaseRef.current;\n\n if (current.type === 'IDLE') {\n return;\n }\n\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n var cancel = useCallback(function () {\n var phase = phaseRef.current;\n stop();\n\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n var bindCapturingEvents = useCallback(function bindCapturingEvents() {\n var options = {\n capture: true,\n passive: false\n };\n var bindings = getCaptureBindings({\n cancel: cancel,\n completed: stop,\n getPhase: function getPhase() {\n return phaseRef.current;\n },\n setPhase: function setPhase(phase) {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n var startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant(false) : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point: point,\n actions: actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nvar _scrollJumpKeys;\n\nfunction noop$1() {}\n\nvar scrollJumpKeys = (_scrollJumpKeys = {}, _scrollJumpKeys[pageDown] = true, _scrollJumpKeys[pageUp] = true, _scrollJumpKeys[home] = true, _scrollJumpKeys[end] = true, _scrollJumpKeys);\n\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n\n function drop() {\n stop();\n actions.drop();\n }\n\n return [{\n eventName: 'keydown',\n fn: function fn(event) {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\n\nfunction useKeyboardSensor(api) {\n var unbindEventsRef = useRef(noop$1);\n var startCaptureBinding = useMemo(function () {\n return {\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.keyCode !== space) {\n return;\n }\n\n var draggableId = api.findClosestDraggableId(event);\n\n if (!draggableId) {\n return;\n }\n\n var preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n\n if (!preDrag) {\n return;\n }\n\n event.preventDefault();\n var isCapturing = true;\n var actions = preDrag.snapLift();\n unbindEventsRef.current();\n\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant(false) : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n };\n }, [api]);\n var listenForCapture = useCallback(function tryStartCapture() {\n var options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nvar idle$2 = {\n type: 'IDLE'\n};\nvar timeForLongPress = 120;\nvar forcePressThreshold = 0.15;\n\nfunction getWindowBindings(_ref) {\n var cancel = _ref.cancel,\n getPhase = _ref.getPhase;\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: function fn(event) {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: function fn(event) {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\n\nfunction getHandleBindings(_ref2) {\n var cancel = _ref2.cancel,\n completed = _ref2.completed,\n getPhase = _ref2.getPhase;\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: function fn(event) {\n var phase = getPhase();\n\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n\n phase.hasMoved = true;\n var _event$touches$ = event.touches[0],\n clientX = _event$touches$.clientX,\n clientY = _event$touches$.clientY;\n var point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: function fn(event) {\n var phase = getPhase();\n\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: function fn(event) {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: function fn(event) {\n var phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n var touch = event.touches[0];\n\n if (!touch) {\n return;\n }\n\n var isForcePress = touch.force >= forcePressThreshold;\n\n if (!isForcePress) {\n return;\n }\n\n var shouldRespect = phase.actions.shouldRespectForcePress();\n\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n\n return;\n }\n\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n\n cancel();\n return;\n }\n\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\n\nfunction useTouchSensor(api) {\n var phaseRef = useRef(idle$2);\n var unbindEventsRef = useRef(noop);\n var getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n var setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n var startCaptureBinding = useMemo(function () {\n return {\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n\n var draggableId = api.findClosestDraggableId(event);\n\n if (!draggableId) {\n return;\n }\n\n var actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n\n if (!actions) {\n return;\n }\n\n var touch = event.touches[0];\n var clientX = touch.clientX,\n clientY = touch.clientY;\n var point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n };\n }, [api]);\n var listenForCapture = useCallback(function listenForCapture() {\n var options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n var stop = useCallback(function () {\n var current = phaseRef.current;\n\n if (current.type === 'IDLE') {\n return;\n }\n\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n\n setPhase(idle$2);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n var cancel = useCallback(function () {\n var phase = phaseRef.current;\n stop();\n\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n var bindCapturingEvents = useCallback(function bindCapturingEvents() {\n var options = {\n capture: true,\n passive: false\n };\n var args = {\n cancel: cancel,\n completed: stop,\n getPhase: getPhase\n };\n var unbindTarget = bindEvents(window, getHandleBindings(args), options);\n var unbindWindow = bindEvents(window, getWindowBindings(args), options);\n\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n var startDragging = useCallback(function startDragging() {\n var phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot start dragging from phase \" + phase.type) : invariant(false) : void 0;\n var actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions: actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n var startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant(false) : void 0;\n var longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point: point,\n actions: actions,\n longPressTimerId: longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n var phase = getPhase();\n\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle$2);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n var unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: function fn() {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(function () {\n var previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(function () {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nvar interactiveTagNames = {\n input: true,\n button: true,\n textarea: true,\n select: true,\n option: true,\n optgroup: true,\n video: true,\n audio: true\n};\n\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n\n var hasAnInteractiveTag = Boolean(interactiveTagNames[current.tagName.toLowerCase()]);\n\n if (hasAnInteractiveTag) {\n return true;\n }\n\n var attribute = current.getAttribute('contenteditable');\n\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n\n if (current === parent) {\n return false;\n }\n\n return isAnInteractiveElement(parent, current.parentElement);\n}\n\nfunction isEventInInteractiveElement(draggable, event) {\n var target = event.target;\n\n if (!isHtmlElement(target)) {\n return false;\n }\n\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = (function (el) {\n return getRect(el.getBoundingClientRect()).center;\n});\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nvar supportedMatchesName = function () {\n var base = 'matches';\n\n if (typeof document === 'undefined') {\n return base;\n }\n\n var candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n var value = find(candidates, function (name) {\n return name in Element.prototype;\n });\n return value || base;\n}();\n\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n\n return closestPonyfill(el.parentElement, selector);\n}\n\nfunction closest$1(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return \"[\" + dragHandle.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n}\n\nfunction findClosestDragHandleFromEvent(contextId, event) {\n var target = event.target;\n\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n\n var selector = getSelector(contextId);\n var handle = closest$1(target, selector);\n\n if (!handle) {\n return null;\n }\n\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n\n return handle;\n}\n\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n var handle = findClosestDragHandleFromEvent(contextId, event);\n\n if (!handle) {\n return null;\n }\n\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n var selector = \"[\" + draggable.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n var possible = toArray(document.querySelectorAll(selector));\n var draggable$1 = find(possible, function (el) {\n return el.getAttribute(draggable.id) === draggableId;\n });\n\n if (!draggable$1) {\n return null;\n }\n\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\n\nfunction _isActive(_ref) {\n var expected = _ref.expected,\n phase = _ref.phase,\n isLockActive = _ref.isLockActive,\n shouldWarn = _ref.shouldWarn;\n\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Cannot perform action.\\n The sensor no longer has an action lock.\\n\\n Tips:\\n\\n - Throw away your action handlers when forceStop() is called\\n - Check actions.isActive() if you really need to\\n \") : void 0;\n }\n\n return false;\n }\n\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Cannot perform action.\\n The actions you used belong to an outdated phase\\n\\n Current phase: \" + expected + \"\\n You called an action from outdated phase: \" + phase + \"\\n\\n Tips:\\n\\n - Do not use preDragActions actions after calling preDragActions.lift()\\n \") : void 0;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction canStart(_ref2) {\n var lockAPI = _ref2.lockAPI,\n store = _ref2.store,\n registry = _ref2.registry,\n draggableId = _ref2.draggableId;\n\n if (lockAPI.isClaimed()) {\n return false;\n }\n\n var entry = registry.draggable.findById(draggableId);\n\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find draggable with id: \" + draggableId) : void 0;\n return false;\n }\n\n if (!entry.options.isEnabled) {\n return false;\n }\n\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n\n return true;\n}\n\nfunction tryStart(_ref3) {\n var lockAPI = _ref3.lockAPI,\n contextId = _ref3.contextId,\n store = _ref3.store,\n registry = _ref3.registry,\n draggableId = _ref3.draggableId,\n forceSensorStop = _ref3.forceSensorStop,\n sourceEvent = _ref3.sourceEvent;\n var shouldStart = canStart({\n lockAPI: lockAPI,\n store: store,\n registry: registry,\n draggableId: draggableId\n });\n\n if (!shouldStart) {\n return null;\n }\n\n var entry = registry.draggable.getById(draggableId);\n var el = findDraggable(contextId, entry.descriptor.id);\n\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find draggable element with id: \" + draggableId) : void 0;\n return null;\n }\n\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n\n var lock = lockAPI.claim(forceSensorStop || noop);\n var phase = 'PRE_DRAG';\n\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n\n function tryDispatch(expected, getAction) {\n if (_isActive({\n expected: expected,\n phase: phase,\n isLockActive: isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n\n var tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n\n function lift$1(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n\n if (phase !== 'PRE_DRAG') {\n completed();\n !(phase === 'PRE_DRAG') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot lift in phase \" + phase) : invariant(false) : void 0;\n }\n\n store.dispatch(lift(args.liftActionArgs));\n phase = 'DRAGGING';\n\n function finish(reason, options) {\n if (options === void 0) {\n options = {\n shouldBlockNextClick: false\n };\n }\n\n args.cleanup();\n\n if (options.shouldBlockNextClick) {\n var unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n\n completed();\n store.dispatch(drop({\n reason: reason\n }));\n }\n\n return _extends({\n isActive: function isActive() {\n return _isActive({\n expected: 'DRAGGING',\n phase: phase,\n isLockActive: isLockActive,\n shouldWarn: false\n });\n },\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: function drop(options) {\n return finish('DROP', options);\n },\n cancel: function cancel(options) {\n return finish('CANCEL', options);\n }\n }, args.actions);\n }\n\n function fluidLift(clientSelection) {\n var move$1 = rafSchd(function (client) {\n tryDispatchWhenDragging(function () {\n return move({\n client: client\n });\n });\n });\n var api = lift$1({\n liftActionArgs: {\n id: draggableId,\n clientSelection: clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: function cleanup() {\n return move$1.cancel();\n },\n actions: {\n move: move$1\n }\n });\n return _extends({}, api, {\n move: move$1\n });\n }\n\n function snapLift() {\n var actions = {\n moveUp: function moveUp$1() {\n return tryDispatchWhenDragging(moveUp);\n },\n moveRight: function moveRight$1() {\n return tryDispatchWhenDragging(moveRight);\n },\n moveDown: function moveDown$1() {\n return tryDispatchWhenDragging(moveDown);\n },\n moveLeft: function moveLeft$1() {\n return tryDispatchWhenDragging(moveLeft);\n }\n };\n return lift$1({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop,\n actions: actions\n });\n }\n\n function abortPreDrag() {\n var shouldRelease = _isActive({\n expected: 'PRE_DRAG',\n phase: phase,\n isLockActive: isLockActive,\n shouldWarn: true\n });\n\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n\n var preDrag = {\n isActive: function isActive() {\n return _isActive({\n expected: 'PRE_DRAG',\n phase: phase,\n isLockActive: isLockActive,\n shouldWarn: false\n });\n },\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift: fluidLift,\n snapLift: snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\n\nvar defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal(_ref4) {\n var contextId = _ref4.contextId,\n store = _ref4.store,\n registry = _ref4.registry,\n customSensors = _ref4.customSensors,\n enableDefaultSensors = _ref4.enableDefaultSensors;\n var useSensors = [].concat(enableDefaultSensors ? defaultSensors : [], customSensors || []);\n var lockAPI = useState(function () {\n return create();\n })[0];\n var tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (previous.isDragging && !current.isDragging) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n var previous = store.getState();\n var unsubscribe = store.subscribe(function () {\n var current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(function () {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n var canGetLock = useCallback(function (draggableId) {\n return canStart({\n lockAPI: lockAPI,\n registry: registry,\n store: store,\n draggableId: draggableId\n });\n }, [lockAPI, registry, store]);\n var tryGetLock = useCallback(function (draggableId, forceStop, options) {\n return tryStart({\n lockAPI: lockAPI,\n registry: registry,\n contextId: contextId,\n store: store,\n draggableId: draggableId,\n forceSensorStop: forceStop,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n });\n }, [contextId, lockAPI, registry, store]);\n var findClosestDraggableId = useCallback(function (event) {\n return tryGetClosestDraggableIdFromEvent(contextId, event);\n }, [contextId]);\n var findOptionsForDraggable = useCallback(function (id) {\n var entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n var tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n\n lockAPI.tryAbandon();\n\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n var isLockClaimed = useCallback(lockAPI.isClaimed, [lockAPI]);\n var api = useMemo(function () {\n return {\n canGetLock: canGetLock,\n tryGetLock: tryGetLock,\n findClosestDraggableId: findClosestDraggableId,\n findOptionsForDraggable: findOptionsForDraggable,\n tryReleaseLock: tryReleaseLock,\n isLockClaimed: isLockClaimed\n };\n }, [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n\n for (var i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nvar createResponders = function createResponders(props) {\n return {\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n };\n};\n\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant(false) : void 0;\n return lazyRef.current;\n}\n\nfunction App(props) {\n var contextId = props.contextId,\n setCallbacks = props.setCallbacks,\n sensors = props.sensors,\n nonce = props.nonce,\n dragHandleUsageInstructions = props.dragHandleUsageInstructions;\n var lazyStoreRef = useRef(null);\n useStartupValidation();\n var lastPropsRef = usePrevious(props);\n var getResponders = useCallback(function () {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n var announce = useAnnouncer(contextId);\n var dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId: contextId,\n text: dragHandleUsageInstructions\n });\n var styleMarshal = useStyleMarshal(contextId, nonce);\n var lazyDispatch = useCallback(function (action) {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n var marshalCallbacks = useMemo(function () {\n return bindActionCreators({\n publishWhileDragging: publishWhileDragging,\n updateDroppableScroll: updateDroppableScroll,\n updateDroppableIsEnabled: updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled: updateDroppableIsCombineEnabled,\n collectionStarting: collectionStarting\n }, lazyDispatch);\n }, [lazyDispatch]);\n var registry = useRegistry();\n var dimensionMarshal = useMemo(function () {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n var autoScroller = useMemo(function () {\n return createAutoScroller(_extends({\n scrollWindow: scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable\n }, bindActionCreators({\n move: move\n }, lazyDispatch)));\n }, [dimensionMarshal.scrollDroppable, lazyDispatch]);\n var focusMarshal = useFocusMarshal(contextId);\n var store = useMemo(function () {\n return createStore({\n announce: announce,\n autoScroller: autoScroller,\n dimensionMarshal: dimensionMarshal,\n focusMarshal: focusMarshal,\n getResponders: getResponders,\n styleMarshal: styleMarshal\n });\n }, [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n\n lazyStoreRef.current = store;\n var tryResetStore = useCallback(function () {\n var current = getStore(lazyStoreRef);\n var state = current.getState();\n\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n var isDragging = useCallback(function () {\n var state = getStore(lazyStoreRef).getState();\n return state.isDragging || state.phase === 'DROP_ANIMATING';\n }, []);\n var appCallbacks = useMemo(function () {\n return {\n isDragging: isDragging,\n tryAbort: tryResetStore\n };\n }, [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n var getCanLift = useCallback(function (id) {\n return canStartDrag(getStore(lazyStoreRef).getState(), id);\n }, []);\n var getIsMovementAllowed = useCallback(function () {\n return isMovementAllowed(getStore(lazyStoreRef).getState());\n }, []);\n var appContext = useMemo(function () {\n return {\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId: contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId: dragHandleUsageInstructionsId,\n registry: registry\n };\n }, [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId: contextId,\n store: store,\n registry: registry,\n customSensors: sensors,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(function () {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nvar count$1 = 0;\nfunction reset$1() {\n count$1 = 0;\n}\nfunction useInstanceCount() {\n return useMemo(function () {\n return \"\" + count$1++;\n }, []);\n}\n\nfunction resetServerContext() {\n reset$1();\n reset();\n}\nfunction DragDropContext(props) {\n var contextId = useInstanceCount();\n var dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, function (setCallbacks) {\n return React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd\n }, props.children);\n });\n}\n\nvar isEqual$1 = function isEqual(base) {\n return function (value) {\n return base === value;\n };\n};\n\nvar isScroll = isEqual$1('scroll');\nvar isAuto = isEqual$1('auto');\nvar isVisible$1 = isEqual$1('visible');\n\nvar isEither = function isEither(overflow, fn) {\n return fn(overflow.overflowX) || fn(overflow.overflowY);\n};\n\nvar isBoth = function isBoth(overflow, fn) {\n return fn(overflow.overflowX) && fn(overflow.overflowY);\n};\n\nvar isElementScrollable = function isElementScrollable(el) {\n var style = window.getComputedStyle(el);\n var overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\n\nvar isBodyScrollable = function isBodyScrollable() {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n\n var body = getBodyElement();\n var html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n\n if (!isElementScrollable(body)) {\n return false;\n }\n\n var htmlStyle = window.getComputedStyle(html);\n var htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n\n if (isBoth(htmlOverflow, isVisible$1)) {\n return false;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n We have detected that your element might be a scroll container.\\n We have found no reliable way of detecting whether the element is a scroll container.\\n Under most circumstances a scroll bar will be on the element (document.documentElement)\\n\\n Because we cannot determine if the is a scroll container, and generally it is not one,\\n we will be treating the as *not* a scroll container\\n\\n More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/how-we-detect-scroll-containers.md\\n \") : void 0;\n return false;\n};\n\nvar getClosestScrollable = function getClosestScrollable(el) {\n if (el == null) {\n return null;\n }\n\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n\n if (el === document.documentElement) {\n return null;\n }\n\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n\n return el;\n};\n\nvar checkForNestedScrollContainers = (function (scrollable) {\n if (!scrollable) {\n return;\n }\n\n var anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n\n if (!anotherScrollParent) {\n return;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Droppable: unsupported nested scroll container detected.\\n A Droppable can only have one scroll parent (which can be itself)\\n Nested scroll containers are currently not supported.\\n\\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\\n \") : void 0;\n});\n\nvar getScroll$1 = (function (el) {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n };\n});\n\nvar getIsFixed = function getIsFixed(el) {\n if (!el) {\n return false;\n }\n\n var style = window.getComputedStyle(el);\n\n if (style.position === 'fixed') {\n return true;\n }\n\n return getIsFixed(el.parentElement);\n};\n\nvar getEnv = (function (start) {\n var closestScrollable = getClosestScrollable(start);\n var isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable: closestScrollable,\n isFixedOnPage: isFixedOnPage\n };\n});\n\nvar getDroppableDimension = (function (_ref) {\n var descriptor = _ref.descriptor,\n isEnabled = _ref.isEnabled,\n isCombineEnabled = _ref.isCombineEnabled,\n isFixedOnPage = _ref.isFixedOnPage,\n direction = _ref.direction,\n client = _ref.client,\n page = _ref.page,\n closest = _ref.closest;\n\n var frame = function () {\n if (!closest) {\n return null;\n }\n\n var scrollSize = closest.scrollSize,\n frameClient = closest.client;\n var maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient: frameClient,\n scrollSize: scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n }();\n\n var axis = direction === 'vertical' ? vertical : horizontal;\n var subject = getSubject({\n page: page,\n withPlaceholder: null,\n axis: axis,\n frame: frame\n });\n var dimension = {\n descriptor: descriptor,\n isCombineEnabled: isCombineEnabled,\n isFixedOnPage: isFixedOnPage,\n axis: axis,\n isEnabled: isEnabled,\n client: client,\n page: page,\n frame: frame,\n subject: subject\n };\n return dimension;\n});\n\nvar getClient = function getClient(targetRef, closestScrollable) {\n var base = getBox(targetRef);\n\n if (!closestScrollable) {\n return base;\n }\n\n if (targetRef !== closestScrollable) {\n return base;\n }\n\n var top = base.paddingBox.top - closestScrollable.scrollTop;\n var left = base.paddingBox.left - closestScrollable.scrollLeft;\n var bottom = top + closestScrollable.scrollHeight;\n var right = left + closestScrollable.scrollWidth;\n var paddingBox = {\n top: top,\n right: right,\n bottom: bottom,\n left: left\n };\n var borderBox = expand(paddingBox, base.border);\n var client = createBox({\n borderBox: borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\n\nvar getDimension = (function (_ref) {\n var ref = _ref.ref,\n descriptor = _ref.descriptor,\n env = _ref.env,\n windowScroll = _ref.windowScroll,\n direction = _ref.direction,\n isDropDisabled = _ref.isDropDisabled,\n isCombineEnabled = _ref.isCombineEnabled,\n shouldClipSubject = _ref.shouldClipSubject;\n var closestScrollable = env.closestScrollable;\n var client = getClient(ref, closestScrollable);\n var page = withScroll(client, windowScroll);\n\n var closest = function () {\n if (!closestScrollable) {\n return null;\n }\n\n var frameClient = getBox(closestScrollable);\n var scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll$1(closestScrollable),\n scrollSize: scrollSize,\n shouldClipSubject: shouldClipSubject\n };\n }();\n\n var dimension = getDroppableDimension({\n descriptor: descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled: isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction: direction,\n client: client,\n page: page,\n closest: closest\n });\n return dimension;\n});\n\nvar immediate = {\n passive: false\n};\nvar delayed = {\n passive: true\n};\nvar getListenerOptions = (function (options) {\n return options.shouldPublishImmediately ? immediate : delayed;\n});\n\nfunction useRequiredContext(Context) {\n var result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant(false) : void 0;\n return result;\n}\n\nvar getClosestScrollableFromDrag = function getClosestScrollableFromDrag(dragging) {\n return dragging && dragging.env.closestScrollable || null;\n};\n\nfunction useDroppablePublisher(args) {\n var whileDraggingRef = useRef(null);\n var appContext = useRequiredContext(AppContext);\n var uniqueId = useUniqueId('droppable');\n var registry = appContext.registry,\n marshal = appContext.marshal;\n var previousRef = usePrevious(args);\n var descriptor = useMemo(function () {\n return {\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n };\n }, [args.droppableId, args.mode, args.type]);\n var publishedDescriptorRef = useRef(descriptor);\n var memoizedUpdateScroll = useMemo(function () {\n return memoizeOne(function (x, y) {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant(false) : void 0;\n var scroll = {\n x: x,\n y: y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n });\n }, [descriptor.id, marshal]);\n var getClosestScroll = useCallback(function () {\n var dragging = whileDraggingRef.current;\n\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n\n return getScroll$1(dragging.env.closestScrollable);\n }, []);\n var updateScroll = useCallback(function () {\n var scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n var scheduleScrollUpdate = useMemo(function () {\n return rafSchd(updateScroll);\n }, [updateScroll]);\n var onClosestScroll = useCallback(function () {\n var dragging = whileDraggingRef.current;\n var closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant(false) : void 0;\n var options = dragging.scrollOptions;\n\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n var getDimensionAndWatchScroll = useCallback(function (windowScroll, options) {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant(false) : void 0;\n var previous = previousRef.current;\n var ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant(false) : void 0;\n var env = getEnv(ref);\n var dragging = {\n ref: ref,\n descriptor: descriptor,\n env: env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n var dimension = getDimension({\n ref: ref,\n descriptor: descriptor,\n env: env,\n windowScroll: windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n var scrollable = env.closestScrollable;\n\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n var getScrollWhileDragging = useCallback(function () {\n var dragging = whileDraggingRef.current;\n var closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant(false) : void 0;\n return getScroll$1(closest);\n }, []);\n var dragStopped = useCallback(function () {\n var dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant(false) : void 0;\n var closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n\n if (!closest) {\n return;\n }\n\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n var scroll = useCallback(function (change) {\n var dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant(false) : void 0;\n var closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant(false) : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n var callbacks = useMemo(function () {\n return {\n getDimensionAndWatchScroll: getDimensionAndWatchScroll,\n getScrollWhileDragging: getScrollWhileDragging,\n dragStopped: dragStopped,\n scroll: scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n var entry = useMemo(function () {\n return {\n uniqueId: uniqueId,\n descriptor: descriptor,\n callbacks: callbacks\n };\n }, [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(function () {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return function () {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(function () {\n if (!whileDraggingRef.current) {\n return;\n }\n\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(function () {\n if (!whileDraggingRef.current) {\n return;\n }\n\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop$2() {}\n\nvar empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\n\nvar getSize = function getSize(_ref) {\n var isAnimatingOpenOnMount = _ref.isAnimatingOpenOnMount,\n placeholder = _ref.placeholder,\n animate = _ref.animate;\n\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n\n if (animate === 'close') {\n return empty;\n }\n\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\n\nvar getStyle = function getStyle(_ref2) {\n var isAnimatingOpenOnMount = _ref2.isAnimatingOpenOnMount,\n placeholder = _ref2.placeholder,\n animate = _ref2.animate;\n var size = getSize({\n isAnimatingOpenOnMount: isAnimatingOpenOnMount,\n placeholder: placeholder,\n animate: animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\n\nfunction Placeholder(props) {\n var animateOpenTimerRef = useRef(null);\n var tryClearAnimateOpenTimer = useCallback(function () {\n if (!animateOpenTimerRef.current) {\n return;\n }\n\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n var animate = props.animate,\n onTransitionEnd = props.onTransitionEnd,\n onClose = props.onClose,\n contextId = props.contextId;\n\n var _useState = useState(props.animate === 'open'),\n isAnimatingOpenOnMount = _useState[0],\n setIsAnimatingOpenOnMount = _useState[1];\n\n useEffect(function () {\n if (!isAnimatingOpenOnMount) {\n return noop$2;\n }\n\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop$2;\n }\n\n if (animateOpenTimerRef.current) {\n return noop$2;\n }\n\n animateOpenTimerRef.current = setTimeout(function () {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n var onSizeChangeEnd = useCallback(function (event) {\n if (event.propertyName !== 'height') {\n return;\n }\n\n onTransitionEnd();\n\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n var style = getStyle({\n isAnimatingOpenOnMount: isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style: style,\n 'data-rbd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n}\n\nvar Placeholder$1 = React.memo(Placeholder);\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"\\n provided.innerRef has not been provided with a HTMLElement.\\n\\n You can find a guide on using the innerRef callback functions at:\\n https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/using-inner-ref.md\\n \") : invariant(false) : void 0;\n}\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nfunction runChecks(args, checks) {\n checks.forEach(function (check) {\n return check(args);\n });\n}\n\nvar shared = [function required(_ref) {\n var props = _ref.props;\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant(false) : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"A Droppable requires a [string] droppableId. Provided: [\" + typeof props.droppableId + \"]\") : invariant(false) : void 0;\n}, function _boolean(_ref2) {\n var props = _ref2.props;\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant(false) : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant(false) : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant(false) : void 0;\n}, function ref(_ref3) {\n var getDroppableRef = _ref3.getDroppableRef;\n checkIsValidInnerRef(getDroppableRef());\n}];\nvar standard = [function placeholder(_ref4) {\n var props = _ref4.props,\n getPlaceholderRef = _ref4.getPlaceholderRef;\n\n if (!props.placeholder) {\n return;\n }\n\n var ref = getPlaceholderRef();\n\n if (ref) {\n return;\n }\n\n process.env.NODE_ENV !== \"production\" ? warning(\"\\n Droppable setup issue [droppableId: \\\"\" + props.droppableId + \"\\\"]:\\n DroppableProvided > placeholder could not be found.\\n\\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\\n More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/api/droppable.md\\n \") : void 0;\n}];\nvar virtual = [function hasClone(_ref5) {\n var props = _ref5.props;\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant(false) : void 0;\n}, function hasNoPlaceholder(_ref6) {\n var getPlaceholderRef = _ref6.getPlaceholderRef;\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant(false) : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(function () {\n runChecks(args, shared);\n\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nvar AnimateInOut = function (_React$PureComponent) {\n _inheritsLoose(AnimateInOut, _React$PureComponent);\n\n function AnimateInOut() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;\n _this.state = {\n isVisible: Boolean(_this.props.on),\n data: _this.props.on,\n animate: _this.props.shouldAnimate && _this.props.on ? 'open' : 'none'\n };\n\n _this.onClose = function () {\n if (_this.state.animate !== 'close') {\n return;\n }\n\n _this.setState({\n isVisible: false\n });\n };\n\n return _this;\n }\n\n AnimateInOut.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n };\n\n var _proto = AnimateInOut.prototype;\n\n _proto.render = function render() {\n if (!this.state.isVisible) {\n return null;\n }\n\n var provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n };\n\n return AnimateInOut;\n}(React.PureComponent);\n\nvar zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\n\nvar getDraggingTransition = function getDraggingTransition(shouldAnimateDragMovement, dropping) {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n\n return transitions.fluid;\n};\n\nvar getDraggingOpacity = function getDraggingOpacity(isCombining, isDropAnimating) {\n if (!isCombining) {\n return null;\n }\n\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\n\nvar getShouldDraggingAnimate = function getShouldDraggingAnimate(dragging) {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n\n return dragging.mode === 'SNAP';\n};\n\nfunction getDraggingStyle(dragging) {\n var dimension = dragging.dimension;\n var box = dimension.client;\n var offset = dragging.offset,\n combineWith = dragging.combineWith,\n dropping = dragging.dropping;\n var isCombining = Boolean(combineWith);\n var shouldAnimate = getShouldDraggingAnimate(dragging);\n var isDropAnimating = Boolean(dropping);\n var transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n var style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform: transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\n\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? null : 'none'\n };\n}\n\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll) {\n if (windowScroll === void 0) {\n windowScroll = origin;\n }\n\n var computedStyles = window.getComputedStyle(el);\n var borderBox = el.getBoundingClientRect();\n var client = calculateBox(borderBox, computedStyles);\n var page = withScroll(client, windowScroll);\n var placeholder = {\n client: client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n var displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n var dimension = {\n descriptor: descriptor,\n placeholder: placeholder,\n displaceBy: displaceBy,\n client: client,\n page: page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n var uniqueId = useUniqueId('draggable');\n var descriptor = args.descriptor,\n registry = args.registry,\n getDraggableRef = args.getDraggableRef,\n canDragInteractiveElements = args.canDragInteractiveElements,\n shouldRespectForcePress = args.shouldRespectForcePress,\n isEnabled = args.isEnabled;\n var options = useMemo(function () {\n return {\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress,\n isEnabled: isEnabled\n };\n }, [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n var getDimension = useCallback(function (windowScroll) {\n var el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant(false) : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n var entry = useMemo(function () {\n return {\n uniqueId: uniqueId,\n descriptor: descriptor,\n options: options,\n getDimension: getDimension\n };\n }, [descriptor, getDimension, options, uniqueId]);\n var publishedRef = useRef(entry);\n var isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(function () {\n registry.draggable.register(publishedRef.current);\n return function () {\n return registry.draggable.unregister(publishedRef.current);\n };\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(function () {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n\n var last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(function () {\n function prefix(id) {\n return \"Draggable[id: \" + id + \"]: \";\n }\n\n var id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Draggable requires a [string] draggableId.\\n Provided: [type: \" + typeof id + \"] (value: \" + id + \")\") : invariant(false) : void 0;\n !isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, prefix(id) + \" requires an integer index prop\") : invariant(false) : void 0;\n\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n\n checkIsValidInnerRef(getRef());\n\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, prefix(id) + \" Unable to find drag handle\") : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(function () {\n var initialRef = useRef(isClone);\n useDevSetupWarning(function () {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\n\nfunction Draggable(props) {\n var ref = useRef(null);\n var setRef = useCallback(function (el) {\n ref.current = el;\n }, []);\n var getRef = useCallback(function () {\n return ref.current;\n }, []);\n\n var _useRequiredContext = useRequiredContext(AppContext),\n contextId = _useRequiredContext.contextId,\n dragHandleUsageInstructionsId = _useRequiredContext.dragHandleUsageInstructionsId,\n registry = _useRequiredContext.registry;\n\n var _useRequiredContext2 = useRequiredContext(DroppableContext),\n type = _useRequiredContext2.type,\n droppableId = _useRequiredContext2.droppableId;\n\n var descriptor = useMemo(function () {\n return {\n id: props.draggableId,\n index: props.index,\n type: type,\n droppableId: droppableId\n };\n }, [props.draggableId, props.index, type, droppableId]);\n var children = props.children,\n draggableId = props.draggableId,\n isEnabled = props.isEnabled,\n shouldRespectForcePress = props.shouldRespectForcePress,\n canDragInteractiveElements = props.canDragInteractiveElements,\n isClone = props.isClone,\n mapped = props.mapped,\n dropAnimationFinishedAction = props.dropAnimationFinished;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n\n if (!isClone) {\n var forPublisher = useMemo(function () {\n return {\n descriptor: descriptor,\n registry: registry,\n getDraggableRef: getRef,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress,\n isEnabled: isEnabled\n };\n }, [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n\n var dragHandleProps = useMemo(function () {\n return isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rbd-drag-handle-draggable-id': draggableId,\n 'data-rbd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null;\n }, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n var onMoveEnd = useCallback(function (event) {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n\n if (!mapped.dropping) {\n return;\n }\n\n if (event.propertyName !== 'transform') {\n return;\n }\n\n dropAnimationFinishedAction();\n }, [dropAnimationFinishedAction, mapped]);\n var provided = useMemo(function () {\n var style = getStyle$1(mapped);\n var onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : null;\n var result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rbd-draggable-context-id': contextId,\n 'data-rbd-draggable-id': draggableId,\n style: style,\n onTransitionEnd: onTransitionEnd\n },\n dragHandleProps: dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n var rubric = useMemo(function () {\n return {\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n };\n }, [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return children(provided, mapped.snapshot, rubric);\n}\n\nvar isStrictEqual = (function (a, b) {\n return a === b;\n});\n\nvar whatIsDraggedOverFromResult = (function (result) {\n var combine = result.combine,\n destination = result.destination;\n\n if (destination) {\n return destination.droppableId;\n }\n\n if (combine) {\n return combine.droppableId;\n }\n\n return null;\n});\n\nvar getCombineWithFromResult = function getCombineWithFromResult(result) {\n return result.combine ? result.combine.draggableId : null;\n};\n\nvar getCombineWithFromImpact = function getCombineWithFromImpact(impact) {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\n\nfunction getDraggableSelector() {\n var memoizedOffset = memoizeOne(function (x, y) {\n return {\n x: x,\n y: y\n };\n });\n var getMemoizedSnapshot = memoizeOne(function (mode, isClone, draggingOver, combineWith, dropping) {\n return {\n isDragging: true,\n isClone: isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode: mode,\n draggingOver: draggingOver,\n combineWith: combineWith,\n combineTargetFor: null\n };\n });\n var getMemoizedProps = memoizeOne(function (offset, mode, dimension, isClone, draggingOver, combineWith, forceShouldAnimate) {\n return {\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver: draggingOver,\n combineWith: combineWith,\n mode: mode,\n offset: offset,\n dimension: dimension,\n forceShouldAnimate: forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n };\n });\n\n var selector = function selector(state, ownProps) {\n if (state.isDragging) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n\n var offset = state.current.client.offset;\n var dimension = state.dimensions.draggables[ownProps.draggableId];\n var draggingOver = whatIsDraggedOver(state.impact);\n var combineWith = getCombineWithFromImpact(state.impact);\n var forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n\n if (state.phase === 'DROP_ANIMATING') {\n var completed = state.completed;\n\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n\n var isClone = ownProps.isClone;\n var _dimension = state.dimensions.draggables[ownProps.draggableId];\n var result = completed.result;\n var mode = result.mode;\n\n var _draggingOver = whatIsDraggedOverFromResult(result);\n\n var _combineWith = getCombineWithFromResult(result);\n\n var duration = state.dropDuration;\n var dropping = {\n duration: duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: _combineWith ? combine.opacity.drop : null,\n scale: _combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension: _dimension,\n dropping: dropping,\n draggingOver: _draggingOver,\n combineWith: _combineWith,\n mode: mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, _draggingOver, _combineWith, dropping)\n }\n };\n }\n\n return null;\n };\n\n return selector;\n}\n\nfunction getSecondarySnapshot(combineTargetFor) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor: combineTargetFor,\n combineWith: null\n };\n}\n\nvar atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\n\nfunction getSecondarySelector() {\n var memoizedOffset = memoizeOne(function (x, y) {\n return {\n x: x,\n y: y\n };\n });\n var getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n var getMemoizedProps = memoizeOne(function (offset, combineTargetFor, shouldAnimateDisplacement) {\n if (combineTargetFor === void 0) {\n combineTargetFor = null;\n }\n\n return {\n mapped: {\n type: 'SECONDARY',\n offset: offset,\n combineTargetFor: combineTargetFor,\n shouldAnimateDisplacement: shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n };\n });\n\n var getFallback = function getFallback(combineTargetFor) {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n\n var getProps = function getProps(ownId, draggingId, impact, afterCritical) {\n var visualDisplacement = impact.displaced.visible[ownId];\n var isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n var combine = tryGetCombine(impact);\n var combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n\n var change = negate(afterCritical.displacedBy.point);\n\n var _offset = memoizedOffset(change.x, change.y);\n\n return getMemoizedProps(_offset, combineTargetFor, true);\n }\n\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n\n var displaceBy = impact.displacedBy.point;\n var offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n\n var selector = function selector(state, ownProps) {\n if (state.isDragging) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n\n if (state.phase === 'DROP_ANIMATING') {\n var completed = state.completed;\n\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n\n return null;\n };\n\n return selector;\n}\n\nvar makeMapStateToProps = function makeMapStateToProps() {\n var draggingSelector = getDraggableSelector();\n var secondarySelector = getSecondarySelector();\n\n var selector = function selector(state, ownProps) {\n return draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n };\n\n return selector;\n};\nvar mapDispatchToProps = {\n dropAnimationFinished: dropAnimationFinished\n};\nvar ConnectedDraggable = connect(makeMapStateToProps, mapDispatchToProps, null, {\n context: StoreContext,\n pure: true,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n var droppableContext = useRequiredContext(DroppableContext);\n var isUsingCloneFor = droppableContext.isUsingCloneFor;\n\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n var isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n var canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n var shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nfunction Droppable(props) {\n var appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant(false) : void 0;\n var contextId = appContext.contextId,\n isMovementAllowed = appContext.isMovementAllowed;\n var droppableRef = useRef(null);\n var placeholderRef = useRef(null);\n var children = props.children,\n droppableId = props.droppableId,\n type = props.type,\n mode = props.mode,\n direction = props.direction,\n ignoreContainerClipping = props.ignoreContainerClipping,\n isDropDisabled = props.isDropDisabled,\n isCombineEnabled = props.isCombineEnabled,\n snapshot = props.snapshot,\n useClone = props.useClone,\n updateViewportMaxScroll = props.updateViewportMaxScroll,\n getContainerForClone = props.getContainerForClone;\n var getDroppableRef = useCallback(function () {\n return droppableRef.current;\n }, []);\n var setDroppableRef = useCallback(function (value) {\n droppableRef.current = value;\n }, []);\n var getPlaceholderRef = useCallback(function () {\n return placeholderRef.current;\n }, []);\n var setPlaceholderRef = useCallback(function (value) {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props: props,\n getDroppableRef: getDroppableRef,\n getPlaceholderRef: getPlaceholderRef\n });\n var onPlaceholderTransitionEnd = useCallback(function () {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId: droppableId,\n type: type,\n mode: mode,\n direction: direction,\n isDropDisabled: isDropDisabled,\n isCombineEnabled: isCombineEnabled,\n ignoreContainerClipping: ignoreContainerClipping,\n getDroppableRef: getDroppableRef\n });\n var placeholder = React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, function (_ref) {\n var onClose = _ref.onClose,\n data = _ref.data,\n animate = _ref.animate;\n return React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n });\n });\n var provided = useMemo(function () {\n return {\n innerRef: setDroppableRef,\n placeholder: placeholder,\n droppableProps: {\n 'data-rbd-droppable-id': droppableId,\n 'data-rbd-droppable-context-id': contextId\n }\n };\n }, [contextId, droppableId, placeholder, setDroppableRef]);\n var isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n var droppableContext = useMemo(function () {\n return {\n droppableId: droppableId,\n type: type,\n isUsingCloneFor: isUsingCloneFor\n };\n }, [droppableId, isUsingCloneFor, type]);\n\n function getClone() {\n if (!useClone) {\n return null;\n }\n\n var dragging = useClone.dragging,\n render = useClone.render;\n var node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, function (draggableProvided, draggableSnapshot) {\n return render(draggableProvided, draggableSnapshot, dragging);\n });\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n}\n\nvar isMatchingType = function isMatchingType(type, critical) {\n return type === critical.droppable.type;\n};\n\nvar getDraggable = function getDraggable(critical, dimensions) {\n return dimensions.draggables[critical.draggable.id];\n};\n\nvar makeMapStateToProps$1 = function makeMapStateToProps() {\n var idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n\n var idleWithoutAnimation = _extends({}, idleWithAnimation, {\n shouldAnimatePlaceholder: false\n });\n\n var getDraggableRubric = memoizeOne(function (descriptor) {\n return {\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n };\n });\n var getMapProps = memoizeOne(function (id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) {\n var draggableId = dragging.descriptor.id;\n var isHome = dragging.descriptor.droppableId === id;\n\n if (isHome) {\n var useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n var _snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot: _snapshot,\n useClone: useClone\n };\n }\n\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n\n var snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot: snapshot,\n useClone: null\n };\n });\n\n var selector = function selector(state, ownProps) {\n var id = ownProps.droppableId;\n var type = ownProps.type;\n var isEnabled = !ownProps.isDropDisabled;\n var renderClone = ownProps.renderClone;\n\n if (state.isDragging) {\n var critical = state.critical;\n\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n\n var dragging = getDraggable(critical, state.dimensions);\n var isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n\n if (state.phase === 'DROP_ANIMATING') {\n var completed = state.completed;\n\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n\n var _dragging = getDraggable(completed.critical, state.dimensions);\n\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, _dragging, renderClone);\n }\n\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n var _completed = state.completed;\n\n if (!isMatchingType(type, _completed.critical)) {\n return idleWithoutAnimation;\n }\n\n var wasOver = whatIsDraggedOver(_completed.impact) === id;\n var wasCombining = Boolean(_completed.impact.at && _completed.impact.at.type === 'COMBINE');\n var isHome = _completed.critical.droppable.id === id;\n\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n\n if (isHome) {\n return idleWithAnimation;\n }\n\n return idleWithoutAnimation;\n }\n\n return idleWithoutAnimation;\n };\n\n return selector;\n};\nvar mapDispatchToProps$1 = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant(false) : void 0;\n return document.body;\n}\n\nvar defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nvar ConnectedDroppable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n pure: true,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\nConnectedDroppable.defaultProps = defaultProps;\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, resetServerContext, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","export var FOCUS_GROUP = 'data-focus-lock';\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nexport var hiddenGuard = {\n width: '1px',\n height: '0px',\n padding: 0,\n overflow: 'hidden',\n position: 'fixed',\n top: '1px',\n left: '1px'\n};\n\nvar InFocusGuard = function InFocusGuard(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-first\",\n \"data-focus-guard\": true,\n \"data-focus-auto-guard\": true,\n style: hiddenGuard\n }), children, children && /*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-last\",\n \"data-focus-guard\": true,\n \"data-focus-auto-guard\": true,\n style: hiddenGuard\n }));\n};\n\nInFocusGuard.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: PropTypes.node\n} : {};\nInFocusGuard.defaultProps = {\n children: null\n};\nexport default InFocusGuard;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = tslib_1.__assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { createMedium, createSidecarMedium } from 'use-sidecar';\nexport var mediumFocus = createMedium({}, function (_ref) {\n var target = _ref.target,\n currentTarget = _ref.currentTarget;\n return {\n target: target,\n currentTarget: currentTarget\n };\n});\nexport var mediumBlur = createMedium();\nexport var mediumEffect = createMedium();\nexport var mediumSidecar = createSidecarMedium({\n async: true\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { node, bool, string, any, arrayOf, oneOfType, object, func } from 'prop-types';\nimport * as constants from 'focus-lock/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { hiddenGuard } from './FocusGuard';\nimport { mediumFocus, mediumBlur, mediumSidecar } from './medium';\nvar emptyArray = [];\nvar FocusLock = /*#__PURE__*/React.forwardRef(function FocusLockUI(props, parentRef) {\n var _extends2;\n\n var _React$useState = React.useState(),\n realObserved = _React$useState[0],\n setObserved = _React$useState[1];\n\n var observed = React.useRef();\n var isActive = React.useRef(false);\n var originalFocusedElement = React.useRef(null);\n var children = props.children,\n disabled = props.disabled,\n noFocusGuards = props.noFocusGuards,\n persistentFocus = props.persistentFocus,\n crossFrame = props.crossFrame,\n autoFocus = props.autoFocus,\n allowTextSelection = props.allowTextSelection,\n group = props.group,\n className = props.className,\n whiteList = props.whiteList,\n _props$shards = props.shards,\n shards = _props$shards === void 0 ? emptyArray : _props$shards,\n _props$as = props.as,\n Container = _props$as === void 0 ? 'div' : _props$as,\n _props$lockProps = props.lockProps,\n containerProps = _props$lockProps === void 0 ? {} : _props$lockProps,\n SideCar = props.sideCar,\n shouldReturnFocus = props.returnFocus,\n onActivationCallback = props.onActivation,\n onDeactivationCallback = props.onDeactivation;\n\n var _React$useState2 = React.useState({}),\n id = _React$useState2[0]; // SIDE EFFECT CALLBACKS\n\n\n var onActivation = React.useCallback(function () {\n originalFocusedElement.current = originalFocusedElement.current || document && document.activeElement;\n\n if (observed.current && onActivationCallback) {\n onActivationCallback(observed.current);\n }\n\n isActive.current = true;\n }, [onActivationCallback]);\n var onDeactivation = React.useCallback(function () {\n isActive.current = false;\n\n if (onDeactivationCallback) {\n onDeactivationCallback(observed.current);\n }\n }, [onDeactivationCallback]);\n var returnFocus = React.useCallback(function (allowDefer) {\n var current = originalFocusedElement.current;\n\n if (Boolean(shouldReturnFocus) && current && current.focus) {\n var focusOptions = typeof shouldReturnFocus === 'object' ? shouldReturnFocus : undefined;\n originalFocusedElement.current = null;\n\n if (allowDefer) {\n // React might return focus after update\n // it's safer to defer the action\n Promise.resolve().then(function () {\n return current.focus(focusOptions);\n });\n } else {\n current.focus(focusOptions);\n }\n }\n }, [shouldReturnFocus]); // MEDIUM CALLBACKS\n\n var onFocus = React.useCallback(function (event) {\n if (isActive.current) {\n mediumFocus.useMedium(event);\n }\n }, []);\n var onBlur = mediumBlur.useMedium; // REF PROPAGATION\n // not using real refs due to race conditions\n\n var setObserveNode = React.useCallback(function (newObserved) {\n if (observed.current !== newObserved) {\n observed.current = newObserved;\n setObserved(newObserved);\n }\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof allowTextSelection !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('React-Focus-Lock: allowTextSelection is deprecated and enabled by default');\n }\n\n React.useEffect(function () {\n if (!observed.current) {\n // eslint-disable-next-line no-console\n console.error('FocusLock: could not obtain ref to internal node');\n }\n }, []);\n }\n\n var lockProps = _extends((_extends2 = {}, _extends2[constants.FOCUS_DISABLED] = disabled && 'disabled', _extends2[constants.FOCUS_GROUP] = group, _extends2), containerProps);\n\n var hasLeadingGuards = noFocusGuards !== true;\n var hasTailingGuards = hasLeadingGuards && noFocusGuards !== 'tail';\n var mergedRef = useMergeRefs([parentRef, setObserveNode]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, hasLeadingGuards && [/*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-first\",\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 0,\n style: hiddenGuard\n }),\n /*#__PURE__*/\n // nearest focus guard\n React.createElement(\"div\", {\n key: \"guard-nearest\",\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 1,\n style: hiddenGuard\n }) // first tabbed element guard\n ], !disabled && /*#__PURE__*/React.createElement(SideCar, {\n id: id,\n sideCar: mediumSidecar,\n observed: realObserved,\n disabled: disabled,\n persistentFocus: persistentFocus,\n crossFrame: crossFrame,\n autoFocus: autoFocus,\n whiteList: whiteList,\n shards: shards,\n onActivation: onActivation,\n onDeactivation: onDeactivation,\n returnFocus: returnFocus\n }), /*#__PURE__*/React.createElement(Container, _extends({\n ref: mergedRef\n }, lockProps, {\n className: className,\n onBlur: onBlur,\n onFocus: onFocus\n }), children), hasTailingGuards && /*#__PURE__*/React.createElement(\"div\", {\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 0,\n style: hiddenGuard\n }));\n});\nFocusLock.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: node,\n disabled: bool,\n returnFocus: oneOfType([bool, object]),\n noFocusGuards: bool,\n allowTextSelection: bool,\n autoFocus: bool,\n persistentFocus: bool,\n crossFrame: bool,\n group: string,\n className: string,\n whiteList: func,\n shards: arrayOf(any),\n as: oneOfType([string, func, object]),\n lockProps: object,\n onActivation: func,\n onDeactivation: func,\n sideCar: any.isRequired\n} : {};\nFocusLock.defaultProps = {\n children: undefined,\n disabled: false,\n returnFocus: false,\n noFocusGuards: false,\n autoFocus: true,\n persistentFocus: false,\n crossFrame: true,\n allowTextSelection: undefined,\n group: undefined,\n className: undefined,\n whiteList: undefined,\n shards: undefined,\n as: 'div',\n lockProps: {},\n onActivation: undefined,\n onDeactivation: undefined\n};\nexport default FocusLock;","import { useCallbackRef } from './useRef';\nimport { assignRef } from './assignRef';\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return
...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n return useCallbackRef(defaultValue, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n }\n }\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","export var toArray = function (a) {\n var ret = Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = a[i];\n }\n return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\nvar filterNested = function (nodes) {\n var contained = new Set();\n var l = nodes.length;\n for (var i = 0; i < l; i += 1) {\n for (var j = i + 1; j < l; j += 1) {\n var position = nodes[i].compareDocumentPosition(nodes[j]);\n if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n contained.add(j);\n }\n if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n contained.add(i);\n }\n }\n }\n return nodes.filter(function (_, index) { return !contained.has(index); });\n};\nvar getTopParent = function (node) {\n return node.parentNode ? getTopParent(node.parentNode) : node;\n};\nexport var getAllAffectedNodes = function (node) {\n var nodes = asArray(node);\n return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n var group = currentNode.getAttribute(FOCUS_GROUP);\n acc.push.apply(acc, (group\n ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\" + FOCUS_GROUP + \"=\\\"\" + group + \"\\\"]:not([\" + FOCUS_DISABLED + \"=\\\"disabled\\\"])\")))\n : [currentNode]));\n return acc;\n }, []);\n};\n","import { getAllAffectedNodes } from './utils/all-affected';\nimport { toArray } from './utils/array';\nvar focusInFrame = function (frame) { return frame === document.activeElement; };\nvar focusInsideIframe = function (topNode) {\n return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node); }));\n};\nexport var focusInside = function (topNode) {\n var activeElement = document && document.activeElement;\n if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n return false;\n }\n return getAllAffectedNodes(topNode).reduce(function (result, node) { return result || node.contains(activeElement) || focusInsideIframe(node); }, false);\n};\n","var isRadio = function (node) { return node.tagName === 'INPUT' && node.type === 'radio'; };\nvar findSelectedRadio = function (node, nodes) {\n return nodes\n .filter(isRadio)\n .filter(function (el) { return el.name === node.name; })\n .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n if (isRadio(node) && node.name) {\n return findSelectedRadio(node, nodes);\n }\n return node;\n};\nexport var correctNodes = function (nodes) {\n var resultSet = new Set();\n nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n if (nodes[0] && nodes.length > 1) {\n return correctNode(nodes[0], nodes);\n }\n return nodes[0];\n};\nexport var pickFocusable = function (nodes, index) {\n if (nodes.length > 1) {\n return nodes.indexOf(correctNode(nodes[index], nodes));\n }\n return index;\n};\n","var isElementHidden = function (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n var computedStyle = window.getComputedStyle(node, null);\n if (!computedStyle || !computedStyle.getPropertyValue) {\n return false;\n }\n return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nvar isVisibleUncached = function (node, checkParent) {\n return !node ||\n node === document ||\n (node && node.nodeType === Node.DOCUMENT_NODE) ||\n (!isElementHidden(node) &&\n checkParent(node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? node.parentNode.host\n : node.parentNode));\n};\nexport var isVisibleCached = function (visibilityCache, node) {\n var cached = visibilityCache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n var result = isVisibleUncached(node, isVisibleCached.bind(undefined, visibilityCache));\n visibilityCache.set(node, result);\n return result;\n};\nexport var notHiddenInput = function (node) {\n return !((node.tagName === 'INPUT' || node.tagName === 'BUTTON') && (node.type === 'hidden' || node.disabled));\n};\nexport var isGuard = function (node) { return Boolean(node && node.dataset && node.dataset.focusGuard); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\nexport var newFocus = function (innerNodes, outerNodes, activeElement, lastNode) {\n var cnt = innerNodes.length;\n var firstFocus = innerNodes[0];\n var lastFocus = innerNodes[cnt - 1];\n var isOnGuard = isGuard(activeElement);\n if (innerNodes.indexOf(activeElement) >= 0) {\n return undefined;\n }\n var activeIndex = outerNodes.indexOf(activeElement);\n var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n var indexDiff = activeIndex - lastIndex;\n var firstNodeIndex = outerNodes.indexOf(firstFocus);\n var lastNodeIndex = outerNodes.indexOf(lastFocus);\n var correctedNodes = correctNodes(outerNodes);\n var correctedIndexDiff = correctedNodes.indexOf(activeElement) - (lastNode ? correctedNodes.indexOf(lastNode) : activeIndex);\n var returnFirstNode = pickFocusable(innerNodes, 0);\n var returnLastNode = pickFocusable(innerNodes, cnt - 1);\n if (activeIndex === -1 || lastNodeInside === -1) {\n return NEW_FOCUS;\n }\n if (!indexDiff && lastNodeInside >= 0) {\n return lastNodeInside;\n }\n if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnLastNode;\n }\n if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnFirstNode;\n }\n if (indexDiff && Math.abs(correctedIndexDiff) > 1) {\n return lastNodeInside;\n }\n if (activeIndex <= firstNodeIndex) {\n return returnLastNode;\n }\n if (activeIndex > lastNodeIndex) {\n return returnFirstNode;\n }\n if (indexDiff) {\n if (Math.abs(indexDiff) > 1) {\n return lastNodeInside;\n }\n return (cnt + lastNodeInside + indexDiff) % cnt;\n }\n return undefined;\n};\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n var tabDiff = a.tabIndex - b.tabIndex;\n var indexDiff = a.index - b.index;\n if (tabDiff) {\n if (!a.tabIndex) {\n return 1;\n }\n if (!b.tabIndex) {\n return -1;\n }\n }\n return tabDiff || indexDiff;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n return toArray(nodes)\n .map(function (node, index) { return ({\n node: node,\n index: index,\n tabIndex: keepGuards && node.tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : node.tabIndex,\n }); })\n .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = queryTabbables + \", [data-focus-guard]\";\nexport var getFocusables = function (parents, withGuards) {\n return parents.reduce(function (acc, parent) {\n return acc.concat(toArray(parent.querySelectorAll(withGuards ? queryGuardTabbables : queryTabbables)), parent.parentNode\n ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n : []);\n }, []);\n};\nexport var getParentAutofocusables = function (parent) {\n var parentFocus = parent.querySelectorAll(\"[\" + FOCUS_AUTO + \"]\");\n return toArray(parentFocus)\n .map(function (node) { return getFocusables([node]); })\n .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","export var tabbables = [\n 'button:enabled',\n 'select:enabled',\n 'textarea:enabled',\n 'input:enabled',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isVisibleCached, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\nexport var filterFocusable = function (nodes, visibilityCache) {\n return toArray(nodes)\n .filter(function (node) { return isVisibleCached(visibilityCache, node); })\n .filter(function (node) { return notHiddenInput(node); });\n};\nexport var getTabbableNodes = function (topNodes, visibilityCache, withGuards) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards), visibilityCache), true, withGuards);\n};\nexport var getAllTabbableNodes = function (topNodes, visibilityCache) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes), visibilityCache), false);\n};\nexport var parentAutofocusables = function (topNode, visibilityCache) {\n return filterFocusable(getParentAutofocusables(topNode), visibilityCache);\n};\n","import { asArray } from './array';\nimport { parentAutofocusables } from './DOMutils';\nvar getParents = function (node, parents) {\n if (parents === void 0) { parents = []; }\n parents.push(node);\n if (node.parentNode) {\n getParents(node.parentNode, parents);\n }\n return parents;\n};\nexport var getCommonParent = function (nodeA, nodeB) {\n var parentsA = getParents(nodeA);\n var parentsB = getParents(nodeB);\n for (var i = 0; i < parentsA.length; i += 1) {\n var currentParent = parentsA[i];\n if (parentsB.indexOf(currentParent) >= 0) {\n return currentParent;\n }\n }\n return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n var activeElements = asArray(baseActiveElement);\n var leftEntries = asArray(leftEntry);\n var activeElement = activeElements[0];\n var topCommon = false;\n leftEntries.filter(Boolean).forEach(function (entry) {\n topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n rightEntries.filter(Boolean).forEach(function (subEntry) {\n var common = getCommonParent(activeElement, subEntry);\n if (common) {\n if (!topCommon || common.contains(topCommon)) {\n topCommon = common;\n }\n else {\n topCommon = getCommonParent(common, topCommon);\n }\n }\n });\n });\n return topCommon;\n};\nexport var allParentAutofocusables = function (entries, visibilityCache) {\n return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node, visibilityCache)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getAllTabbableNodes, getTabbableNodes } from './utils/DOMutils';\nimport { pickFirstFocus } from './utils/firstFocus';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar findAutoFocused = function (autoFocusables) { return function (node) {\n return node.autofocus || (node.dataset && !!node.dataset.autofocus) || autoFocusables.indexOf(node) >= 0;\n}; };\nvar reorderNodes = function (srcNodes, dstNodes) {\n var remap = new Map();\n dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\nexport var getFocusMerge = function (topNode, lastNode) {\n var activeElement = (document && document.activeElement);\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n var visibilityCache = new Map();\n var anyFocusable = getAllTabbableNodes(entries, visibilityCache);\n var innerElements = getTabbableNodes(entries, visibilityCache).filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n });\n if (!innerElements[0]) {\n innerElements = anyFocusable;\n if (!innerElements[0]) {\n return undefined;\n }\n }\n var outerNodes = getAllTabbableNodes([commonParent], visibilityCache).map(function (_a) {\n var node = _a.node;\n return node;\n });\n var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n var innerNodes = orderedInnerElements.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode);\n if (newId === NEW_FOCUS) {\n var autoFocusable = anyFocusable\n .map(function (_a) {\n var node = _a.node;\n return node;\n })\n .filter(findAutoFocused(allParentAutofocusables(entries, visibilityCache)));\n return {\n node: autoFocusable && autoFocusable.length ? pickFirstFocus(autoFocusable) : pickFirstFocus(innerNodes),\n };\n }\n if (newId === undefined) {\n return newId;\n }\n return orderedInnerElements[newId];\n};\n","import { getFocusMerge } from './focusMerge';\nexport var focusOn = function (target) {\n target.focus();\n if ('contentWindow' in target && target.contentWindow) {\n target.contentWindow.focus();\n }\n};\nvar guardCount = 0;\nvar lockDisabled = false;\nexport var setFocus = function (topNode, lastNode) {\n var focusable = getFocusMerge(topNode, lastNode);\n if (lockDisabled) {\n return;\n }\n if (focusable) {\n if (guardCount > 2) {\n console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n 'See https://github.com/theKashey/focus-lock/#focus-fighting');\n lockDisabled = true;\n setTimeout(function () {\n lockDisabled = false;\n }, 1);\n return;\n }\n guardCount++;\n focusOn(focusable.node);\n guardCount--;\n }\n};\n","import * as constants from './constants';\nimport { getFocusabledIn } from './focusables';\nimport { focusInside } from './focusInside';\nimport { focusIsHidden } from './focusIsHidden';\nimport { getFocusMerge as focusMerge } from './focusMerge';\nimport { setFocus } from './setFocus';\nimport { focusNextElement, focusPrevElement } from './sibling';\nimport tabHook from './tabHook';\nimport { getAllAffectedNodes } from './utils/all-affected';\nexport { tabHook, focusInside, focusIsHidden, focusMerge, getFocusabledIn, constants, getAllAffectedNodes, focusNextElement, focusPrevElement, };\nexport default setFocus;\n","export function deferAction(action) {\n // Hidding setImmediate from Webpack to avoid inserting polyfill\n var _window = window,\n setImmediate = _window.setImmediate;\n\n if (typeof setImmediate !== 'undefined') {\n setImmediate(action);\n } else {\n setTimeout(action, 1);\n }\n}\nexport var inlineProp = function inlineProp(name, value) {\n var obj = {};\n obj[name] = value;\n return obj;\n};","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-clientside-effect';\nimport moveFocusInside, { focusInside, focusIsHidden, getFocusabledIn } from 'focus-lock';\nimport { deferAction } from './util';\nimport { mediumFocus, mediumBlur, mediumEffect } from './medium';\n\nvar focusOnBody = function focusOnBody() {\n return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n return focusOnBody() || focusIsHidden();\n};\n\nvar lastActiveTrap = null;\nvar lastActiveFocus = null;\nvar lastPortaledElement = null;\nvar focusWasOutsideWindow = false;\n\nvar defaultWhitelist = function defaultWhitelist() {\n return true;\n};\n\nvar focusWhitelisted = function focusWhitelisted(activeElement) {\n return (lastActiveTrap.whiteList || defaultWhitelist)(activeElement);\n};\n\nvar recordPortal = function recordPortal(observerNode, portaledElement) {\n lastPortaledElement = {\n observerNode: observerNode,\n portaledElement: portaledElement\n };\n};\n\nvar focusIsPortaledPair = function focusIsPortaledPair(element) {\n return lastPortaledElement && lastPortaledElement.portaledElement === element;\n};\n\nfunction autoGuard(startIndex, end, step, allNodes) {\n var lastGuard = null;\n var i = startIndex;\n\n do {\n var item = allNodes[i];\n\n if (item.guard) {\n if (item.node.dataset.focusAutoGuard) {\n lastGuard = item;\n }\n } else if (item.lockItem) {\n if (i !== startIndex) {\n // we will tab to the next element\n return;\n }\n\n lastGuard = null;\n } else {\n break;\n }\n } while ((i += step) !== end);\n\n if (lastGuard) {\n lastGuard.node.tabIndex = 0;\n }\n}\n\nvar extractRef = function extractRef(ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\n\nvar focusWasOutside = function focusWasOutside(crossFrameOption) {\n if (crossFrameOption) {\n // with cross frame return true for any value\n return Boolean(focusWasOutsideWindow);\n } // in other case return only of focus went a while aho\n\n\n return focusWasOutsideWindow === 'meanwhile';\n};\n\nvar activateTrap = function activateTrap() {\n var result = false;\n\n if (lastActiveTrap) {\n var _lastActiveTrap = lastActiveTrap,\n observed = _lastActiveTrap.observed,\n persistentFocus = _lastActiveTrap.persistentFocus,\n autoFocus = _lastActiveTrap.autoFocus,\n shards = _lastActiveTrap.shards,\n crossFrame = _lastActiveTrap.crossFrame;\n var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement;\n var activeElement = document && document.activeElement;\n\n if (workingNode) {\n var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean));\n\n if (!activeElement || focusWhitelisted(activeElement)) {\n if (persistentFocus || focusWasOutside(crossFrame) || !isFreeFocus() || !lastActiveFocus && autoFocus) {\n if (workingNode && !(focusInside(workingArea) || focusIsPortaledPair(activeElement, workingNode))) {\n if (document && !lastActiveFocus && activeElement && !autoFocus) {\n // Check if blur() exists, which is missing on certain elements on IE\n if (activeElement.blur) {\n activeElement.blur();\n }\n\n document.body.focus();\n } else {\n result = moveFocusInside(workingArea, lastActiveFocus);\n lastPortaledElement = {};\n }\n }\n\n focusWasOutsideWindow = false;\n lastActiveFocus = document && document.activeElement;\n }\n }\n\n if (document) {\n var newActiveElement = document && document.activeElement;\n var allNodes = getFocusabledIn(workingArea);\n var focusedIndex = allNodes.map(function (_ref) {\n var node = _ref.node;\n return node;\n }).indexOf(newActiveElement);\n\n if (focusedIndex > -1) {\n // remove old focus\n allNodes.filter(function (_ref2) {\n var guard = _ref2.guard,\n node = _ref2.node;\n return guard && node.dataset.focusAutoGuard;\n }).forEach(function (_ref3) {\n var node = _ref3.node;\n return node.removeAttribute('tabIndex');\n });\n autoGuard(focusedIndex, allNodes.length, +1, allNodes);\n autoGuard(focusedIndex, -1, -1, allNodes);\n }\n }\n }\n }\n\n return result;\n};\n\nvar onTrap = function onTrap(event) {\n if (activateTrap() && event) {\n // prevent scroll jump\n event.stopPropagation();\n event.preventDefault();\n }\n};\n\nvar onBlur = function onBlur() {\n return deferAction(activateTrap);\n};\n\nvar onFocus = function onFocus(event) {\n // detect portal\n var source = event.target;\n var currentNode = event.currentTarget;\n\n if (!currentNode.contains(source)) {\n recordPortal(currentNode, source);\n }\n};\n\nvar FocusWatcher = function FocusWatcher() {\n return null;\n};\n\nvar FocusTrap = function FocusTrap(_ref4) {\n var children = _ref4.children;\n return /*#__PURE__*/React.createElement(\"div\", {\n onBlur: onBlur,\n onFocus: onFocus\n }, children);\n};\n\nFocusTrap.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: PropTypes.node.isRequired\n} : {};\n\nvar onWindowBlur = function onWindowBlur() {\n focusWasOutsideWindow = 'just'; // using setTimeout to set this variable after React/sidecar reaction\n\n setTimeout(function () {\n focusWasOutsideWindow = 'meanwhile';\n }, 0);\n};\n\nvar attachHandler = function attachHandler() {\n document.addEventListener('focusin', onTrap, true);\n document.addEventListener('focusout', onBlur);\n window.addEventListener('blur', onWindowBlur);\n};\n\nvar detachHandler = function detachHandler() {\n document.removeEventListener('focusin', onTrap, true);\n document.removeEventListener('focusout', onBlur);\n window.removeEventListener('blur', onWindowBlur);\n};\n\nfunction reducePropsToState(propsList) {\n return propsList.filter(function (_ref5) {\n var disabled = _ref5.disabled;\n return !disabled;\n });\n}\n\nfunction handleStateChangeOnClient(traps) {\n var trap = traps.slice(-1)[0];\n\n if (trap && !lastActiveTrap) {\n attachHandler();\n }\n\n var lastTrap = lastActiveTrap;\n var sameTrap = lastTrap && trap && trap.id === lastTrap.id;\n lastActiveTrap = trap;\n\n if (lastTrap && !sameTrap) {\n lastTrap.onDeactivation(); // return focus only of last trap was removed\n\n if (!traps.filter(function (_ref6) {\n var id = _ref6.id;\n return id === lastTrap.id;\n }).length) {\n // allow defer is no other trap is awaiting restore\n lastTrap.returnFocus(!trap);\n }\n }\n\n if (trap) {\n lastActiveFocus = null;\n\n if (!sameTrap || lastTrap.observed !== trap.observed) {\n trap.onActivation();\n }\n\n activateTrap(true);\n deferAction(activateTrap);\n } else {\n detachHandler();\n lastActiveFocus = null;\n }\n} // bind medium\n\n\nmediumFocus.assignSyncMedium(onFocus);\nmediumBlur.assignMedium(onBlur);\nmediumEffect.assignMedium(function (cb) {\n return cb({\n moveFocusInside: moveFocusInside,\n focusInside: focusInside\n });\n});\nexport default withSideEffect(reducePropsToState, handleStateChangeOnClient)(FocusWatcher);","import { getAllAffectedNodes } from './utils/all-affected';\nimport { getTabbableNodes } from './utils/DOMutils';\nimport { isGuard, isNotAGuard } from './utils/is';\nimport { getTopCommonParent } from './utils/parenting';\nexport var getFocusabledIn = function (topNode) {\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(topNode, topNode, entries);\n var visibilityCache = new Map();\n var outerNodes = getTabbableNodes([commonParent], visibilityCache, true);\n var innerElements = getTabbableNodes(entries, visibilityCache)\n .filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n })\n .map(function (_a) {\n var node = _a.node;\n return node;\n });\n return outerNodes.map(function (_a) {\n var node = _a.node, index = _a.index;\n return ({\n node: node,\n index: index,\n lockItem: innerElements.indexOf(node) >= 0,\n guard: isGuard(node),\n });\n });\n};\n","import { FOCUS_ALLOW } from './constants';\nimport { toArray } from './utils/array';\nexport var focusIsHidden = function () {\n return document &&\n toArray(document.querySelectorAll(\"[\" + FOCUS_ALLOW + \"]\")).some(function (node) { return node.contains(document.activeElement); });\n};\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { PureComponent } from 'react';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n handleStateChangeOnClient(state);\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n SideEffect.peek = function peek() {\n return state;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n return SideEffect;\n };\n}\n\nexport default withSideEffect;\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport FocusLockUI from './Lock';\nimport FocusTrap from './Trap';\n/* that would be a BREAKING CHANGE!\n// delaying sidecar execution till the first usage\nconst RequireSideCar = (props) => {\n // eslint-disable-next-line global-require\n const SideCar = require('./Trap').default;\n return ;\n};\n*/\n\nvar FocusLockCombination = /*#__PURE__*/React.forwardRef(function FocusLockUICombination(props, ref) {\n return /*#__PURE__*/React.createElement(FocusLockUI, _extends({\n sideCar: FocusTrap,\n ref: ref\n }, props));\n});\n\nvar _ref = FocusLockUI.propTypes || {},\n sideCar = _ref.sideCar,\n propTypes = _objectWithoutPropertiesLoose(_ref, [\"sideCar\"]);\n\nFocusLockCombination.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nexport default FocusLockCombination;","import FocusLock from './Combination';\nexport * from './UI';\nexport default FocusLock;","/** @license React v16.8.6\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';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar 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?Symbol.for(\"react.memo\"):\n60115,r=b?Symbol.for(\"react.lazy\"):60116;function t(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 h:return a;default:return u}}case r:case q:case d:return u}}}function v(a){return t(a)===m}exports.typeOf=t;exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;\nexports.Fragment=e;exports.Lazy=r;exports.Memo=q;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||\"object\"===typeof a&&null!==a&&(a.$$typeof===r||a.$$typeof===q||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n)};exports.isAsyncMode=function(a){return v(a)||t(a)===l};exports.isConcurrentMode=v;exports.isContextConsumer=function(a){return t(a)===k};\nexports.isContextProvider=function(a){return t(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return t(a)===n};exports.isFragment=function(a){return t(a)===e};exports.isLazy=function(a){return t(a)===r};exports.isMemo=function(a){return t(a)===q};exports.isPortal=function(a){return t(a)===d};exports.isProfiler=function(a){return t(a)===g};exports.isStrictMode=function(a){return t(a)===f};\nexports.isSuspense=function(a){return t(a)===p};\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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* Returns React children into an array, flattening fragments. */\nvar react_1 = require(\"react\");\nvar react_is_1 = require(\"react-is\");\nfunction flattenChildren(children, depth, keys) {\n if (depth === void 0) { depth = 0; }\n if (keys === void 0) { keys = []; }\n return react_1.Children.toArray(children).reduce(function (acc, node, nodeIndex) {\n if (react_is_1.isFragment(node)) {\n acc.push.apply(acc, flattenChildren(node.props.children, depth + 1, keys.concat(node.key || nodeIndex)));\n }\n else {\n if (react_1.isValidElement(node)) {\n acc.push(react_1.cloneElement(node, {\n key: keys.concat(String(node.key)).join('.')\n }));\n }\n else if (typeof node === \"string\" || typeof node === \"number\") {\n acc.push(node);\n }\n }\n return acc;\n }, []);\n}\nexports.default = flattenChildren;\n","var _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\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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\nfunction _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\nimport { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Manager = function (_Component) {\n _inherits(Manager, _Component);\n\n function Manager() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Manager);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Manager.__proto__ || Object.getPrototypeOf(Manager)).call.apply(_ref, [this].concat(args))), _this), _this._setTargetNode = function (node) {\n _this._targetNode = node;\n }, _this._getTargetNode = function () {\n return _this._targetNode;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Manager, [{\n key: 'getChildContext',\n value: function getChildContext() {\n return {\n popperManager: {\n setTargetNode: this._setTargetNode,\n getTargetNode: this._getTargetNode\n }\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n tag = _props.tag,\n children = _props.children,\n restProps = _objectWithoutProperties(_props, ['tag', 'children']);\n\n if (tag !== false) {\n return createElement(tag, restProps, children);\n } else {\n return children;\n }\n }\n }]);\n\n return Manager;\n}(Component);\n\nManager.childContextTypes = {\n popperManager: PropTypes.object.isRequired\n};\nManager.propTypes = {\n tag: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\nManager.defaultProps = {\n tag: 'div'\n};\n\n\nexport default Manager;","var _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\nfunction _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\nimport { createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Target = function Target(props, context) {\n var _props$component = props.component,\n component = _props$component === undefined ? 'div' : _props$component,\n innerRef = props.innerRef,\n children = props.children,\n restProps = _objectWithoutProperties(props, ['component', 'innerRef', 'children']);\n\n var popperManager = context.popperManager;\n\n var targetRef = function targetRef(node) {\n popperManager.setTargetNode(node);\n if (typeof innerRef === 'function') {\n innerRef(node);\n }\n };\n\n if (typeof children === 'function') {\n var targetProps = { ref: targetRef };\n return children({ targetProps: targetProps, restProps: restProps });\n }\n\n var componentProps = _extends({}, restProps);\n\n if (typeof component === 'string') {\n componentProps.ref = targetRef;\n } else {\n componentProps.innerRef = targetRef;\n }\n\n return createElement(component, componentProps, children);\n};\n\nTarget.contextTypes = {\n popperManager: PropTypes.object.isRequired\n};\n\nTarget.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\n\nexport default Target;","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n const isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n return boundaries;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false,\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","var _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\nvar _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\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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\nfunction _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\nimport { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport PopperJS from 'popper.js';\n\nexport var placements = PopperJS.placements;\n\nvar Popper = function (_Component) {\n _inherits(Popper, _Component);\n\n function Popper() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Popper);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Popper.__proto__ || Object.getPrototypeOf(Popper)).call.apply(_ref, [this].concat(args))), _this), _this.state = {}, _this._setArrowNode = function (node) {\n _this._arrowNode = node;\n }, _this._getTargetNode = function () {\n if (_this.props.target) {\n return _this.props.target;\n } else if (!_this.context.popperManager || !_this.context.popperManager.getTargetNode()) {\n throw new Error('Target missing. Popper must be given a target from the Popper Manager, or as a prop.');\n }\n return _this.context.popperManager.getTargetNode();\n }, _this._getOffsets = function (data) {\n return Object.keys(data.offsets).map(function (key) {\n return data.offsets[key];\n });\n }, _this._isDataDirty = function (data) {\n if (_this.state.data) {\n return JSON.stringify(_this._getOffsets(_this.state.data)) !== JSON.stringify(_this._getOffsets(data));\n } else {\n return true;\n }\n }, _this._updateStateModifier = {\n enabled: true,\n order: 900,\n fn: function fn(data) {\n if (_this._isDataDirty(data)) {\n _this.setState({ data: data });\n }\n return data;\n }\n }, _this._getPopperStyle = function () {\n var data = _this.state.data;\n\n\n if (!_this._popper || !data) {\n return {\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0\n };\n }\n\n return _extends({\n position: data.offsets.popper.position\n }, data.styles);\n }, _this._getPopperPlacement = function () {\n return _this.state.data ? _this.state.data.placement : undefined;\n }, _this._getPopperHide = function () {\n return !!_this.state.data && _this.state.data.hide ? '' : undefined;\n }, _this._getArrowStyle = function () {\n if (!_this.state.data || !_this.state.data.offsets.arrow) {\n return {};\n } else {\n var _this$state$data$offs = _this.state.data.offsets.arrow,\n top = _this$state$data$offs.top,\n left = _this$state$data$offs.left;\n\n return { top: top, left: left };\n }\n }, _this._handlePopperRef = function (node) {\n _this._popperNode = node;\n if (node) {\n _this._createPopper();\n } else {\n _this._destroyPopper();\n }\n if (_this.props.innerRef) {\n _this.props.innerRef(node);\n }\n }, _this._scheduleUpdate = function () {\n _this._popper && _this._popper.scheduleUpdate();\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Popper, [{\n key: 'getChildContext',\n value: function getChildContext() {\n return {\n popper: {\n setArrowNode: this._setArrowNode,\n getArrowStyle: this._getArrowStyle\n }\n };\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(lastProps) {\n if (lastProps.placement !== this.props.placement || lastProps.eventsEnabled !== this.props.eventsEnabled || lastProps.target !== this.props.target) {\n this._destroyPopper();\n this._createPopper();\n }\n if (lastProps.children !== this.props.children) {\n this._scheduleUpdate();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this._destroyPopper();\n }\n }, {\n key: '_createPopper',\n value: function _createPopper() {\n var _this2 = this;\n\n var _props = this.props,\n placement = _props.placement,\n eventsEnabled = _props.eventsEnabled,\n positionFixed = _props.positionFixed;\n\n var modifiers = _extends({}, this.props.modifiers, {\n applyStyle: { enabled: false },\n updateState: this._updateStateModifier\n });\n if (this._arrowNode) {\n modifiers.arrow = _extends({}, this.props.modifiers.arrow || {}, {\n element: this._arrowNode\n });\n }\n this._popper = new PopperJS(this._getTargetNode(), this._popperNode, {\n placement: placement,\n positionFixed: positionFixed,\n eventsEnabled: eventsEnabled,\n modifiers: modifiers\n });\n\n // TODO: look into setTimeout scheduleUpdate call, without it, the popper will not position properly on creation\n setTimeout(function () {\n return _this2._scheduleUpdate();\n });\n }\n }, {\n key: '_destroyPopper',\n value: function _destroyPopper() {\n if (this._popper) {\n this._popper.destroy();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n component = _props2.component,\n innerRef = _props2.innerRef,\n placement = _props2.placement,\n eventsEnabled = _props2.eventsEnabled,\n positionFixed = _props2.positionFixed,\n modifiers = _props2.modifiers,\n children = _props2.children,\n restProps = _objectWithoutProperties(_props2, ['component', 'innerRef', 'placement', 'eventsEnabled', 'positionFixed', 'modifiers', 'children']);\n\n var popperStyle = this._getPopperStyle();\n var popperPlacement = this._getPopperPlacement();\n var popperHide = this._getPopperHide();\n\n if (typeof children === 'function') {\n var popperProps = {\n ref: this._handlePopperRef,\n style: popperStyle,\n 'data-placement': popperPlacement,\n 'data-x-out-of-boundaries': popperHide\n };\n return children({\n popperProps: popperProps,\n restProps: restProps,\n scheduleUpdate: this._scheduleUpdate\n });\n }\n\n var componentProps = _extends({}, restProps, {\n style: _extends({}, restProps.style, popperStyle),\n 'data-placement': popperPlacement,\n 'data-x-out-of-boundaries': popperHide\n });\n\n if (typeof component === 'string') {\n componentProps.ref = this._handlePopperRef;\n } else {\n componentProps.innerRef = this._handlePopperRef;\n }\n\n return createElement(component, componentProps, children);\n }\n }]);\n\n return Popper;\n}(Component);\n\nPopper.contextTypes = {\n popperManager: PropTypes.object\n};\nPopper.childContextTypes = {\n popper: PropTypes.object.isRequired\n};\nPopper.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n placement: PropTypes.oneOf(placements),\n eventsEnabled: PropTypes.bool,\n positionFixed: PropTypes.bool,\n modifiers: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n target: PropTypes.oneOfType([\n // the following check is needed for SSR\n PropTypes.instanceOf(typeof Element !== 'undefined' ? Element : Object), PropTypes.shape({\n getBoundingClientRect: PropTypes.func.isRequired,\n clientWidth: PropTypes.number.isRequired,\n clientHeight: PropTypes.number.isRequired\n })])\n};\nPopper.defaultProps = {\n component: 'div',\n placement: 'bottom',\n eventsEnabled: true,\n positionFixed: false,\n modifiers: {}\n};\n\n\nexport default Popper;","var _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\nfunction _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\nimport { createElement } from 'react';\nimport PropTypes from 'prop-types';\n\nvar Arrow = function Arrow(props, context) {\n var _props$component = props.component,\n component = _props$component === undefined ? 'span' : _props$component,\n innerRef = props.innerRef,\n children = props.children,\n restProps = _objectWithoutProperties(props, ['component', 'innerRef', 'children']);\n\n var popper = context.popper;\n\n var arrowRef = function arrowRef(node) {\n popper.setArrowNode(node);\n if (typeof innerRef === 'function') {\n innerRef(node);\n }\n };\n var arrowStyle = popper.getArrowStyle();\n\n if (typeof children === 'function') {\n var arrowProps = {\n ref: arrowRef,\n style: arrowStyle\n };\n return children({ arrowProps: arrowProps, restProps: restProps });\n }\n\n var componentProps = _extends({}, restProps, {\n style: _extends({}, arrowStyle, restProps.style)\n });\n\n if (typeof component === 'string') {\n componentProps.ref = arrowRef;\n } else {\n componentProps.innerRef = arrowRef;\n }\n\n return createElement(component, componentProps, children);\n};\n\nArrow.contextTypes = {\n popper: PropTypes.object.isRequired\n};\n\nArrow.propTypes = {\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n innerRef: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\n\nexport default Arrow;","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\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","import React, { createFactory, Component, createElement } from 'react';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport shallowEqual from 'fbjs/lib/shallowEqual';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { polyfill } from 'react-lifecycles-compat';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { createChangeEmitter } from 'change-emitter';\nimport $$observable from 'symbol-observable';\n\nvar setStatic = function setStatic(key, value) {\n return function (BaseComponent) {\n /* eslint-disable no-param-reassign */\n BaseComponent[key] = value;\n /* eslint-enable no-param-reassign */\n\n return BaseComponent;\n };\n};\n\nvar setDisplayName = function setDisplayName(displayName) {\n return setStatic('displayName', displayName);\n};\n\nvar getDisplayName = function getDisplayName(Component$$1) {\n if (typeof Component$$1 === 'string') {\n return Component$$1;\n }\n\n if (!Component$$1) {\n return undefined;\n }\n\n return Component$$1.displayName || Component$$1.name || 'Component';\n};\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n return hocName + \"(\" + getDisplayName(BaseComponent) + \")\";\n};\n\nvar mapProps = function mapProps(propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var MapProps = function MapProps(props) {\n return factory(propsMapper(props));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapProps'))(MapProps);\n }\n\n return MapProps;\n };\n};\n\nvar withProps = function withProps(input) {\n var hoc = mapProps(function (props) {\n return _extends({}, props, typeof input === 'function' ? input(props) : input);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withProps'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar pick = function pick(obj, keys) {\n var result = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (obj.hasOwnProperty(key)) {\n result[key] = obj[key];\n }\n }\n\n return result;\n};\n\nvar withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {\n return !shallowEqual(pick(props, shouldMapOrKeys), pick(nextProps, shouldMapOrKeys));\n };\n\n var WithPropsOnChange =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithPropsOnChange, _Component);\n\n function WithPropsOnChange() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n computedProps: propsMapper(_this.props),\n prevProps: _this.props\n };\n return _this;\n }\n\n WithPropsOnChange.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n if (shouldMap(prevState.prevProps, nextProps)) {\n return {\n computedProps: propsMapper(nextProps),\n prevProps: nextProps\n };\n }\n\n return {\n prevProps: nextProps\n };\n };\n\n var _proto = WithPropsOnChange.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state.computedProps));\n };\n\n return WithPropsOnChange;\n }(Component);\n\n polyfill(WithPropsOnChange);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withPropsOnChange'))(WithPropsOnChange);\n }\n\n return WithPropsOnChange;\n };\n};\n\nvar mapValues = function mapValues(obj, func) {\n var result = {};\n /* eslint-disable no-restricted-syntax */\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = func(obj[key], key);\n }\n }\n /* eslint-enable no-restricted-syntax */\n\n\n return result;\n};\n\nvar withHandlers = function withHandlers(handlers) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithHandlers =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithHandlers, _Component);\n\n function WithHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.handlers = mapValues(typeof handlers === 'function' ? handlers(_this.props) : handlers, function (createHandler) {\n return function () {\n var handler = createHandler(_this.props);\n\n if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') {\n console.error( // eslint-disable-line no-console\n 'withHandlers(): Expected a map of higher-order functions. ' + 'Refer to the docs for more info.');\n }\n\n return handler.apply(void 0, arguments);\n };\n });\n return _this;\n }\n\n var _proto = WithHandlers.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.handlers));\n };\n\n return WithHandlers;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withHandlers'))(WithHandlers);\n }\n\n return WithHandlers;\n };\n};\n\nvar defaultProps = function defaultProps(props) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var DefaultProps = function DefaultProps(ownerProps) {\n return factory(ownerProps);\n };\n\n DefaultProps.defaultProps = props;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'defaultProps'))(DefaultProps);\n }\n\n return DefaultProps;\n };\n};\n\nvar omit = function omit(obj, keys) {\n var rest = _extends({}, obj);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (rest.hasOwnProperty(key)) {\n delete rest[key];\n }\n }\n\n return rest;\n};\n\nvar renameProp = function renameProp(oldName, newName) {\n var hoc = mapProps(function (props) {\n var _extends2;\n\n return _extends({}, omit(props, [oldName]), (_extends2 = {}, _extends2[newName] = props[oldName], _extends2));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProp'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar keys = Object.keys;\n\nvar mapKeys = function mapKeys(obj, func) {\n return keys(obj).reduce(function (result, key) {\n var val = obj[key];\n /* eslint-disable no-param-reassign */\n\n result[func(val, key)] = val;\n /* eslint-enable no-param-reassign */\n\n return result;\n }, {});\n};\n\nvar renameProps = function renameProps(nameMap) {\n var hoc = mapProps(function (props) {\n return _extends({}, omit(props, keys(nameMap)), mapKeys(pick(props, keys(nameMap)), function (_, oldName) {\n return nameMap[oldName];\n }));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProps'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar flattenProp = function flattenProp(propName) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var FlattenProp = function FlattenProp(props) {\n return factory(_extends({}, props, props[propName]));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'flattenProp'))(FlattenProp);\n }\n\n return FlattenProp;\n };\n};\n\nvar withState = function withState(stateName, stateUpdaterName, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithState =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithState, _Component);\n\n function WithState() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: typeof initialState === 'function' ? initialState(_this.props) : initialState\n };\n\n _this.updateStateValue = function (updateFn, callback) {\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: typeof updateFn === 'function' ? updateFn(stateValue) : updateFn\n };\n }, callback);\n };\n\n return _this;\n }\n\n var _proto = WithState.prototype;\n\n _proto.render = function render() {\n var _extends2;\n\n return factory(_extends({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[stateUpdaterName] = this.updateStateValue, _extends2)));\n };\n\n return WithState;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withState'))(WithState);\n }\n\n return WithState;\n };\n};\n\nvar withStateHandlers = function withStateHandlers(initialState, stateUpdaters) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithStateHandlers =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithStateHandlers, _Component);\n\n function WithStateHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.state = typeof initialState === 'function' ? initialState(_this.props) : initialState;\n _this.stateUpdaters = mapValues(stateUpdaters, function (handler) {\n return function (mayBeEvent) {\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 // Having that functional form of setState can be called async\n // we need to persist SyntheticEvent\n if (mayBeEvent && typeof mayBeEvent.persist === 'function') {\n mayBeEvent.persist();\n }\n\n _this.setState(function (state, props) {\n return handler(state, props).apply(void 0, [mayBeEvent].concat(args));\n });\n };\n });\n return _this;\n }\n\n var _proto = WithStateHandlers.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state, this.stateUpdaters));\n };\n\n return WithStateHandlers;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withStateHandlers'))(WithStateHandlers);\n }\n\n return WithStateHandlers;\n };\n};\n\nvar noop = function noop() {};\n\nvar withReducer = function withReducer(stateName, dispatchName, reducer, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithReducer =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithReducer, _Component);\n\n function WithReducer() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: _this.initializeStateValue()\n };\n\n _this.dispatch = function (action, callback) {\n if (callback === void 0) {\n callback = noop;\n }\n\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: reducer(stateValue, action)\n };\n }, function () {\n return callback(_this.state.stateValue);\n });\n };\n\n return _this;\n }\n\n var _proto = WithReducer.prototype;\n\n _proto.initializeStateValue = function initializeStateValue() {\n if (initialState !== undefined) {\n return typeof initialState === 'function' ? initialState(this.props) : initialState;\n }\n\n return reducer(undefined, {\n type: '@@recompose/INIT'\n });\n };\n\n _proto.render = function render() {\n var _extends2;\n\n return factory(_extends({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[dispatchName] = this.dispatch, _extends2)));\n };\n\n return WithReducer;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withReducer'))(WithReducer);\n }\n\n return WithReducer;\n };\n};\n\nvar identity = function identity(Component$$1) {\n return Component$$1;\n};\n\nvar branch = function branch(test, left, right) {\n if (right === void 0) {\n right = identity;\n }\n\n return function (BaseComponent) {\n var leftFactory;\n var rightFactory;\n\n var Branch = function Branch(props) {\n if (test(props)) {\n leftFactory = leftFactory || createFactory(left(BaseComponent));\n return leftFactory(props);\n }\n\n rightFactory = rightFactory || createFactory(right(BaseComponent));\n return rightFactory(props);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'branch'))(Branch);\n }\n\n return Branch;\n };\n};\n\nvar renderComponent = function renderComponent(Component$$1) {\n return function (_) {\n var factory = createFactory(Component$$1);\n\n var RenderComponent = function RenderComponent(props) {\n return factory(props);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n RenderComponent.displayName = wrapDisplayName(Component$$1, 'renderComponent');\n }\n\n return RenderComponent;\n };\n};\n\nvar Nothing =\n/*#__PURE__*/\nfunction (_Component) {\n _inheritsLoose(Nothing, _Component);\n\n function Nothing() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Nothing.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Nothing;\n}(Component);\n\nvar renderNothing = function renderNothing(_) {\n return Nothing;\n};\n\nvar shouldUpdate = function shouldUpdate(test) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var ShouldUpdate =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ShouldUpdate, _Component);\n\n function ShouldUpdate() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ShouldUpdate.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return test(this.props, nextProps);\n };\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return ShouldUpdate;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n }\n\n return ShouldUpdate;\n };\n};\n\nvar pure = function pure(BaseComponent) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(props, nextProps);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'pure'))(hoc(BaseComponent));\n }\n\n return hoc(BaseComponent);\n};\n\nvar onlyUpdateForKeys = function onlyUpdateForKeys(propKeys) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(pick(nextProps, propKeys), pick(props, propKeys));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForKeys'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar onlyUpdateForPropTypes = function onlyUpdateForPropTypes(BaseComponent) {\n var propTypes = BaseComponent.propTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!propTypes) {\n /* eslint-disable */\n console.error('A component without any `propTypes` was passed to ' + '`onlyUpdateForPropTypes()`. Check the implementation of the ' + (\"component with display name \\\"\" + getDisplayName(BaseComponent) + \"\\\".\"));\n /* eslint-enable */\n }\n }\n\n var propKeys = Object.keys(propTypes || {});\n var OnlyUpdateForPropTypes = onlyUpdateForKeys(propKeys)(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForPropTypes'))(OnlyUpdateForPropTypes);\n }\n\n return OnlyUpdateForPropTypes;\n};\n\nvar withContext = function withContext(childContextTypes, getChildContext) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithContext =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithContext, _Component);\n\n function WithContext() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.getChildContext = function () {\n return getChildContext(_this.props);\n };\n\n return _this;\n }\n\n var _proto = WithContext.prototype;\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return WithContext;\n }(Component);\n\n WithContext.childContextTypes = childContextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withContext'))(WithContext);\n }\n\n return WithContext;\n };\n};\n\nvar getContext = function getContext(contextTypes) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var GetContext = function GetContext(ownerProps, context) {\n return factory(_extends({}, ownerProps, context));\n };\n\n GetContext.contextTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'getContext'))(GetContext);\n }\n\n return GetContext;\n };\n};\n\nvar lifecycle = function lifecycle(spec) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production' && spec.hasOwnProperty('render')) {\n console.error('lifecycle() does not support the render method; its behavior is to ' + 'pass all props and state to the base component.');\n }\n\n var Lifecycle =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Lifecycle, _Component);\n\n function Lifecycle() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state));\n };\n\n return Lifecycle;\n }(Component);\n\n Object.keys(spec).forEach(function (hook) {\n return Lifecycle.prototype[hook] = spec[hook];\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'lifecycle'))(Lifecycle);\n }\n\n return Lifecycle;\n };\n};\n\nvar isClassComponent = function isClassComponent(Component$$1) {\n return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar toClass = function toClass(baseComponent) {\n var _class, _temp;\n\n return isClassComponent(baseComponent) ? baseComponent : (_temp = _class =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ToClass, _Component);\n\n function ToClass() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ToClass.prototype;\n\n _proto.render = function render() {\n if (typeof baseComponent === 'string') {\n return React.createElement(baseComponent, this.props);\n }\n\n return baseComponent(this.props, this.context);\n };\n\n return ToClass;\n }(Component), _class.displayName = getDisplayName(baseComponent), _class.propTypes = baseComponent.propTypes, _class.contextTypes = baseComponent.contextTypes, _class.defaultProps = baseComponent.defaultProps, _temp);\n};\n\nfunction toRenderProps(hoc) {\n var RenderPropsComponent = function RenderPropsComponent(props) {\n return props.children(props);\n };\n\n return hoc(RenderPropsComponent);\n}\n\nvar fromRenderProps = function fromRenderProps(RenderPropsComponent, propsMapper, renderPropName) {\n if (renderPropName === void 0) {\n renderPropName = 'children';\n }\n\n return function (BaseComponent) {\n var baseFactory = React.createFactory(BaseComponent);\n var renderPropsFactory = React.createFactory(RenderPropsComponent);\n\n var FromRenderProps = function FromRenderProps(ownerProps) {\n var _renderPropsFactory;\n\n return renderPropsFactory((_renderPropsFactory = {}, _renderPropsFactory[renderPropName] = function () {\n return baseFactory(_extends({}, ownerProps, propsMapper.apply(void 0, arguments)));\n }, _renderPropsFactory));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'fromRenderProps'))(FromRenderProps);\n }\n\n return FromRenderProps;\n };\n};\n\nvar setPropTypes = function setPropTypes(propTypes) {\n return setStatic('propTypes', propTypes);\n};\n\nvar compose = function compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n }, function (arg) {\n return arg;\n });\n};\n\nvar createSink = function createSink(callback) {\n var Sink =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Sink, _Component);\n\n function Sink() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {};\n return _this;\n }\n\n Sink.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps) {\n callback(nextProps);\n return null;\n };\n\n var _proto = Sink.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Sink;\n }(Component);\n\n polyfill(Sink);\n return Sink;\n};\n\nvar componentFromProp = function componentFromProp(propName) {\n var Component$$1 = function Component$$1(props) {\n return createElement(props[propName], omit(props, [propName]));\n };\n\n Component$$1.displayName = \"componentFromProp(\" + propName + \")\";\n return Component$$1;\n};\n\nvar nest = function nest() {\n for (var _len = arguments.length, Components = new Array(_len), _key = 0; _key < _len; _key++) {\n Components[_key] = arguments[_key];\n }\n\n var factories = Components.map(createFactory);\n\n var Nest = function Nest(_ref) {\n var children = _ref.children,\n props = _objectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n return factories.reduceRight(function (child, factory) {\n return factory(props, child);\n }, children);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n var displayNames = Components.map(getDisplayName);\n Nest.displayName = \"nest(\" + displayNames.join(', ') + \")\";\n }\n\n return Nest;\n};\n\nvar hoistStatics = function hoistStatics(higherOrderComponent, blacklist) {\n return function (BaseComponent) {\n var NewComponent = higherOrderComponent(BaseComponent);\n hoistNonReactStatics(NewComponent, BaseComponent, blacklist);\n return NewComponent;\n };\n};\n\nvar _config = {\n fromESObservable: null,\n toESObservable: null\n};\n\nvar configureObservable = function configureObservable(c) {\n _config = c;\n};\n\nvar config = {\n fromESObservable: function fromESObservable(observable) {\n return typeof _config.fromESObservable === 'function' ? _config.fromESObservable(observable) : observable;\n },\n toESObservable: function toESObservable(stream) {\n return typeof _config.toESObservable === 'function' ? _config.toESObservable(stream) : stream;\n }\n};\n\nvar componentFromStreamWithConfig = function componentFromStreamWithConfig(config$$1) {\n return function (propsToVdom) {\n return (\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ComponentFromStream, _Component);\n\n function ComponentFromStream() {\n var _config$fromESObserva;\n\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n vdom: null\n };\n _this.propsEmitter = createChangeEmitter();\n _this.props$ = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = _this.propsEmitter.listen(function (props) {\n if (props) {\n observer.next(props);\n } else {\n observer.complete();\n }\n });\n\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva));\n _this.vdom$ = config$$1.toESObservable(propsToVdom(_this.props$));\n return _this;\n }\n\n var _proto = ComponentFromStream.prototype;\n\n _proto.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n // Subscribe to child prop changes so we know when to re-render\n this.subscription = this.vdom$.subscribe({\n next: function next(vdom) {\n _this2.setState({\n vdom: vdom\n });\n }\n });\n this.propsEmitter.emit(this.props);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n // Receive new props from the owner\n this.propsEmitter.emit(nextProps);\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n return nextState.vdom !== this.state.vdom;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Call without arguments to complete stream\n this.propsEmitter.emit(); // Clean-up subscription before un-mounting\n\n this.subscription.unsubscribe();\n };\n\n _proto.render = function render() {\n return this.state.vdom;\n };\n\n return ComponentFromStream;\n }(Component)\n );\n };\n};\n\nvar componentFromStream = function componentFromStream(propsToVdom) {\n return componentFromStreamWithConfig(config)(propsToVdom);\n};\n\nvar identity$1 = function identity(t) {\n return t;\n};\n\nvar mapPropsStreamWithConfig = function mapPropsStreamWithConfig(config$$1) {\n var componentFromStream$$1 = componentFromStreamWithConfig({\n fromESObservable: identity$1,\n toESObservable: identity$1\n });\n return function (transform) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var fromESObservable = config$$1.fromESObservable,\n toESObservable = config$$1.toESObservable;\n return componentFromStream$$1(function (props$) {\n var _ref;\n\n return _ref = {\n subscribe: function subscribe(observer) {\n var subscription = toESObservable(transform(fromESObservable(props$))).subscribe({\n next: function next(childProps) {\n return observer.next(factory(childProps));\n }\n });\n return {\n unsubscribe: function unsubscribe() {\n return subscription.unsubscribe();\n }\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n });\n };\n };\n};\n\nvar mapPropsStream = function mapPropsStream(transform) {\n var hoc = mapPropsStreamWithConfig(config)(transform);\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapPropsStream'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar createEventHandlerWithConfig = function createEventHandlerWithConfig(config$$1) {\n return function () {\n var _config$fromESObserva;\n\n var emitter = createChangeEmitter();\n var stream = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = emitter.listen(function (value) {\n return observer.next(value);\n });\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva));\n return {\n handler: emitter.emit,\n stream: stream\n };\n };\n};\nvar createEventHandler = createEventHandlerWithConfig(config);\n\n// Higher-order component helpers\n\nexport { mapProps, withProps, withPropsOnChange, withHandlers, defaultProps, renameProp, renameProps, flattenProp, withState, withStateHandlers, withReducer, branch, renderComponent, renderNothing, shouldUpdate, pure, onlyUpdateForKeys, onlyUpdateForPropTypes, withContext, getContext, lifecycle, toClass, toRenderProps, fromRenderProps, setStatic, setPropTypes, setDisplayName, compose, getDisplayName, wrapDisplayName, shallowEqual, isClassComponent, createSink, componentFromProp, nest, hoistStatics, componentFromStream, componentFromStreamWithConfig, mapPropsStream, mapPropsStreamWithConfig, createEventHandler, createEventHandlerWithConfig, configureObservable as setObservableConfig };\n","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try { // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import * as React from \"react\";\nimport { Button } from 'spry-react/Buttons/button';\n/**\n * Component intended to be used in conjunction with useTabSwitcher.\n * Provides a standard way to wire up a \"done\" button on a dialog that is using the useTabSwitcher hook for managing the behavior of the tabs.\n * The button text will be \"Close\" unless another value is provided as children.\n */\nexport function TabSwitcherDialogDoneButton(props) {\n return (React.createElement(Button, { color: \"primary\", padding: 'wide', onClick: async () => {\n const succeeded = await props.tabHandles.onDone();\n if (succeeded)\n props.closeDialog();\n } }, props.children ?? \"Close\"));\n}\n","import './actionButtons.less';\nimport * as React from 'react';\nimport { Button } from 'spry-react/Buttons/button';\nimport { FlatChildren } from 'spry-react/utils/flatChildren';\nimport { OutlineButton } from 'spry-react/Buttons/button';\nimport { TabSwitcherDialogDoneButton } from 'spry-react/Tabs/tabSwitcherDialogDoneButton';\n/** `ActionButtons` helps lay out and style a row of right aligned buttons that can be clicked to perform actions.\n * It also provides an optional prop for displaying left aligned content.\n * By default, `ActionButtons` will set `padding` and `color` props on each child, unless that child explicitly sets them.\n * `ActionButtons` will set `padding: wide` on all children. This behavior can be disabled via `withoutDefaultButtonPadding`\n * `ActionButtons` will set `color: 'primary'` on the last child and `color: 'transparent'` on all other children.\n * This behavior can be disabled via `withoutColorDefaulting`. */\nexport function ActionButtons(props) {\n const { gap, leftContent, leftContentGap, withoutColorDefaulting, withoutDefaultButtonPadding, children } = props;\n const rightContent = FlatChildren.map(children, toActionButton);\n return React.createElement(\"div\", { className: 'spr-action-buttons-wrapper' },\n !!leftContent &&\n React.createElement(\"div\", { className: 'spr-action-buttons-left-content', style: { gap: leftContentGap } }, leftContent),\n React.createElement(\"div\", { className: 'spr-action-buttons-right-content', style: { gap: gap } }, rightContent));\n function toActionButton(child, index, array) {\n if (!FlatChildren.isChildOneOfTypes(child, Button, OutlineButton, TabSwitcherDialogDoneButton))\n throw 'Invalid child passed to ActionButtons. Children of ActionButtons must be Button components.';\n if (FlatChildren.isChildOfType(child, TabSwitcherDialogDoneButton))\n return child;\n const newProps = {\n padding: !withoutDefaultButtonPadding\n ? 'wide'\n : undefined,\n color: !withoutColorDefaulting\n ? index === array.length - 1\n ? 'primary'\n : 'transparent'\n : undefined,\n ...child.props\n };\n return React.cloneElement(child, newProps);\n }\n}\n","import * as Eases from \"eases\";\n;\nexport var Easing;\n(function (Easing) {\n Easing[Easing[\"BackInOut\"] = 0] = \"BackInOut\";\n Easing[Easing[\"BackIn\"] = 1] = \"BackIn\";\n Easing[Easing[\"BackOut\"] = 2] = \"BackOut\";\n Easing[Easing[\"BounceInOut\"] = 3] = \"BounceInOut\";\n Easing[Easing[\"BounceIn\"] = 4] = \"BounceIn\";\n Easing[Easing[\"BounceOut\"] = 5] = \"BounceOut\";\n Easing[Easing[\"CircInOut\"] = 6] = \"CircInOut\";\n Easing[Easing[\"CircIn\"] = 7] = \"CircIn\";\n Easing[Easing[\"CircOut\"] = 8] = \"CircOut\";\n Easing[Easing[\"CubicInOut\"] = 9] = \"CubicInOut\";\n Easing[Easing[\"CubicIn\"] = 10] = \"CubicIn\";\n Easing[Easing[\"CubicOut\"] = 11] = \"CubicOut\";\n Easing[Easing[\"ElasticInOut\"] = 12] = \"ElasticInOut\";\n Easing[Easing[\"ElasticIn\"] = 13] = \"ElasticIn\";\n Easing[Easing[\"ElasticOut\"] = 14] = \"ElasticOut\";\n Easing[Easing[\"ExpoInOut\"] = 15] = \"ExpoInOut\";\n Easing[Easing[\"ExpoIn\"] = 16] = \"ExpoIn\";\n Easing[Easing[\"ExpoOut\"] = 17] = \"ExpoOut\";\n Easing[Easing[\"Linear\"] = 18] = \"Linear\";\n Easing[Easing[\"QuadInOut\"] = 19] = \"QuadInOut\";\n Easing[Easing[\"QuadIn\"] = 20] = \"QuadIn\";\n Easing[Easing[\"QuadOut\"] = 21] = \"QuadOut\";\n Easing[Easing[\"QuartInOut\"] = 22] = \"QuartInOut\";\n Easing[Easing[\"QuartIn\"] = 23] = \"QuartIn\";\n Easing[Easing[\"QuartOut\"] = 24] = \"QuartOut\";\n Easing[Easing[\"QuintInOut\"] = 25] = \"QuintInOut\";\n Easing[Easing[\"QuintIn\"] = 26] = \"QuintIn\";\n Easing[Easing[\"QuintOut\"] = 27] = \"QuintOut\";\n Easing[Easing[\"SineInOut\"] = 28] = \"SineInOut\";\n Easing[Easing[\"SineIn\"] = 29] = \"SineIn\";\n Easing[Easing[\"SineOut\"] = 30] = \"SineOut\";\n})(Easing || (Easing = {}));\nexport class DurationAnimationDefinition {\n constructor(startValue, endValue, duration, easing) {\n this.startValue = startValue;\n this.endValue = endValue;\n this.duration = duration;\n this.easing = easing || Easing.Linear;\n }\n start(time) {\n return new DurationAnimation(this, time);\n }\n getDefaultValue() {\n return this.startValue;\n }\n}\nclass DurationAnimation {\n constructor(definition, startTime) {\n this.definition = definition;\n this.startTime = startTime;\n let easingFn;\n switch (definition.easing) {\n case Easing.BackInOut:\n easingFn = Eases.backInOut;\n break;\n case Easing.BackIn:\n easingFn = Eases.backIn;\n break;\n case Easing.BackOut:\n easingFn = Eases.backOut;\n break;\n case Easing.BounceInOut:\n easingFn = Eases.bounceInOut;\n break;\n case Easing.BounceIn:\n easingFn = Eases.bounceIn;\n break;\n case Easing.BounceOut:\n easingFn = Eases.bounceOut;\n break;\n case Easing.CircInOut:\n easingFn = Eases.circInOut;\n break;\n case Easing.CircIn:\n easingFn = Eases.circIn;\n break;\n case Easing.CircOut:\n easingFn = Eases.circOut;\n break;\n case Easing.CubicInOut:\n easingFn = Eases.cubicInOut;\n break;\n case Easing.CubicIn:\n easingFn = Eases.cubicIn;\n break;\n case Easing.CubicOut:\n easingFn = Eases.cubicOut;\n break;\n case Easing.ElasticInOut:\n easingFn = Eases.elasticInOut;\n break;\n case Easing.ElasticIn:\n easingFn = Eases.elasticIn;\n break;\n case Easing.ElasticOut:\n easingFn = Eases.elasticOut;\n break;\n case Easing.ExpoInOut:\n easingFn = Eases.expoInOut;\n break;\n case Easing.ExpoIn:\n easingFn = Eases.expoIn;\n break;\n case Easing.ExpoOut:\n easingFn = Eases.expoOut;\n break;\n case Easing.Linear:\n easingFn = Eases.linear;\n break;\n case Easing.QuadInOut:\n easingFn = Eases.quadInOut;\n break;\n case Easing.QuadIn:\n easingFn = Eases.quadIn;\n break;\n case Easing.QuadOut:\n easingFn = Eases.quadOut;\n break;\n case Easing.QuartInOut:\n easingFn = Eases.quartInOut;\n break;\n case Easing.QuartIn:\n easingFn = Eases.quartIn;\n break;\n case Easing.QuartOut:\n easingFn = Eases.quartOut;\n break;\n case Easing.QuintInOut:\n easingFn = Eases.quintInOut;\n break;\n case Easing.QuintIn:\n easingFn = Eases.quintIn;\n break;\n case Easing.QuintOut:\n easingFn = Eases.quintOut;\n break;\n case Easing.SineInOut:\n easingFn = Eases.sineInOut;\n break;\n case Easing.SineIn:\n easingFn = Eases.sineIn;\n break;\n case Easing.SineOut:\n easingFn = Eases.sineOut;\n break;\n default:\n easingFn = Eases.linear;\n break;\n }\n this.easing = easingFn;\n }\n getCurrentValue(time) {\n time = time === null ? this.startTime : time;\n let factor = (time - this.startTime) / this.definition.duration;\n factor = this.easing(Math.min(factor, 1));\n return this.definition.startValue + ((this.definition.endValue - this.definition.startValue) * factor);\n }\n isComplete(time) {\n return this.startTime !== null\n ? (time - this.startTime) > this.definition.duration\n : false;\n }\n}\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { find } from \"spry-react/utils/arrayExtensions\";\nexport class TransitionGroup extends React.Component {\n constructor(props) {\n super(props);\n this.childRefs = {};\n this.state = {\n time: null,\n children: props.data.map(child => {\n return {\n key: child.key,\n data: child,\n styleDefinition: null,\n animatedStyle: null,\n isEntering: false,\n isExiting: false\n };\n })\n };\n }\n componentWillReceiveProps(nextProps) {\n this.setState((prevState) => {\n let merged = this.merge(prevState.children, nextProps.data, this.props.willEnter || (item => null), this.props.willExit || ((item, element) => null));\n return { children: merged };\n });\n }\n merge(oldList, newList, onEnter, onExit) {\n /* begin by accepting the position of any new or existing items in the new list */\n let merged = [];\n for (let i = 0; i < newList.length; i++) {\n let newItem = newList[i];\n const existingTransitioningChild = find(oldList, oldItem => oldItem.key == newItem.key);\n if (existingTransitioningChild != null) {\n merged.push({\n ...existingTransitioningChild,\n data: newItem\n });\n }\n else {\n let enterStyleDefinition = onEnter(newItem);\n merged.push({\n key: newItem.key,\n data: newItem,\n styleDefinition: enterStyleDefinition,\n animatedStyle: null,\n isEntering: true,\n isExiting: false\n });\n if (enterStyleDefinition != null && this.hasAnimationDefinition(enterStyleDefinition)) {\n this.startAnimationIfNecessary();\n }\n }\n }\n /* for each item in the old list which is no longer in the new list, find an appropriate position,\n where appropriate is defined as before all other items it was previously before */\n let dependencies = [];\n oldList.filter(oldItem => newList.filter(newItem => newItem.key == oldItem.key).length == 0)\n .forEach((oldItem) => {\n for (let i = 0; i < dependencies.length; i++) {\n dependencies[i].dependencies.push(oldItem.key);\n }\n dependencies.push({ item: oldItem, dependencies: [] });\n });\n for (let i = 0; i < merged.length; i++) {\n let mergedKey = merged[i].key;\n /* if anything depends on the current key, insert it before it */\n for (let j = 0; j < dependencies.length; j++) {\n if (dependencies[j].dependencies.indexOf(mergedKey) >= 0) {\n if (!dependencies[j].item.isExiting) {\n let exitStyleDefinition = onExit(dependencies[j].item.data, this.getChildElement(dependencies[j].item));\n if (exitStyleDefinition && this.hasAnimationDefinition(exitStyleDefinition)) {\n merged.splice(i, 0, {\n key: dependencies[j].item.key,\n data: dependencies[j].item.data,\n styleDefinition: exitStyleDefinition,\n animatedStyle: null,\n isEntering: false,\n isExiting: true\n });\n this.startAnimationIfNecessary();\n }\n }\n else {\n merged.push(dependencies[j].item);\n }\n dependencies.splice(j, 1);\n j--;\n i++;\n }\n }\n }\n for (let i = 0; i < dependencies.length; i++) {\n if (!dependencies[i].item.isExiting) {\n let exitStyleDefinition = onExit(dependencies[i].item.data, this.getChildElement(dependencies[i].item));\n if (exitStyleDefinition && this.hasAnimationDefinition(exitStyleDefinition)) {\n merged.push({\n key: dependencies[i].item.key,\n data: dependencies[i].item.data,\n styleDefinition: exitStyleDefinition,\n animatedStyle: null,\n isEntering: false,\n isExiting: true\n });\n this.startAnimationIfNecessary();\n }\n }\n else {\n merged.push(dependencies[i].item);\n }\n }\n return merged;\n }\n componentDidUpdate() {\n let updatedChildren = [];\n let anyChildrenUpdated = false;\n let shouldStartAnimation = false;\n this.state.children\n .forEach((child) => {\n if (child.isEntering) {\n let childNode = this.getChildElement(child);\n let styleDefinition = child.styleDefinition;\n let animatedStyle = child.animatedStyle;\n if (this.props.didEnter) {\n styleDefinition = this.props.didEnter(child.data, childNode);\n shouldStartAnimation = shouldStartAnimation || this.hasAnimationDefinition(styleDefinition);\n animatedStyle = null;\n }\n updatedChildren.push({\n key: child.key,\n data: child.data,\n styleDefinition: styleDefinition,\n animatedStyle: animatedStyle,\n isEntering: false,\n isExiting: child.isExiting\n });\n anyChildrenUpdated = true;\n }\n else {\n updatedChildren.push(child);\n }\n });\n if (shouldStartAnimation) {\n this.startAnimationIfNecessary();\n }\n if (anyChildrenUpdated) {\n this.setState({ children: updatedChildren });\n }\n }\n getChildElement(child) {\n let childRef = this.childRefs[this.getChildRefKey(child)];\n return ReactDOM.findDOMNode(childRef);\n }\n getChildRefKey(child) {\n return \"child-\" + child.key;\n }\n startAnimationIfNecessary() {\n if (this.animationId == null) {\n let step = (time) => {\n let updatedChildren = [];\n let animationsStillRunning = false;\n for (let i = 0; i < this.state.children.length; i++) {\n let transitioningChild = this.state.children[i];\n if (transitioningChild.styleDefinition == null) {\n updatedChildren.push(transitioningChild);\n }\n else if (transitioningChild.animatedStyle == null) {\n updatedChildren.push({ ...transitioningChild, animatedStyle: this.createAnimatedStyle(transitioningChild.styleDefinition, time) });\n animationsStillRunning = true;\n }\n else if (this.isAnimatedStyleComplete(transitioningChild.animatedStyle, time)) {\n /* note: any children who were exiting and have completed animating, are now removed */\n if (!transitioningChild.isExiting) {\n if (this.props.doneEntering) {\n const transitionedChildStyle = this.props.doneEntering(transitioningChild.data, this.getChildElement(transitioningChild));\n if (transitionedChildStyle)\n transitioningChild = { ...transitioningChild, animatedStyle: transitionedChildStyle };\n }\n updatedChildren.push(transitioningChild);\n }\n }\n else {\n updatedChildren.push(transitioningChild);\n animationsStillRunning = true;\n }\n }\n this.setState({ time, children: updatedChildren });\n if (animationsStillRunning) {\n this.animationId = requestAnimationFrame(step);\n }\n else {\n this.animationId = null;\n }\n };\n this.animationId = requestAnimationFrame(step);\n }\n }\n instanceOfAnimationDefinition(object) {\n return object != null && typeof (object) == \"object\" && 'start' in object;\n }\n instanceOfAnimation(object) {\n return object != null && typeof (object) == \"object\" && 'isComplete' in object;\n }\n hasAnimationDefinition(styleDefinition) {\n for (let key in styleDefinition) {\n if (styleDefinition.hasOwnProperty(key)) {\n let propertyValue = styleDefinition[key];\n if (this.instanceOfAnimationDefinition(propertyValue)) {\n return true;\n }\n }\n }\n return false;\n }\n createAnimatedStyle(styleDefinition, time) {\n let animatedStyle = {};\n for (let key in styleDefinition) {\n if (styleDefinition.hasOwnProperty(key)) {\n let propertyValue = styleDefinition[key];\n if (this.instanceOfAnimationDefinition(propertyValue)) {\n let animation = propertyValue.start(time);\n animatedStyle[key] = animation;\n }\n else {\n animatedStyle[key] = propertyValue;\n }\n }\n }\n return animatedStyle;\n }\n getDefaultStyle(styleDefinition) {\n let defaultStyle = {};\n for (const key in styleDefinition) {\n if (styleDefinition.hasOwnProperty(key)) {\n const propertyValue = styleDefinition[key];\n if (this.instanceOfAnimationDefinition(propertyValue)) {\n defaultStyle[key] = propertyValue.getDefaultValue();\n }\n else {\n defaultStyle[key] = propertyValue;\n }\n }\n }\n return defaultStyle;\n }\n isAnimatedStyleComplete(animatedStyle, time) {\n for (let key in animatedStyle) {\n if (animatedStyle.hasOwnProperty(key)) {\n let propertyValue = animatedStyle[key];\n if (this.instanceOfAnimation(propertyValue)) {\n if (!propertyValue.isComplete(time)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n getCurrentAnimatedStyle(animatedStyle, time) {\n let currentStyle = {};\n for (let key in animatedStyle) {\n if (animatedStyle.hasOwnProperty(key)) {\n let propertyValue = animatedStyle[key];\n if (this.instanceOfAnimation(propertyValue)) {\n let currentValue = propertyValue.getCurrentValue(time);\n currentStyle[key] = currentValue;\n }\n else {\n currentStyle[key] = propertyValue;\n }\n }\n }\n return currentStyle;\n }\n render() {\n return this.state.children.map(transitioningChild => {\n let currentStyle = transitioningChild.animatedStyle != null\n ? this.getCurrentAnimatedStyle(transitioningChild.animatedStyle, this.state.time)\n : this.getDefaultStyle(transitioningChild.styleDefinition);\n let childRef = (node) => {\n this.childRefs[this.getChildRefKey(transitioningChild)] = node;\n if (transitioningChild.data.childRef) {\n transitioningChild.data.childRef(node);\n }\n };\n return this.props.renderChild(transitioningChild.data, currentStyle, childRef, transitioningChild.isExiting);\n });\n }\n}\n","import * as React from \"react\";\nimport FocusLock from 'react-focus-lock';\nimport { ActionButtons } from 'spry-react/ActionButtons/actionButtons';\nimport { Button } from 'spry-react/Buttons/button';\nimport './confirmation.less';\nexport function Confirmation(props) {\n let secondaryContent = null;\n const returnFocus = props.returnFocus === undefined ? true : props.returnFocus;\n if (props.secondaryMessage) {\n secondaryContent = typeof (props.secondaryMessage) === \"string\" ? React.createElement(\"div\", { className: \"multiline-text-ellipsis\" },\n React.createElement(\"p\", { className: \"secondary-content\" }, props.secondaryMessage)) : React.createElement(\"div\", { className: \"secondary-content\" }, props.secondaryMessage);\n }\n const noButton = props.noCaption\n ? React.createElement(Button, { onClick: props.onCancel ?? (() => { }) }, props.noCaption)\n : null;\n return React.createElement(React.Fragment, null,\n React.createElement(FocusLock, { returnFocus: returnFocus },\n React.createElement(\"div\", { className: \"confirmation-box\" + (props.typeClassName ? \" \" + props.typeClassName : \"\"), style: { position: \"relative\", display: \"block\" } },\n React.createElement(\"h3\", null, props.title),\n React.createElement(\"div\", { className: \"primary-content\" },\n React.createElement(\"p\", { role: \"alertdialog\", className: \"l-box-vb\" }, props.message),\n secondaryContent),\n React.createElement(ActionButtons, null,\n noButton,\n React.createElement(Button, { onClick: props.onConfirm, autoFocus: true }, props.yesCaption)))));\n}\nexport function mergeWithDefaultOptions(options) {\n let defaultOptions = null;\n switch (options.type) {\n case \"default\":\n defaultOptions = options;\n break;\n case \"delete\":\n defaultOptions = getDeleteConfirmationDefaultOptions(options);\n break;\n case \"undo\":\n defaultOptions = getUndoConfirmationDefaultOptions(options);\n break;\n case \"cancel\":\n defaultOptions = getCancelConfirmationDefaultOptions(options);\n break;\n case \"warning\":\n defaultOptions = getWarningConfirmationDefaultOptions(options);\n break;\n }\n return {\n typeClassName: options.typeClassName !== undefined ? options.typeClassName : (defaultOptions ? defaultOptions.typeClassName : undefined),\n title: options.title !== undefined ? options.title : (defaultOptions ? defaultOptions.title : undefined),\n message: options.message !== undefined ? options.message : (defaultOptions ? defaultOptions.message : undefined),\n secondaryMessage: options.secondaryMessage !== undefined ? options.secondaryMessage : (defaultOptions ? defaultOptions.secondaryMessage : undefined),\n yesCaption: options.yesCaption !== undefined ? options.yesCaption : (defaultOptions ? defaultOptions.yesCaption : undefined),\n noCaption: options.noCaption !== undefined ? options.noCaption : (defaultOptions ? defaultOptions.noCaption : undefined),\n returnFocus: options.returnFocus !== undefined ? options.returnFocus : (defaultOptions ? defaultOptions.returnFocus : undefined)\n };\n}\nfunction getDeleteConfirmationDefaultOptions(options) {\n const recordName = options.recordName || \"\";\n const titleRecordName = !recordName ? \"\" : Pb.TextHelper.sentenceCase(recordName);\n const messageRecordName = !recordName ? \"\" : (\" \" + recordName.toLowerCase());\n const verb = options.verb || \"Delete\";\n const titleVerb = Pb.TextHelper.sentenceCase(verb);\n const messageVerb = verb.toLowerCase();\n return {\n typeClassName: \"confirm-delete-box\",\n title: titleVerb + (titleRecordName ? \" \" + titleRecordName : \"\") + \"?\",\n message: \"Are you sure you want to \" + messageVerb + \" this\" + messageRecordName + \"?\",\n yesCaption: titleVerb + (titleRecordName ? \" \" + titleRecordName : \"\"),\n noCaption: \"Cancel\"\n };\n}\nfunction getUndoConfirmationDefaultOptions(options) {\n return {\n typeClassName: \"confirm-undo-changes-box\",\n title: \"Undo Changes?\",\n message: \"Are you sure you want to undo your changes?\",\n yesCaption: \"Undo\",\n noCaption: \"Cancel\"\n };\n}\nfunction getCancelConfirmationDefaultOptions(options) {\n return {\n typeClassName: \"cancel-confirmation-box\",\n title: \"Cancel Changes?\",\n message: \"Are you sure you want to cancel your changes?\",\n yesCaption: \"Cancel Changes\",\n noCaption: \"Keep Changes\"\n };\n}\nfunction getWarningConfirmationDefaultOptions(options) {\n return {\n typeClassName: \"warning-confirmation-box\",\n title: options.title || \"Warning\",\n message: options.message,\n yesCaption: options.yesCaption,\n noCaption: options.noCaption\n };\n}\n","import * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { clone } from \"spry-react/utils/arrayExtensions\";\nimport { GenerateId } from \"spry-react/utils/idGenerator\";\nimport { getOpenConfirmationCallback } from \"./getOpenConfirmationCallback\";\n/**\n * useDialogStack manages the state that represents a \"stack\" of open dialogs and provides\n * the required callbacks to manage the state.\n * @param options\n * @returns setState-style array in the following order:\n *\n * openDialog: Function to be called to open a new dialog at the top of the stack. Supports two overrides:\n * 1. Simple render function which is given a closeDialog callback and must return the rendered dialog: `openDialog((closeDialog) => return ());`\n * 2. Lazy-loaded version which can dynamically download a JS bundle on demand and optionially also supports a loader. This is designed to be very similar to React Router's lazy api.\n * ```\n * openDialog(async () => {\n * const { MyDialog } = await import(\"./myDialog\");\n * return {\n * loader: () => apiClient.send(...),\n * renderDialog: (response, closeDialog) => return ()\n * };\n * });\n * ```\n *\n * openDialogs: list of open dialogs.\n *\n * openConfirmation: Function to be called to open a confirmation dialog at the top of the stack.\n *\n * isLazyLoading: boolean indicating if openDialog is currently doing an async load operation.\n */\nexport function useDialogStack(options) {\n const [openDialogs, setOpenDialogs] = useState([]);\n const [isLazyLoading, setIsLazyLoading] = useState(false);\n useEffect(() => {\n function handleDocumentScroll() {\n if (!options?.followPageScrollPosition)\n return;\n let dialogsWithUpdatedTops = [];\n let updated = false;\n openDialogs.forEach(dialog => {\n let top = dialog.top;\n if (window.scrollY < dialog.top) {\n top = window.scrollY;\n updated = true;\n }\n dialogsWithUpdatedTops.push({ ...dialog, top });\n });\n if (updated) {\n setOpenDialogs(dialogsWithUpdatedTops);\n }\n }\n document.addEventListener('scroll', handleDocumentScroll);\n return () => document.removeEventListener('scroll', handleDocumentScroll);\n }, [openDialogs]);\n const openDialog = React.useCallback(async (render) => {\n let renderDialog;\n if (!isLazyDialogCallback(render))\n renderDialog = render;\n else\n renderDialog = await resolveLazyRenderDialog(render);\n setOpenDialogs(prevOpenDialogs => {\n const updatedDialogs = clone(prevOpenDialogs);\n const newDialogKey = `dialog-${GenerateId()}`;\n const newDialogZIndex = Pb.ZIndexer.hasZIndexes() ? Pb.ZIndexer.getNext() : null;\n updatedDialogs.push({\n key: newDialogKey,\n render: renderDialog,\n top: options?.followPageScrollPosition ? window.scrollY : 0,\n zIndex: newDialogZIndex,\n close: () => {\n setOpenDialogs(prevOpenDialogs => {\n const updatedDialogs = prevOpenDialogs.filter(d => d.key !== newDialogKey);\n if (newDialogZIndex)\n newDialogZIndex.dispose();\n return updatedDialogs;\n });\n }\n });\n return updatedDialogs;\n });\n }, [setOpenDialogs]); // NOTE: this callback only depends on setOpenDialogs, which is already guaranteed to be stable, so now the callback is stable too.\n const openConfirmation = React.useMemo(() => getOpenConfirmationCallback(openDialog), [openDialog]);\n return [openDialog, openDialogs, openConfirmation, isLazyLoading];\n async function resolveLazyRenderDialog(render) {\n const expectedPromise = render();\n setIsLazyLoading(true);\n try {\n // It is possible that someone might have passed a RenderDialogCallback in with 0 args,\n // so for backwards compatibility we detect if the return value was not a promise and\n // did not return the expected lazy type.\n const expectedLazy = await Promise.resolve(expectedPromise);\n if (expectedLazy.renderDialog === undefined) {\n return render;\n }\n else {\n if (isLazyDialog(expectedLazy)) {\n const l = await expectedLazy.loader();\n return (closeDialog) => expectedLazy.renderDialog(l, closeDialog);\n }\n else {\n return expectedLazy.renderDialog;\n }\n }\n }\n finally {\n setIsLazyLoading(false);\n }\n }\n function isLazyDialog(lazy) {\n return lazy.loader !== undefined;\n }\n function isLazyDialogCallback(render) {\n // check the number of parameters the render callback takes in, if none, assume it is the lazy dialog callback.\n return render.length === 0;\n }\n}\n","import * as React from \"react\";\nimport { Confirmation, mergeWithDefaultOptions } from \"spry-react/Confirmation/confirmation\";\nexport function getOpenConfirmationCallback(dialogOpener) {\n return (options) => {\n return new Promise(resolve => {\n dialogOpener((closeDialog) => {\n const mergedOptions = mergeWithDefaultOptions(options);\n const onConfirm = () => { resolve(true); closeDialog(); };\n const onCancel = () => { resolve(false); closeDialog(); };\n return React.createElement(\"div\", { className: \"l-dialog-container\", style: { width: \"52em\" } },\n React.createElement(\"div\", { className: \"l-popup\", style: { position: \"relative\", display: \"block\", width: \"100%\" } },\n React.createElement(Confirmation, { typeClassName: mergedOptions.typeClassName, title: mergedOptions.title || \"\", message: mergedOptions.message || \"\", secondaryMessage: mergedOptions.secondaryMessage || \"\", yesCaption: mergedOptions.yesCaption || \"\", noCaption: mergedOptions.noCaption, onConfirm: onConfirm, onCancel: onCancel, returnFocus: mergedOptions.returnFocus })));\n });\n });\n };\n}\n","import classNames from \"classnames\";\nimport * as React from \"react\";\nimport './partialCover.less';\nexport function PartialCover(props) {\n const className = classNames('partial-cover', { 'dark': props.dark });\n return React.createElement(\"div\", { className: className, style: { display: \"block\", zIndex: props.zIndex } });\n}\n","import * as ReactDOM from \"react-dom\";\nimport { getSpryReactDialogRootElement } from \"spry-react/DialogPortal/dialogRoots\";\nexport function DialogPortal(props) {\n const dialogRootNode = getSpryReactDialogRootElement();\n return ReactDOM.createPortal(props.children, dialogRootNode);\n}\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport * as _ from \"underscore\";\nimport { PartialCover } from \"spry-react/PartialCover/partialCover\";\nimport { DialogPortal } from \"spry-react/DialogPortal/dialogPortal\";\nexport function DialogStack(props) {\n const { openDialogs } = props;\n const renderedDialogs = openDialogs.map(dialog => {\n const renderedDialog = dialog.render(() => dialog.close());\n const isSecondaryDialog = openDialogs.indexOf(dialog) > 0 || (Pb.ZIndexer.hasZIndexes() && hasZIndex(dialog.zIndex));\n const isTopmostDialog = hasOpenZIndexedDialogs()\n ? hasZIndex(dialog.zIndex) && dialog.zIndex.zIndex === getHighestZIndex()\n : dialog === openDialogs[openDialogs.length - 1];\n const partialCoverZIndex = hasZIndex(dialog.zIndex) ? dialog.zIndex.zIndex : 1000; //note: the z-index of 1000 is needed because the l-dialog class sets the z-index on dialogs\n const dialogPositionStyle = {\n position: \"absolute\",\n width: \"100%\",\n // note: the z-index of 1000 is needed because while opacity is animating, \n // zindex is treated as 0 (causing the entering dialog to appear below other dialogs) unless it is explicitly set.\n zIndex: hasZIndex(dialog.zIndex) ? dialog.zIndex.zIndex : 1000\n };\n const WrappingElement = props.useAppDialogPortal\n ? DialogPortal\n : React.Fragment;\n return React.createElement(WrappingElement, { key: dialog.key },\n isTopmostDialog && React.createElement(PartialCover, { zIndex: partialCoverZIndex }),\n React.createElement(\"div\", { style: { ...dialogPositionStyle, top: dialog.top }, className: classNames(\"spr-dialog-fade-in\", { \"secondary-dialog-container\": isSecondaryDialog }) }, renderedDialog));\n });\n return props.useAppDialogPortal\n ? React.createElement(React.Fragment, null, renderedDialogs)\n : (React.createElement(\"div\", { style: { width: \"100%\", overflow: \"visible\", height: 0, position: 'absolute' } }, renderedDialogs));\n function hasZIndex(zIndex) {\n return !!zIndex;\n }\n function hasOpenZIndexedDialogs() {\n return Pb.ZIndexer.hasZIndexes() && openDialogs.some((openDialog) => hasZIndex(openDialog.zIndex));\n }\n function getHighestZIndex() {\n const maxZIndex = openDialogs.length > 0\n ? _.max(openDialogs, (openDialog) => hasZIndex(openDialog.zIndex) ? openDialog.zIndex.zIndex : 0).zIndex\n : null;\n return maxZIndex?.zIndex ?? null;\n }\n}\n","import * as React from \"react\";\nexport const BeforeUnloadContext = React.createContext({\n registerBeforeUnload: () => { return () => { }; }\n});\nexport const FlashMessageContext = React.createContext({\n flashMessage: () => { }\n});\nexport const SerialOperationContext = React.createContext({\n startSerialOperation: () => { return null; }\n});\nexport const SetWindowLocationHrefContext = React.createContext({\n setWindowLocationHref: () => { }\n});\n","import * as React from \"react\";\nimport { FeedbackType, SerialOperation } from \"spry-react/SerialOperation/serialOperation\";\nimport { useDialogStack } from \"spry-react/Dialog/useDialogStack\";\nimport { DialogStack } from \"spry-react/Dialog/dialogStack\";\nimport { DialogContextProvider } from \"spry-react/Dialog/dialog\";\nimport { useBeforeUnload } from \"./useBeforeUnload\";\nimport { useFlashMessage } from \"./useFlashMessage\";\nimport { useSerialOperation } from \"./useSerialOperation\";\nimport { useSetWindowLocationHref } from \"./useSetWindowLocationHref\";\nimport { BeforeUnloadContext, FlashMessageContext, SerialOperationContext, SetWindowLocationHrefContext } from \"./appContext\";\nexport function App(props) {\n const [openAppDialog, appDialogs, openConfirmation, isDialogLazyLoading] = useDialogStack({ followPageScrollPosition: true });\n const [registerBeforeUnload] = useBeforeUnload();\n const registerBeforeUnloadContextValue = React.useMemo(() => ({ registerBeforeUnload }), [registerBeforeUnload]);\n const [flashMessage] = useFlashMessage();\n const flashMessageContextValue = React.useMemo(() => ({ flashMessage }), [flashMessage]);\n const [serialOperationState, startSerialOperation] = useSerialOperation();\n const serialOperationContextValue = React.useMemo(() => ({ startSerialOperation }), [startSerialOperation]);\n const [setWindowLocationHref] = useSetWindowLocationHref(startSerialOperation);\n const setWindowLocationHrefContextValue = React.useMemo(() => ({ setWindowLocationHref }), [setWindowLocationHref]);\n const renderedChildren = React.useMemo(() => props.renderChildren(openAppDialog, registerBeforeUnload, flashMessage, openConfirmation, startSerialOperation, setWindowLocationHref), [\n openAppDialog,\n registerBeforeUnload,\n flashMessage,\n openConfirmation,\n startSerialOperation,\n setWindowLocationHref\n ]);\n // We automatically set the feedback type for dialogs that are lazy loading so that the \n // loading banner is displayed while the bundle is downloaded and the loader is being fetched.\n const serialOperation = React.createElement(SerialOperation, { portalId: \"loading-banner\", state: isDialogLazyLoading ? { feedbackType: FeedbackType.LoadingBannerImmediate, isOperationPending: true } : serialOperationState });\n return (React.createElement(DialogContextProvider, { openDialog: openAppDialog, dialogs: appDialogs, openConfirmation: openConfirmation },\n React.createElement(BeforeUnloadContext.Provider, { value: registerBeforeUnloadContextValue },\n React.createElement(FlashMessageContext.Provider, { value: flashMessageContextValue },\n React.createElement(SerialOperationContext.Provider, { value: serialOperationContextValue },\n React.createElement(SetWindowLocationHrefContext.Provider, { value: setWindowLocationHrefContextValue },\n renderedChildren,\n React.createElement(DialogStack, { openDialogs: appDialogs, useAppDialogPortal: true }),\n serialOperation))))));\n}\n","import * as React from \"react\";\nexport function useBeforeUnload() {\n const beforeUnloadCallbacks = React.useRef([]);\n const registerBeforeUnload = React.useCallback((beforeUnload) => {\n beforeUnloadCallbacks.current.push(beforeUnload);\n return () => beforeUnloadCallbacks.current.splice(beforeUnloadCallbacks.current.indexOf(beforeUnload), 1);\n }, [beforeUnloadCallbacks]);\n React.useEffect(() => {\n window.addEventListener(\"beforeunload\", onBeforeUnload);\n return () => {\n window.removeEventListener(\"beforeunload\", onBeforeUnload);\n };\n function onBeforeUnload(event) {\n for (let i = 0; i < beforeUnloadCallbacks.current.length; i++) {\n const beforeUnload = beforeUnloadCallbacks.current[i];\n if (beforeUnload()) {\n const message = \"There are unsaved changes.\";\n (event || window.event).returnValue = message;\n return message;\n }\n }\n }\n }, []);\n return [registerBeforeUnload];\n}\n","import * as React from \"react\";\nexport function useFlashMessage() {\n const flashMessage = React.useCallback((message) => {\n Pb.FlashMessage.show(message);\n }, []);\n return [flashMessage];\n}\n","import * as React from \"react\";\nimport { FeedbackType, buildSerialOperationStarter } from \"spry-react/SerialOperation/serialOperation\";\nexport function useSerialOperation() {\n const [serialOperationState, setSerialOperationState] = React.useState({\n isOperationPending: false,\n feedbackType: FeedbackType.None\n });\n const isOperationPendingRef = React.useRef(false);\n // startSerialOperation needs to be a stable function\n const startSerialOperation = React.useRef(\n // startSerialOperation needs to see the IMMEDIATELY current state. That is, calling setState is not enough because\n // the value of the state will not update until the next render and we need to see the updated value immediately\n // in order to prevent other operations from starting. So we read isOperationPending from a ref and we update the ref\n // every time we update the state.\n buildSerialOperationStarter(() => isOperationPendingRef.current, (newState) => {\n setSerialOperationState(newState);\n isOperationPendingRef.current = newState.isOperationPending;\n })).current;\n return [serialOperationState, startSerialOperation];\n}\n","import * as React from \"react\";\nimport { buildSetWindowLocationHrefCallback } from \"spry-react/SerialOperation/setWindowLocationHref\";\nexport function useSetWindowLocationHref(startSerialOperation) {\n // NOTE: This assumes that startSerialOperation is a stable function that will never change, which is true today.\n const setWindowLocationHref = React.useRef(buildSetWindowLocationHrefCallback(startSerialOperation)).current;\n return [setWindowLocationHref];\n}\n","import { FeedbackType } from \"./serialOperation\";\nexport function buildSetWindowLocationHrefCallback(startSerialOperation) {\n return function setWindowLocationHref(url) {\n startSerialOperation(() => {\n window.location.href = url;\n /* this promise never resolves because we're leaving the page */\n return new Promise(resolve => { });\n }, FeedbackType.LoadingBannerImmediate);\n };\n}\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport { useRefWithFocus } from \"spry-react/utils/hooks/useFocusRef\";\nimport \"./button.less\";\nimport { Icon } from \"spry-react/Icon/icon\";\nconst foregroundColorTable = {\n default: \"default\",\n primary: \"white\",\n subdued: \"subdued\",\n transparent: \"subdued\",\n \"transparent-reverse\": \"white\",\n complementary: \"white\",\n \"white-subdued\": \"subdued\",\n};\nfunction ButtonInternal(props) {\n const buttonHtml = useRefWithFocus(props.focusRef);\n const clickHandler = props.disabled ? undefined : props.onClick;\n const backgroundColor = props.color || \"default\";\n const foregroundColor = props.foregroundColor ?? foregroundColorTable[props.color ?? \"default\"];\n const buttonClasses = classNames(\"button\", {\n \"default-button\": backgroundColor === \"default\" || backgroundColor === \"white-subdued\",\n \"subdued-button\": backgroundColor === \"subdued\",\n \"primary-button\": backgroundColor === \"primary\",\n \"transparent-button\": backgroundColor === \"transparent\",\n \"transparent-button-reverse\": backgroundColor === \"transparent-reverse\",\n \"complementary-button\": backgroundColor === \"complementary\",\n \"button-foreground-default\": foregroundColor === \"default\",\n \"button-foreground-subdued\": foregroundColor === \"subdued\",\n \"button-foreground-dark\": foregroundColor === \"dark\",\n \"button-foreground-white\": foregroundColor === \"white\",\n \"button-tight\": props.padding === \"tight\",\n \"button-wide\": props.padding === \"wide\",\n \"button-no-transform\": props.textTransform === \"none\",\n \"button-full-width\": props.fullWidth,\n \"button-bold\": props.bold,\n \"button-no-top-border\": props.hideTopBorder,\n });\n const hasStartIcon = !!props.startIcon;\n const hasStartIconClass = hasStartIcon &&\n typeof props.startIcon === \"string\" &&\n props.startIcon.length > 0;\n const hasEndIcon = !!props.endIcon;\n const hasEndIconClass = hasEndIcon && typeof props.endIcon === \"string\" && props.endIcon.length > 0;\n const usesNewIcons = !!props.startIconKey ||\n !!props.endIconKey ||\n !!props.startIconContent ||\n !!props.endIconContent;\n return (React.createElement(\"button\", { onClick: clickHandler, className: buttonClasses, disabled: props.disabled, title: props.title, autoFocus: props.autoFocus, ref: buttonHtml },\n usesNewIcons && (React.createElement(\"div\", { style: { display: \"flex\", alignItems: \"center\" } },\n !!props.startIconKey && (React.createElement(\"div\", { className: \"spr-button-icon-max-height-wrapper\", style: { paddingRight: \".9rem\" } },\n React.createElement(Icon, { icon: props.startIconKey }))),\n !!props.startIconContent && (React.createElement(\"div\", { className: \"spr-button-icon-content-wrapper\", style: { paddingRight: \".9rem\" } }, props.startIconContent)),\n props.children,\n !!props.endIconContent && (React.createElement(\"div\", { className: \"spr-button-icon-content-wrapper\", style: { paddingLeft: \".7rem\" } }, props.endIconContent)),\n !!props.endIconKey && (React.createElement(\"div\", { className: \"spr-button-icon-max-height-wrapper\", style: { paddingLeft: \".7rem\" } },\n React.createElement(Icon, { icon: props.endIconKey }))))),\n !usesNewIcons && (React.createElement(React.Fragment, null,\n hasStartIcon && hasStartIconClass && (React.createElement(\"i\", { className: props.startIcon })),\n hasStartIcon && !hasStartIconClass && props.startIcon,\n props.children,\n hasEndIcon && hasEndIconClass && (React.createElement(\"i\", { className: classNames(props.endIcon, \"no-padding-psuedo-elements\"), style: { marginLeft: \"0.5em\" } })),\n hasEndIcon && !hasEndIconClass && props.endIcon))));\n}\nexport function Button(props) {\n return React.createElement(ButtonInternal, { ...props });\n}\nexport function OutlineButton(props) {\n const { children, reverseColor, ...propsRest } = props;\n return (React.createElement(ButtonInternal, { ...propsRest, color: reverseColor ? \"transparent-reverse\" : \"transparent\" }, children));\n}\nexport function LinkButton(props) {\n const { children, ...propsRest } = props;\n return (React.createElement(ButtonInternal, { ...propsRest, color: \"default\", padding: \"tight\", textTransform: \"none\" }, children));\n}\nexport function EditorAddButton(props) {\n const { children, ...propsRest } = props;\n return (React.createElement(ButtonInternal, { ...propsRest, color: \"default\", foregroundColor: \"dark\", textTransform: \"none\", bold: true, startIconContent: React.createElement(Icon, { className: \"spr-editor-add-button-icon\", color: \"auto\", icon: \"add\" }) }, children));\n}\nexport function SubduedEditorAddButton(props) {\n const { children, ...propsRest } = props;\n return (React.createElement(\"div\", { style: { filter: \"brightness(0.75)\" } },\n React.createElement(ButtonInternal, { ...propsRest, color: \"transparent\", padding: \"tight\", textTransform: \"none\" }, children)));\n}\nexport function ButtonSubText(props) {\n return (React.createElement(\"div\", { className: \"subtext-container\" },\n props.text,\n React.createElement(\"span\", null, props.subText)));\n}\n","import * as React from \"react\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\nimport \"./checkboxField.less\";\nimport classNames from \"classnames\";\nexport function CheckboxField(props) {\n const { displayType = 'checkbox' } = props;\n const generatedId = useGeneratedId();\n const id = props.id ?? generatedId;\n const onToggle = props.disabled ? () => { } : (props.onToggle || (() => { }));\n return React.createElement(React.Fragment, null,\n React.createElement(\"span\", null,\n React.createElement(\"div\", { className: classNames(\"check-field\", \"react-check-field\", props.className, {\n \"spr-check-field-type-radio\": displayType === 'radio',\n \"spr-check-field-type-checkbox-attention\": displayType === 'checkbox-attention'\n }), title: props.title },\n React.createElement(\"input\", { id: id, type: \"checkbox\", checked: props.value, disabled: props.disabled, onChange: onToggle, value: \"true\", autoFocus: props.autoFocus, title: props.title }),\n React.createElement(\"label\", { disabled: props.disabled, onClick: onToggle }))));\n}\n","export const checkboxContainer = \"checkbox-container\";\n","import * as React from \"react\";\nimport { useGeneratedId } from 'spry-react/utils/idGenerator';\nimport { CheckboxField } from 'spry-react/Checkbox/checkboxField';\nimport * as styles from 'spry-react/Checkbox/labeledCheckboxStyles';\nimport './labeledCheckbox.less';\nimport { FieldLabel } from \"spry-react/Label/fieldLabel\";\nconst sizes = {\n \"auto\": undefined,\n \"small\": \"1rem\",\n \"normal\": \"1.2rem\",\n};\nexport function LabeledCheckboxField(props) {\n const checkboxIdRef = React.useRef();\n checkboxIdRef.current = useGeneratedId();\n const { title, value, label, labelFontSize, onToggle } = props;\n return (React.createElement(\"div\", { className: styles.checkboxContainer },\n React.createElement(CheckboxField, { title: title, value: value, onToggle: onToggle, id: checkboxIdRef.current, autoFocus: props.autoFocus, disabled: props.disabled, displayType: props.displayType }),\n React.createElement(FieldLabel, { title: title, text: label, htmlFor: checkboxIdRef.current, disabled: props.disabled, style: { fontSize: sizes[labelFontSize ?? 'auto'], minWidth: '0px' } })));\n}\n","import * as React from \"react\";\nimport { findFirstDescendants } from \"../htmlUtils\";\nexport const arrowFocusUpDownParentClass = \"arrow-focus-updown-parent\";\nexport const arrowFocusUpDownItemClass = \"arrow-focus-updown-item\";\nexport const arrowFocusLeftRightParentClass = \"arrow-focus-leftright-parent\";\nexport const arrowFocusLeftRightItemClass = \"arrow-focus-leftright-item\";\n/**\n * Sets up a keydown handler to manage moving focus between items in a container.\n * Focus can be controlled with the up/down or left/right arrow keys.\n * The focusable items must have `tabIndex={-1}` and either arrowFocusUpDownItemClass\n * or arrowFocusLeftRightItemClass in the class names. The items must be contained in\n * a parent container with arrowFocusUpDownParentClass or arrowFocusLeftRightParentClass\n * in the class names. The children do not have to be direct descendants of the parent.\n *\n * When a child is focused, this keydown handler will move focus to the next or previous child.\n * If a child is not focused, this keydown handler no-ops. That means it is the component's responsibility\n * to set focus to the first item before this keydown handler will take effect.\n * When the shouldWrap settings are false, this keydown handler will not move focus and will not\n * preventDefault or stopPropagation of the keydown event if you are on the first or last item.\n *\n * useArrowKeyFocus handlers can be nested. For example you could do left/right handling inside of\n * up/down handling or up/down handling inside of up/down handling. But in nested scenarios the keydown\n * handler will NOT automatically move focus between the nested items, it is the component's job to move\n * the focus between the containers and then the handler will take over from there.\n * @returns a keyDown handler function to be passed to your container's `onKeyDown` prop.\n */\nexport function useArrowKeyFocus(args) {\n const { arrowMode, nextShouldWrap, prevShouldWrap } = args;\n const thisHandleKeyDown = React.useCallback((e) => {\n handleKeyDown(e, args);\n }, [arrowMode, nextShouldWrap, prevShouldWrap]);\n return thisHandleKeyDown;\n}\nfunction handleKeyDown(e, args) {\n const { arrowMode } = args;\n if ((arrowMode === \"UpDown\" && !(e.key === \"ArrowDown\" || e.key === \"ArrowUp\"))\n || (arrowMode === \"LeftRight\" && !(e.key === \"ArrowLeft\" || e.key === \"ArrowRight\"))) {\n return;\n }\n const focused = document.activeElement;\n if (focused === null)\n return;\n const arrowFocusParentClass = arrowMode === \"UpDown\"\n ? arrowFocusUpDownParentClass\n : arrowFocusLeftRightParentClass;\n const arrowFocusItemClass = arrowMode === \"UpDown\"\n ? arrowFocusUpDownItemClass\n : arrowFocusLeftRightItemClass;\n const focusedItem = focused.closest(`.${arrowFocusItemClass}`);\n if (focusedItem === null)\n return;\n const parent = focusedItem.closest(`.${arrowFocusParentClass}`);\n if (parent === null)\n return;\n const items = findFirstDescendants(parent, `.${arrowFocusItemClass}`);\n const currentIndex = findIndex(focusedItem, items);\n if (currentIndex === null)\n return;\n const nextIndex = getNextIndex(e, args, items, currentIndex);\n if (nextIndex === null)\n return;\n items[nextIndex].focus();\n e.preventDefault();\n e.stopPropagation();\n}\nfunction getNextIndex(e, args, items, currentIndex) {\n const arrowMode = args.arrowMode;\n const nextShouldWrap = args.nextShouldWrap ?? true;\n const prevShouldWrap = args.prevShouldWrap ?? false;\n const isForward = (arrowMode === \"UpDown\" && e.key === \"ArrowDown\")\n || (arrowMode === \"LeftRight\" && e.key === \"ArrowRight\");\n let nextIndex = null;\n if (isForward) {\n nextIndex = currentIndex + 1;\n if (nextIndex >= items.length) {\n if (nextShouldWrap)\n nextIndex = 0;\n else\n return null;\n }\n }\n else {\n nextIndex = currentIndex - 1;\n if (nextIndex < 0) {\n if (prevShouldWrap)\n nextIndex = items.length - 1;\n else\n return null;\n }\n }\n return nextIndex;\n}\nfunction findIndex(el, items) {\n let currentIndex = null;\n for (let i = 0; i < items.length; i++) {\n if (items[i] === el) {\n currentIndex = i;\n break;\n }\n }\n return currentIndex;\n}\n","import \"./contextMenu.less\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Icon } from \"spry-react/Icon/icon\";\nimport { Link } from \"spry-react/Link/link\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\nimport { getAbsolutePostion, getRelativePosition, HorizontalAlignment, parseOffset, VerticalAlignment, } from \"spry-react/utils/positioning\";\nimport FocusLock from \"react-focus-lock\";\nimport { useUpdateEffect } from \"spry-react/utils/hooks/useUpdateEffect\";\nimport { getDataDashProps } from \"spry-react/utils/getDataDashProps\";\nimport classNames from \"classnames\";\nimport { arrowFocusUpDownItemClass, arrowFocusUpDownParentClass, useArrowKeyFocus, } from \"spry-react/utils/hooks/useArrowKeyFocus\";\nimport { FlatChildren } from \"spry-react/utils/flatChildren\";\n/** Renders a ContextMenu consisting of `ContextMenuItem` and `ContextMenuHeader` children.\n * If your context menu items have icons, an icon gutter will be displayed on all items (whether they have an icon or not).\n * If your context menu items do not have icons, the icon gutter will be hidden.\n */\nexport const ContextMenu = React.forwardRef((props, ref) => {\n const upDownFocusHandler = useArrowKeyFocus({\n arrowMode: \"UpDown\",\n });\n const memoShouldShowIconGutter = React.useMemo(() => shouldShowIconGutter(props.children), [props.children]);\n return (React.createElement(\"div\", { ref: ref, className: `spr-context-menu ${memoShouldShowIconGutter ? \"\" : \"spr-context-menu-no-icon-gutter\"} ${arrowFocusUpDownParentClass}`, role: \"menu\", onKeyDown: upDownFocusHandler }, props.children));\n});\nContextMenu.displayName = \"ContextMenu\";\nfunction shouldShowIconGutter(children) {\n return FlatChildren.some(children, (c) => FlatChildren.isChildOfType(c, ContextMenuItem) &&\n (c.props.icon !== undefined || !!c.props.iconContent));\n}\n/**\n * Renders a menu item consisting of text and an optional icon displayed in the icon gutter. Menu items have either:\n * - an `onClick` handler\n * - a url\n * - a submenu\n * SubMenus open on mouse hover and can be toggled open and closed on click, enter key, or space bar. They also open on\n * right arrow and close on left arrow and ESC.\n */\nexport function ContextMenuItem(props) {\n const [state, setState] = React.useState({\n subMenuTargetElement: null,\n });\n const isSubMenuProps = getIsSubMenuProps(props);\n const isSubMenuOpen = state.subMenuTargetElement !== null;\n const menuItemRef = React.useRef(null);\n // when submenu closes, re-focus the menu item\n useUpdateEffect(() => {\n if (isSubMenuProps && !isSubMenuOpen) {\n menuItemRef.current?.focus();\n }\n }, [isSubMenuOpen]);\n const content = (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: \"spr-context-menu-ico-gutter\" },\n props.icon && props.iconContent === undefined && (React.createElement(Icon, { icon: props.icon, className: \"spr-context-menu-ico\", size: \"normal\", color: \"auto\", singleColor: true })),\n props.iconContent),\n React.createElement(\"div\", { className: \"spr-context-menu-text\" }, props.text),\n React.createElement(\"div\", { className: \"spr-context-menu-submenu-gutter\" }, isSubMenuProps && React.createElement(Icon, { icon: \"open-right\" }))));\n const linkClasses = classNames(\"spr-context-menu-item\", { [`${arrowFocusUpDownItemClass}`]: !props.disabled }, props.className);\n if (!isSubMenuProps) {\n const linkProps = buildLinkProps();\n return (React.createElement(Link, { ...linkProps, className: linkClasses, role: \"menuitem\", tabIndex: -1, anchorRef: menuItemRef, ...getDataDashProps(props) }, content));\n }\n else {\n return (React.createElement(\"div\", { style: { position: \"relative\" }, onMouseEnter: props.disabled ? undefined : handleItemWithSubMenuMouseEnter, onMouseLeave: props.disabled ? undefined : handleItemWithSubMenuMouseLeave },\n React.createElement(\"a\", { className: linkClasses, tabIndex: -1, \"aria-haspopup\": true, \"aria-expanded\": isSubMenuOpen, role: \"menuitem\", disabled: props.disabled, title: props.title, ref: menuItemRef, onClick: props.disabled ? undefined : handleItemWithSubMenuClick, onKeyDown: props.disabled ? undefined : handleItemWithSubMenuKeyDown }, content),\n state.subMenuTargetElement && (React.createElement(SubContextMenuContainer, { relativeElement: state.subMenuTargetElement }, props.children))));\n }\n function handleItemWithSubMenuMouseEnter(e) {\n setState({ subMenuTargetElement: e.currentTarget });\n }\n function handleItemWithSubMenuMouseLeave(_e) {\n setState({ subMenuTargetElement: null });\n }\n function handleItemWithSubMenuClick(e) {\n const currentTarget = e.currentTarget;\n setState((prevState) => {\n return {\n subMenuTargetElement: prevState.subMenuTargetElement\n ? null\n : currentTarget,\n };\n });\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n }\n function handleItemWithSubMenuKeyDown(e) {\n const currentTarget = e.currentTarget;\n if (e.key === \"Enter\" || e.key === \" \") {\n setState((prevState) => {\n return {\n subMenuTargetElement: prevState.subMenuTargetElement\n ? null\n : currentTarget,\n };\n });\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n }\n else if (e.key === \"ArrowRight\" && !isSubMenuOpen) {\n setState({ subMenuTargetElement: currentTarget });\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n }\n else if (e.key === \"ArrowLeft\" && isSubMenuOpen) {\n setState({ subMenuTargetElement: null });\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n }\n else if (e.key === \"Escape\" && isSubMenuOpen) {\n setState({ subMenuTargetElement: null });\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n }\n }\n function buildLinkProps() {\n const baseProps = { disabled: props.disabled, title: props.title };\n if (isOnClickProps(props))\n return { ...baseProps, onClick: props.onClick };\n else if (isUrlProps(props))\n return {\n ...baseProps,\n url: props.url,\n targetNewWindow: props.targetNewWindow,\n };\n else if (isClientSideUrlProps(props))\n return {\n ...baseProps,\n clientSideUrl: props.clientSideUrl,\n replace: props.replace,\n state: props.state,\n preventScrollReset: props.preventScrollReset,\n relative: props.relative,\n };\n else\n throw new Error(\"Unsupported props type. Your ContextMenuItem needs either an onClick or a url or a submenu.\");\n }\n function isOnClickProps(linkProps) {\n return linkProps.onClick !== undefined;\n }\n function isUrlProps(linkProps) {\n return linkProps.url !== undefined;\n }\n function isClientSideUrlProps(linkProps) {\n return (linkProps.clientSideUrl !==\n undefined);\n }\n function getIsSubMenuProps(linkProps) {\n return linkProps.children !== undefined;\n }\n}\nfunction isContextMenuHeaderProps(props) {\n return props.headerText !== undefined;\n}\n/** Renders a header in the context menu. */\nexport function ContextMenuHeader(props) {\n return React.createElement(\"div\", { className: \"spr-context-menu-header\" }, props.headerText);\n}\nfunction SubContextMenuContainer(props) {\n const subMenuElementRef = React.useRef(null);\n // element is initially positioned way off the screen so we can get it's rendered size and position it next.\n const [state, setState] = React.useState({\n top: `-${Number.MAX_VALUE}px`,\n left: \"0\",\n isPositioned: false,\n });\n const upDownFocusHandler = useArrowKeyFocus({ arrowMode: \"UpDown\" });\n // position the menu relative to the menu item that opened it.\n React.useEffect(() => {\n const position = positionMenu('8px');\n if (position)\n setState({ ...position, isPositioned: true });\n }, [props.relativeElement]);\n // focus the first sub menu item when the sub menu opens\n React.useEffect(() => {\n if (!state.isPositioned)\n return;\n const firstChild = subMenuElementRef.current?.querySelector(`.${arrowFocusUpDownItemClass}`);\n firstChild?.focus();\n }, [state.isPositioned]);\n const { top, left, maxHeight } = state;\n const memoShouldShowIconGutter = React.useMemo(() => shouldShowIconGutter(props.children), [props.children]);\n const subMenuContainer = (React.createElement(\"div\", { className: `spr-context-menu ${memoShouldShowIconGutter ? \"\" : \"spr-context-menu-no-icon-gutter\"} ${arrowFocusUpDownParentClass}`, onKeyDown: upDownFocusHandler, style: {\n overflow: \"auto\",\n position: \"absolute\",\n maxHeight,\n top,\n left,\n zIndex: 9999,\n }, ref: subMenuElementRef, role: \"menu\" }, props.children));\n const portalContainer = document.getElementsByTagName(\"body\")[0];\n return ReactDOM.createPortal(subMenuContainer, portalContainer);\n function positionMenu(viewPortOffset) {\n if (subMenuElementRef.current === null)\n return;\n const viewPortOffsetOption = parseOffset(viewPortOffset ?? '0px');\n const relativeRect = props.relativeElement.getBoundingClientRect();\n const elementRect = subMenuElementRef.current.getBoundingClientRect();\n const top = getTop(props.relativeElement, elementRect, viewPortOffsetOption);\n const left = getLeft(relativeRect, elementRect);\n const maxHeight = window.scrollY + window.innerHeight - top - viewPortOffsetOption;\n return {\n top: `${top}px`,\n left: `${left}px`,\n maxHeight: `${maxHeight}px`\n };\n }\n function getTop(relativeElement, elementRect, viewPortOffset) {\n const relativeRect = props.relativeElement.getBoundingClientRect();\n const border = parseFloat(getComputedStyle(relativeElement.firstElementChild ?? relativeElement).borderTopWidth.replace('px', ''));\n const scrollFactor = window.scrollY;\n //Case 1: It fits entirely below it's parent.\n if (relativeRect.top + elementRect.height < window.innerHeight)\n return relativeRect.top + scrollFactor;\n const gap = relativeRect.top + elementRect.height + viewPortOffset + border - window.innerHeight;\n //Case 2: It will not fit even if slid up so give it the top of the window.\n if (gap > relativeRect.top)\n return viewPortOffset + scrollFactor;\n //Case 3: It will fit if slid up the distance of overhang.\n return relativeRect.top - gap - border + scrollFactor;\n }\n function getLeft(relativeRect, elementRect) {\n const hasRoomToAlignToTheRightOfRelativeElement = relativeRect.right + elementRect.width < window.innerWidth;\n const hasRoomToAlignToTheLeftOfRelativeElement = relativeRect.left - elementRect.width > 0;\n const leftPxIfAligningToRight = relativeRect.right;\n const leftPxIfAligningToLeft = relativeRect.left - elementRect.width;\n if (hasRoomToAlignToTheRightOfRelativeElement)\n return leftPxIfAligningToRight;\n else if (hasRoomToAlignToTheLeftOfRelativeElement)\n return leftPxIfAligningToLeft;\n else\n return leftPxIfAligningToRight;\n }\n}\nfunction isRelativePosition(position) {\n return position.relativeElement !== undefined;\n}\nconst contextMenuOpeningEventName = \"contextMenu.opening\";\n/** Class that allows you to open and close a context menu.\n * `ContextMenuContainer` manages the open state, but it gives you\n * an instance of a `ContextMenuOpener` through a ref so you can\n * control that state procedurally.\n */\nexport class ContextMenuOpener {\n constructor(setPosition, getPosition, setData) {\n this.setPosition = setPosition;\n this.getPosition = getPosition;\n this.setData = setData;\n }\n /** Opens the context menu at the given position for the given optional \"data\" (ex: like a grid RowKey) */\n open(position, data) {\n this.setData(data);\n this.setPosition(position);\n // If this open is being called on an already open menu, then it's re-positioning it.\n // The ContextMenuContainer detects that it is being repositioned and knows not to close itself\n // in response to the contextMenuOpening event.\n document.dispatchEvent(new Event(contextMenuOpeningEventName));\n }\n close() {\n this.setData(null);\n this.setPosition(null);\n }\n toggleOpen(position) {\n if (this.isOpen)\n this.close();\n else\n this.open(position);\n }\n get isOpen() {\n return this.getPosition() !== null;\n }\n}\n/** Creates a Ref that holds a ContextMenuOpener class instance. */\nexport function useContextMenuOpenerRef() {\n return React.useRef();\n}\n// element is initially positioned way off the screen so we can get it's rendered size and position it next.\nconst initialPositioning = {\n absTop: `-${Number.MAX_VALUE}px`,\n absLeft: '0',\n maxHeight: 'unset'\n};\n/**\n * Manages the open state and positioning of a `ContextMenu`.\n * Up and Down arrow keys move the focused menu item. ANY click (inside or outside the menu) and\n * the ESC key close the menu.\n */\nexport function ContextMenuContainer(props) {\n const [position, setPositionState] = React.useState(null);\n const [data, setData] = React.useState(null);\n const [key, setKey] = React.useState(null);\n const [menuAbsPosition, setMenuAbsPosition] = React.useState({\n absTop: initialPositioning.absTop,\n absLeft: initialPositioning.absLeft,\n maxHeight: initialPositioning.maxHeight\n });\n const currentPositionRef = React.useRef(null);\n const generatedId = useGeneratedId();\n const setPosition = React.useCallback((position) => {\n setPositionState(position);\n currentPositionRef.current = position;\n if (position !== null) {\n setKey(generatedId);\n }\n if (props.onOpenOrClosed) {\n props.onOpenOrClosed(position !== null);\n }\n }, []);\n const children = childrenIsFunction(props.children)\n ? position !== null\n ? props.children(data)\n : undefined\n : props.children;\n const isOpen = position !== null && !!children;\n const menuElementRef = React.useRef(null);\n // position the menu based on the provided positioning information.\n React.useEffect(() => {\n const absPos = positionMenu(position, menuElementRef.current);\n if (absPos) {\n setMenuAbsPosition({ absTop: absPos.top, absLeft: absPos.left, maxHeight: absPos.maxHeight });\n }\n }, [position]);\n // keep the ContextMenuOpener instance current.\n React.useEffect(() => {\n props.contextMenuOpenerRef.current = new ContextMenuOpener(setPosition, () => position, setData);\n }, [props.contextMenuOpenerRef, setPosition, position, setData]);\n // when opened, hook events.\n React.useEffect(() => {\n const onCloseContextMenu = () => {\n // The useEffect will run and hook dom events when the menu is opened or it's position is changed,\n // so `position` will be the closed-over value at the time of the last render.\n // When onCloseContextMenu is called, if the current position is different from the closed-over\n // position, that means THIS menu is being repositioned.\n // If this menu is being repositioned, then we do not want to close it!\n // Otherwise, that means someone clicked out of the menu or a different menu has been opened and\n // this menu should close.\n if (position != currentPositionRef.current)\n return;\n setPosition(null);\n setMenuAbsPosition({\n absTop: initialPositioning.absTop,\n absLeft: initialPositioning.absLeft,\n maxHeight: initialPositioning.maxHeight\n });\n setData(null);\n };\n if (isOpen) {\n window.addEventListener('resize', onCloseContextMenu);\n document.addEventListener(\"click\", onCloseContextMenu);\n document.addEventListener(\"keydown\", handleOpenMenuKeyDown);\n document.addEventListener(contextMenuOpeningEventName, onCloseContextMenu);\n }\n else {\n onCloseContextMenu();\n }\n return () => {\n window.removeEventListener('resize', onCloseContextMenu);\n document.removeEventListener(\"click\", onCloseContextMenu);\n document.removeEventListener(\"keydown\", handleOpenMenuKeyDown);\n document.removeEventListener(contextMenuOpeningEventName, onCloseContextMenu);\n };\n }, [isOpen, position]);\n // hook keydown to relative element and/or menu container to move focus to first menu item on arrow down\n React.useEffect(() => {\n const handleKeyDown = (e) => {\n if (e.key === \"ArrowDown\") {\n const firstChild = menuElementRef.current?.querySelector(`.${arrowFocusUpDownItemClass}`);\n firstChild?.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n };\n const elRefHandleKeyDown = (e) => {\n // when it's the menu element, we only handle the key if the menu element itself got the event,\n // not when the event bubbled from within the menu.\n if (e.target === e.currentTarget)\n handleKeyDown(e);\n };\n if (position !== null && isRelativePosition(position)) {\n position.relativeElement.addEventListener(\"keydown\", handleKeyDown);\n }\n else {\n menuElementRef.current?.addEventListener(\"keydown\", elRefHandleKeyDown);\n }\n return () => {\n if (position !== null && isRelativePosition(position)) {\n position.relativeElement.removeEventListener(\"keydown\", handleKeyDown);\n }\n else {\n menuElementRef.current?.removeEventListener(\"keydown\", elRefHandleKeyDown);\n }\n };\n }, [position]);\n const menu = (React.createElement(\"div\", { key: key, style: {\n position: \"absolute\",\n top: menuAbsPosition.absTop,\n left: menuAbsPosition.absLeft,\n maxHeight: menuAbsPosition.maxHeight,\n zIndex: 9999,\n }, ref: menuElementRef, tabIndex: -1, className: \"spr-context-menu-container\", onClick: () => setPosition(null) }, childrenIsFunction(children) ? children(data) : children));\n const focusLockedMenu = (React.createElement(FocusLock, { key: key, autoFocus: true, shards: position !== null && isRelativePosition(position)\n ? [position.relativeElement]\n : [], returnFocus: position !== null && isRelativePosition(position) }, menu));\n const portaledMenu = isOpen\n ? focusLockedMenu\n : null;\n const portalContainer = document.getElementsByTagName(\"body\")[0];\n return ReactDOM.createPortal(portaledMenu, portalContainer);\n function handleOpenMenuKeyDown(e) {\n if (e.key === \"Escape\") {\n setPosition(null);\n }\n }\n function positionMenu(position, menuElement) {\n if (!menuElement)\n return;\n if (!position)\n return;\n if (isRelativePosition(position)) {\n const relativePosition = getRelativePosition(menuElement, position.relativeElement, position.horizontalAlignment || HorizontalAlignment.AlignLeftSides, position.verticalAlignment || VerticalAlignment.Below, false, {\n alignmentOption: 'GreatestSpace',\n sizeConstraintOption: 'ConstrainToViewPort',\n viewPortOffset: '8px'\n });\n if (relativePosition.finalVerticalAlignment == VerticalAlignment.Above) {\n menuElement.style.boxShadow = 'rgba(0, 0, 0, 0.3) 0px 4px 14px 1px';\n }\n return {\n top: `${relativePosition.top}px`,\n left: `${relativePosition.left}px`,\n maxHeight: `${relativePosition.maxHeight}px`\n };\n }\n else {\n const adjustedPosition = getAbsolutePostion(menuElement, position.x, position.y, '8px');\n return {\n top: `${adjustedPosition.y}px`,\n left: `${adjustedPosition.x}px`,\n maxHeight: `${adjustedPosition.maxHeight}px`\n };\n }\n }\n function childrenIsFunction(children) {\n return children instanceof Function;\n }\n}\n","import { useContextMenuOpenerRef } from \"./contextMenu\";\nexport function UseContextMenuOpenerRefClassWrapper(props) {\n const contextMenuOpener = useContextMenuOpenerRef();\n return props.children(contextMenuOpener) ?? null;\n}\n","import * as React from \"react\";\nexport const SpryReactDialogRootElementId = 'modal-root';\nexport function SpryReactDialogRoot() {\n return (React.createElement(\"div\", { id: SpryReactDialogRootElementId, style: { width: \"100%\", overflow: \"visible\", height: 0, position: 'absolute' } }));\n}\n","import * as React from \"react\";\nimport { SpryReactDialogRoot, SpryReactDialogRootElementId } from \"spry-react/DialogPortal/spryReactDialogRoot\";\nimport { SpryDialogRoot } from \"spry-react/DialogPortal/spryDialogRoot\";\nexport function getSpryReactDialogRootElement() {\n const dialogRootNode = document.getElementById(SpryReactDialogRootElementId);\n if (!dialogRootNode)\n throw new Error('You must render to open spry-react and spry dialogs.');\n return dialogRootNode;\n}\n;\nexport function DialogRoots() {\n return (React.createElement(React.Fragment, null,\n React.createElement(SpryReactDialogRoot, null),\n React.createElement(SpryDialogRoot, null)));\n}\n","import * as React from \"react\";\nexport const SpryDialogRootElementId = 'spry-dialog-root';\nexport function SpryDialogRoot() {\n return (React.createElement(\"div\", { id: SpryDialogRootElementId, \"data-dialog\": \"here\", \"data-confirmation-container\": true, style: { width: \"100%\", overflow: \"visible\", height: 0, position: 'absolute' } }));\n}\n","import * as React from \"react\";\nimport classnames from \"classnames\";\nimport './dialogHeader.less';\nexport class Props {\n}\nexport function DialogBlueHeader(props) {\n const lineClasses = !!props.line2\n ? \"dialog-header-blue-two-lines\"\n : \"dialog-header-blue-one-line\";\n const allClasses = classnames(\"dialog-header\", \"dialog-header-blue\", \"l-box-h-2x\", \"l-box-v-1-2x\", lineClasses);\n return (React.createElement(\"div\", { className: allClasses },\n React.createElement(\"h2\", { className: 'text-ellipsis' }, props.line1),\n React.createElement(\"h4\", { className: 'text-ellipsis' }, props.line2)));\n}\n","import * as React from \"react\";\nexport function DialogSimpleHeader(props) {\n return React.createElement(\"div\", { className: 'dialog-header l-box-h-2x' }, React.isValidElement(props.text)\n ? props.text\n : React.createElement(\"h2\", null, props.text));\n}\n","import * as React from \"react\";\nimport { Link } from \"spry-react/Link/link\";\nexport function DialogSingleTab(props) {\n return React.createElement(\"nav\", { className: \"dialog-tab-strip\" },\n React.createElement(\"ul\", null,\n React.createElement(\"li\", { className: \"dialog-tab-strip-selected\" },\n React.createElement(Link, { onClick: null }, props.text))));\n}\n","import './dialog.less';\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport FocusLock from 'react-focus-lock';\nimport { DialogBlueHeader } from \"spry-react/Dialog/dialogBlueHeader\";\nimport { DialogSimpleHeader } from \"spry-react/Dialog/dialogSimpleHeader\";\nimport { DialogSingleTab } from \"spry-react/Dialog/dialogSingleTab\";\nimport { SpryDialogRootElementId } from \"spry-react/DialogPortal/spryDialogRoot\";\nimport { colors } from \"spry-react/utils/colors\";\nexport const DialogContext = React.createContext({\n openDialog: () => { },\n openConfirmation: async () => false,\n isAnyDialogOpen: false\n});\n/** Wraps the rendering of DialogContext.Provider to ensure consistency in how the useDialogStack hook output is mapped to the dialog context provider. */\nexport function DialogContextProvider(props) {\n const value = React.useMemo(() => ({\n openDialog: props.openDialog,\n openConfirmation: props.openConfirmation,\n isAnyDialogOpen: props.dialogs.length > 0\n }), [props.openDialog, props.openConfirmation, props.dialogs]);\n return (React.createElement(DialogContext.Provider, { value: value }, props.children));\n}\n/** Renders a dialog, usually caused by a callback in the App component. */\nexport function Dialog(props) {\n const dialogClassNames = classNames('l-dialog', {\n 'l-dialog-without-padding': props.withoutPadding,\n 'l-dialog-with-top-border': props.withTopBorder,\n // the l-dialog class will automatically give the dialog a top border when inside of a secondary-dialog-container\n // adding this class overrides that behavior and removes the top border\n 'l-dialog-without-top-border': props.withTopBorder !== undefined && !props.withTopBorder,\n });\n return (React.createElement(\"div\", { className: \"l-dialog-container\", style: { width: props.width || \"75em\" }, role: \"dialog\", \"aria-modal\": true },\n React.createElement(\"div\", { className: dialogClassNames, style: {\n position: \"relative\",\n display: \"block\",\n width: \"100%\",\n backgroundColor: props.dialogStyle === 'white'\n ? colors[\"background-white\"]\n : undefined\n } },\n React.createElement(FocusLock, { returnFocus: props.returnFocus === undefined ? true : props.returnFocus, whiteList: shouldDialogFocusLockWhiteListNode },\n header(),\n props.singleTabText ? React.createElement(DialogSingleTab, { text: props.singleTabText }) : null,\n props.children))));\n function header() {\n const { header } = props;\n if (!header)\n return null;\n if (isTwoLineHeader(header))\n return React.createElement(DialogBlueHeader, { line1: header.line1, line2: header.line2 });\n return React.createElement(DialogSimpleHeader, { text: header });\n }\n function isTwoLineHeader(header) {\n if (!header)\n return false;\n return typeof (header) !== 'string' && 'line1' in header;\n }\n}\nexport function SimpleDialog(props) {\n const { close, children, ...dialogProps } = props;\n return React.createElement(Dialog, { ...dialogProps },\n children,\n React.createElement(\"div\", { className: \"pure-g\" },\n React.createElement(\"div\", { className: \"pure-u-1\" },\n React.createElement(\"div\", { className: \"action-buttons l-box-vt-2x\" },\n React.createElement(\"button\", { className: \"pure-button pure-button-primary\", onClick: close }, \"Close\")))));\n}\n/*\n is a focus manager. It allows you to focus things inside the current active , and will not allow you to focus things outside of the current active .\nThis can be problematic if you have an active on the page, and need to render something with focusable elements that is not nested in the current , and cannot create its own .\nExamples:\n1) A Spry dialog opened from a Spry-React dialog\n2) A third-party modal (e.g. CBOSS)\n\nThe whitelist function provided to determines if a node should be MANAGED by FocusLock. That means:\n If a whitelisted node is inside the current active FocusLock, it can be focused.\n If a whitelisted node is outside the current active FocusLock, it cannot be focused.\n\nOur default whitelist is:\n Anything rendered within our react '#root', excluding spry dialogs (which are rendered within #root, but cannot/should not be managed by FocusLock).\n\nsetShouldDialogFocusLockWhiteListNode is provided in case:\n Your react root element is different than '#root'.\n You do not have spry dialogs.\n You have other non-FocusLock-manageable elements rendered WITHIN your root.\n*/\nexport var shouldDialogFocusLockWhiteListNode = defaultShouldDialogFocusLockWhiteListNode;\nexport function setShouldDialogFocusLockWhiteListNode(newShouldFocusLockWhiteListNode) {\n shouldDialogFocusLockWhiteListNode = newShouldFocusLockWhiteListNode;\n}\nfunction defaultShouldDialogFocusLockWhiteListNode(node) {\n return (document.getElementById('root')?.contains(node) && !document.getElementById(SpryDialogRootElementId)?.contains(node)) ?? false;\n}\n","import * as React from \"react\";\nimport { ErrorDialog } from \"spry-react/Errors/errorDialog\";\nimport { Error403Message } from \"./errorMessages\";\nexport function Render403ErrorDialog(close, customMessage) {\n return React.createElement(ErrorDialog, { close: close, singleTabText: \"Forbidden\" },\n React.createElement(Error403Message, { customMessage: customMessage }));\n}\n","import * as React from \"react\";\nimport { ErrorDialog } from \"spry-react/Errors/errorDialog\";\nimport { Error404Message } from \"./errorMessages\";\nexport function Render404ErrorDialog(close) {\n return React.createElement(ErrorDialog, { close: close, singleTabText: \"Page Not Found\" },\n React.createElement(Error404Message, null));\n}\n","import * as React from \"react\";\nimport { ErrorDialog } from \"spry-react/Errors/errorDialog\";\nimport { Error500Message } from \"./errorMessages\";\nexport function Render500ErrorDialog(close, customMessage) {\n return React.createElement(ErrorDialog, { close: close, singleTabText: \"Unexpected Error\" },\n React.createElement(Error500Message, { customMessage: customMessage }));\n}\n","import * as React from 'react';\nimport { Icon } from 'spry-react/Icon/icon';\nimport './errorPageBody.less';\n/** Renders a centered ErrorLayout with the given `icon` and `errorMessage`. */\nexport function ErrorPageBody(props) {\n return (React.createElement(\"div\", { className: \"error-page-body\" },\n React.createElement(ErrorLayout, { ...props })));\n}\n/** Renders the `icon` to the left of the `errorMessage` component. */\nexport function ErrorLayout(props) {\n return (React.createElement(\"div\", { className: \"icon-message-wrapper\" },\n React.createElement(\"div\", { className: \"icon-holder\" }, isIconInfo(props.icon) ? React.createElement(Icon, { icon: props.icon.iconKey, size: 'auto', color: props.icon.color }) : props.icon),\n React.createElement(\"div\", { className: \"error-message-holder\", style: { width: props.messageWidth } }, props.errorMessage)));\n function isIconInfo(icon) {\n return icon.iconKey !== undefined;\n }\n}\n","import * as React from \"react\";\nimport { SimpleDialog } from \"spry-react/Dialog/dialog\";\nimport { ErrorLayout } from \"./errorPageBody\";\nimport { colors } from \"spry-react/utils/colors\";\nexport function ErrorDialog(props) {\n return React.createElement(SimpleDialog, { singleTabText: props.singleTabText, close: props.close },\n React.createElement(ErrorLayout, { icon: { iconKey: 'cancel',\n color: colors['error']\n }, errorMessage: props.children, messageWidth: \"100%\" }));\n}\n","import * as React from \"react\";\nimport { useRefWithFocus } from \"spry-react/utils/hooks/useFocusRef\";\nimport \"./errorDisplayList.less\";\n/**\n * Renders an error display block.\n */\nexport function ErrorDisplayList(props) {\n const visible = props.errors.length > 0;\n // When every error provided is a string, duplicate messages are displayed once with a count displayed\n let displayedErrorMessages = props.errors;\n if (props.errors.every(error => typeof error === 'string')) {\n const errorMessageCountMap = props.errors.reduce((map, currentErrorMessage) => {\n map.set(currentErrorMessage, (map.get(currentErrorMessage) ?? 0) + 1);\n return map;\n }, new Map());\n displayedErrorMessages = [];\n errorMessageCountMap.forEach((count, message) => {\n displayedErrorMessages.push(count > 1 ? `${message} (${count} occurrences)` : message);\n });\n }\n const errorItems = displayedErrorMessages.map((e, index) => React.createElement(\"li\", { key: index }, e));\n const htmlRef = useRefWithFocus(props.focusRef);\n return (React.createElement(\"div\", { className: `validation-summary ${props.allValidationsAreWarnings ? 'validation-summary-warnings' : 'validation-summary-errors'}`, style: { display: visible ? 'block' : 'none' }, tabIndex: 0, ref: htmlRef },\n React.createElement(\"ul\", { \"aria-label\": \"Errors\" }, errorItems)));\n}\n","import { clone, mapFind } from \"spry-react/utils/arrayExtensions\";\nexport class ErrorList {\n constructor(errors) {\n this.errors = clone(errors);\n }\n getList() {\n return this.errors.map(e => e.errorMessage);\n }\n getPropertyErrors() {\n return this.errors;\n }\n getErrors(key) {\n return this.errors.filter(e => e.propertyName.toLowerCase() === key.toLowerCase());\n }\n getErrorMessage(key) {\n return this.errors.filter(e => e.propertyName.toLowerCase() === key.toLowerCase()).map(e => e.errorMessage).join('\\r\\n');\n }\n getFirstErrorMessage(...keys) {\n return mapFind(keys, key => this.getErrorMessage(key), errorMessage => !!errorMessage);\n }\n getErrorsForPrefix(prefix) {\n const errors = {};\n this.errors.filter(e => e.propertyName.toLowerCase().indexOf(prefix.toLowerCase() + '.') == 0).forEach(e => {\n let propertyWithoutPrefix = e.propertyName.substr(e.propertyName.lastIndexOf('.') + 1);\n propertyWithoutPrefix = propertyWithoutPrefix.substr(0, 1).toLowerCase() + propertyWithoutPrefix.substr(1);\n if (errors.hasOwnProperty(propertyWithoutPrefix))\n errors[propertyWithoutPrefix].push(e);\n else\n errors[propertyWithoutPrefix] = [e];\n });\n return errors;\n }\n getErrorMessages(prefix) {\n let errors = {};\n this.errors.filter(e => e.propertyName.toLowerCase().indexOf(prefix.toLowerCase() + '.') == 0).forEach(e => {\n let propertyWithoutPrefix = e.propertyName.substr(e.propertyName.lastIndexOf('.') + 1);\n propertyWithoutPrefix = propertyWithoutPrefix.substr(0, 1).toLowerCase() + propertyWithoutPrefix.substr(1);\n if (errors.hasOwnProperty(propertyWithoutPrefix))\n errors[propertyWithoutPrefix] = errors[propertyWithoutPrefix] + '\\r\\n' + e.errorMessage;\n else\n errors[propertyWithoutPrefix] = e.errorMessage;\n });\n return errors;\n }\n getSubList(prefix) {\n return new ErrorList(this.errors\n .filter(e => e.propertyName.toLowerCase().indexOf(prefix.toLowerCase() + '.') == 0)\n .map(e => { return { propertyName: e.propertyName.substring(prefix.length + 1), errorMessage: e.errorMessage, isWarning: e.isWarning }; }));\n }\n}\n","import * as React from 'react';\nimport './errorPageBody.less';\n/** Standard 500 error message. Can take a `customMessage` to change the header contents. */\nexport function Error500Message(props) {\n return (React.createElement(\"div\", null,\n React.createElement(\"h2\", null, props.customMessage || 'An unexpected error has occurred'),\n \"The details of the error have been logged. Try refreshing the page and trying the operation again.\",\n React.createElement(\"br\", null),\n \"If the problem persists please contact technical support.\"));\n}\n/** Standard 404 error message. */\nexport function Error404Message() {\n return (React.createElement(\"div\", null,\n React.createElement(\"h2\", null, \"The page you are looking for is not here or cannot be accessed in this way\"),\n \"Some reasons you might be seeing this include:\",\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null, \"The URL is not valid\"),\n React.createElement(\"li\", null, \"The record has been deleted\"),\n React.createElement(\"li\", null, \"You do not have access to this record\"),\n React.createElement(\"li\", null, \"The page is not accessible through the URL bar\"),\n React.createElement(\"li\", null, \"The page is not accessible through the browser's open in new tab/new window feature\"))));\n}\n/** Standard 403 error message. Can take a `customMessage` to change the header contents. */\nexport function Error403Message(props) {\n return (React.createElement(\"div\", null,\n React.createElement(\"h2\", null, props.customMessage || 'You do not have permission to execute this action or view this page.')));\n}\n/** Standard network connection error message. */\nexport function ErrorOpenNetworkMessage() {\n return (React.createElement(\"div\", null,\n React.createElement(\"h2\", null, \"Connection lost\"),\n \"The connection has been lost. Please attempt to restore your internet connection and try the current operation again.\"));\n}\n","import * as React from \"react\";\nimport { ErrorDialog } from \"./errorDialog\";\nimport { ErrorOpenNetworkMessage } from \"./errorMessages\";\nexport function RenderNetworkErrorDialog(close) {\n return React.createElement(ErrorDialog, { close: close, singleTabText: \"Disconnected\" },\n React.createElement(ErrorOpenNetworkMessage, null));\n}\n","/** Create css style object from GridPosProps XOR type */\nexport function gridPosToStyle(props) {\n return props.gridArea !== undefined\n ? { gridArea: props.gridArea }\n : { gridRow: props.gridRow, gridColumn: props.gridColumn };\n}\n","import * as React from \"react\";\nimport classNames from \"classnames\";\nimport { gridPosToStyle } from \"./cssGridPropsHelper\";\n/** Standard SpaceBox spacings commonly used in field layouts. */\nexport const FieldSpacings = {\n /** The standard spacing used to separate fields vertically. */\n VSpacing: 1.5,\n /** The standard spacing used to separate fields horizontally. */\n HSpacing: 0.5,\n};\n/**\n * Field is used to wrap field components that still use Spry styles, which require\n * that the field is wrapped in a .field div in order to render correctly.\n *\n * By default renders with no padding added, which makes it usable with `SpaceBox spacing={FieldSpacings.VSpacing}` and `spacing={FieldSpacings.HSpacing}`.\n */\nexport function Field(props) {\n const cn = classNames(\"field\", { \"field-v-0\": props.withPadding !== true }, props.className);\n return (React.createElement(\"div\", { style: {\n ...gridPosToStyle(props),\n ...props.style,\n }, className: cn }, props.children));\n}\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport classNames from 'classnames';\nimport { TransitionGroup } from \"spry-react/Animation/transitionGroup\";\nimport { DurationAnimationDefinition, Easing } from \"spry-react/Animation/animation\";\nimport { contains } from 'spry-react/utils/htmlUtils';\nimport { getRelativePosition, HorizontalAlignment, VerticalAlignment } from \"spry-react/utils/positioning\";\nimport FocusLock from 'react-focus-lock';\nexport var FlyoutSizeMode;\n(function (FlyoutSizeMode) {\n FlyoutSizeMode[FlyoutSizeMode[\"SizeToPositioningElement\"] = 0] = \"SizeToPositioningElement\";\n FlyoutSizeMode[FlyoutSizeMode[\"SizeToContents\"] = 1] = \"SizeToContents\";\n FlyoutSizeMode[FlyoutSizeMode[\"FullWidth\"] = 2] = \"FullWidth\";\n})(FlyoutSizeMode || (FlyoutSizeMode = {}));\nexport var FlyoutPositioningMode;\n(function (FlyoutPositioningMode) {\n FlyoutPositioningMode[FlyoutPositioningMode[\"BottomLeft\"] = 0] = \"BottomLeft\";\n FlyoutPositioningMode[FlyoutPositioningMode[\"BottomRight\"] = 1] = \"BottomRight\";\n})(FlyoutPositioningMode || (FlyoutPositioningMode = {}));\nexport function Flyout(props) {\n const flyoutElementRef = React.useRef(null);\n const lastNativeMouseDownEventInLogicalTreeRef = React.useRef(null);\n const [isFlyoutFullyOpen, setIsFlyoutFullyOpen] = React.useState(false);\n React.useEffect(() => {\n document.addEventListener(\"mousedown\", onMouseDown);\n return () => document.removeEventListener(\"mousedown\", onMouseDown);\n }, [props.onClickOutsideFlyout]);\n return (React.createElement(\"div\", { onMouseDown: onFlyoutLogicalTreeMouseDown, style: { display: \"none\" } },\n React.createElement(TransitionGroup, { key: \"flyouts\", data: props.flyout ? [props.flyout] : [], willEnter: onFlyoutWillEnter, didEnter: onFlyoutDidEnter, willExit: onFlyoutWillExit, doneEntering: onFlyoutDoneEntering, renderChild: renderFlyout })));\n function onFlyoutWillEnter(flyout) {\n return { clipPath: \"circle(0)\" };\n }\n function onFlyoutDidEnter(flyout, element) {\n return flyout.suppressAnimation\n ? { position: \"relative\", top: 0, height: 'auto' }\n : { position: \"relative\", top: new DurationAnimationDefinition((-1 * element.clientHeight), 0, 150, Easing.QuadIn), height: element.clientHeight };\n }\n function onFlyoutWillExit(flyout, element) {\n setIsFlyoutFullyOpen(false);\n return flyout.suppressAnimation\n ? { position: \"relative\", top: -1 * element.clientHeight, height: element.clientHeight }\n : { position: \"relative\", top: new DurationAnimationDefinition(0, (-1 * element.clientHeight), 150, Easing.QuadOut), height: element.clientHeight };\n }\n function onFlyoutDoneEntering(flyout, element) {\n setIsFlyoutFullyOpen(true);\n return { position: \"relative\", top: 0, height: 'auto' };\n }\n function renderFlyout(flyout, currentStyle, childRef) {\n const visibleContentHeight = currentStyle.height === 'auto'\n ? 'auto'\n : `${currentStyle.height + currentStyle.top}px`;\n return flyout.contents\n ? React.createElement(FlyoutContent, { getPositioningElement: flyout.getPositioningElement, positioningElementId: flyout.positioningElementId, flyoutStyle: flyout.flyoutStyle, sizeMode: flyout.sizeMode, positioningMode: flyout.positioningMode, fixed: flyout.fixed, flyoutClassName: flyout.flyoutClassName, flyoutCSSStyle: flyout.flyoutCSSStyle, key: flyout.key, height: visibleContentHeight, disableFocusLock: props.disableFocusLock || flyout.disableFocusLock, onFocusLockActivation: flyout.onFocusLockActivation, onFocusLockDeactivation: flyout.onFocusLockDeactivation, scrollable: isFlyoutFullyOpen && flyout.scrollable },\n React.createElement(\"div\", { style: { ...currentStyle }, ref: (node) => { childRef(node); flyoutElementRef.current = node; } }, flyout.contents))\n : null;\n }\n function onFlyoutLogicalTreeMouseDown(e) {\n // React portals bubble events through the logical dom, so this fires before the body event.\n lastNativeMouseDownEventInLogicalTreeRef.current = e.nativeEvent;\n }\n function onMouseDown(event) {\n // Check to see if the document event is the one we already observed in this flyout, and if so we know the click happened in this flyout, and can ignore it\n if (lastNativeMouseDownEventInLogicalTreeRef.current === event) {\n lastNativeMouseDownEventInLogicalTreeRef.current = null;\n return;\n }\n lastNativeMouseDownEventInLogicalTreeRef.current = null;\n if (flyoutElementRef.current && !contains(event.target, flyoutElementRef.current)) {\n props.onClickOutsideFlyout(event.target);\n }\n }\n}\nfunction FlyoutContent(props) {\n const positioningMode = props.positioningMode ?? FlyoutPositioningMode.BottomLeft;\n const sizeMode = props.sizeMode ?? FlyoutSizeMode.SizeToContents;\n const flyoutElementRef = React.useRef(null);\n // starts hidden at 0, 0 (to prevent a scroll bar from appearing) until componentDidMount\n const [state, setState] = React.useState({\n isVisible: false,\n top: '0',\n left: '0'\n });\n React.useLayoutEffect(() => {\n window.addEventListener('resize', onWindowResize);\n // now that the element is mounted we have accurate widths so we can size and posiiton it\n const position = getFlyoutSizeAndPosition();\n if (position)\n setState(state => ({ ...state, isVisible: true, top: position.top, left: position.left, width: position.width }));\n else\n setState(state => ({ ...state, isVisible: true }));\n return () => window.removeEventListener('resize', onWindowResize);\n }, [props.positioningElementId, sizeMode, positioningMode, props.fixed]);\n React.useLayoutEffect(() => {\n const { top, left, width } = state;\n const position = getFlyoutSizeAndPosition();\n if (position && (position.top !== top || position.left !== left || position.width !== width))\n setState(state => ({ ...state, isVisible: true, top: position.top, left: position.left, width: position.width }));\n }, [state.top, state.left, state.width, props.positioningElementId, sizeMode, positioningMode, props.fixed]);\n const flyoutStyle = props.flyoutStyle ?? 'Standard';\n const elementStyle = {\n height: props.height,\n display: 'block',\n overflow: props.scrollable\n ? \"auto\"\n : \"hidden\"\n };\n if (props.fixed) {\n elementStyle[\"position\"] = \"fixed\";\n }\n if (flyoutStyle === 'None') {\n elementStyle[\"position\"] = props.fixed ? \"fixed\" : \"absolute\";\n elementStyle[\"zIndex\"] = 1000;\n elementStyle[\"boxShadow\"] = \"0px 10px 14px 1px rgba(0, 0, 0, 0.3)\";\n }\n if (flyoutStyle === 'NoPadding') {\n elementStyle[\"padding\"] = 0;\n }\n elementStyle[\"top\"] = state.top;\n if (sizeMode === FlyoutSizeMode.FullWidth) {\n elementStyle[\"left\"] = 0;\n elementStyle[\"right\"] = 0;\n }\n else {\n elementStyle[\"left\"] = state.left;\n if (state.width)\n elementStyle[\"width\"] = state.width;\n }\n if (!state.isVisible)\n elementStyle[\"clipPath\"] = 'circle(0)';\n if (sizeMode === FlyoutSizeMode.SizeToPositioningElement) {\n elementStyle[\"boxSizing\"] = \"border-box\";\n }\n const flyoutClasses = classNames({\n 'custom-content-flyout': flyoutStyle !== 'None'\n }, props.flyoutClassName);\n const positioningElement = getPositioningElement();\n /* The data-detached-flyout attribute only exists for backward compatibility with spry's flyout. When a spry-react\n * flyout is nested within a spry flyout, this allows traversing the flyouts appropriately so spry does not interpret\n * a click within the nested flyout as clicking outside the parent flyout.\n *\n * Using jquery to assign the value the same way that spry does to the flyout object. Relying on the positioningElement\n * as the pathway to the parent flyout, since spry-react does not use placeholders like pbDetachedFlyout.js.\n * positioningElement is not a required prop, so this is a known limitation for now, that it must be provided to support\n * spry-react flyouts within spry flyouts.\n */\n const flyoutContents = (React.createElement(\"div\", { className: flyoutClasses, ref: (node) => {\n flyoutElementRef.current = node;\n if (flyoutElementRef.current) {\n $(flyoutElementRef.current).data(\"detached-flyout\", $(positioningElement));\n }\n }, style: props.flyoutCSSStyle\n ? { ...elementStyle, ...props.flyoutCSSStyle }\n : elementStyle, \"data-detached-flyout\": '' },\n React.createElement(FocusLock, { returnFocus: true, shards: positioningElement ? [positioningElement] : [], disabled: props.disableFocusLock, onActivation: props.onFocusLockActivation, onDeactivation: props.onFocusLockDeactivation }, props.children)));\n const portalContainer = document.getElementsByTagName('body')[0];\n return ReactDOM.createPortal(flyoutContents, portalContainer);\n function onWindowResize(event) {\n const position = getFlyoutSizeAndPosition();\n if (position)\n setState(state => ({ ...state, isVisible: true, top: position.top, left: position.left, width: position.width }));\n }\n function getFlyoutSizeAndPosition() {\n if (!props.positioningElementId && !props.getPositioningElement) {\n return;\n }\n const positioningElement = getPositioningElement();\n if (!positioningElement || !flyoutElementRef.current) {\n return;\n }\n const positioningRect = positioningElement.getBoundingClientRect();\n const flyoutElementWidth = `${positioningRect.width}px`;\n if (sizeMode === FlyoutSizeMode.SizeToPositioningElement) {\n flyoutElementRef.current.style.width = flyoutElementWidth;\n }\n const position = getRelativePosition(flyoutElementRef.current, positioningElement, positioningMode == FlyoutPositioningMode.BottomLeft ? HorizontalAlignment.AlignLeftSides : HorizontalAlignment.AlignRightSides, VerticalAlignment.Below, props.fixed || false);\n switch (sizeMode) {\n case FlyoutSizeMode.SizeToPositioningElement:\n return {\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: flyoutElementWidth,\n };\n case FlyoutSizeMode.SizeToContents:\n return {\n top: `${position.top}px`,\n left: `${position.left}px`\n };\n case FlyoutSizeMode.FullWidth:\n return {\n top: `${position.top}px`,\n left: '0'\n };\n default:\n return;\n }\n }\n function getPositioningElement() {\n const positioningElement = props.getPositioningElement && props.getPositioningElement();\n return !!positioningElement\n ? positioningElement\n : props.positioningElementId\n ? document.getElementById(props.positioningElementId)\n : null;\n }\n}\n","import * as React from \"react\";\nimport { Flyout } from \"spry-react/Flyout/flyout\";\nimport { contains } from 'spry-react/utils/htmlUtils';\nimport { buttonKeyPressHandler } from \"spry-react/utils/buttonKeyPressHandler\";\nimport { useRef } from \"react\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\n//Useful for controls that manage their own keyboard/accessibility/focus support\nexport function FlyoutClickToggle(props) {\n const toggleElementRef = useRef(null);\n const { children, flyout, disableFocusLock, style, className } = props;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"span\", { onClick: toggleContentClicked, ref: toggleElementRef, style: style, className: className }, children),\n React.createElement(Flyout, { flyout: flyout, onClickOutsideFlyout: onClickOutsideFlyoutHandler, disableFocusLock: disableFocusLock ?? true })));\n function toggleContentClicked(e) {\n if (!props.disabled) {\n props.toggleClickHandler();\n }\n }\n function onClickOutsideFlyoutHandler(clickedElement) {\n const toggleElement = toggleElementRef.current;\n if (!toggleElement || (clickedElement !== toggleElement && !contains(clickedElement, toggleElement))) {\n props.onClickOutsideFlyout(clickedElement);\n }\n }\n}\nexport function isButtonToggledFlyoutDescriptor(flyoutOrDescriptor) {\n return !!flyoutOrDescriptor?.contents;\n}\n/** Renders clickable target that opens a flyout when clicked. */\nexport function FlyoutButtonToggle(props) {\n const { children, flyout, disabled, toggleClickHandler } = props;\n const toggleElementRef = useRef(null);\n const id = props.id ?? useGeneratedId();\n const isOpen = !!flyout;\n const handleClickOutsideFlyout = React.useCallback((clickedElement) => {\n const toggleElement = toggleElementRef.current;\n if (!toggleElement || (clickedElement !== toggleElement && !contains(clickedElement, toggleElement)))\n props.onClickOutsideFlyout(clickedElement);\n }, [props.onClickOutsideFlyout]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { id: id, onClick: !disabled ? toggleClickHandler : () => { }, onKeyPress: !disabled ? buttonKeyPressHandler(toggleClickHandler) : () => { }, tabIndex: 0, role: \"button\", \"aria-disabled\": disabled, \"aria-haspopup\": true, \"aria-expanded\": isOpen, ref: toggleElementRef, style: props.style }, children),\n React.createElement(Flyout, { flyout: isOpen ? getFlyoutDescriptor(flyout, id) : null, onClickOutsideFlyout: handleClickOutsideFlyout, disableFocusLock: false })));\n}\nfunction getFlyoutDescriptor(flyout, positioningElementId) {\n return isButtonToggledFlyoutDescriptor(flyout)\n ? {\n ...flyout,\n positioningElementId: positioningElementId,\n key: `flyout-${positioningElementId}`\n }\n : {\n contents: flyout,\n positioningElementId: positioningElementId,\n key: `flyout-${positioningElementId}`\n };\n}\n","// Compute what scrolling needs to be done on required scrolling boxes for target to be in view\n\n// The type names here are named after the spec to make it easier to find more information around what they mean:\n// To reduce churn and reduce things that need be maintained things from the official TS DOM library is used here\n// https://drafts.csswg.org/cssom-view/\n\n// For a definition on what is \"block flow direction\" exactly, check this: https://drafts.csswg.org/css-writing-modes-4/#block-flow-direction\n\n// add support for visualViewport object currently implemented in chrome\ninterface visualViewport {\n height: number\n width: number\n}\n\ntype ScrollLogicalPosition = 'start' | 'center' | 'end' | 'nearest'\n// This new option is tracked in this PR, which is the most likely candidate at the time: https://github.com/w3c/csswg-drafts/pull/1805\ntype ScrollMode = 'always' | 'if-needed'\n// New option that skips auto-scrolling all nodes with overflow: hidden set\n// See FF implementation: https://hg.mozilla.org/integration/fx-team/rev/c48c3ec05012#l7.18\ntype SkipOverflowHiddenElements = boolean\n\ninterface Options {\n block?: ScrollLogicalPosition\n inline?: ScrollLogicalPosition\n scrollMode?: ScrollMode\n boundary?: CustomScrollBoundary\n skipOverflowHiddenElements?: SkipOverflowHiddenElements\n}\n\n// Custom behavior, not in any spec\ntype CustomScrollBoundaryCallback = (parent: Element) => boolean\ntype CustomScrollBoundary = Element | CustomScrollBoundaryCallback | null\ninterface CustomScrollAction {\n el: Element\n top: number\n left: number\n}\n\n// @TODO better shadowdom test, 11 = document fragment\nfunction isElement(el: any): el is Element {\n return typeof el === 'object' && el != null && el.nodeType === 1\n}\n\nfunction canOverflow(\n overflow: string | null,\n skipOverflowHiddenElements?: boolean\n) {\n if (skipOverflowHiddenElements && overflow === 'hidden') {\n return false\n }\n\n return overflow !== 'visible' && overflow !== 'clip'\n}\n\nfunction getFrameElement(el: Element) {\n if (!el.ownerDocument || !el.ownerDocument.defaultView) {\n return null\n }\n\n try {\n return el.ownerDocument.defaultView.frameElement\n } catch (e) {\n return null\n }\n}\n\nfunction isHiddenByFrame(el: Element): boolean {\n const frame = getFrameElement(el)\n if (!frame) {\n return false\n }\n\n return (\n frame.clientHeight < el.scrollHeight || frame.clientWidth < el.scrollWidth\n )\n}\n\nfunction isScrollable(el: Element, skipOverflowHiddenElements?: boolean) {\n if (el.clientHeight < el.scrollHeight || el.clientWidth < el.scrollWidth) {\n const style = getComputedStyle(el, null)\n return (\n canOverflow(style.overflowY, skipOverflowHiddenElements) ||\n canOverflow(style.overflowX, skipOverflowHiddenElements) ||\n isHiddenByFrame(el)\n )\n }\n\n return false\n}\n/**\n * Find out which edge to align against when logical scroll position is \"nearest\"\n * Interesting fact: \"nearest\" works similarily to \"if-needed\", if the element is fully visible it will not scroll it\n *\n * Legends:\n * ┌────────┐ ┏ ━ ━ ━ ┓\n * │ target │ frame\n * └────────┘ ┗ ━ ━ ━ ┛\n */\nfunction alignNearest(\n scrollingEdgeStart: number,\n scrollingEdgeEnd: number,\n scrollingSize: number,\n scrollingBorderStart: number,\n scrollingBorderEnd: number,\n elementEdgeStart: number,\n elementEdgeEnd: number,\n elementSize: number\n) {\n /**\n * If element edge A and element edge B are both outside scrolling box edge A and scrolling box edge B\n *\n * ┌──┐\n * ┏━│━━│━┓\n * │ │\n * ┃ │ │ ┃ do nothing\n * │ │\n * ┗━│━━│━┛\n * └──┘\n *\n * If element edge C and element edge D are both outside scrolling box edge C and scrolling box edge D\n *\n * ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐\n * │┃ ┃│ do nothing\n * └───────────┘\n * ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart < scrollingEdgeStart &&\n elementEdgeEnd > scrollingEdgeEnd) ||\n (elementEdgeStart > scrollingEdgeStart && elementEdgeEnd < scrollingEdgeEnd)\n ) {\n return 0\n }\n\n /**\n * If element edge A is outside scrolling box edge A and element height is less than scrolling box height\n *\n * ┌──┐\n * ┏━│━━│━┓ ┏━┌━━┐━┓\n * └──┘ │ │\n * from ┃ ┃ to ┃ └──┘ ┃\n *\n * ┗━ ━━ ━┛ ┗━ ━━ ━┛\n *\n * If element edge B is outside scrolling box edge B and element height is greater than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━┌━━┐━┓\n * │ │\n * from ┃ ┌──┐ ┃ to ┃ │ │ ┃\n * │ │ │ │\n * ┗━│━━│━┛ ┗━│━━│━┛\n * │ │ └──┘\n * │ │\n * └──┘\n *\n * If element edge C is outside scrolling box edge C and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * │ ┃ │ ┃ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * ┃ │ ┃ │ ┃ ┃ │\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n */\n if (\n (elementEdgeStart <= scrollingEdgeStart && elementSize <= scrollingSize) ||\n (elementEdgeEnd >= scrollingEdgeEnd && elementSize >= scrollingSize)\n ) {\n return elementEdgeStart - scrollingEdgeStart - scrollingBorderStart\n }\n\n /**\n * If element edge B is outside scrolling box edge B and element height is less than scrolling box height\n *\n * ┏━ ━━ ━┓ ┏━ ━━ ━┓\n *\n * from ┃ ┃ to ┃ ┌──┐ ┃\n * ┌──┐ │ │\n * ┗━│━━│━┛ ┗━└━━┘━┛\n * └──┘\n *\n * If element edge A is outside scrolling box edge A and element height is greater than scrolling box height\n *\n * ┌──┐\n * │ │\n * │ │ ┌──┐\n * ┏━│━━│━┓ ┏━│━━│━┓\n * │ │ │ │\n * from ┃ └──┘ ┃ to ┃ │ │ ┃\n * │ │\n * ┗━ ━━ ━┛ ┗━└━━┘━┛\n *\n * If element edge C is outside scrolling box edge C and element width is greater than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───────────┐ ┌───────────┐\n * │ ┃ │ ┃ │ ┃ ┃\n * └───────────┘ └───────────┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n * If element edge D is outside scrolling box edge D and element width is less than scrolling box width\n *\n * from to\n * ┏ ━ ━ ━ ━ ┓ ┏ ━ ━ ━ ━ ┓\n * ┌───┐ ┌───┐\n * ┃ │ ┃ │ ┃ │ ┃\n * └───┘ └───┘\n * ┗ ━ ━ ━ ━ ┛ ┗ ━ ━ ━ ━ ┛\n *\n */\n if (\n (elementEdgeEnd > scrollingEdgeEnd && elementSize < scrollingSize) ||\n (elementEdgeStart < scrollingEdgeStart && elementSize > scrollingSize)\n ) {\n return elementEdgeEnd - scrollingEdgeEnd + scrollingBorderEnd\n }\n\n return 0\n}\n\nexport default (target: Element, options: Options): CustomScrollAction[] => {\n //TODO: remove this hack when microbundle will support typescript >= 4.0\n const windowWithViewport = (window as unknown) as Window & {\n visualViewport: visualViewport\n }\n\n const {\n scrollMode,\n block,\n inline,\n boundary,\n skipOverflowHiddenElements,\n } = options\n // Allow using a callback to check the boundary\n // The default behavior is to check if the current target matches the boundary element or not\n // If undefined it'll check that target is never undefined (can happen as we recurse up the tree)\n const checkBoundary =\n typeof boundary === 'function' ? boundary : (node: any) => node !== boundary\n\n if (!isElement(target)) {\n throw new TypeError('Invalid target')\n }\n\n // Used to handle the top most element that can be scrolled\n const scrollingElement = document.scrollingElement || document.documentElement\n\n // Collect all the scrolling boxes, as defined in the spec: https://drafts.csswg.org/cssom-view/#scrolling-box\n const frames: Element[] = []\n let cursor: Element | null = target\n while (isElement(cursor) && checkBoundary(cursor)) {\n // Move cursor to parent\n cursor = cursor.parentElement\n\n // Stop when we reach the viewport\n if (cursor === scrollingElement) {\n frames.push(cursor)\n break\n }\n\n // Skip document.body if it's not the scrollingElement and documentElement isn't independently scrollable\n if (\n cursor != null &&\n cursor === document.body &&\n isScrollable(cursor) &&\n !isScrollable(document.documentElement)\n ) {\n continue\n }\n\n // Now we check if the element is scrollable, this code only runs if the loop haven't already hit the viewport or a custom boundary\n if (cursor != null && isScrollable(cursor, skipOverflowHiddenElements)) {\n frames.push(cursor)\n }\n }\n\n // Support pinch-zooming properly, making sure elements scroll into the visual viewport\n // Browsers that don't support visualViewport will report the layout viewport dimensions on document.documentElement.clientWidth/Height\n // and viewport dimensions on window.innerWidth/Height\n // https://www.quirksmode.org/mobile/viewports2.html\n // https://bokand.github.io/viewport/index.html\n const viewportWidth = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.width\n : innerWidth\n const viewportHeight = windowWithViewport.visualViewport\n ? windowWithViewport.visualViewport.height\n : innerHeight\n\n // Newer browsers supports scroll[X|Y], page[X|Y]Offset is\n const viewportX = window.scrollX || pageXOffset\n const viewportY = window.scrollY || pageYOffset\n\n const {\n height: targetHeight,\n width: targetWidth,\n top: targetTop,\n right: targetRight,\n bottom: targetBottom,\n left: targetLeft,\n } = target.getBoundingClientRect()\n\n // These values mutate as we loop through and generate scroll coordinates\n let targetBlock: number =\n block === 'start' || block === 'nearest'\n ? targetTop\n : block === 'end'\n ? targetBottom\n : targetTop + targetHeight / 2 // block === 'center\n let targetInline: number =\n inline === 'center'\n ? targetLeft + targetWidth / 2\n : inline === 'end'\n ? targetRight\n : targetLeft // inline === 'start || inline === 'nearest\n\n // Collect new scroll positions\n const computations: CustomScrollAction[] = []\n // In chrome there's no longer a difference between caching the `frames.length` to a var or not, so we don't in this case (size > speed anyways)\n for (let index = 0; index < frames.length; index++) {\n const frame = frames[index]\n\n // @TODO add a shouldScroll hook here that allows userland code to take control\n\n const {\n height,\n width,\n top,\n right,\n bottom,\n left,\n } = frame.getBoundingClientRect()\n\n // If the element is already visible we can end it here\n // @TODO targetBlock and targetInline should be taken into account to be compliant with https://github.com/w3c/csswg-drafts/pull/1805/files#diff-3c17f0e43c20f8ecf89419d49e7ef5e0R1333\n if (\n scrollMode === 'if-needed' &&\n targetTop >= 0 &&\n targetLeft >= 0 &&\n targetBottom <= viewportHeight &&\n targetRight <= viewportWidth &&\n targetTop >= top &&\n targetBottom <= bottom &&\n targetLeft >= left &&\n targetRight <= right\n ) {\n // Break the loop and return the computations for things that are not fully visible\n return computations\n }\n\n const frameStyle = getComputedStyle(frame)\n const borderLeft = parseInt(frameStyle.borderLeftWidth as string, 10)\n const borderTop = parseInt(frameStyle.borderTopWidth as string, 10)\n const borderRight = parseInt(frameStyle.borderRightWidth as string, 10)\n const borderBottom = parseInt(frameStyle.borderBottomWidth as string, 10)\n\n let blockScroll: number = 0\n let inlineScroll: number = 0\n\n // The property existance checks for offfset[Width|Height] is because only HTMLElement objects have them, but any Element might pass by here\n // @TODO find out if the \"as HTMLElement\" overrides can be dropped\n const scrollbarWidth =\n 'offsetWidth' in frame\n ? (frame as HTMLElement).offsetWidth -\n (frame as HTMLElement).clientWidth -\n borderLeft -\n borderRight\n : 0\n const scrollbarHeight =\n 'offsetHeight' in frame\n ? (frame as HTMLElement).offsetHeight -\n (frame as HTMLElement).clientHeight -\n borderTop -\n borderBottom\n : 0\n\n if (scrollingElement === frame) {\n // Handle viewport logic (document.documentElement or document.body)\n\n if (block === 'start') {\n blockScroll = targetBlock\n } else if (block === 'end') {\n blockScroll = targetBlock - viewportHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n viewportY,\n viewportY + viewportHeight,\n viewportHeight,\n borderTop,\n borderBottom,\n viewportY + targetBlock,\n viewportY + targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - viewportHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline\n } else if (inline === 'center') {\n inlineScroll = targetInline - viewportWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - viewportWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n viewportX,\n viewportX + viewportWidth,\n viewportWidth,\n borderLeft,\n borderRight,\n viewportX + targetInline,\n viewportX + targetInline + targetWidth,\n targetWidth\n )\n }\n\n // Apply scroll position offsets and ensure they are within bounds\n // @TODO add more test cases to cover this 100%\n blockScroll = Math.max(0, blockScroll + viewportY)\n inlineScroll = Math.max(0, inlineScroll + viewportX)\n } else {\n // Handle each scrolling frame that might exist between the target and the viewport\n\n if (block === 'start') {\n blockScroll = targetBlock - top - borderTop\n } else if (block === 'end') {\n blockScroll = targetBlock - bottom + borderBottom + scrollbarHeight\n } else if (block === 'nearest') {\n blockScroll = alignNearest(\n top,\n bottom,\n height,\n borderTop,\n borderBottom + scrollbarHeight,\n targetBlock,\n targetBlock + targetHeight,\n targetHeight\n )\n } else {\n // block === 'center' is the default\n blockScroll = targetBlock - (top + height / 2) + scrollbarHeight / 2\n }\n\n if (inline === 'start') {\n inlineScroll = targetInline - left - borderLeft\n } else if (inline === 'center') {\n inlineScroll = targetInline - (left + width / 2) + scrollbarWidth / 2\n } else if (inline === 'end') {\n inlineScroll = targetInline - right + borderRight + scrollbarWidth\n } else {\n // inline === 'nearest' is the default\n inlineScroll = alignNearest(\n left,\n right,\n width,\n borderLeft,\n borderRight + scrollbarWidth,\n targetInline,\n targetInline + targetWidth,\n targetWidth\n )\n }\n\n const { scrollLeft, scrollTop } = frame\n // Ensure scroll coordinates are not out of bounds while applying scroll offsets\n blockScroll = Math.max(\n 0,\n Math.min(\n scrollTop + blockScroll,\n frame.scrollHeight - height + scrollbarHeight\n )\n )\n inlineScroll = Math.max(\n 0,\n Math.min(\n scrollLeft + inlineScroll,\n frame.scrollWidth - width + scrollbarWidth\n )\n )\n\n // Cache the offset so that parent frames can scroll this into view correctly\n targetBlock += scrollTop - blockScroll\n targetInline += scrollLeft - inlineScroll\n }\n\n computations.push({ el: frame, top: blockScroll, left: inlineScroll })\n }\n\n return computations\n}\n","import compute from 'compute-scroll-into-view';\n\nfunction isOptionsObject(options) {\n return options === Object(options) && Object.keys(options).length !== 0;\n}\n\nfunction defaultBehavior(actions, behavior) {\n if (behavior === void 0) {\n behavior = 'auto';\n }\n\n var canSmoothScroll = ('scrollBehavior' in document.body.style);\n actions.forEach(function (_ref) {\n var el = _ref.el,\n top = _ref.top,\n left = _ref.left;\n\n if (el.scroll && canSmoothScroll) {\n el.scroll({\n top: top,\n left: left,\n behavior: behavior\n });\n } else {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n });\n}\n\nfunction getOptions(options) {\n if (options === false) {\n return {\n block: 'end',\n inline: 'nearest'\n };\n }\n\n if (isOptionsObject(options)) {\n return options;\n }\n\n return {\n block: 'start',\n inline: 'nearest'\n };\n}\n\nfunction scrollIntoView(target, options) {\n var isTargetAttached = target.isConnected || target.ownerDocument.documentElement.contains(target);\n\n if (isOptionsObject(options) && typeof options.behavior === 'function') {\n return options.behavior(isTargetAttached ? compute(target, options) : []);\n }\n\n if (!isTargetAttached) {\n return;\n }\n\n var computeOptions = getOptions(options);\n return defaultBehavior(compute(target, computeOptions), computeOptions.behavior);\n}\n\nexport default scrollIntoView;","import * as React from \"react\";\nimport classNames from 'classnames';\nimport * as styles from 'spry-react/Grid/gridStyles';\nimport { TransitionGroup } from \"spry-react/Animation/transitionGroup\";\nimport { DurationAnimationDefinition, Easing } from \"spry-react/Animation/animation\";\nimport scrollIntoView from \"scroll-into-view-if-needed\";\nimport { useElementFlasherRef } from \"spry-react/utils/hooks/useElementFlasher\";\nconst BaseGridRow = (props, ref) => {\n const divRef = React.useRef(null);\n const rowFlasherRef = useElementFlasherRef(divRef);\n React.useImperativeHandle(ref, () => ({\n scrollIntoView: (behavior) => scrollIntoView(divRef.current, {\n scrollMode: 'if-needed',\n block: 'nearest',\n behavior\n })\n }));\n //This is a useLayoutEffect instead of a useEffect because it directly modifies the DOM (through the elementFlasherRef)\n React.useLayoutEffect(() => {\n if (props.afterRenderEffect === 'FlashAndScrollTo') {\n const intersectionObserver = new IntersectionObserver(entries => {\n const [rowDiv] = entries;\n if (rowDiv.isIntersecting) {\n rowFlasherRef.current?.flash();\n intersectionObserver.disconnect();\n }\n });\n intersectionObserver.observe(divRef.current);\n scrollIntoView(divRef.current, {\n scrollMode: 'if-needed',\n block: 'nearest',\n behavior: 'smooth'\n });\n }\n else if (props.afterRenderEffect === 'Flash') {\n rowFlasherRef.current?.flash();\n }\n }, [props.afterRenderEffect]);\n const { allowSelection, isSelected, gridStyle, autoHeight } = props;\n const rowClasses = classNames(styles.gridRow, props.className, {\n [styles.gridRowAutoHeight]: autoHeight,\n [styles.gridRowSimple]: gridStyle?.type === 'Simple',\n [styles.gridRowSimpleTightRows]: gridStyle?.type === 'Simple' && gridStyle.cellPadding === 'tight',\n [styles.gridRowSelectable]: allowSelection,\n [styles.gridRowSelected]: isSelected || false\n });\n return React.createElement(\"div\", { ref: divRef, className: rowClasses, onClick: props.clickHandler, onDoubleClick: props.doubleClickHandler, onContextMenu: props.rightClickHandler, role: 'row', title: props.title }, props.cells);\n};\nexport const GridRow = React.forwardRef(BaseGridRow);\nGridRow.displayName = \"GridRow\";\nconst BaseExpandableGridRow = (props, ref) => {\n const onExpandedContentWillEnter = () => {\n return { clipPath: 'circle(0)' };\n };\n const onExpandedContentDidEnter = (child, element) => {\n return { height: new DurationAnimationDefinition(0, element.clientHeight, 400, Easing.QuadIn) };\n };\n const onExpandedContentWillExit = (child, element) => {\n return { height: new DurationAnimationDefinition(element.clientHeight, 0, 400, Easing.QuadOut) };\n };\n const onExpandedContentDoneEntering = (child, element) => {\n return { height: 'auto' };\n };\n const renderExpandedContent = (child, currentStyle, childRef) => {\n const containerClasses = classNames(styles.expandedRowContentContainer, {\n [styles.expandedRowContentContainerHighlighted]: props.expansionStyle != 'Multiple'\n });\n const contentClasses = classNames(styles.expandedRowContent, {\n [styles.expandedRowContentHighlighted]: props.expansionStyle != 'Multiple'\n });\n return (React.createElement(\"div\", { key: 'expanded-row-content-container', ref: childRef, className: containerClasses, style: currentStyle },\n React.createElement(\"div\", { className: contentClasses }, props.expandedContent)));\n };\n const divRef = React.useRef(null);\n React.useImperativeHandle(ref, () => ({\n scrollIntoView: (behavior) => scrollIntoView(divRef.current, {\n scrollMode: 'if-needed',\n block: 'nearest',\n behavior\n })\n }));\n const { allowSelection, isSelected, isExpanded, expansionStyle } = props;\n const rowClasses = classNames(styles.gridRow, props.className, {\n [styles.gridRowSelectable]: allowSelection,\n [styles.gridRowSelected]: isSelected || false,\n [styles.gridRowExpanded]: isExpanded,\n [styles.gridRowExpandedHighlighted]: isExpanded && expansionStyle != 'Multiple'\n });\n return (React.createElement(\"div\", { className: styles.expandedRowContainer, ref: divRef },\n React.createElement(\"div\", { className: rowClasses, onClick: props.clickHandler, onDoubleClick: props.doubleClickHandler, onContextMenu: props.rightClickHandler, title: props.title }, props.cells),\n React.createElement(TransitionGroup, { key: \"grid-expanded-content\", data: props.isExpanded ? [{ key: 'expanded-row' }] : [], willEnter: onExpandedContentWillEnter, didEnter: onExpandedContentDidEnter, willExit: onExpandedContentWillExit, doneEntering: onExpandedContentDoneEntering, renderChild: renderExpandedContent })));\n};\nexport const ExpandableGridRow = React.forwardRef(BaseExpandableGridRow);\nExpandableGridRow.displayName = \"ExpandableGridRow\";\n","import * as React from \"react\";\nimport './elementFlasher.less';\nexport function useElementFlasherRef(elementRef, className) {\n const flashClass = React.useMemo(() => className || 'flash-element', [className]);\n const flash = React.useCallback(() => {\n const currentElement = elementRef.current;\n currentElement.addEventListener('animationend', handleAnimationEnd);\n currentElement.classList.add(flashClass);\n function handleAnimationEnd() {\n currentElement.classList.remove(flashClass);\n currentElement.removeEventListener('animationend', handleAnimationEnd);\n }\n }, [flashClass]);\n const elementFlasherRef = React.useRef({\n flash: flash\n });\n React.useEffect(() => {\n elementFlasherRef.current = {\n flash: flash\n };\n }, [flash]);\n return elementFlasherRef;\n}\n","import * as React from \"react\";\nimport { useTransientState } from \"spry-react/utils/hooks/useTransientState\";\nexport function useRowKeysToFlash() {\n return useTransientState([]);\n}\n/** Creates a Ref that holds a SetGridRowsToFlash dispatch function for setting the row keys to flash. */\nexport function useFlashesGridRowsRef() {\n return React.useRef();\n}\n/** A component which can be used by a class component (i.e. Grid) that can't directly use the useRowKeysToFlash hook */\nexport function UseFlashesGridRowsRefClassWrapper(props) {\n const [rowKeysToFlash, setRowKeysToFlash] = useRowKeysToFlash();\n return props.children(rowKeysToFlash, setRowKeysToFlash);\n}\n","import { useLayoutEffect, useRef, useState } from \"react\";\n/** Wrapper around useState which includes an effect that will reset the state back to the provided default value after every render.\n * Allows you to set some state that you need to exist 'transiently' for only the current render cycle and then be automatically reset to a default value.\n*/\nexport function useTransientState(defaultValue) {\n const stableDefaultValue = useRef(defaultValue).current;\n const [transientState, setTransientState] = useState(stableDefaultValue);\n // Why is this a layoutEffect and not a regular effect?\n // Since the nature of this effect (the entire purpose of this hook) is to wipe out it's own state every render,\n // we want to be sure that happens synchronously. A regular effect would run asynchronously, which means it might\n // run after a later setTransientState is called, which would lose those intended changes.\n // This is only a problem when setStates are not batched by React, for example within an async handler.\n useLayoutEffect(() => {\n setTransientState(stableDefaultValue);\n });\n return [transientState, setTransientState];\n}\n","import * as React from \"react\";\nimport classNames from 'classnames';\nimport { GridRow, ExpandableGridRow } from 'spry-react/Grid/gridRow';\nimport * as GridCells from 'spry-react/Grid/gridCells';\nimport * as styles from 'spry-react/Grid/gridStyles';\nimport { SingleSelectStrategy, NotSelectableStrategy } from 'spry-react/Selection/selectionStrategy';\nimport './grid.less';\nimport { remove } from \"spry-react/utils/arrayExtensions\";\nimport { DragDropContext, Draggable, Droppable } from \"react-beautiful-dnd\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\nimport { chain } from \"underscore\";\nimport { ContextMenuContainer, useContextMenuOpenerRef } from \"spry-react/ContextMenu/contextMenu\";\nimport { UseFlashesGridRowsRefClassWrapper } from \"./useRowKeysToFlash\";\nimport * as gridAttributes from \"./gridAttributes\";\nimport { useGridVerticalScrollbarObserver } from './useGridVerticalScrollbarObserver';\nexport function Grid(props) {\n const gridRef = React.useRef(null);\n const headersRef = React.useRef(null);\n const bodyRef = React.useRef(null);\n const droppableId = useGeneratedId();\n const contextMenuOpenerRef = useContextMenuOpenerRef();\n const [state, setState] = React.useState({\n expandedRowKeys: [],\n contextMenuInternalSelectionStrategy: !props.selectionStrategy && props.renderContextMenu !== undefined\n ? new SingleSelectStrategy([], internalContextMenuSelectionTriggered)\n : new NotSelectableStrategy()\n });\n const [hasVerticalScrollbar, verticalScrollbarWidth] = useGridVerticalScrollbarObserver(headersRef, bodyRef, props.hideHeaders ?? false);\n const headers = getHeaders(props.headers);\n const columnWidthStyles = getColumnFlexStyle(headers);\n const totalsRows = getTotalsRows(props.totalsRows);\n const gridStyle = props.gridStyle || { type: 'Full' };\n const isSimpleGrid = gridStyle?.type === 'Simple';\n const headerClasses = classNames(styles.gridHeader, {\n [styles.gridHeaderSimple]: isSimpleGrid,\n [styles.gridHeaderNoDivider]: gridStyle?.type === 'Simple' && gridStyle.hideHeaderDivider\n });\n const bodyClasses = classNames(styles.gridBody, {\n [styles.gridBodySimple]: isSimpleGrid,\n });\n const noDataRowClasses = classNames(styles.noDataGridRow, {\n [styles.noDataGridRowSimple]: isSimpleGrid\n });\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: styles.gridTable, role: \"table\", ref: gridRef },\n !props.hideHeaders &&\n React.createElement(\"div\", { className: headerClasses, style: { flex: '0 0 auto' }, role: \"row\", ref: headersRef }, headers.map((header, i) => React.createElement(GridCells.GridCellSizer, { style: columnWidthStyles[i], key: header.key || `header-${i}` }, header))),\n React.createElement(UseFlashesGridRowsRefClassWrapper, null, (rowKeysToFlash, gridRowKeysToFlashSetStateAction) => {\n if (props.flashesGridRowsRef) {\n props.flashesGridRowsRef.current = gridRowKeysToFlashSetStateAction;\n }\n const gridRows = buildRows(gridStyle, columnWidthStyles, rowKeysToFlash);\n const noDataRow = gridRows.length === 0\n ? React.createElement(\"div\", { className: noDataRowClasses }, props.noDataMessage)\n : null;\n return (React.createElement(\"div\", { className: bodyClasses, onScroll: handleBodyScroll, ref: bodyRef, role: \"rowgroup\" }, gridRows.length > 0 ? gridRows : noDataRow));\n }),\n totalsRows.map(totalsRow => {\n const totalsRowColumnWidthStyles = getRowColumnFlexStyle(totalsRow, columnWidthStyles);\n return React.createElement(\"div\", { key: totalsRow.keyValue, className: getTotalsClasses(totalsRow, isSimpleGrid) }, totalsRow.cells.map((totalsCell, i) => {\n return React.createElement(GridCells.GridCellSizer, { style: { ...totalsRowColumnWidthStyles[i], ...getCellAlignmentStyles(totalsCell.props.centerContent, totalsCell.props.verticalAlignment) }, key: totalsCell.key || `totals-cell-${i}` }, totalsCell);\n }));\n })),\n props.renderContextMenu &&\n React.createElement(ContextMenuContainer, { contextMenuOpenerRef: contextMenuOpenerRef }, (data) => props.renderContextMenu(data))));\n function getHeaders(headers) {\n let mappedHeaders = headers.map(header => typeof header === \"string\"\n ? React.createElement(GridCells.TextHeader, { basis: '0px', growFactor: 1, label: header })\n : header);\n const { rows, allowMultiSelect, showSelectAllHeader, rowExpansion } = props;\n const selectionStrategy = getSelectionStrategy();\n //Add a checkbox header column if using one of the multi-select strategies\n if (allowMultiSelect) {\n let allRowKeys = rows.map(r => r.keyValue);\n let allRowsAreSelected = selectionStrategy.areAllKeysSelected(allRowKeys);\n if (!!showSelectAllHeader || showSelectAllHeader === undefined) {\n mappedHeaders.unshift(React.createElement(GridCells.CheckboxHeader, { basis: '3rem', growFactor: 0, isChecked: allRowsAreSelected, toggleSelections: toggleAllRowSelections, title: allRowsAreSelected ? \"Deselect all\" : \"Select all\" }));\n }\n else {\n mappedHeaders.unshift(React.createElement(GridCells.GridContentHeader, { basis: '3rem', growFactor: 0 }));\n }\n }\n //Add an icon header column if using row expansion\n if (rowExpansion && rowExpansion.includeToggleIcon) {\n mappedHeaders.unshift(React.createElement(GridCells.IconHeader, { basis: 'auto' }));\n }\n //Add a column to the end if the vertical scrollbar is present\n if (hasVerticalScrollbar) {\n mappedHeaders.push(React.createElement(GridCells.HiddenHeader, { basis: `${verticalScrollbarWidth}px`, growFactor: 0 }));\n }\n return mappedHeaders;\n }\n function getTotalsRows(totalsRows) {\n const totalsRowsArray = totalsRows\n ? totalsRows.length !== undefined\n ? props.totalsRows\n : [props.totalsRows]\n : [];\n return totalsRowsArray.map(row => {\n return hasVerticalScrollbar\n ? { ...row, cells: [...row.cells, React.createElement(\"div\", { key: 'grid-totals-row-scrollbar', style: { flex: 'none', width: `${verticalScrollbarWidth}px` } }, \"\\u00A0\")] }\n : row;\n });\n }\n function getRowFlashScrollInfo(rowDefinition, rowKeysToFlash, foundRowToScroll) {\n const shouldFlash = rowKeysToFlash.has(rowDefinition.keyValue);\n const shouldScroll = shouldFlash && !foundRowToScroll;\n return shouldFlash\n ? shouldScroll\n ? 'FlashAndScrollTo'\n : 'Flash'\n : undefined;\n }\n function buildRows(gridStyle, columnWidthStyles, rowKeysToFlash) {\n const flashSet = new Set(rowKeysToFlash);\n if (!props.rowReorderDragAndDrop) {\n let foundRowToScroll = false;\n return props.rows.map(r => {\n const afterRenderEffect = getRowFlashScrollInfo(r, flashSet, foundRowToScroll);\n if (afterRenderEffect === 'FlashAndScrollTo')\n foundRowToScroll = true;\n return buildRow(r, gridStyle, columnWidthStyles, afterRenderEffect);\n });\n }\n return chain(props.rows)\n .groupBy(r => r.rowReorderDragAndDrop?.groupKey || \"nogroup\")\n .map(rowsInGroup => {\n return React.createElement(React.Fragment, { key: rowsInGroup[0].rowReorderDragAndDrop?.groupKey || \"nogroup\" },\n rowsInGroup\n .filter(r => r.rowReorderDragAndDrop?.pinToTop)\n .map(r => buildRow(r, gridStyle, columnWidthStyles, undefined)),\n React.createElement(\"div\", { className: \"grid-drag-drop-context\" },\n React.createElement(DragDropContext, { onDragEnd: (result, provided) => onRowDrop(result, provided, rowsInGroup) },\n React.createElement(Droppable, { droppableId: droppableId, isDropDisabled: props.rowReorderDragAndDrop?.isEditingAnyRowOrderNumber }, provided => (React.createElement(\"div\", { ...provided.droppableProps, ref: provided.innerRef },\n rowsInGroup.filter(r => !r.rowReorderDragAndDrop?.pinToTop).map((gridRow, index) => {\n let foundRowToScroll = false;\n const afterRenderEffect = getRowFlashScrollInfo(gridRow, flashSet, foundRowToScroll);\n if (afterRenderEffect === 'FlashAndScrollTo')\n foundRowToScroll = true;\n return React.createElement(Draggable, { key: gridRow.keyValue, draggableId: gridRow.keyValue.toString(), index: index, isDragDisabled: props.rowReorderDragAndDrop?.disabled ||\n props.rowReorderDragAndDrop?.isEditingAnyRowOrderNumber ||\n gridRow.rowReorderDragAndDrop?.disabled }, provided => (React.createElement(\"div\", { ref: provided.innerRef, ...provided.draggableProps, ...provided.dragHandleProps }, buildRow(gridRow, gridStyle, columnWidthStyles, afterRenderEffect))));\n }),\n provided.placeholder))))));\n })\n .value();\n }\n ;\n function buildRow(rowDefinition, gridStyle, columnWidthStyles, afterRenderEffect) {\n const selectionStrategy = getSelectionStrategy();\n const isRowSelected = rowDefinition.isSelected || selectionStrategy.isKeySelected(rowDefinition.keyValue);\n let rowKey = `grid-row-${rowDefinition.keyValue}`;\n let rowCells = withGridFeatureCells(rowDefinition);\n const rowColumnWidthStyles = getRowColumnFlexStyle(rowDefinition, columnWidthStyles);\n rowCells = rowCells.map((cell, i) => {\n return (React.createElement(GridCells.GridCellSizer, { style: { ...rowColumnWidthStyles[i], ...getCellAlignmentStyles(cell.props.centerContent, cell.props.verticalAlignment) }, key: cell.key || `cell-${i}` }, wrapMenuCell(cell, rowDefinition.keyValue)));\n });\n if (props.rowExpansion) {\n const thisRowIsExpanded = state.expandedRowKeys.some(k => k === rowDefinition.keyValue);\n const expandedRowContent = thisRowIsExpanded\n ? props.rowExpansion.getExpandedContent(rowDefinition.keyValue)\n : null;\n return React.createElement(\"div\", { key: rowKey },\n React.createElement(ExpandableGridRow, { ref: rowDefinition.ref, cells: rowCells, allowSelection: selectionStrategy.allowsSelection, isSelected: isRowSelected, isExpanded: thisRowIsExpanded, expandedContent: expandedRowContent, afterRenderEffect: afterRenderEffect, clickHandler: (e) => handleRowClick(rowDefinition.keyValue, e), rightClickHandler: (e) => handleRightClick(rowDefinition.keyValue, e), doubleClickHandler: (e) => handleDoubleClick(rowDefinition.keyValue, e), expansionStyle: props.rowExpansion.expansionStyle, className: rowDefinition.className, title: rowDefinition.title }));\n }\n return (React.createElement(\"div\", { key: rowKey },\n React.createElement(GridRow, { ref: rowDefinition.ref, autoHeight: rowDefinition.autoHeight, cells: rowCells, allowSelection: selectionStrategy.allowsSelection, isSelected: isRowSelected, afterRenderEffect: afterRenderEffect, clickHandler: (e) => handleRowClick(rowDefinition.keyValue, e), rightClickHandler: (e) => handleRightClick(rowDefinition.keyValue, e), doubleClickHandler: (e) => handleDoubleClick(rowDefinition.keyValue, e), gridStyle: gridStyle, className: rowDefinition.className, title: rowDefinition.title })));\n }\n ;\n function onRowDrop(result, provided, rows) {\n if (!result.destination || result.source.index == result.destination.index)\n return;\n const nonPinnedRows = rows.filter(r => !r.rowReorderDragAndDrop?.pinToTop);\n props.rowReorderDragAndDrop?.onRowDrop(nonPinnedRows[result.source.index], result.destination.index);\n }\n ;\n function withGridFeatureCells(rowDefinition) {\n const { allowMultiSelect, rowExpansion } = props;\n return [\n ...(rowExpansion && rowExpansion.includeToggleIcon ? [buildRowExpansionCell(rowDefinition)] : []),\n ...(allowMultiSelect ? [buildMultiselectCell(rowDefinition)] : []),\n ...rowDefinition.cells\n ];\n }\n function buildMultiselectCell(rowDefinition) {\n const { selectionStrategy } = props;\n const selectionDisabled = selectionStrategy ? !selectionStrategy.isKeySelectable(rowDefinition.keyValue) : false;\n const onToggle = selectionStrategy ? () => selectionStrategy.toggleKeySelection(rowDefinition.keyValue, { ctrlKey: true }) : undefined;\n const tooltip = selectionDisabled\n ? undefined\n : !!rowDefinition.isSelected\n ? \"Click to deselect row\"\n : \"Click to select row\";\n return React.createElement(GridCells.CheckboxCell, { isSelected: !!rowDefinition.isSelected, disabled: selectionDisabled, key: 'grid-cell-checkbox', onToggle: onToggle, className: \"multiselectcell-checkbox\", title: tooltip });\n }\n function buildRowExpansionCell(rowDefinition) {\n const { expandedRowKeys } = state;\n const { rowExpansion } = props;\n const collapsedIcon = rowExpansion && rowExpansion.collapsedIconClassName;\n const expandedIcon = rowExpansion && rowExpansion.expandedIconClassName;\n const thisRowIsExpanded = expandedRowKeys.some(k => k === rowDefinition.keyValue);\n const iconClass = thisRowIsExpanded\n ? expandedIcon ?? 'open-up-icon'\n : collapsedIcon ?? 'open-down-icon';\n return React.createElement(GridCells.IconCell, { iconClass: iconClass, style: { display: 'block' }, onClick: (e) => toggleRowExpansion(rowDefinition.keyValue, e), key: 'grid-cell-row-expander-icon' });\n }\n function getColumnFlexStyle(headers) {\n return headers.map(h => getFlexStyle(h.props));\n }\n function getRowColumnFlexStyle(rowDefinition, headerColumnWidthStyles) {\n return rowDefinition.columnWidths\n ? rowDefinition.columnWidths.map(c => getFlexStyle(c))\n : headerColumnWidthStyles;\n }\n function getFlexStyle(columnDefinition) {\n const { basis, growFactor } = columnDefinition;\n if (basis === 'auto') {\n return {\n flex: '0 0 auto',\n minWidth: 0\n };\n }\n var absolutePattern = /^(\\.?\\d+\\.?\\d*(?:px|em|rem))/;\n if (absolutePattern.test(basis)) {\n const flexGrow = (growFactor !== null && growFactor !== undefined && growFactor.toString()) || '1';\n return {\n flex: `${flexGrow} 0 ${basis}`,\n width: basis,\n minWidth: 0\n };\n }\n console.warn(`Unrecognized flex basis for a Grid cell: '${basis}'. Flex styles will not be applied to cells in this column.`);\n return {};\n }\n function getTotalsClasses(totalsRow, isSimpleGrid) {\n return classNames(styles.gridTotalsRow, totalsRow.className, {\n [styles.gridTotalsRowSimple]: isSimpleGrid,\n [styles.gridRowAutoHeight]: totalsRow.autoHeight\n });\n }\n function wrapMenuCell(rowCell, rowKey) {\n const isMenuCell = (cellProps) => cellProps && cellProps.isMenuCell;\n if (isMenuCell(rowCell.props)) {\n return React.createElement(GridCells.MenuCell, { centerContent: rowCell.props.centerContent, contentCell: rowCell, key: rowCell.key || undefined, menuButtonClickHandler: (e) => handleContextMenuButtonClick(rowKey, e) });\n }\n return rowCell;\n }\n function handleBodyScroll(e) {\n const gridElement = gridRef.current;\n const headerElement = gridElement.querySelector('.' + styles.gridHeader);\n const bodyElement = gridElement.querySelector('.' + styles.gridBody);\n const totalsRows = gridElement.querySelectorAll('.' + styles.gridTotalsRow);\n if (!headerElement || !bodyElement) {\n return;\n }\n headerElement.scrollLeft = bodyElement.scrollLeft;\n totalsRows.forEach(r => r.scrollLeft = bodyElement.scrollLeft);\n }\n function handleRowClick(rowKey, e) {\n const gridRow = e.nativeEvent.target?.closest(`.${styles.gridRow}`);\n // When a flyout is rendered in a grid cell, a click in the flyout will bubble up to the grid and this event handler\n // because react portals propagate events. But the flyout is NOT rendered inside the grid cell, so .closest() will not\n // find the grid cell or row. This is how we can detect that the click was really \"outside\" the grid cell and therefore\n // we do not want to toggle selection.\n if (!gridRow)\n return;\n const { rowExpansion } = props;\n const selectionStrategy = getSelectionStrategy();\n const isRowSelected = selectionStrategy.isKeySelected(rowKey);\n if (allowRowSelectionToggleOnClick(isRowSelected, gridRow, e.nativeEvent.target))\n selectionStrategy.toggleKeySelection(rowKey, e);\n if (allowRowExpansion(rowExpansion, gridRow, e.nativeEvent.target))\n toggleRowExpansion(rowKey);\n }\n ;\n function handleRightClick(rowKey, e) {\n e.stopPropagation();\n const selectionStrategy = getSelectionStrategy();\n if (!selectionStrategy.isKeySelected(rowKey)) {\n selectionStrategy.selectOnly(rowKey);\n }\n if (props.renderContextMenu) {\n e.preventDefault();\n const absPosition = {\n x: e.nativeEvent.clientX,\n y: e.nativeEvent.pageY\n };\n contextMenuOpenerRef.current?.open(absPosition, rowKey);\n }\n }\n function handleDoubleClick(rowKey, e) {\n if (props.onRowDoubleClick) {\n e.preventDefault();\n props.onRowDoubleClick(rowKey);\n }\n }\n function handleContextMenuButtonClick(rowKey, e) {\n e.stopPropagation();\n const selectionStrategy = getSelectionStrategy();\n if (!selectionStrategy.isKeySelected(rowKey)) {\n selectionStrategy.selectOnly(rowKey);\n }\n if (props.renderContextMenu) {\n const button = e.target;\n const relPosition = { relativeElement: button };\n contextMenuOpenerRef.current?.open(relPosition, rowKey);\n }\n }\n function toggleAllRowSelections() {\n let allRowKeys = props.rows.map(r => r.keyValue);\n getSelectionStrategy().toggleAllKeys(allRowKeys);\n }\n function allowRowExpansion(rowExpansion, gridRow, clickTarget) {\n const allowExpansionTarget = !closest(clickTarget, `[${gridAttributes.gridDisableRowExpansionOnClick}]`, gridRow);\n return (!!rowExpansion && rowExpansion.expandOnRowClick && allowExpansionTarget);\n }\n function toggleRowExpansion(rowKey, e) {\n if (e) {\n e.stopPropagation();\n }\n const expansionStyle = props.rowExpansion?.expansionStyle;\n setState(prevState => {\n if (prevState.expandedRowKeys.some(k => k === rowKey))\n return {\n ...prevState,\n expandedRowKeys: remove(prevState.expandedRowKeys, rowKey)\n };\n else if (expansionStyle === 'Multiple')\n return {\n ...prevState,\n expandedRowKeys: [...prevState.expandedRowKeys, rowKey]\n };\n else\n return {\n ...prevState,\n expandedRowKeys: [rowKey]\n };\n });\n }\n function internalContextMenuSelectionTriggered(selectedKeys) {\n setState(prevState => ({\n ...prevState,\n contextMenuInternalSelectionStrategy: new SingleSelectStrategy(selectedKeys, internalContextMenuSelectionTriggered)\n }));\n }\n function getSelectionStrategy() {\n return props.selectionStrategy || state.contextMenuInternalSelectionStrategy;\n }\n function getCellAlignmentStyles(centerContent, verticalAlignment) {\n var isCentered = !!centerContent;\n var centerstyles = isCentered ? { display: 'flex', justifyContent: 'center' } : {};\n var verticalAlignmentStyles = !!verticalAlignment ? GridCells.getVerticalCellAlignmentStyle(verticalAlignment) : {};\n return { ...centerstyles, ...verticalAlignmentStyles };\n }\n}\n// Searching for data- attributes stops at the grid row element in case a grid is ever nested in a grid cell.\nfunction allowRowSelectionToggleOnClick(isRowSelected, gridRow, clickTarget) {\n const isBlacklisted = clickTarget.matches(\"input,textarea\") || closest(clickTarget, \"a,button\", gridRow);\n if (isBlacklisted) {\n if (isRowSelected) {\n const allowDeselect = !!closest(clickTarget, `[${gridAttributes.gridAllowRowDeselectOnClick}]`, gridRow);\n return allowDeselect;\n }\n const allowSelect = !!closest(clickTarget, `[${gridAttributes.gridAllowRowSelectOnClick}]`, gridRow);\n return allowSelect;\n }\n if (isRowSelected) {\n const allowDeselect = !closest(clickTarget, `[${gridAttributes.gridDisableRowDeselectOnClick}]`, gridRow);\n return allowDeselect;\n }\n const allowSelect = !closest(clickTarget, `[${gridAttributes.gridDisableRowSelectOnClick}]`, gridRow);\n return allowSelect;\n}\n/** Returns the given element or the closest parent element that matches the given selectors.\n * @param stopAtParent If given, will return null after this parent element is reached and does not match the given selectors.\n */\nfunction closest(element, selectors, stopAtParent) {\n if (!stopAtParent)\n return element.closest(selectors);\n let nextElement = element;\n while (true) {\n if (!nextElement)\n return null;\n if (nextElement.matches(selectors))\n return nextElement;\n if (nextElement === stopAtParent)\n return null;\n nextElement = nextElement.parentElement;\n }\n}\n","import * as React from \"react\";\nexport function useGridVerticalScrollbarObserver(gridHeaderRef, gridBodyRef, hideHeaders) {\n const [hasVerticalScrollbar, setHasVerticalScrollbar] = React.useState(false);\n const [verticalScrollbarWidth, setVerticalScrollbarWidth] = React.useState(0);\n const verticalScrollbarVisibleRef = React.useRef(false);\n const handleScrollbarVisibilityChanged = React.useCallback(() => {\n if (hideHeaders)\n return;\n if (!gridHeaderRef.current || !gridBodyRef.current) {\n return;\n }\n const bodyVerticalScrollbarWidth = gridHeaderRef.current.clientWidth - gridBodyRef.current.clientWidth;\n if (bodyVerticalScrollbarWidth > 0) {\n if (hasVerticalScrollbar)\n return;\n //This will trigger an extra header \"column\" that matches up with the width of the vertical scrollbar in the body.\n //This keeps the header columns aligned with the body columns.\n setHasVerticalScrollbar(true);\n setVerticalScrollbarWidth(bodyVerticalScrollbarWidth);\n }\n else {\n if (!hasVerticalScrollbar)\n return;\n setHasVerticalScrollbar(false);\n setVerticalScrollbarWidth(0);\n }\n }, [hideHeaders, hasVerticalScrollbar]);\n React.useEffect(() => {\n if (gridBodyRef.current && !hideHeaders) {\n const ro = new ResizeObserver((entries, observer) => {\n const bodyElement = entries[0].target;\n //The canonical way to detect that the vertical scrollbar is visible would be to compare the body element's scrollHeight to it's clientHeight.\n //That's what we did originally. But we found that the browser had strange behavior at certain pixel boundaries, where the scrollHeight would be 1px > clientHeight\n //but it would *not* render a vertical scrollbar. This appears to be a subpixel rounding issue within the browser.\n //So instead, we're comparing the client widths of the header element and the body element. The only reason they would be different\n //is if the browser is rendering a vertical scrollbar, so this is a more reliable check.\n var visible = (gridHeaderRef.current.clientWidth - bodyElement.clientWidth) > 0;\n if (visible !== verticalScrollbarVisibleRef.current) {\n //Note: The RAF here is to prevent the \"ResizeObserver loop limit exceeded\" error.\n window.requestAnimationFrame(() => {\n const scrollbarEvent = new Event('scrollbarVisibilityChanged');\n bodyElement.dispatchEvent(scrollbarEvent);\n });\n }\n verticalScrollbarVisibleRef.current = visible;\n });\n gridBodyRef.current.addEventListener('scrollbarVisibilityChanged', handleScrollbarVisibilityChanged);\n ro.observe(gridBodyRef.current);\n return () => {\n if (gridBodyRef.current) {\n gridBodyRef.current.removeEventListener('scrollbarVisibilityChanged', handleScrollbarVisibilityChanged);\n }\n ro.disconnect();\n };\n }\n }, [hideHeaders, handleScrollbarVisibilityChanged]);\n return [hasVerticalScrollbar, verticalScrollbarWidth];\n}\n","/** Allows row selection when an element is clicked in a grid cell that is blacklisted to prevent row selection. */\nexport const gridAllowRowSelectOnClick = \"data-spr-grid-allow-row-select-on-click\";\n/** Allows row deselection when an element is clicked in a grid cell that is blacklisted to prevent row selection */\nexport const gridAllowRowDeselectOnClick = \"data-spr-grid-allow-row-deselect-on-click\";\n/** Disables row selection when an element is clicked in a grid cell */\nexport const gridDisableRowSelectOnClick = \"data-spr-grid-disable-row-select-on-click\";\n/** Disables row deselection when an element is clicked in a grid cell */\nexport const gridDisableRowDeselectOnClick = \"data-spr-grid-disable-row-deselect-on-click\";\n/** Disables row Expansion when an element is clicked in a grid cell */\nexport const gridDisableRowExpansionOnClick = \"data-spr-grid-disable-row-expansion-on-click\";\nexport const allowRowSelectOnClickAttribute = { [gridAllowRowSelectOnClick]: \"\" };\nexport const allowRowDeselectOnClickAttribute = { [gridAllowRowDeselectOnClick]: \"\" };\nexport const disableRowSelectOnClickAttribute = { [gridDisableRowSelectOnClick]: \"\" };\nexport const disableRowDeselectOnClickAttribute = { [gridDisableRowDeselectOnClick]: \"\" };\nexport const disableRowExpansionOnClickAttribute = { [gridDisableRowExpansionOnClick]: \"\" };\n","import * as React from \"react\";\nimport classnames from 'classnames';\nimport * as styles from \"spry-react/Grid/gridStyles\";\nimport { CheckboxField } from \"spry-react/Checkbox/checkboxField\";\nimport { getCurrencyFragment } from 'spry-react/Number/currency';\nimport { Link } from \"spry-react/Link/link\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\nimport { buttonKeyPressHandler } from \"spry-react/utils/buttonKeyPressHandler\";\nimport classNames from \"classnames\";\nimport { MatrixPopper } from \"spry-react/Popper/matrixPopper\";\nimport { allowRowSelectOnClickAttribute, disableRowDeselectOnClickAttribute, disableRowExpansionOnClickAttribute, disableRowSelectOnClickAttribute } from \"./gridAttributes\";\nimport { Icon } from \"spry-react/Icon/icon\";\nimport { RadioButtonField } from \"spry-react/RadioButton/radioButtonField\";\nexport var SortDirection;\n(function (SortDirection) {\n SortDirection[SortDirection[\"None\"] = 0] = \"None\";\n SortDirection[SortDirection[\"Ascending\"] = 1] = \"Ascending\";\n SortDirection[SortDirection[\"Descending\"] = 2] = \"Descending\";\n})(SortDirection || (SortDirection = {}));\nexport function GridCellSizer(props) {\n return React.createElement(\"div\", { style: props.style, className: props.className }, props.children);\n}\n/* ********** Header Cells ********** */\nconst sortIndicators = [\n React.createElement(\"span\", { className: 'sort-ind-asc', key: 'sort-ind-asc' }),\n React.createElement(\"span\", { className: 'sort-ind-desc', key: 'sort-ind-desc' })\n];\nexport function HiddenHeader(props) {\n return null;\n}\nexport function GridContentHeader(props) {\n const classes = classnames(props.className, {\n [styles.columnHeaderCentered]: props.centerContent,\n [styles.columnHeaderRight]: props.isNumericColumn\n });\n return (React.createElement(\"div\", { style: props.style, className: classes, title: props.title, role: \"columnheader\" }, props.children));\n}\nexport function GridSortHeaderContent(props) {\n const sortDirectionClass = getSortDirectionClass(props.sort.direction);\n const cssClasses = classnames('sort-header', sortDirectionClass, props.className);\n return (React.createElement(\"div\", { className: cssClasses, style: props.style, role: \"columnheader\", ...sortableColumnHeaderProps(props.sort?.onSort, props.sort?.direction) },\n React.createElement(\"div\", { style: { display: \"inline-block\" } }, props.children),\n sortIndicators));\n}\nexport function GridSortIconHeaderContent(props) {\n //sort-content css class has a padding.\n //It seems to be used when sorting the text columns in combination with css class non-sort-header\n //but for icons the css class grid-icon-cell has its own padding that overrides sort-contents when on the same element.\n //this split out sort-content into its own element and we have to now override its padding.\n const cssStyle = {\n ...props.style,\n padding: \"0px\"\n };\n return React.createElement(GridSortHeaderContent, { ...props, style: cssStyle });\n}\nexport function TextHeader(props) {\n const classes = classnames(styles.textColumnHeader, {\n [styles.columnHeaderCentered]: props.centerContent,\n [styles.columnHeaderRight]: props.isNumericColumn\n });\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(\"h4\", { className: classnames('non-sort-header', { 'text-ellipsis': props.ellipsis }) }, props.label)));\n}\nexport function getSortDirectionClass(direction) {\n switch (direction) {\n case SortDirection.None:\n return \"\";\n case SortDirection.Ascending:\n return \"sort-asc\";\n case SortDirection.Descending:\n return \"sort-desc\";\n }\n}\nexport function getSortDirectionAria(direction) {\n switch (direction) {\n case null:\n case undefined:\n case SortDirection.None:\n return \"none\";\n case SortDirection.Ascending:\n return \"ascending\";\n case SortDirection.Descending:\n return \"descending\";\n }\n}\nfunction SortHeading(props) {\n const { label, sort } = props;\n const sortClass = !!sort && getSortDirectionClass(sort.direction);\n let classes = classnames(sortClass, !!sort ? 'sort-header' : 'non-sort-header', { 'text-ellipsis': props.ellipsis });\n return React.createElement(\"h4\", { className: classes, ...sortableColumnHeaderProps(sort?.onSort, sort?.direction) },\n label || '\\u00A0',\n !!sort && sortIndicators);\n}\nexport function SortableTextHeader(props) {\n const sortDirectionClass = getSortDirectionClass(props.sort.direction);\n const classes = classnames(styles.textColumnHeader, sortDirectionClass, {\n [styles.columnHeaderCentered]: props.centerContent,\n [styles.columnHeaderRight]: props.isNumericColumn,\n 'text-ellipsis': props.ellipsis\n });\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(\"h4\", { className: `sort-header ${classes}`, ...sortableColumnHeaderProps(props.sort.onSort, props.sort.direction) },\n props.label,\n sortIndicators)));\n}\nfunction sortableColumnHeaderProps(onSort, sortDirection) {\n return {\n onClick: onSort ?? (() => { }),\n onKeyPress: buttonKeyPressHandler(onSort ?? (() => { })),\n tabIndex: onSort ? 0 : undefined,\n 'aria-sort': getSortDirectionAria(sortDirection)\n };\n}\nexport function StackedTextHeader(props) {\n const classes = classnames(styles.textColumnHeader, {\n [styles.columnHeaderCentered]: props.centerContent,\n [styles.columnHeaderRight]: props.isNumericColumn\n });\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(\"h4\", { className: classnames('non-sort-header', { 'text-ellipsis': props.ellipsisLabel1 }) }, props.label1 || '\\u00A0'),\n React.createElement(\"h4\", { className: classnames('non-sort-header', { 'text-ellipsis': props.ellipsisLabel2 }) }, props.label2 || '\\u00A0')));\n}\nexport function SortableStackedTextHeader(props) {\n const { label1, label2, sortTop, sortBottom, centerContent, isNumericColumn } = props;\n const classes = classnames(styles.textColumnHeader, {\n [styles.columnHeaderCentered]: centerContent,\n [styles.columnHeaderRight]: isNumericColumn\n });\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(SortHeading, { ellipsis: props.ellipsisLabel1, label: label1, sort: sortTop }),\n React.createElement(SortHeading, { ellipsis: props.ellipsisLabel2, label: label2, sort: sortBottom })));\n}\nexport function SplitSortableStackedTextHeaderTop(props) {\n const { label1a, label1b, label2, sortTopLeft, sortTopRight, sortBottom, centerContent, isNumericColumn } = props;\n const classes = classnames(styles.textColumnHeader, {\n [styles.columnHeaderCentered]: centerContent,\n [styles.columnHeaderRight]: isNumericColumn\n });\n const sortClass1a = getSortDirectionClass(sortTopLeft.direction);\n let classes1a = `sort-header sort-header-inline ${sortClass1a}`.trim();\n const sortClass1b = getSortDirectionClass(sortTopRight.direction);\n let classes1b = `sort-header sort-header-inline ${sortClass1b}`.trim();\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(\"h4\", { className: classes1a, ...sortableColumnHeaderProps(sortTopLeft.onSort, sortTopLeft.direction) },\n label1a,\n sortIndicators),\n React.createElement(\"h4\", { className: classes1b, style: { paddingLeft: '0' }, ...sortableColumnHeaderProps(sortTopRight.onSort, sortTopRight.direction) },\n label1b,\n sortIndicators),\n React.createElement(SortHeading, { label: label2, sort: sortBottom })));\n}\nexport function SplitSortableStackedTextHeaderBottom(props) {\n const { label1, label2a, label2b, sortTop, sortBottomLeft, sortBottomRight, centerContent, isNumericColumn } = props;\n const classes = classnames(styles.textColumnHeader, {\n [styles.columnHeaderCentered]: centerContent,\n [styles.columnHeaderRight]: isNumericColumn\n });\n const sortClass2a = getSortDirectionClass(sortBottomLeft.direction);\n let classes2a = `sort-header sort-header-inline ${sortClass2a}`.trim();\n const sortClass2b = getSortDirectionClass(sortBottomRight.direction);\n let classes2b = `sort-header sort-header-inline ${sortClass2b}`.trim();\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(SortHeading, { label: label1, sort: sortTop }),\n React.createElement(\"h4\", { className: classes2a, ...sortableColumnHeaderProps(sortBottomLeft.onSort, sortBottomLeft.direction) },\n label2a,\n sortIndicators),\n React.createElement(\"h4\", { className: classes2b, style: { paddingLeft: '0' }, ...sortableColumnHeaderProps(sortBottomRight.onSort, sortBottomRight.direction) },\n label2b,\n sortIndicators)));\n}\nexport function IconHeader(props) {\n if (!props.icon && !props.iconClass) {\n return React.createElement(\"div\", { style: { padding: '0.5em' }, role: \"columnheader\" },\n React.createElement(\"span\", { className: styles.iconColumnHeader }, \"\\u00A0\"));\n }\n if (props.icon) {\n const icon = React.createElement(Icon, { icon: props.icon, color: props.iconColor ?? 'auto', singleColor: props.singleColor, title: props.title, style: props.style });\n return React.createElement(\"div\", { className: classNames(styles.gridIconHeader, styles.gridIconCell, styles.gridIconCellNoVerticalPadding), style: { display: 'flex', alignItems: 'center', justifyContent: 'center' }, role: 'columnheader' },\n props.onClick && React.createElement(Link, { className: props.disabled\n ? 'disabled'\n : undefined, disabled: props.disabled, onClick: props.onClick, title: props.title }, icon),\n !props.onClick && icon);\n }\n if (props.onClick) {\n const iconClasses = classnames(props.iconClass, 'no-padding-psuedo-elements', {\n 'disabled': props.disabled\n });\n return (React.createElement(\"div\", { className: classNames(styles.gridIconHeader, styles.gridIconCell), role: \"columnheader\", style: { display: 'flex', justifyContent: 'center' } },\n React.createElement(Link, { className: iconClasses, onClick: props.onClick, disabled: props.disabled, style: props.style, title: props.title }, props.overlapIconClass\n ? React.createElement(\"span\", { className: props.overlapIconClass })\n : null)));\n }\n return (React.createElement(\"div\", { className: classnames(styles.gridIconCell, props.iconClass, 'no-padding-psuedo-elements'), style: { display: 'flex', justifyContent: 'center', ...props.style }, title: props.title, role: \"columnheader\" }, props.overlapIconClass\n ? React.createElement(\"span\", { className: props.overlapIconClass })\n : null));\n}\nexport function SortableIconHeader(props) {\n const classes = classnames(styles.gridIconHeader, styles.columnHeaderCentered);\n return React.createElement(\"div\", { className: classes, role: \"columnheader\" },\n React.createElement(IconHeaderContent, { ...props }));\n}\nexport function StackedIconHeader(props) {\n const classes = classnames(styles.gridIconHeader, styles.columnHeaderCentered);\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\", style: { display: 'grid', gridTemplateRows: '1fr 1fr', gap: '5px' } },\n React.createElement(IconHeaderContent, { ...props.iconPropsTop, style: { fontSize: '1.1rem', ...props.iconPropsTop?.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsTop?.className) }),\n React.createElement(IconHeaderContent, { ...props.iconPropsBottom, style: { fontSize: '1.1rem', ...props.iconPropsBottom?.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsBottom?.className) })));\n}\nexport function SortableStackedIconHeader(props) {\n const classes = classnames(styles.gridIconHeader, styles.columnHeaderCentered);\n return (React.createElement(\"div\", { className: classes, role: \"columnheader\", style: { display: 'grid', gridTemplateRows: '1fr 1fr', gap: '5px' } },\n React.createElement(IconHeaderContent, { ...props.iconPropsTop, style: { fontSize: '1.1rem', ...props.iconPropsTop?.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsTop?.className), sort: props.sortTop }),\n React.createElement(IconHeaderContent, { ...props.iconPropsBottom, style: { fontSize: '1.1rem', ...props.iconPropsBottom?.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsBottom?.className), sort: props.sortBottom })));\n}\nfunction IconHeaderContent(props) {\n const sortDirectionClass = !!props.sort\n ? getSortDirectionClass(props.sort.direction)\n : null;\n if (props.icon) {\n return (React.createElement(\"div\", { className: classNames(props.className, styles.gridIconCell, sortDirectionClass, {\n 'sort-header': !!props.sort\n }), style: { display: 'flex', justifyContent: 'center' }, title: props.title, role: 'columnheader', ...(!!props.sort\n ? sortableColumnHeaderProps(props.sort.onSort, props.sort.direction)\n : undefined) },\n React.createElement(\"div\", { style: { display: 'flex', justifyContent: 'center' } },\n React.createElement(Icon, { icon: props.icon, singleColor: props.singleColor, color: props.iconColor ?? \"auto\", style: props.style, title: props.title })),\n !!props.sort &&\n sortIndicators));\n }\n else {\n return (React.createElement(\"div\", { className: classnames(props.iconClass, props.className, 'no-padding-psuedo-elements', styles.gridIconCell, sortDirectionClass, {\n 'sort-header': !!props.sort\n }), style: { display: 'flex', justifyContent: 'center', ...props.style }, title: props.title, role: \"columnheader\", ...(!!props.sort\n ? sortableColumnHeaderProps(props.sort.onSort, props.sort.direction)\n : undefined) },\n props.overlapIconClass\n ? React.createElement(\"span\", { className: props.overlapIconClass })\n : null,\n !!props.sort &&\n React.createElement(\"div\", { style: { position: 'relative', top: '-0.2rem' } }, sortIndicators)));\n }\n}\nexport function CheckboxHeader(props) {\n return (React.createElement(\"div\", { style: { textAlign: 'center' }, role: \"columnheader\" },\n React.createElement(CheckboxField, { value: props.isChecked, onToggle: props.toggleSelections, title: props.title })));\n}\nexport function getVerticalCellAlignmentStyle(verticalAlignment) {\n if (verticalAlignment == \"top\") {\n return { alignSelf: \"flex-start\" };\n }\n else if (verticalAlignment == \"bottom\") {\n return { alignSelf: \"flex-end\" };\n }\n else {\n throw \"Unrecognized Vertical Alignment\";\n }\n}\nexport function ContentCell(props) {\n const classes = classnames(styles.gridCell, 'text-ellipsis', props.className);\n return React.createElement(\"div\", { className: classes, style: props.style, role: \"cell\" }, props.children);\n}\nexport function MenuCell(props) {\n const buttonId = useGeneratedId();\n return (React.createElement(\"div\", { className: styles.menuCell, role: \"cell\" },\n React.createElement(\"div\", { className: styles.menuCellContent }, props.contentCell),\n React.createElement(\"div\", { className: styles.menuCellMenu },\n React.createElement(\"button\", { ...allowRowSelectOnClickAttribute, id: buttonId, className: 'vertical-ellipsis-icon', onClick: props.menuButtonClickHandler }))));\n}\nexport function TextCell(props) {\n const classes = classnames(styles.gridCell, 'text-ellipsis', props.className, {\n [styles.numeric]: props.isNumericColumn\n });\n return (React.createElement(\"div\", { className: classes, role: \"cell\" },\n React.createElement(\"p\", { className: 'text-ellipsis' }, props.value)));\n}\nexport function StackedTextCell(props) {\n return (React.createElement(StackedContentCell, { top: props.value1, bottom: props.value2, additionalCellClasses: 'text-ellipsis', centerContent: props.centerContent, verticalAlignment: props.verticalAlignment, isNumericColumn: props.isNumericColumn }));\n}\nexport function StackedContentCell(props) {\n const cellClasses = classNames(styles.gridCell, props.additionalCellClasses, {\n [styles.numeric]: props.isNumericColumn\n });\n const renderEmptyElements = props.renderEmptyElements === undefined ? true : props.renderEmptyElements;\n const top = renderEmptyElements && (!props.top || typeof props.top === \"string\")\n ? React.createElement(\"p\", { className: 'text-ellipsis' }, props.top || '\\u00A0')\n : props.top;\n const bottom = renderEmptyElements && (!props.bottom || typeof props.bottom === \"string\")\n ? React.createElement(\"p\", { className: 'text-ellipsis' }, props.bottom || '\\u00A0')\n : props.bottom;\n return (React.createElement(\"div\", { className: cellClasses, role: \"cell\" },\n top,\n bottom));\n}\nexport function ReorderCell(props) {\n return React.createElement(ContentCell, { ...props, className: \"grid-reorder-cell\", style: {\n // Padding is removed when when editing the order number and the cell is next to another (with padding).\n // This is done to give more room to the input field displayed to edit the order number.\n paddingLeft: props.isEditingOrder && props.hasPrecedingColumns ? \"0px\" : undefined,\n paddingRight: props.isEditingOrder && props.hasFollowingColumns ? \"0px\" : undefined\n } }, props.children);\n}\nexport function ReorderHandleCell(props) {\n return React.createElement(\"div\", { style: { display: \"inline-block\" } },\n React.createElement(IconCell, { disableRowSelectOnClick: true, disableRowDeselectOnClick: true, iconClass: classNames(\"grid-row-reorder-handle\", { \"grid-row-reorder-handle-disabled\": props?.disabled }) }));\n}\nexport function LinkCell(props) {\n const link = React.createElement(Link, { ...props.linkProps, className: classNames('text-ellipsis', props.linkProps.className) }, props.linkText);\n return (React.createElement(\"div\", { className: `${styles.gridCell} text-ellipsis`, role: \"cell\" }, props.isPrimaryAction\n ? React.createElement(\"h4\", null, link)\n : link));\n}\nexport function StackedLinkCell(props) {\n let topElementContent = props.textValueTop\n ? props.linkPropsTop\n ? React.createElement(Link, { ...props.linkPropsTop, className: classNames('text-ellipsis', props.linkPropsTop.className) }, props.textValueTop)\n : React.createElement(\"p\", { className: 'text-ellipsis' }, props.textValueTop)\n : '\\u00A0';\n let topElement = props.isPrimaryAction ? React.createElement(\"h4\", null, topElementContent) : topElementContent;\n let bottomElement = props.textValueBottom\n ? props.linkPropsBottom\n ? React.createElement(Link, { ...props.linkPropsBottom, className: classNames('text-ellipsis', props.linkPropsBottom.className) }, props.textValueBottom)\n : React.createElement(\"p\", { className: 'text-ellipsis' }, props.textValueBottom)\n : '\\u00A0';\n return (React.createElement(StackedContentCell, { top: topElement, bottom: bottomElement, additionalCellClasses: 'text-ellipsis' }));\n}\nexport function CurrencyCell(props) {\n const { currencyValue, className: userClasses, ...domPropsRest } = props;\n const currencyFragment = getCurrencyFragment(currencyValue);\n const classes = classnames(styles.gridCell, styles.numeric, userClasses);\n return (React.createElement(\"div\", { className: classes, ...domPropsRest, role: \"cell\" }, currencyFragment));\n}\nexport function CurrencyLinkCell(props) {\n const { currencyValue, className: userClasses, onLinkClick, ...domPropsRest } = props;\n const classes = classnames(styles.gridCell, styles.numeric, userClasses);\n return (React.createElement(\"div\", { className: classes, ...domPropsRest, role: \"cell\" },\n React.createElement(Link, { onClick: onLinkClick, disabled: props.disabled }, getCurrencyFragment(currencyValue))));\n}\nexport function IconCell(props) {\n return React.createElement(\"div\", { className: classNames(styles.gridIconCell, props.className), style: { display: 'flex', alignItems: 'center', justifyContent: 'center', ...props.style }, title: props.title, role: 'columnheader', ...props.disableRowSelectOnClick && disableRowSelectOnClickAttribute, ...props.disableRowDeselectOnClick && disableRowDeselectOnClickAttribute },\n React.createElement(IconCellContent, { ...props, className: undefined }));\n}\nexport function StackedIconCell(props) {\n const cellClasses = classNames(styles.gridCell, {\n [styles.gridIconCell]: !!props.iconPropsTop?.icon || !!props.iconPropsTop?.iconClass || !!props.iconPropsBottom?.icon || !!props.iconPropsBottom?.iconClass\n });\n const top = !!props.iconPropsTop\n ? React.createElement(IconCellContent, { ...props.iconPropsTop, style: { fontSize: '1.1rem', ...props.iconPropsTop.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsTop.className) })\n : React.createElement(\"p\", null, '\\u00A0');\n const bottom = !!props.iconPropsBottom\n ? React.createElement(IconCellContent, { ...props.iconPropsBottom, style: { fontSize: '1.1rem', ...props.iconPropsBottom.style }, className: classNames(styles.gridStackedIconCell, props.iconPropsBottom.className) })\n : React.createElement(\"p\", null, '\\u00A0');\n return (React.createElement(\"div\", { className: cellClasses, role: \"cell\", ...props.disableRowSelectOnClick && disableRowSelectOnClickAttribute, ...props.disableRowDeselectOnClick && disableRowDeselectOnClickAttribute, style: { display: 'grid', gridTemplateRows: '1fr 1fr', gap: '5px' } },\n top,\n bottom));\n}\nexport function IconCellContent(props) {\n if (props.icon) {\n const icon = React.createElement(Icon, { icon: props.icon, style: { display: 'flex', alignItems: 'center', justifyContent: 'center', ...props.style }, title: props.title, color: props.color, singleColor: props.singleColor, className: props.className });\n return !!props.onClick\n ? (React.createElement(Link, { className: props.disabled\n ? 'disabled'\n : undefined, disabled: props.disabled, onClick: props.onClick, title: props.title, style: { display: 'flex', alignItems: 'center', justifyContent: 'center' } }, icon))\n : icon;\n }\n const iconClasses = classnames(props.iconClass, props.className, 'no-padding-psuedo-elements', {\n 'disabled': props.disabled\n });\n return !!props.onClick\n ? (React.createElement(Link, { className: iconClasses, onClick: props.onClick, style: { display: 'flex', alignItems: 'center', justifyContent: 'center', ...props.style }, disabled: props.disabled, title: props.title }, props.overlapIconClass\n ? React.createElement(\"span\", { className: props.overlapIconClass })\n : null))\n : (React.createElement(\"div\", { className: iconClasses, title: props.title, style: { display: 'flex', alignItems: 'center', justifyContent: 'center', ...props.style } }, props.overlapIconClass\n ? React.createElement(\"span\", { className: props.overlapIconClass })\n : null));\n}\nexport function CheckboxCell(props) {\n return (React.createElement(\"div\", { className: styles.gridCell, style: { textAlign: props.align ?? 'center' }, role: \"cell\" },\n React.createElement(\"div\", { ...props.onToggle && disableRowSelectOnClickAttribute, ...props.onToggle && disableRowDeselectOnClickAttribute, ...disableRowExpansionOnClickAttribute, style: { display: \"inline-block\" } },\n React.createElement(CheckboxField, { value: props.isSelected, disabled: props.disabled, onToggle: props.onToggle, className: props.className, title: props.title }))));\n}\nexport function RadioButtonCell(props) {\n return (React.createElement(\"div\", { className: styles.gridCell, style: { textAlign: props.align ?? 'center' }, role: \"cell\" },\n React.createElement(\"div\", { ...disableRowSelectOnClickAttribute, ...disableRowDeselectOnClickAttribute, ...disableRowExpansionOnClickAttribute, style: { display: \"inline-block\", position: 'relative', top: '2px' } },\n React.createElement(RadioButtonField, { value: props.value, checked: props.checked, onChange: props.onChange, disabled: props.disabled, title: props.title }))));\n}\n/** A grid cell that ellipsizes its text after one or more lines */\nexport function MultilineTextEllipsisCell(props) {\n return React.createElement(\"div\", { role: \"cell\", className: styles.gridCell },\n React.createElement(\"div\", { style: { display: \"-webkit-box\", overflow: \"hidden\", whiteSpace: \"normal\", WebkitLineClamp: props.maxLines ?? 2, WebkitBoxOrient: \"vertical\" }, title: props.value }, props.value));\n}\nexport function Cell(props) {\n const { className: userClasses, ...domPropsRest } = props;\n const classes = classnames(styles.gridCell, userClasses);\n return React.createElement(\"div\", { className: classes, ...domPropsRest, role: \"cell\" }, props.children);\n}\nexport function PlusNItems(props) {\n return (React.createElement(\"div\", { style: { display: \"flex\" }, role: \"cell\" },\n React.createElement(\"p\", { className: 'text-ellipsis', style: { display: 'inline-block' } }, props.displayValue || '\\u00A0'),\n props.totalItemCount > 1\n ? React.createElement(\"div\", { ...disableRowSelectOnClickAttribute, ...disableRowDeselectOnClickAttribute, style: { display: \"contents\" } }, props.popperElement)\n : null));\n}\n/** A grid cell that has zero to many children. The first child is displayed and a popper is used to display subsequent children. */\nexport function PlusMoreCell(props) {\n const children = React.Children.toArray(props.children);\n return React.createElement(\"div\", { role: \"cell\", className: styles.gridCell },\n React.createElement(\"div\", { style: { display: \"flex\", flexWrap: \"nowrap\" } },\n React.createElement(\"div\", { className: \"text-ellipsis\" }, children[0]),\n children.length > 1 &&\n React.createElement(\"div\", { ...disableRowSelectOnClickAttribute, ...disableRowDeselectOnClickAttribute, className: \"l-box-hl-1-2x\" }, props.popper instanceof Function\n ? props.popper({ children })\n : props.popper || React.createElement(PlusMoreCellListPopper, { children: children }))));\n}\n/** A popper that displays each child element in a list. Used in combination with PlusMoreCell */\nexport function PlusMoreCellListPopper(props) {\n return React.createElement(MatrixPopper, { trigger: \"click\", popperPlacement: props.placement || \"right\", target: React.createElement(React.Fragment, null,\n \"(\",\n React.createElement(\"span\", { className: \"flyout-link\" },\n \"+\",\n props.children.length - 1),\n \")\"), popperContent: React.createElement(\"ul\", { style: {\n margin: \"0px\",\n padding: \"0px 0px 0px 1.5rem\",\n maxWidth: props.maxWidth || \"46rem\",\n maxHeight: props.maxHeight || \"24rem\",\n overflowY: \"auto\"\n } }, React.Children.map(props.children, child => React.createElement(\"li\", { style: { whiteSpace: \"nowrap\" } }, child))) });\n}\n","import * as React from \"react\";\nexport function PagerButton(props) {\n let enabledClass = props.pageButton.enabled ? '' : 'pure-button-disabled';\n let dottedClass = props.pageButton.isDotted ? 'page-dotted' : '';\n let selectedClass = props.pageButton.isSelected ? 'page-selected' : '';\n let buttonClasses = `pure-button page-button ${enabledClass} ${dottedClass} ${selectedClass}`.trim();\n return (React.createElement(\"button\", { className: buttonClasses, onClick: () => props.model.goToPage(props.pageButton), type: 'button' }, props.pageButton.pageNumberDisplay));\n}\nexport function Pager(props) {\n if (!props.model.visible) {\n return null;\n }\n const previousPageClasses = `pure-button page-button previous-page ${props.model.previousPageEnabled ? '' : 'pure-button-disabled'}`.trim();\n const nextPageClasses = `pure-button page-button next-page ${props.model.nextPageEnabled ? '' : 'pure-button-disabled'}`.trim();\n const pagerButtons = props.model.pageButtons.map((button, index) => React.createElement(PagerButton, { pageButton: button, model: props.model, key: `page-button-${index}` }));\n const pager = (React.createElement(\"div\", { className: 'pager' },\n React.createElement(\"button\", { className: previousPageClasses, title: 'Previous Page', onClick: handlePreviousPageClicked, key: 'page-button-prev', type: 'button' }),\n pagerButtons,\n React.createElement(\"button\", { className: nextPageClasses, title: 'Next Page', onClick: handleNextPageClicked, key: 'page-button-next', type: 'button' })));\n return pager;\n function handlePreviousPageClicked() {\n props.model.goToPreviousPage();\n }\n function handleNextPageClicked() {\n props.model.goToNextPage();\n }\n}\n","import * as _ from 'underscore';\nexport class PagerModel {\n constructor(settings, onPageSelected, maxPageButtons = 10) {\n this.getPageButtons = () => {\n if (this.lastPage <= 1)\n return [];\n if (this.lastPage <= this.maxPageButtons)\n return _.times(this.lastPage, (pageNumber) => { return this.buildPageButton(pageNumber + 1); });\n //Excluding the first, last and current buttons, count the 'spaces' available for page buttons\n let availableButtons = this.maxPageButtons - 3;\n let availableButtonsAfter = Math.floor(availableButtons / 2);\n let pagesBetweenThisPageAndLast = this.getPagesBetween(this.page, this.lastPage);\n if (availableButtonsAfter > pagesBetweenThisPageAndLast)\n availableButtonsAfter = pagesBetweenThisPageAndLast;\n let availableButtonsBefore = availableButtons - availableButtonsAfter;\n // if there are more pages between the current and first page than we can fit in the available spaces, ellipse\n let dotFront = this.getPagesBetween(1, this.page) > availableButtonsBefore;\n // if there are more pages between the current and last page than we can fit in the available spaces, ellipse\n let dotEnd = pagesBetweenThisPageAndLast > availableButtonsAfter;\n let indexOfSecondToLastButton = this.maxPageButtons - 2;\n let pageNumberOfFirstMiddleButton = !dotFront ? 3 : this.page - (availableButtonsBefore - 1); // the ellipsis takes up one of the available buttons, so adjust the first middle page number by + 1\n let middleButtonOffset = 0; //middle buttons start at the page number calculated above and then count up\n return _.times(this.maxPageButtons, (buttonIndex) => {\n if (buttonIndex == 0)\n return this.buildPageButton(1);\n if (buttonIndex == 1)\n return dotFront ? PagerPageButton.DottedPageButton() : this.buildPageButton(2);\n if (buttonIndex < indexOfSecondToLastButton) {\n let pageNumber = pageNumberOfFirstMiddleButton + middleButtonOffset++;\n return this.buildPageButton(pageNumber);\n }\n if (buttonIndex == indexOfSecondToLastButton)\n return dotEnd ? PagerPageButton.DottedPageButton() : this.buildPageButton(this.lastPage - 1);\n return this.buildPageButton(this.lastPage);\n });\n };\n this.buildPageButton = (pageNumber) => {\n let isSelected = this.page == pageNumber;\n return PagerPageButton.PageButton(pageNumber, isSelected);\n };\n this.goToPage = (pageButton) => {\n setTimeout(() => {\n if (pageButton.pageNumber) {\n // TODO: The setTimeout here is a giant hack to work around the following problem: when showing a pager control from within the context of a flyout, clicking on one of the pager buttons\n // causes this function to get called, which updates the pager's buttons collection via the computable property above. This causes the old buttons (including the one you clicked) to \n // get ripped out of the dom. But then when flyout receives the click event, the button is already removed from the dom, and flyout thinks you are clicking off of it, and (incorrectly)\n // closes. An alternative solution to this problem would be to make flyout.js treat clicks to elements outside of the dom as clicks \"on\" the flyout still.\n this.goToPageNumber(pageButton.pageNumber);\n }\n });\n };\n this.goToPageNumber = (pageNumber) => {\n this.page = pageNumber;\n this.pageSelectedHandler(pageNumber);\n };\n this.goToFirstPage = () => {\n if (!this.previousPageEnabled)\n return;\n this.goToPageNumber(1);\n };\n this.goToPreviousPage = () => {\n if (!this.previousPageEnabled)\n return;\n this.goToPageNumber(this.page - 1);\n };\n this.goToNextPage = () => {\n if (!this.nextPageEnabled)\n return;\n this.goToPageNumber(this.page + 1);\n };\n this.goToLastPage = () => {\n if (!this.nextPageEnabled)\n return;\n this.goToPageNumber(this.lastPage);\n };\n if (maxPageButtons < 5)\n throw new Error(\"maxPageButtons must be >= 5 to account for first, current, last and possible ellipsis buttons\");\n this.pageSelectedHandler = onPageSelected;\n this.maxPageButtons = maxPageButtons;\n this.firstPage = settings.firstPage;\n this.previousPageEnabled = settings.previousPageEnabled;\n this.page = settings.page;\n this.lastPage = settings.lastPage;\n this.nextPageEnabled = settings.nextPageEnabled;\n this.pageButtons = this.getPageButtons();\n this.visible = !!this.pageButtons.length;\n }\n getPagesBetween(firstPageNumber, secondPageNumber) {\n return Math.abs(firstPageNumber - secondPageNumber) - 1;\n }\n}\nexport class PagerPageButton {\n constructor(options) {\n this.isDotted = !!options.isDotted;\n this.pageNumber = options.pageNumber;\n this.isSelected = !!options.isSelected;\n this.pageNumberDisplay = this.isDotted ? \"...\" : (this.pageNumber + \"\");\n this.enabled = !this.isDotted;\n }\n static DottedPageButton() {\n return new PagerPageButton({ isDotted: true });\n }\n static PageButton(pagerNumber, isSelected) {\n return new PagerPageButton({ pageNumber: pagerNumber, isSelected: isSelected });\n }\n}\n","import * as React from \"react\";\nimport * as styles from 'spry-react/Grid/gridStyles';\nimport { Pager } from 'spry-react/Pager/pager';\nimport { PagerModel } from 'spry-react/Pager/pagerModel';\n/**\n * Unless you have a specific use case for this component you are probably using the wrong component. We are striving for a\n * data driven approach and WorklistGridFooter should likely be used instead.\n */\nexport function GridFooter(props) {\n if (props.pagerSettings || props.resultsMessage) {\n let resultsMessage = props.resultsMessage\n ? React.createElement(\"div\", { className: 'grid-results-message' }, props.resultsMessage)\n : null;\n let pager = props.pagerSettings && props.pageSelectedHandler\n ? React.createElement(Pager, { model: new PagerModel(props.pagerSettings, props.pageSelectedHandler, props.maxPageButtons) })\n : null;\n return (React.createElement(\"div\", { className: `${styles.gridFooter} l-box-vt-1-2x` },\n resultsMessage,\n React.createElement(\"div\", { className: styles.pager }, pager)));\n }\n return null;\n}\n","export const gridTable = \"grid-table\";\nexport const gridHeader = \"grid-header\";\nexport const textColumnHeader = \"text-column-header\";\nexport const gridBody = \"grid-body\";\nexport const gridHeaderSimple = \"grid-header-simple\";\nexport const gridHeaderNoDivider = \"grid-header-no-divider\";\nexport const gridBodySimple = \"grid-body-simple\";\nexport const gridFooter = \"grid-footer\";\nexport const pager = \"pager\";\nexport const gridRow = \"grid-row\";\nexport const menuCellMenu = \"menu-cell-menu\";\nexport const gridRowAutoHeight = \"grid-row-auto-height\";\nexport const gridRowSimple = \"grid-row-simple\";\nexport const gridRowSimpleTightRows = \"grid-row-simple-tight\";\nexport const gridTotalsRow = \"grid-totals-row\";\nexport const gridTotalsRowSimple = \"grid-totals-row-simple\";\nexport const totalsCell = \"totals-cell\";\nexport const gridRowSelectable = \"grid-row-selectable\";\nexport const gridRowSelected = \"grid-row-selected\";\nexport const gridRowExpanded = \"grid-row-expanded\";\nexport const gridRowExpandedHighlighted = \"grid-row-expanded-highlighted\";\nexport const noDataGridRow = \"no-data-grid-row\";\nexport const noDataGridRowSimple = \"no-data-grid-row-simple\";\nexport const expandedRowContainer = \"expanded-row-container\";\nexport const expandedRowContentContainer = \"expanded-row-content-container\";\nexport const expandedRowContentContainerHighlighted = \"expanded-row-content-container-highlighted\";\nexport const expandedRowContent = \"expanded-row-content\";\nexport const expandedRowContentHighlighted = \"expanded-row-content-highlighted\";\nexport const expandedRowTopShadow = \"expanded-row-top-shadow\";\nexport const expandedRowBottomShadow = \"expanded-row-bottom-shadow\";\nexport const gridCell = \"grid-cell\";\nexport const numeric = \"numeric\";\nexport const gridIconHeader = \"grid-headericon\";\nexport const gridIconCell = \"grid-icon-cell\";\nexport const gridStackedIconCell = 'grid-stacked-icon-cell';\nexport const gridIconCellNoVerticalPadding = \"grid-icon-cell-no-vertical-padding\";\nexport const columnHeaderCentered = \"column-header-centered\";\nexport const columnHeaderRight = \"column-header-right\";\nexport const iconColumnHeader = \"icon-column-header\";\nexport const menuCell = \"menu-cell\";\nexport const menuCellContent = \"menu-cell-content\";\nexport const gridHeaderSortHover = 'grid-header-sort-hover';\nexport const gridHeaderIcon = 'grid-headericon';\n","import * as React from \"react\";\nexport function isLayeredIconInfo(path) {\n return path.content !== undefined;\n}\n/** Renders an icon from a font. This is a lower level component intended for creation of custom or one off icons,\n * you should use `Icon` instead if your icon is a standard icon.\n */\nexport function FontIcon(props) {\n if (props.layeredIcons === undefined) {\n const styles = {\n fontFamily: props.fontFamily,\n fontSize: props.fontSize,\n color: props.color,\n fontWeight: props.fontWeight ?? 400,\n lineHeight: \"1\",\n userSelect: 'none',\n ...props.style\n };\n return React.createElement(\"span\", { style: styles, className: props.className, title: props.title }, props.content);\n }\n else {\n const commonStyles = {\n fontFamily: props.fontFamily,\n fontWeight: props.fontWeight ?? 400,\n lineHeight: \"1\",\n userSelect: 'none',\n ...props.style\n };\n const layers = [{\n content: props.content,\n styles: { ...commonStyles, color: props.color }\n }];\n props.layeredIcons.forEach(l => {\n layers.push({\n content: isLayeredIconInfo(l) ? l.content : l,\n styles: {\n ...commonStyles,\n fontFamily: isLayeredIconInfo(l) ? l.family ?? commonStyles.fontFamily : commonStyles.fontFamily,\n color: isLayeredIconInfo(l)\n ? props.singleColor ? props.color : l.color\n : props.singleColor ? props.color : undefined,\n position: \"absolute\",\n left: isLayeredIconInfo(l) ? l.left ?? 0 : 0,\n top: isLayeredIconInfo(l) ? l.top ?? 0 : 0,\n fontSize: isLayeredIconInfo(l) ? l.fontSize : undefined\n }\n });\n });\n return React.createElement(\"span\", { style: { display: \"inline-flex\", position: \"relative\", fontSize: props.fontSize }, className: props.className, title: props.title }, layers.map((l, index) => {\n return React.createElement(\"span\", { key: index, style: l.styles }, l.content);\n }));\n }\n}\n","import { colors } from \"spry-react/utils/colors\";\nexport function isAlias(iconDef) {\n return iconDef.alias !== undefined;\n}\nexport const iconKeys = [\"home\",\n \"list\",\n \"square\",\n \"filter\",\n \"confidential\",\n \"car\",\n \"dollar\",\n \"house\",\n \"restricted\",\n \"status\",\n \"juvenile\",\n \"arrested\",\n \"incarcerated\",\n \"defendant\",\n \"defendants\",\n \"victim\",\n \"witness\",\n \"other-party\",\n \"subject\",\n \"suspect\",\n \"criminal\",\n \"contact\",\n \"law-officer\",\n \"attorney\",\n \"undo\",\n \"trash\",\n \"trash2\",\n \"pin\",\n \"case\",\n \"case-open\",\n \"clock\",\n \"age\",\n \"tasks\",\n \"linked\",\n \"add\",\n \"open-left\",\n \"caret-left\",\n \"open-right\",\n \"caret-right\",\n \"caret-down\",\n \"open-down\",\n \"caret-up\",\n \"open-up\",\n \"open-down-circle\",\n \"open-up-circle\",\n \"attach\",\n \"txt\",\n \"upload\",\n \"play-circle\",\n \"stop-circle\",\n \"play-circle-inverse\",\n \"cancel\",\n \"minus\",\n \"view\",\n \"unview\",\n \"ban\",\n \"edit\",\n \"pencil\",\n \"complete\",\n \"download\",\n \"edit-solid\",\n \"details\",\n \"search\",\n \"remove\",\n \"withheld\",\n \"restore\",\n \"barcode\",\n \"arrows\",\n \"group\",\n \"group-open\",\n \"group2\",\n \"locked\",\n \"unlocked\",\n \"calendar-week\",\n \"calendar-month\",\n \"create-matter\",\n \"icomoon-list\",\n \"docket-add\",\n \"settings\",\n \"worklist\",\n \"office-calendar\",\n \"address-book\",\n \"notifications\",\n \"unnotify\",\n \"password\",\n \"logout\",\n \"login\",\n \"message\",\n \"users\",\n \"user\",\n \"word-templates\",\n \"matter\",\n \"incident\",\n \"cases\",\n \"parties\",\n \"items\",\n \"reference-only\",\n \"reference-item\",\n \"charging\",\n \"documents\",\n \"calendar\",\n \"notes\",\n \"filter-none\",\n \"psych-eval\",\n \"date-featured\",\n \"convictions\",\n \"gun\",\n \"open-cases\",\n \"closed-cases\",\n \"save\",\n \"lock\",\n \"docket-by-info\",\n \"set-time\",\n \"docket-reschedule\",\n \"docket-remove\",\n \"docket-split-decision\",\n \"docket-diversion\",\n \"drugs\",\n \"view-schedule\",\n \"watch\",\n \"unwatch\",\n \"alert\",\n \"question\",\n \"times\",\n \"warning\",\n \"arrow-right\",\n \"court\",\n \"organization\",\n \"info\",\n \"switch\",\n \"preview\",\n \"external-link\",\n \"notified\",\n \"thumbs-up\",\n \"thumbs-down\",\n \"continued-outcome\",\n \"signin\",\n \"refresh\",\n \"refresh-square\",\n \"check-circle\",\n \"check-square\",\n \"check\",\n \"question-circle\",\n \"info-circle\",\n \"angle-down\",\n \"angle-up\",\n \"map-marker\",\n \"new-window\",\n \"not-included\",\n \"counsel-only\",\n \"redacted\",\n \"email\",\n \"no-email\",\n \"discovery\",\n \"assessment\",\n \"expert-witness\",\n \"text\",\n \"copy-paste\",\n \"none-known\",\n \"evidence\",\n \"checkbox-unchecked\",\n \"checkbox-checked\",\n \"checkbox-checked-2\",\n \"conversation\",\n \"expert\",\n \"print\",\n \"phone\",\n \"impeachment\",\n \"matrix\",\n \"risk\",\n \"living-with\",\n \"guardian\",\n \"app-initial\",\n \"app-renewal\",\n \"upload-file\",\n \"upload-scan\",\n \"issue\",\n \"license\",\n \"remove-image\",\n \"remove-all\",\n \"deskew\",\n \"mirror\",\n \"flip\",\n \"crime-scene\",\n \"executing-search\",\n \"inspection\",\n \"arrow-bent\",\n \"dollar-circle\",\n \"crown\",\n \"open-claim\",\n \"app\",\n \"registered-user\",\n \"attorney-fees\",\n \"discovery-published\",\n \"prefatory-language\",\n \"court-no-file\",\n \"court-file\",\n \"referenced\",\n \"portal-no-access\",\n \"portal\",\n \"codefendants\",\n \"no-record\",\n \"certificate\",\n \"card-view\",\n \"relationships\",\n \"errors\",\n \"request\",\n \"make-demand\",\n \"workflow\",\n \"trigger\",\n \"location\",\n \"case-closed\",\n \"file-explorer\",\n \"report\",\n \"data-explorer\",\n \"auto-tasks\",\n \"matter-types\",\n \"reorder\",\n \"long-arrow-right\",\n \"supersede\",\n \"supplemental\",\n \"attorney-withheld\",\n \"civil\",\n \"ready-to-publish\",\n \"draft\",\n \"secret\",\n \"secret-remove\",\n \"other-media\",\n \"container\",\n \"container-broken\",\n \"snippet\",\n \"diamond\",\n \"triangle\",\n \"folder\",\n \"arrow-circle-down\",\n \"receive\",\n \"release\",\n \"arrow-left\",\n \"assigned\",\n \"biohazard\",\n \"examined\",\n \"personal-property\",\n \"start\",\n \"in-progress\",\n \"relocate\",\n \"submission-history\",\n \"resubmission\",\n \"new-dropdown\",\n \"qui-tam\",\n \"checklist\",\n \"service\",\n \"link-horizontal\",\n \"add-checklist\",\n \"add-task\",\n \"to-do\",\n \"question-square\",\n \"times-square\",\n \"appointment-square\",\n \"appointment-linked-square\",\n \"defendant-2\",\n \"suspect-2\",\n \"victim-2\",\n \"provider\",\n \"claimant\",\n \"lawyer\",\n \"other-party-2\",\n \"push-pin\",\n \"workflow-child\",\n \"workflow-child-2\",\n \"email-message\",\n \"text-message\",\n \"mobile-message\",\n \"change\",\n \"circle-no\",\n \"guardian-unproven\",\n \"circle-na\",\n \"edit2\",\n \"full-text-search\",\n \"gal\",\n \"attempt\",\n \"change2\",\n \"undo2\",\n \"unassign\",\n \"reassign\",\n \"swap\",\n \"close\",\n \"activity\",\n \"add-activity\",\n \"circle-new\",\n \"circle-yes\",\n \"circle-check\",\n \"circle-x\",\n \"circle-warning\",\n \"na\",\n \"file-referenced\",\n \"file-network\",\n \"circle-hold\",\n \"syringe\",\n \"add-multi-evidence\",\n \"overview\",\n \"awaiting-clearance\",\n \"intake-incomplete\",\n \"unlock\",\n \"event-timeline\",\n \"system-report\",\n \"add-sub-item\",\n \"shared\",\n \"no-print\",\n \"investigation\",\n \"dismissed-call-1-color\",\n \"call-dismissed\",\n \"victim-rights\",\n \"car-crash\",\n \"field-interview\",\n \"add-text\",\n \"incident-review\",\n \"key-matter\",\n \"merge-2\",\n \"concurrent\",\n \"joint-several\",\n \"kiosk\",\n \"photo-book\",\n \"ongoing\",\n \"hide\",\n \"show\",\n \"teams\",\n \"matter-info-only\",\n \"location-picker\",\n \"evidence-analysis\",\n \"evidence-intake\",\n \"evidence-request\",\n \"evidence-seizure\",\n \"speed-limit-85\",\n \"speed-limit-80\",\n \"speed-limit-75\",\n \"speed-limit-70\",\n \"speed-limit-65\",\n \"speed-limit-60\",\n \"speed-limit-55\",\n \"speed-limit-50\",\n \"speed-limit-45\",\n \"speed-limit-40\",\n \"speed-limit-35\",\n \"speed-limit-30\",\n \"speed-limit-25\",\n \"speed-limit-20\",\n \"speed-limit-15\",\n \"railroad-crossing\",\n \"pedestrian-crosswalk\",\n \"stop\",\n \"yield\",\n \"wrong-way\",\n \"school-zone\",\n \"left-straight\",\n \"straight-only\",\n \"right-only\",\n \"left-only\",\n \"median\",\n \"do-not-enter\",\n \"left-only-left-straight\",\n \"no-right-turn\",\n \"no-left-turn\",\n \"no-u-turn\",\n \"turnabout\",\n \"u-turn\",\n \"dead-end\",\n \"slow\",\n \"merge\",\n \"merge-left\",\n \"multiple-select\",\n \"compass\",\n \"draw-straight\",\n \"draw-free\",\n \"pdf-secure\",\n \"zip-automatic\",\n \"incident-review-color\",\n \"pdf-secure2\",\n \"pdf-searchable\",\n \"rule\",\n \"record-decision\",\n \"cd-property\",\n \"financial-property\",\n \"other-property\",\n \"real-estate-property\",\n \"vehicle-property\",\n \"exclamation-circle\",\n \"hosted-evidence\",\n \"back\",\n \"tag\",\n \"speedy-trial\",\n \"journal\",\n \"costs\",\n \"statistics\",\n \"red-text\",\n \"color-text\",\n \"yellow-highlight\",\n \"highlight\",\n \"assigned-check\",\n \"subrogation\",\n \"expunged-partially\",\n \"sealed-partially\",\n \"sealed\",\n \"sealed-pending\",\n \"sealed-denied\",\n \"expunged-denied\",\n \"expunged-pending\",\n \"expunged\",\n \"file-confidential\",\n \"email-sent\",\n \"email-no\",\n \"email-no-overridden\",\n \"email-yes\",\n \"email-yes-overridden\",\n \"text-sent\",\n \"text-no\",\n \"text-no-overridden\",\n \"text-yes\",\n \"text-yes-overridden\",\n \"email-unavailable\",\n \"text-unavailable\",\n \"registered-user-x\",\n \"registered-user-exclamation\",\n \"registered-user-pending\",\n \"license-mismatch1\",\n \"license-mismatch2\",\n \"license-pending\",\n \"license-questionable\",\n \"dollar-arrow\",\n \"app-update\",\n \"location-unknown\",\n \"location-do-not-verify\",\n \"location-verified\",\n \"location-failed\",\n \"dismissed-call\",\n \"deadline-okay\",\n \"deadline-warning\",\n \"deadline-late\",\n \"vertical-ellipsis\",\n \"filetype-word\",\n \"filetype-pdf\",\n \"filetype-pdf-searchable\",\n \"filetype-pdf-secure2\",\n \"filetype-video\",\n \"filetype-image\",\n \"filetype-html\",\n \"filetype-audio\",\n \"filetype-email\",\n \"filetype-powerpoint\",\n \"filetype-txt\",\n \"filetype-excel\",\n \"filetype-unknown\",\n \"filetype-zip\",\n \"new\",\n \"filing-rejected\",\n \"shared-outlined\",\n \"lock-outlined\",\n \"container-add\",\n \"triangle-outline\",\n \"share\",\n \"calculator\",\n \"calendar-270\",\n \"hourglass-full\",\n \"hourglass-halfway\",\n \"hourglass-empty\",\n \"add-note\",\n \"add-attention\",\n \"number\",\n \"file-defendant\",\n \"unmerge\",\n \"rotate-right\",\n \"fit-window\",\n \"fit-width\",\n \"fit-height\",\n \"stretch-mode\",\n \"crop\",\n \"resize\",\n \"zoom-in\",\n \"zoom-out\",\n \"share-sent\",\n \"share-received\",\n \"client\",\n \"user-exchange\",\n \"user-portal\",\n \"user-internal\",\n \"distribution-list\",\n \"file-suitable-for-release\",\n \"redaction-suitable-for-release\",\n \"service-worker\",\n \"circle-bell\",\n \"title\",\n \"circle-megaphone\",\n \"not-registered-primary\",\n \"access-revoked\",\n \"primary-access-revoked\",\n \"registered-primary\",\n \"judge-reassignment\",\n \"matter-messages\",\n \"real-property\",\n \"stacked-bars\",\n \"copy-from-file\",\n \"text-select\",\n \"area-selection\",\n \"collapse-right-side\",\n \"expand-left-side\",\n \"keyword-search\",\n \"list3\",\n \"pan\",\n \"pane-view\",\n \"redact-area\",\n \"redact-page\",\n \"redact-pages\",\n \"redact-search-result\",\n \"redact-text\",\n \"remove-redaction\",\n \"rotate-page-left\",\n \"rotate-page-right\",\n \"stamp\",\n \"sort-ascending\",\n \"sort-descending\",\n \"calendar-list\",\n \"dna\",\n \"collapse-left-side\",\n \"party-note-follows\",\n \"jail-inmate-linked\",\n \"jail-inmate-not-linked\",\n \"file-duplicate\",\n \"attach-to-matter\",\n \"local-file-store\",\n \"full-content-list-view\",\n \"attempt-level-no\",\n \"popper\",\n \"digest\",\n \"sections-grid\",\n \"down-arrow-long\",\n \"up-arrow-long\",\n \"external-web-link\",\n \"star-solid\",\n \"star-outline\",\n \"address-book-party-alert\",\n \"court-link-accepted\",\n \"court-link-requested\",\n \"circle-star\",\n \"no-investigation-activity\",\n \"ohio-search-icon\",\n \"oracle-icon\",\n \"ammunition\",\n \"axon\",\n \"curve\",\n \"unlink\",\n \"disposition\",\n \"alcohol\",\n \"client-list\",\n \"events\",\n \"word-file-original\",\n \"excel-file-original\",\n \"file-cabinet-1\",\n \"disk-storage-2\",\n \"disk-storage-3\",\n \"files-multi\",\n \"folder-box\",\n \"files-misc\",\n \"disk-storage-1\",\n \"flashdrive\",\n \"redweld-2\",\n \"redweld-1\",\n \"file-box\",\n \"file-cabinet-2\",\n \"inactivate\",\n \"follows\",\n \"word-secure\",\n \"excel-secure\",\n \"powerpoint-secure\",\n \"alpha\",\n \"numeric\",\n \"alpha-numeric\",\n \"special-character\",\n \"save-pattern\",\n \"load-pattern\",\n \"recycle-bin\",\n \"email-watch\",\n \"helios\",\n \"detainer\",\n \"email-share\"\n];\nexport const iconLookup = {\n \"home\": {\n family: \"icomoon-matrix\",\n content: \"\\ue600\",\n },\n \"list\": {\n family: \"fontawesome\",\n content: \"\\uf03a\",\n },\n \"square\": {\n family: \"fontawesome\",\n content: \"\\uf0c8\",\n },\n \"filter\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63c\",\n },\n \"confidential\": {\n family: \"fontawesome\",\n content: \"\\uf070\",\n color: colors[\"attention\"],\n },\n \"car\": {\n family: \"fontawesome\",\n content: \"\\uf1b9\",\n },\n \"dollar\": {\n family: \"fontawesome\",\n content: \"\\uf155\",\n },\n \"house\": {\n family: \"fontawesome\",\n content: \"\\uf015\",\n },\n \"restricted\": {\n family: \"fontawesome\",\n content: \"\\uf056\",\n color: colors[\"attention\"],\n },\n \"status\": {\n family: \"fontawesome\",\n content: \"\\uf02e\",\n color: colors[\"text-dark\"],\n },\n \"juvenile\": {\n family: \"icomoon-matrix\",\n content: \"\\ue634\",\n color: colors[\"attention\"],\n },\n \"arrested\": {\n family: \"icomoon-matrix\",\n content: \"\\ue633\",\n color: colors[\"text-dark\"],\n },\n \"incarcerated\": {\n family: \"fontawesome\",\n content: \"\\uf084\",\n },\n \"defendant\": {\n family: \"icomoon-matrix\",\n content: \"\\ue606\",\n },\n \"defendants\": {\n family: \"icomoon-matrix\",\n content: \"\\ue61d\",\n },\n \"victim\": {\n family: \"icomoon-matrix\",\n content: \"\\ue605\",\n },\n \"witness\": {\n family: \"icomoon-matrix\",\n content: \"\\ue653\",\n },\n \"other-party\": {\n family: \"icomoon-matrix\",\n content: \"\\ue654\",\n },\n \"subject\": {\n family: \"icomoon-matrix\",\n content: \"\\ue654\",\n },\n \"suspect\": {\n family: \"icomoon-matrix\",\n content: \"\\ue61c\",\n },\n \"criminal\": {\n family: \"icomoon-matrix\",\n content: \"\\ue633\",\n },\n \"contact\": {\n family: \"icomoon-matrix\",\n content: \"\\ue636\",\n },\n \"law-officer\": {\n family: \"icomoon-matrix\",\n content: \"\\ue637\",\n },\n \"attorney\": {\n family: \"icomoon-matrix\",\n content: \"\\ue639\",\n },\n \"undo\": {\n family: \"fontawesome\",\n content: \"\\uf0e2\",\n },\n \"pin\": {\n family: \"fontawesome\",\n content: \"\\uf08d\",\n },\n \"case\": {\n family: \"fontawesome\",\n content: \"\\uf114\",\n },\n \"case-open\": {\n family: \"fontawesome\",\n content: \"\\uf115\",\n },\n \"clock\": {\n family: \"fontawesome\",\n content: \"\\uf017\",\n },\n \"age\": {\n family: \"icomoon-matrix\",\n content: \"\\ue61f\",\n },\n \"tasks\": {\n family: \"icomoon-matrix\",\n content: \"\\ue955\",\n },\n \"linked\": {\n family: \"icomoon-matrix\",\n content: \"\\ue626\",\n },\n \"add\": {\n family: \"fontawesome\",\n content: \"\\uf055\",\n },\n \"open-left\": {\n family: \"fontawesome\",\n content: \"\\uf053\",\n },\n \"caret-left\": {\n family: \"fontawesome\",\n content: \"\\uf0d9\",\n },\n \"open-right\": {\n family: \"fontawesome\",\n content: \"\\uf054\",\n },\n \"caret-right\": {\n family: \"fontawesome\",\n content: \"\\uf0da\",\n },\n \"caret-down\": {\n family: \"fontawesome\",\n content: \"\\uf0d7\",\n },\n \"open-down\": {\n family: \"fontawesome\",\n content: \"\\uf078\",\n },\n \"caret-up\": {\n family: \"fontawesome\",\n content: \"\\uf0d8\",\n },\n \"open-up\": {\n family: \"fontawesome\",\n content: \"\\uf077\",\n },\n \"open-down-circle\": {\n family: \"fontawesome\",\n content: \"\\uf13a\",\n },\n \"open-up-circle\": {\n family: \"fontawesome\",\n content: \"\\uf139\",\n },\n \"attach\": {\n family: \"fontawesome\",\n content: \"\\uf0c6\",\n },\n \"txt\": {\n family: \"fontawesome\",\n content: \"\\uf0f6\",\n },\n \"upload\": {\n family: \"fontawesome\",\n content: \"\\uf093\",\n },\n \"play-circle\": {\n family: \"fontawesome\",\n content: \"\\uf144\",\n },\n \"stop-circle\": {\n family: \"fontawesome\",\n content: \"\\uf28d\",\n },\n \"play-circle-inverse\": {\n family: \"fontawesome\",\n content: \"\\uf01d\",\n },\n \"cancel\": {\n family: \"fontawesome\",\n content: \"\\uf00d\",\n },\n \"minus\": {\n family: \"fontawesome\",\n content: \"\\uf068\",\n },\n \"view\": {\n family: \"fontawesome\",\n content: \"\\uf06e\",\n },\n \"unview\": {\n family: \"fontawesome\",\n content: \"\\uf070\",\n },\n \"ban\": {\n family: \"fontawesome\",\n content: \"\\uf05e\",\n },\n \"edit\": {\n family: \"fontawesome\",\n content: \"\\uf044\",\n },\n \"pencil\": {\n family: \"fontawesome\",\n content: \"\\uf040\",\n },\n \"complete\": {\n family: \"fontawesome\",\n content: \"\\uf00c\",\n },\n \"download\": {\n family: \"fontawesome\",\n content: \"\\uf019\",\n },\n \"edit-solid\": {\n family: \"fontawesome\",\n content: \"\\uf14b\",\n },\n \"details\": {\n family: \"fontawesome\",\n content: \"\\uf016\",\n },\n \"search\": {\n family: \"fontawesome\",\n content: \"\\uf002\",\n },\n \"remove\": {\n family: \"fontawesome\",\n content: \"\\uf057\",\n },\n \"withheld\": {\n family: \"fontawesome\",\n content: \"\\uf00d\",\n },\n \"restore\": {\n family: \"fontawesome\",\n content: \"\\uf0e2\",\n },\n \"barcode\": {\n family: \"fontawesome\",\n content: \"\\uf02a\",\n },\n \"arrows\": {\n family: \"fontawesome\",\n content: \"\\uf047\",\n },\n \"group\": {\n family: \"fontawesome\",\n content: \"\\uf114\",\n },\n \"group-open\": {\n family: \"fontawesome\",\n content: \"\\uf115\",\n },\n \"locked\": {\n family: \"fontawesome\",\n content: \"\\uf023\",\n },\n \"unlocked\": {\n family: \"fontawesome\",\n content: \"\\uf13e\",\n },\n \"calendar-week\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63a\",\n },\n \"calendar-month\": {\n family: \"fontawesome\",\n content: \"\\uf0ce\",\n },\n \"create-matter\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63f\",\n },\n \"icomoon-list\": {\n family: \"icomoon-matrix\",\n content: \"\\ue611\",\n },\n \"docket-add\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63b\",\n },\n \"settings\": {\n family: \"icomoon-matrix\",\n content: \"\\ue641\",\n },\n \"worklist\": {\n family: \"icomoon-matrix\",\n content: \"\\ue616\",\n },\n \"office-calendar\": {\n family: \"icomoon-matrix\",\n content: \"\\ue614\",\n },\n \"address-book\": {\n family: \"icomoon-matrix\",\n content: \"\\ue636\",\n },\n \"notifications\": {\n family: \"fontawesome\",\n content: \"\\uf0a2\",\n },\n \"unnotify\": {\n family: \"fontawesome\",\n content: \"\\uf1f7\",\n },\n \"password\": {\n family: \"icomoon-matrix\",\n content: \"\\ue640\",\n },\n \"logout\": {\n family: \"icomoon-matrix\",\n content: \"\\ue644\",\n },\n \"login\": {\n family: \"icomoon-matrix\",\n content: \"\\ue643\",\n },\n \"message\": {\n family: \"icomoon-matrix\",\n content: \"\\ue642\",\n },\n \"users\": {\n family: \"icomoon-matrix\",\n content: \"\\ue61e\",\n },\n \"user\": {\n family: \"fontawesome\",\n content: \"\\uf007\",\n },\n \"word-templates\": {\n family: \"icomoon-matrix\",\n content: \"\\ue62d\",\n },\n \"matter\": {\n family: \"icomoon-matrix\",\n content: \"\\ue609\",\n },\n \"incident\": {\n family: \"icomoon-matrix\",\n content: \"\\ue624\",\n },\n \"cases\": {\n family: \"icomoon-matrix\",\n content: \"\\ue611\",\n },\n \"parties\": {\n family: \"icomoon-matrix\",\n content: \"\\ue61b\",\n },\n \"items\": {\n family: \"icomoon-matrix\",\n content: \"\\ue627\",\n },\n \"reference-only\": {\n family: \"fontawesome\",\n content: \"\\uf097\",\n },\n \"reference-item\": {\n family: \"fontawesome\",\n content: \"\\uf0ea\",\n },\n \"charging\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64b\",\n },\n \"documents\": {\n family: \"icomoon-matrix\",\n content: \"\\ue649\",\n },\n \"calendar\": {\n family: \"icomoon-matrix\",\n content: \"\\ue613\",\n },\n \"notes\": {\n family: \"icomoon-matrix\",\n content: \"\\ue608\",\n },\n \"filter-none\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63d\",\n },\n \"psych-eval\": {\n family: \"icomoon-matrix\",\n content: \"\\ue638\",\n },\n \"date-featured\": {\n family: \"icomoon-matrix\",\n content: \"\\ue645\",\n },\n \"convictions\": {\n family: \"icomoon-matrix\",\n content: \"\\ue601\",\n },\n \"gun\": {\n family: \"icomoon-matrix\",\n content: \"\\ue602\",\n },\n \"open-cases\": {\n family: \"icomoon-matrix\",\n content: \"\\ue603\",\n },\n \"closed-cases\": {\n family: \"icomoon-matrix\",\n content: \"\\ue604\",\n },\n \"save\": {\n family: \"icomoon-matrix\",\n content: \"\\ue617\",\n },\n \"lock\": {\n family: \"icomoon-matrix\",\n content: \"\\ue640\",\n },\n \"docket-by-info\": {\n family: \"icomoon-matrix\",\n content: \"\\ue01e\",\n },\n \"set-time\": {\n family: \"icomoon-matrix\",\n content: \"\\ue10a\",\n },\n \"docket-reschedule\": {\n family: \"icomoon-matrix\",\n content: \"\\ue646\",\n },\n \"docket-remove\": {\n family: \"icomoon-matrix\",\n content: \"\\ue647\",\n },\n \"docket-split-decision\": {\n family: \"icomoon-matrix\",\n content: \"\\ue648\",\n },\n \"docket-diversion\": {\n family: \"icomoon-matrix\",\n content: \"\\ue649\",\n },\n \"drugs\": {\n family: \"icomoon-matrix\",\n content: \"\\ue63e\",\n },\n \"view-schedule\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64a\",\n },\n \"watch\": {\n family: \"fontawesome\",\n content: \"\\uf06e\",\n },\n \"unwatch\": {\n family: \"fontawesome\",\n content: \"\\uf070\",\n },\n \"trash\": {\n family: \"fontawesome\",\n content: \"\\uf1f8\",\n },\n \"trash2\": {\n family: \"fontawesome\",\n content: \"\\uf014\",\n },\n \"alert\": {\n family: \"fontawesome\",\n content: \"\\uf071\",\n },\n \"question\": {\n family: \"fontawesome\",\n content: \"\\uf128\",\n },\n \"times\": {\n family: \"fontawesome\",\n content: \"\\uf00d\",\n },\n \"warning\": {\n family: \"fontawesome\",\n content: \"\\uf071\",\n color: colors[\"priority-red\"],\n },\n \"arrow-right\": {\n family: \"fontawesome\",\n content: \"\\uf061\",\n },\n \"court\": {\n family: \"fontawesome\",\n content: \"\\uf19c\",\n },\n \"organization\": {\n family: \"icomoon\",\n content: \"\\ue004\",\n },\n \"info\": {\n family: \"fontawesome\",\n content: \"\\uf0e5\",\n },\n \"switch\": {\n family: \"icomoon\",\n content: \"\\ue2d6\",\n },\n \"preview\": {\n family: \"fontawesome\",\n content: \"\\uf06e\",\n },\n \"external-link\": {\n family: \"fontawesome\",\n content: \"\\uf08e\",\n },\n \"notified\": {\n family: \"fontawesome\",\n content: \"\\uf0e0\",\n },\n \"thumbs-up\": {\n family: \"fontawesome\",\n content: \"\\uf087\",\n },\n \"thumbs-down\": {\n family: \"fontawesome\",\n content: \"\\uf088\",\n },\n \"continued-outcome\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64c\",\n },\n \"signin\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64d\",\n },\n \"refresh\": {\n family: \"fontawesome\",\n content: \"\\uf021\",\n },\n \"refresh-square\": {\n family: \"fontawesome\",\n content: \"\\uf079\",\n },\n \"check-circle\": {\n family: \"fontawesome\",\n content: \"\\uf058\",\n },\n \"check-square\": {\n family: \"fontawesome\",\n content: \"\\uf046\",\n },\n \"check\": {\n family: \"fontawesome\",\n content: \"\\uf00c\",\n },\n \"question-circle\": {\n family: \"fontawesome\",\n content: \"\\uf059\",\n },\n \"info-circle\": {\n family: \"fontawesome\",\n content: \"\\uf05a\",\n },\n \"angle-down\": {\n family: \"fontawesome\",\n content: \"\\uf107\",\n },\n \"angle-up\": {\n family: \"fontawesome\",\n content: \"\\uf106\",\n },\n \"map-marker\": {\n family: \"icomoon-matrix\",\n content: \"\\ue911\",\n },\n \"new-window\": {\n family: \"fontawesome\",\n content: \"\\uf14c\",\n },\n \"not-included\": {\n family: \"fontawesome\",\n content: \"\\uf05c\",\n },\n \"counsel-only\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64e\",\n },\n \"redacted\": {\n family: \"icomoon-matrix\",\n content: \"\\ue64f\",\n },\n \"email\": {\n family: \"fontawesome\",\n content: \"\\uf003\",\n },\n \"no-email\": {\n family: \"icomoon-matrix\",\n content: \"\\ue651\",\n },\n \"discovery\": {\n family: \"icomoon-matrix\",\n content: \"\\ue652\",\n },\n \"assessment\": {\n family: \"icomoon-matrix\",\n content: \"\\ue650\",\n },\n \"expert-witness\": {\n family: \"fontawesome\",\n content: \"\\uf0f0\",\n },\n \"text\": {\n family: \"fontawesome\",\n content: \"\\uf031\",\n },\n \"copy-paste\": {\n family: \"fontawesome\",\n content: \"\\uf0c5\",\n },\n \"none-known\": {\n family: \"fontawesome\",\n content: \"\\uf069\",\n },\n \"evidence\": {\n family: \"icomoon-matrix\",\n content: \"\\ue655\",\n },\n \"checkbox-unchecked\": {\n family: \"icomoon-matrix\",\n content: \"\\ue60e\",\n },\n \"checkbox-checked\": {\n family: \"icomoon-matrix\",\n content: \"\\ue656\",\n },\n \"checkbox-checked-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue657\",\n },\n \"group2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue659\",\n },\n \"conversation\": {\n family: \"fontawesome\",\n content: \"\\uf086\",\n },\n \"expert\": {\n family: \"fontawesome\",\n content: \"\\uf0a3\",\n },\n \"print\": {\n family: \"fontawesome\",\n content: \"\\uf02f\",\n },\n \"phone\": {\n family: \"fontawesome\",\n content: \"\\uf095\",\n },\n \"impeachment\": {\n family: \"fontawesome\",\n content: \"\\uf0e3\",\n },\n \"matrix\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65a\",\n },\n \"risk\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65c\",\n },\n \"living-with\": {\n family: \"icomoon-matrix\",\n content: \"\\ue660\",\n },\n \"guardian\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65f\",\n },\n \"app-initial\": {\n family: \"icomoon-matrix\",\n content: \"\\ue995\",\n },\n \"app-renewal\": {\n family: \"icomoon-matrix\",\n content: \"\\ue996\",\n },\n \"upload-file\": {\n family: \"icomoon-matrix\",\n content: \"\\ue998\",\n },\n \"upload-scan\": {\n family: \"icomoon-matrix\",\n content: \"\\ue997\",\n },\n \"issue\": {\n family: \"icomoon-matrix\",\n content: \"\\ue99a\",\n },\n \"license\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a4\",\n },\n \"remove-image\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a7\",\n },\n \"remove-all\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a8\",\n },\n \"deskew\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a9\",\n },\n \"mirror\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ab\",\n },\n \"flip\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9aa\",\n },\n \"crime-scene\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ad\",\n },\n \"executing-search\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ae\",\n },\n \"inspection\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9af\",\n },\n \"arrow-bent\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b0\",\n },\n \"dollar-circle\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b1\",\n },\n \"crown\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b8\",\n },\n \"open-claim\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b9\",\n },\n \"app\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ac\",\n },\n \"registered-user\": {\n family: \"icomoon-matrix\",\n content: \"\\ue99f\",\n },\n \"attorney-fees\": {\n family: \"icomoon-matrix\",\n content: \"\\ue999\",\n },\n \"discovery-published\": {\n family: \"icomoon-matrix\",\n content: \"\\ue900\",\n },\n \"prefatory-language\": {\n family: \"icomoon-matrix\",\n content: \"\\ue649\",\n },\n \"court-no-file\": {\n family: \"icomoon-matrix\",\n content: \"\\ue901\",\n },\n \"court-file\": {\n family: \"icomoon-matrix\",\n content: \"\\ue902\",\n },\n \"referenced\": {\n family: \"icomoon-matrix\",\n content: \"\\ue903\",\n },\n \"portal-no-access\": {\n family: \"icomoon-matrix\",\n content: \"\\ue904\",\n },\n \"portal\": {\n family: \"fontawesome\",\n content: \"\\uf0ac\",\n },\n \"codefendants\": {\n family: \"icomoon-matrix\",\n content: \"\\ue908\",\n },\n \"no-record\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90a\",\n },\n \"certificate\": {\n family: \"icomoon-matrix\",\n content: \"\\ue909\",\n },\n \"card-view\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90b\",\n },\n \"relationships\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90c\",\n },\n \"errors\": {\n family: \"fontawesome\",\n content: \"\\uf06a\",\n },\n \"request\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90d\",\n },\n \"make-demand\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90d\",\n },\n \"workflow\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90e\",\n },\n \"trigger\": {\n family: \"icomoon-matrix\",\n content: \"\\ue910\",\n },\n \"location\": {\n family: \"icomoon-matrix\",\n content: \"\\ue911\",\n },\n \"case-closed\": {\n family: \"icomoon-matrix\",\n content: \"\\ue912\",\n },\n \"file-explorer\": {\n family: \"icomoon-matrix\",\n content: \"\\ue913\",\n },\n \"report\": {\n family: \"icomoon-matrix\",\n content: \"\\ue926\",\n },\n \"data-explorer\": {\n family: \"icomoon-matrix\",\n content: \"\\ue915\",\n },\n \"auto-tasks\": {\n family: \"icomoon-matrix\",\n content: \"\\ue916\",\n },\n \"matter-types\": {\n family: \"icomoon-matrix\",\n content: \"\\ue917\",\n },\n \"reorder\": {\n family: \"icomoon-matrix\",\n content: \"\\ue923\",\n },\n \"long-arrow-right\": {\n family: \"fontawesome\",\n content: \"\\uf178\",\n },\n \"supersede\": {\n family: \"icomoon-matrix\",\n content: \"\\ue918\",\n },\n \"supplemental\": {\n family: \"fontawesome\",\n content: \"\\uf0c5\",\n },\n \"attorney-withheld\": {\n family: \"icomoon-matrix\",\n content: \"\\ue919\",\n },\n \"civil\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91a\",\n },\n \"ready-to-publish\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91b\",\n },\n \"draft\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91c\",\n },\n \"secret\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91d\",\n },\n \"secret-remove\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91e\",\n },\n \"other-media\": {\n family: \"icomoon-matrix\",\n content: \"\\ue91f\",\n },\n \"container\": {\n family: \"icomoon-matrix\",\n content: \"\\ue920\",\n },\n \"container-broken\": {\n family: \"icomoon-matrix\",\n content: \"\\ue922\",\n },\n \"snippet\": {\n family: \"icomoon-matrix\",\n content: \"\\ue921\",\n },\n \"diamond\": {\n family: \"icomoon-matrix\",\n content: \"\\ue924\",\n },\n \"triangle\": {\n family: \"icomoon-matrix\",\n content: \"\\ue925\",\n },\n \"folder\": {\n family: \"fontawesome\",\n content: \"\\uf07b\",\n },\n \"arrow-circle-down\": {\n family: \"fontawesome\",\n content: \"\\uf0ab\",\n },\n \"receive\": {\n family: \"fontawesome\",\n content: \"\\uf01a\",\n },\n \"release\": {\n family: \"fontawesome\",\n content: \"\\uf01b\",\n },\n \"arrow-left\": {\n family: \"fontawesome\",\n content: \"\\uf060\",\n },\n \"assigned\": {\n family: \"icomoon-matrix\",\n content: \"\\ue933\",\n },\n \"biohazard\": {\n family: \"icomoon-matrix\",\n content: \"\\ue938\",\n },\n \"examined\": {\n family: \"icomoon-matrix\",\n content: \"\\ue939\",\n },\n \"personal-property\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93a\",\n },\n \"start\": {\n family: \"fontawesome\",\n content: \"\\uf01d\",\n },\n \"in-progress\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93b\",\n },\n \"relocate\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93c\",\n },\n \"submission-history\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93d\",\n },\n \"resubmission\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93e\",\n },\n \"new-dropdown\": {\n family: \"icomoon-matrix\",\n content: \"\\ue93f\",\n },\n \"qui-tam\": {\n family: \"icomoon-matrix\",\n content: \"\\ue940\",\n },\n \"checklist\": {\n family: \"icomoon-matrix\",\n content: \"\\ue951\",\n },\n \"service\": {\n family: \"icomoon-matrix\",\n content: \"\\ue952\",\n },\n \"link-horizontal\": {\n family: \"icomoon-matrix\",\n content: \"\\ue953\",\n },\n \"add-checklist\": {\n family: \"icomoon-matrix\",\n content: \"\\ue954\",\n },\n \"add-task\": {\n family: \"icomoon-matrix\",\n content: \"\\ue956\",\n },\n \"to-do\": {\n family: \"icomoon-matrix\",\n content: \"\\ue957\",\n },\n \"question-square\": {\n family: \"icomoon-matrix\",\n content: \"\\ue958\",\n },\n \"times-square\": {\n family: \"icomoon-matrix\",\n content: \"\\ue959\",\n },\n \"appointment-square\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95a\",\n },\n \"appointment-linked-square\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95b\",\n },\n \"defendant-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95c\",\n },\n \"suspect-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue961\",\n },\n \"victim-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95f\",\n },\n \"provider\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95d\",\n },\n \"claimant\": {\n family: \"icomoon-matrix\",\n content: \"\\ue960\",\n },\n \"lawyer\": {\n family: \"icomoon-matrix\",\n content: \"\\ue962\",\n },\n \"other-party-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue95e\",\n },\n \"push-pin\": {\n family: \"icomoon-matrix\",\n content: \"\\ue965\",\n },\n \"workflow-child\": {\n family: \"icomoon-matrix\",\n content: \"\\ue90f\",\n },\n \"workflow-child-2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue966\",\n },\n \"email-message\": {\n family: \"icomoon-matrix\",\n content: \"\\ue977\",\n },\n \"text-message\": {\n family: \"icomoon-matrix\",\n content: \"\\ue978\",\n },\n \"mobile-message\": {\n family: \"icomoon-matrix\",\n content: \"\\ue979\",\n },\n \"change\": {\n family: \"icomoon\",\n content: \"\\ue2d2\",\n },\n \"circle-no\": {\n family: \"icomoon-matrix\",\n content: \"\\ue983\",\n },\n \"guardian-unproven\": {\n family: \"icomoon-matrix\",\n content: \"\\ue994\",\n },\n \"circle-na\": {\n family: \"icomoon-matrix\",\n content: \"\\ue984\",\n },\n \"edit2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue993\",\n },\n \"full-text-search\": {\n family: \"icomoon-matrix\",\n content: \"\\ue992\",\n },\n \"gal\": {\n family: \"icomoon-matrix\",\n content: \"\\ue991\",\n },\n \"attempt\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98f\",\n },\n \"change2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue990\",\n },\n \"undo2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98a\",\n },\n \"unassign\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98b\",\n },\n \"reassign\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98c\",\n },\n \"swap\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98d\",\n },\n \"close\": {\n family: \"icomoon-matrix\",\n content: \"\\ue98e\",\n },\n \"activity\": {\n family: \"icomoon-matrix\",\n content: \"\\ue987\",\n },\n \"add-activity\": {\n family: \"icomoon-matrix\",\n content: \"\\ue988\",\n },\n \"circle-new\": {\n family: \"icomoon-matrix\",\n content: \"\\ue985\",\n },\n \"circle-yes\": {\n family: \"icomoon-matrix\",\n content: \"\\ue986\",\n },\n \"circle-check\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97d\",\n },\n \"circle-x\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97e\",\n },\n \"circle-warning\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97f\",\n },\n \"na\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97b\",\n },\n \"file-referenced\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ba\",\n },\n \"file-network\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9bb\",\n },\n \"circle-hold\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9bc\",\n },\n \"syringe\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9bd\",\n },\n \"add-multi-evidence\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9be\",\n },\n \"overview\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c7\",\n },\n \"awaiting-clearance\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c8\",\n },\n \"intake-incomplete\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c9\",\n },\n \"unlock\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ca\",\n },\n \"event-timeline\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9cb\",\n },\n \"system-report\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9cc\",\n },\n \"add-sub-item\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9cd\",\n },\n \"shared\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ce\",\n },\n \"no-print\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9cf\",\n },\n \"investigation\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d3\",\n },\n \"dismissed-call-1-color\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d2\",\n },\n \"call-dismissed\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d4\",\n },\n \"victim-rights\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d7\",\n },\n \"car-crash\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d8\",\n },\n \"field-interview\": {\n family: \"icomoon\",\n content: \"\\ue06f\",\n },\n \"add-text\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d9\",\n },\n \"incident-review\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e1\",\n },\n \"key-matter\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0d\",\n },\n \"merge-2\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0e\",\n },\n \"concurrent\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0f\",\n },\n \"joint-several\": {\n family: \"icomoon-matrix\",\n content: \"\\uea10\",\n },\n \"kiosk\": {\n family: \"icomoon-matrix\",\n content: \"\\uea11\",\n },\n \"photo-book\": {\n family: \"icomoon-matrix\",\n content: \"\\uea13\",\n },\n \"ongoing\": {\n family: \"icomoon-matrix\",\n content: \"\\uea12\",\n },\n \"hide\": {\n family: \"icomoon-matrix\",\n content: \"\\uea15\",\n },\n \"show\": {\n family: \"icomoon-matrix\",\n content: \"\\uea14\",\n },\n \"teams\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0c\",\n },\n \"matter-info-only\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0b\",\n },\n \"location-picker\": {\n family: \"icomoon-matrix\",\n content: \"\\uea06\",\n },\n \"evidence-analysis\": {\n family: \"icomoon-matrix\",\n content: \"\\uea07\",\n },\n \"evidence-intake\": {\n family: \"icomoon-matrix\",\n content: \"\\uea08\",\n },\n \"evidence-request\": {\n family: \"icomoon-matrix\",\n content: \"\\uea09\",\n },\n \"evidence-seizure\": {\n family: \"icomoon-matrix\",\n content: \"\\uea0a\",\n },\n \"speed-limit-85\": {\n family: \"icomoon-matrix\",\n content: \"\\uea04\",\n },\n \"speed-limit-80\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f8\",\n },\n \"speed-limit-75\": {\n family: \"icomoon-matrix\",\n content: \"\\uea05\",\n },\n \"speed-limit-70\": {\n family: \"icomoon-matrix\",\n content: \"\\uea03\",\n },\n \"speed-limit-65\": {\n family: \"icomoon-matrix\",\n content: \"\\uea02\",\n },\n \"speed-limit-60\": {\n family: \"icomoon-matrix\",\n content: \"\\uea01\",\n },\n \"speed-limit-55\": {\n family: \"icomoon-matrix\",\n content: \"\\uea00\",\n },\n \"speed-limit-50\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ff\",\n },\n \"speed-limit-45\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9fe\",\n },\n \"speed-limit-40\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9fd\",\n },\n \"speed-limit-35\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9fc\",\n },\n \"speed-limit-30\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9fb\",\n },\n \"speed-limit-25\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9fa\",\n },\n \"speed-limit-20\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f9\",\n },\n \"speed-limit-15\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e0\",\n },\n \"railroad-crossing\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e2\",\n },\n \"pedestrian-crosswalk\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e3\",\n },\n \"stop\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e4\",\n color: \"#ae2025\",\n },\n \"yield\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e5\",\n color: \"#ae2025\",\n },\n \"wrong-way\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e6\",\n color: \"#ae2025\",\n },\n \"school-zone\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e7\",\n color: \"#e4762b\",\n },\n \"left-straight\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e8\",\n },\n \"straight-only\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9e9\",\n },\n \"right-only\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ea\",\n },\n \"left-only\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9eb\",\n },\n \"median\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ec\",\n },\n \"do-not-enter\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ed\",\n color: \"#b62e29\",\n },\n \"left-only-left-straight\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ee\",\n },\n \"no-right-turn\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9ef\",\n },\n \"no-left-turn\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f0\",\n },\n \"no-u-turn\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f1\",\n },\n \"turnabout\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f2\",\n color: \"#e8bb00\",\n },\n \"u-turn\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f3\",\n color: \"#e8bb00\",\n },\n \"dead-end\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f4\",\n color: \"#e8bb00\",\n },\n \"slow\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f5\",\n color: \"#e8bb00\",\n },\n \"merge\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f6\",\n color: \"#e8bb00\",\n },\n \"merge-left\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9f7\",\n color: \"#f37937\",\n },\n \"multiple-select\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9da\",\n },\n \"compass\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9db\",\n },\n \"draw-straight\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9dc\",\n },\n \"draw-free\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9dd\",\n },\n \"pdf-secure\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97c\",\n color: \"rgb(0, 0, 0)\",\n layeredIcons: [\n { content: '\\ue980', color: colors[\"pdf\"] },\n ]\n },\n \"zip-automatic\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d5\",\n color: \"rgb(203, 185, 104)\",\n layeredIcons: [\n { content: '\\ue9d6', color: \"rgb(5, 6, 5)\" },\n ]\n },\n \"incident-review-color\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9de\",\n color: \"rgb(94,95,97)\",\n layeredIcons: [\n { content: '\\ue9df', color: colors[\"attention\"] },\n ]\n },\n \"pdf-secure2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue989\",\n color: colors[\"pdf\"],\n },\n \"pdf-searchable\": {\n family: \"icomoon-matrix\",\n content: \"\\ue982\",\n color: colors[\"pdf\"],\n },\n \"rule\": {\n family: \"icomoon-matrix\",\n content: \"\\ue97a\",\n },\n \"record-decision\": {\n family: \"icomoon-matrix\",\n content: \"\\ue981\",\n },\n \"cd-property\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65d\",\n },\n \"financial-property\": {\n family: \"fontawesome\",\n content: \"\\uf155\",\n },\n \"other-property\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65e\",\n },\n \"real-estate-property\": {\n family: \"fontawesome\",\n content: \"\\uf015\",\n },\n \"vehicle-property\": {\n family: \"fontawesome\",\n content: \"\\uf1b9\",\n },\n \"exclamation-circle\": {\n family: \"fontawesome\",\n content: \"\\uf06a\",\n },\n \"hosted-evidence\": {\n family: \"icomoon\",\n content: \"\\ue013\",\n },\n \"back\": {\n family: \"icomoon-matrix\",\n content: \"\\ue800\",\n },\n \"tag\": {\n family: \"fontawesome\",\n content: \"\\uf02b\",\n },\n \"speedy-trial\": {\n family: \"icomoon\",\n content: \"\\ue04e\",\n },\n \"journal\": {\n family: \"fontawesome\",\n content: \"\\uf0cb\",\n },\n \"costs\": {\n family: \"fontawesome\",\n content: \"\\uf155\",\n },\n \"statistics\": {\n family: \"fontawesome\",\n content: \"\\uf080\",\n },\n \"red-text\": {\n family: \"icomoon-matrix\",\n content: \"\\ue927\",\n color: \"#f00\",\n layeredIcons: [\n '\\ue928',\n ]\n },\n \"color-text\": {\n family: \"icomoon-matrix\",\n content: \"\\ue92c\",\n color: \"#949494\",\n layeredIcons: [\n '\\ue929',\n '\\ue92a',\n ]\n },\n \"yellow-highlight\": {\n family: \"icomoon-matrix\",\n content: \"\\ue92b\",\n layeredIcons: [\n '\\ue92e',\n { content: '\\ue92f', color: \"#ff0\" },\n ]\n },\n \"highlight\": {\n family: \"icomoon-matrix\",\n content: \"\\ue92d\",\n layeredIcons: [\n '\\ue930',\n { content: '\\ue931', color: \"#949494\" },\n '\\ue932',\n ]\n },\n \"assigned-check\": {\n family: \"icomoon-matrix\",\n content: \"\\ue934\",\n layeredIcons: [\n '\\ue935',\n '\\ue936',\n { content: '\\ue937', color: colors[\"attention\"] },\n ]\n },\n \"subrogation\": {\n family: \"icomoon-matrix\",\n content: \"\\ue65b\",\n layeredIcons: [\n { content: '\\ue661', color: colors[\"goal-success\"] },\n ]\n },\n \"expunged-partially\": {\n family: \"icomoon-matrix\",\n content: \"\\ue941\",\n layeredIcons: [\n { content: '\\ue942', color: colors[\"attention\"] },\n ]\n },\n \"sealed-partially\": {\n family: \"icomoon-matrix\",\n content: \"\\ue943\",\n layeredIcons: [\n { content: '\\ue944', color: colors[\"attention\"] },\n ]\n },\n \"sealed\": {\n family: \"icomoon-matrix\",\n content: \"\\ue945\",\n layeredIcons: [\n { content: '\\ue946', color: colors[\"attention\"] },\n ]\n },\n \"sealed-pending\": {\n family: \"icomoon-matrix\",\n content: \"\\ue947\",\n layeredIcons: [\n { content: '\\ue948', color: colors[\"goal-success\"] },\n ]\n },\n \"sealed-denied\": {\n family: \"icomoon-matrix\",\n content: \"\\ue949\",\n layeredIcons: [\n { content: '\\ue94a', color: colors[\"attention\"] },\n ]\n },\n \"expunged-denied\": {\n family: \"icomoon-matrix\",\n content: \"\\ue94b\",\n layeredIcons: [\n { content: '\\ue94c', color: colors[\"attention\"] },\n ]\n },\n \"expunged-pending\": {\n family: \"icomoon-matrix\",\n content: \"\\ue94d\",\n layeredIcons: [\n { content: '\\ue94e', color: colors[\"goal-success\"] },\n ]\n },\n \"expunged\": {\n family: \"icomoon-matrix\",\n content: \"\\ue94f\",\n layeredIcons: [\n { content: '\\ue950', color: colors[\"attention\"] },\n ]\n },\n \"file-confidential\": {\n family: \"icomoon-matrix\",\n content: \"\\ue963\",\n layeredIcons: [\n { content: '\\ue964', color: colors[\"attention\"] },\n ]\n },\n \"email-sent\": {\n family: \"icomoon-matrix\",\n content: \"\\ue967\",\n layeredIcons: [\n { content: '\\ue968', color: colors[\"heading\"] },\n ]\n },\n \"email-no\": {\n family: \"icomoon-matrix\",\n content: \"\\ue972\",\n layeredIcons: [\n { content: '\\ue973', color: colors[\"priority-red\"] },\n ]\n },\n \"email-no-overridden\": {\n family: \"icomoon-matrix\",\n content: \"\\ue972\",\n layeredIcons: [\n { content: '\\ue973', color: colors[\"text-very-light\"] },\n ]\n },\n \"email-yes\": {\n family: \"icomoon-matrix\",\n content: \"\\ue96f\",\n layeredIcons: [\n { content: '\\ue970', color: colors[\"victim\"] },\n ]\n },\n \"email-yes-overridden\": {\n family: \"icomoon-matrix\",\n content: \"\\ue96f\",\n layeredIcons: [\n { content: '\\ue970', color: colors[\"text-very-light\"] },\n ]\n },\n \"text-sent\": {\n family: \"icomoon-matrix\",\n content: \"\\ue96d\",\n layeredIcons: [\n { content: '\\ue96e', color: colors[\"heading\"] },\n ]\n },\n \"text-no\": {\n family: \"icomoon-matrix\",\n content: \"\\ue96b\",\n layeredIcons: [\n { content: '\\ue96c', color: colors[\"priority-red\"] },\n ]\n },\n \"text-no-overridden\": {\n family: \"icomoon-matrix\",\n content: \"\\ue96b\",\n layeredIcons: [\n { content: '\\ue96c', color: colors[\"text-very-light\"] },\n ]\n },\n \"text-yes\": {\n family: \"icomoon-matrix\",\n content: \"\\ue969\",\n layeredIcons: [\n { content: '\\ue96a', color: colors[\"victim\"] },\n ]\n },\n \"text-yes-overridden\": {\n family: \"icomoon-matrix\",\n content: \"\\ue969\",\n layeredIcons: [\n { content: '\\ue96a', color: colors[\"text-very-light\"] },\n ]\n },\n \"email-unavailable\": {\n family: \"icomoon-matrix\",\n content: \"\\ue971\",\n layeredIcons: [\n { content: '\\ue974', color: colors[\"attention\"] },\n ]\n },\n \"text-unavailable\": {\n family: \"icomoon-matrix\",\n content: \"\\ue975\",\n layeredIcons: [\n { content: '\\ue976', color: colors[\"attention\"] },\n ]\n },\n \"registered-user-x\": {\n family: \"icomoon-matrix\",\n content: \"\\ue99b\",\n layeredIcons: [\n { content: '\\ue99c', color: colors[\"heading\"] },\n ]\n },\n \"registered-user-exclamation\": {\n family: \"icomoon-matrix\",\n content: \"\\ue99d\",\n layeredIcons: [\n { content: '\\ue99e', color: colors[\"attention\"] },\n ]\n },\n \"registered-user-pending\": {\n family: \"icomoon-matrix\",\n content: \"\\ue99d\",\n layeredIcons: [\n { family: \"fontawesome\", content: \"\\uf017\", color: \"#faaf40\", fontSize: \".7em\", left: \".55em\", top: '-.05em' },\n ]\n },\n \"license-mismatch1\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a0\",\n layeredIcons: [\n { content: '\\ue9a1', color: colors[\"attention\"] },\n ]\n },\n \"license-mismatch2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a2\",\n layeredIcons: [\n { content: '\\ue9a3', color: colors[\"heading\"] },\n ]\n },\n \"license-pending\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9a5\",\n layeredIcons: [\n { content: '\\ue9a6', color: colors[\"attention\"] },\n ]\n },\n \"license-questionable\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b6\",\n layeredIcons: [\n { content: '\\ue9b7', color: \"rgb(196, 89, 0)\" },\n ]\n },\n \"dollar-arrow\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b2\",\n color: \"rgb(87, 140, 17)\",\n layeredIcons: [\n '\\ue9b3',\n ]\n },\n \"app-update\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9b4\",\n layeredIcons: [\n { content: '\\ue9b5', color: \"rgb(251, 176, 59)\" },\n ]\n },\n \"location-unknown\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c3\",\n layeredIcons: [\n { content: '\\ue9c4', color: \"rgb(234, 189, 0)\" },\n ]\n },\n \"location-do-not-verify\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c1\",\n layeredIcons: [\n { content: '\\ue9c2', color: \"rgb(237, 28, 36)\" },\n ]\n },\n \"location-verified\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9bf\",\n layeredIcons: [\n { content: '\\ue9c0', color: \"rgb(87, 140, 17)\" },\n ]\n },\n \"location-failed\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9c5\",\n layeredIcons: [\n { content: '\\ue9c6', color: \"rgb(237, 28, 36)\" },\n ]\n },\n \"dismissed-call\": {\n family: \"icomoon-matrix\",\n content: \"\\ue9d0\",\n layeredIcons: [\n { content: '\\ue9d1', color: \"rgb(196, 89, 0)\" },\n ]\n },\n // CUSTOM ICONS\n \"deadline-okay\": {\n family: \"icomoon-matrix\",\n content: \"\\uea31\",\n layeredIcons: [\n { family: \"fontawesome\", content: \"\\uf058\", color: \"#37b34a\", fontSize: \".8em\", left: \".35em\" }\n ]\n },\n \"deadline-warning\": {\n family: \"icomoon-matrix\",\n content: \"\\uea31\",\n layeredIcons: [\n { family: \"fontawesome\", content: \"\\uf017\", color: \"#faaf40\", fontSize: \".8em\", left: \".35em\" }\n ]\n },\n \"deadline-late\": {\n family: \"icomoon-matrix\",\n content: \"\\uea31\",\n layeredIcons: [\n { family: \"fontawesome\", content: \"\\uf06a\", color: \"#ec1c24\", fontSize: \".8em\", left: \".35em\" }\n ]\n },\n \"vertical-ellipsis\": {\n family: \"fontawesome\",\n content: \"\\uf142\"\n },\n \"filetype-word\": {\n family: \"fontawesome\",\n content: \"\\uf1c2\",\n color: colors[\"word-doc\"]\n },\n \"filetype-pdf\": {\n family: \"fontawesome\",\n content: \"\\uf1c1\",\n color: colors.pdf\n },\n \"filetype-pdf-searchable\": {\n family: \"icomoon-matrix\",\n content: \"\\ue982\",\n color: colors.pdf\n },\n \"filetype-pdf-secure2\": {\n family: \"icomoon-matrix\",\n content: \"\\ue989\",\n color: colors.pdf\n },\n \"filetype-video\": {\n family: \"fontawesome\",\n content: \"\\uf03d\",\n color: colors.video\n },\n \"filetype-image\": {\n family: \"fontawesome\",\n content: \"\\uf03e\",\n color: colors.image\n },\n \"filetype-html\": {\n family: \"fontawesome\",\n content: \"\\uf1c9\",\n color: colors.html\n },\n \"filetype-audio\": {\n family: \"fontawesome\",\n content: \"\\uf028\",\n color: colors.audio\n },\n \"filetype-email\": {\n family: \"fontawesome\",\n content: \"\\uf003\",\n color: colors[\"text-light\"]\n },\n \"filetype-powerpoint\": {\n family: \"fontawesome\",\n content: \"\\uf1c4\",\n color: colors[\"powerpoint-doc\"]\n },\n \"filetype-txt\": {\n family: \"fontawesome\",\n content: \"\\uf0f6\",\n color: colors[\"word-doc\"]\n },\n \"filetype-excel\": {\n family: \"fontawesome\",\n content: \"\\uf1c3\",\n color: colors[\"excel-doc\"]\n },\n \"filetype-unknown\": {\n family: \"fontawesome\",\n content: \"\\uf016\",\n color: colors[\"text-light\"]\n },\n \"filetype-zip\": {\n family: \"fontawesome\",\n content: \"\\uf1c6\",\n color: colors.zip\n },\n \"new\": {\n family: \"icomoon-matrix\",\n content: \"\\uea1d\"\n },\n \"filing-rejected\": {\n family: \"icomoon-matrix\",\n content: \"\\uea1c\"\n },\n \"shared-outlined\": {\n family: \"icomoon-matrix\",\n content: \"\\uea18\",\n color: \"rgb(255, 255, 255)\",\n layeredIcons: [\n { content: \"\\uea19\" }\n ]\n },\n \"lock-outlined\": {\n family: \"icomoon-matrix\",\n content: \"\\uea1a\",\n color: \"rgb(255, 255, 255)\",\n layeredIcons: [\n { content: \"\\uea1b\" }\n ]\n },\n \"container-add\": {\n family: \"icomoon-matrix\",\n content: \"\\uea17\"\n },\n \"triangle-outline\": {\n family: \"icomoon-matrix\",\n content: \"\\uea16\"\n },\n \"share\": {\n family: \"fontawesome\",\n content: \"\\uf064\"\n },\n \"calculator\": {\n family: \"icomoon\",\n content: \"\\uE03B\"\n },\n \"calendar-270\": {\n family: \"icomoon-matrix\",\n content: \"\\uea1f\"\n },\n \"hourglass-full\": {\n family: \"icomoon-matrix\",\n content: \"\\uea23\"\n },\n \"hourglass-halfway\": {\n family: \"icomoon-matrix\",\n content: \"\\uea25\"\n },\n \"hourglass-empty\": {\n family: \"icomoon-matrix\",\n content: \"\\uea21\"\n },\n \"add-note\": {\n family: \"icomoon-matrix\",\n content: \"\\uea26\"\n },\n \"add-attention\": {\n family: \"icomoon-matrix\",\n content: \"\\uea20\"\n },\n \"number\": {\n family: \"icomoon-matrix\",\n content: \"\\uea22\"\n },\n \"file-defendant\": {\n family: \"icomoon-matrix\",\n content: \"\\uea24\"\n },\n \"unmerge\": {\n family: \"icomoon-matrix\",\n content: \"\\uea27\"\n },\n \"rotate-right\": {\n family: \"fontawesome\",\n content: \"\\uf01e\"\n },\n \"fit-window\": {\n family: \"fontawesome\",\n content: \"\\uf0b2\"\n },\n \"fit-width\": {\n family: \"fontawesome\",\n content: \"\\uf07e\"\n },\n \"fit-height\": {\n family: \"fontawesome\",\n content: \"\\uf07d\"\n },\n \"stretch-mode\": {\n family: \"fontawesome\",\n content: \"\\uf065\"\n },\n \"crop\": {\n family: \"fontawesome\",\n content: \"\\uf125\"\n },\n \"resize\": {\n family: \"fontawesome\",\n content: \"\\uf247\"\n },\n \"zoom-in\": {\n family: \"fontawesome\",\n content: \"\\uf00e\"\n },\n \"zoom-out\": {\n family: \"fontawesome\",\n content: \"\\uf010\"\n },\n \"share-sent\": {\n family: \"icomoon-matrix\",\n content: \"\\uea32\"\n },\n \"share-received\": {\n family: \"icomoon-matrix\",\n content: \"\\uea33\"\n },\n \"client\": {\n family: \"icomoon-matrix\",\n content: \"\\uea34\"\n },\n \"user-exchange\": {\n family: \"icomoon-matrix\",\n content: \"\\uea35\"\n },\n \"user-portal\": {\n family: \"icomoon-matrix\",\n content: \"\\uea36\"\n },\n \"user-internal\": {\n family: \"icomoon-matrix\",\n content: \"\\uea39\"\n },\n \"distribution-list\": {\n family: \"icomoon-matrix\",\n content: \"\\uea37\"\n },\n \"file-suitable-for-release\": {\n family: \"icomoon-matrix\",\n content: \"\\uea38\"\n },\n \"redaction-suitable-for-release\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3a\"\n },\n \"service-worker\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3b\"\n },\n \"circle-bell\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3c\"\n },\n \"title\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3d\"\n },\n \"circle-megaphone\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3e\"\n },\n \"not-registered-primary\": {\n family: \"icomoon-matrix\",\n content: \"\\uea44\",\n layeredIcons: [\n { family: \"icomoon-matrix\", content: \"\\uea43\", color: \"#37b34a\" }\n ]\n },\n \"access-revoked\": {\n family: \"icomoon-matrix\",\n content: \"\\uea42\"\n },\n \"primary-access-revoked\": {\n family: \"icomoon-matrix\",\n content: \"\\uea3f\"\n },\n \"registered-primary\": {\n family: \"icomoon-matrix\",\n content: \"\\uea41\",\n layeredIcons: [\n { family: \"icomoon-matrix\", content: \"\\uea40\", color: \"#37b34a\" }\n ]\n },\n \"judge-reassignment\": {\n family: \"icomoon-matrix\",\n content: \"\\uea46\"\n },\n \"matter-messages\": {\n family: \"icomoon-matrix\",\n content: \"\\uea45\"\n },\n \"real-property\": {\n family: \"icomoon-matrix\",\n content: \"\\uea47\"\n },\n \"stacked-bars\": {\n family: \"fontawesome\",\n content: \"\\uf0c9\"\n },\n \"copy-from-file\": {\n family: \"icomoon-matrix\",\n content: \"\\uea48\"\n },\n \"text-select\": {\n family: \"icomoon-matrix\",\n content: \"\\uea49\"\n },\n \"area-selection\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4a\"\n },\n \"collapse-right-side\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4b\"\n },\n \"expand-left-side\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4c\"\n },\n \"keyword-search\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4d\"\n },\n \"list3\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4e\"\n },\n \"pan\": {\n family: \"icomoon-matrix\",\n content: \"\\uea4f\"\n },\n \"pane-view\": {\n family: \"icomoon-matrix\",\n content: \"\\uea50\"\n },\n \"redact-area\": {\n family: \"icomoon-matrix\",\n content: \"\\uea51\"\n },\n \"redact-page\": {\n family: \"icomoon-matrix\",\n content: \"\\uea52\"\n },\n \"redact-pages\": {\n family: \"icomoon-matrix\",\n content: \"\\uea53\"\n },\n \"redact-search-result\": {\n family: \"icomoon-matrix\",\n content: \"\\uea54\"\n },\n \"redact-text\": {\n family: \"icomoon-matrix\",\n content: \"\\uea55\"\n },\n \"remove-redaction\": {\n family: \"icomoon-matrix\",\n content: \"\\uea56\"\n },\n \"rotate-page-left\": {\n family: \"icomoon-matrix\",\n content: \"\\uea57\"\n },\n \"rotate-page-right\": {\n family: \"icomoon-matrix\",\n content: \"\\uea58\"\n },\n \"stamp\": {\n family: \"icomoon-matrix\",\n content: \"\\uea59\"\n },\n \"sort-ascending\": {\n family: 'fontawesome',\n content: \"\\uf162\"\n },\n \"sort-descending\": {\n family: 'fontawesome',\n content: \"\\uf163\"\n },\n \"calendar-list\": {\n family: 'fontawesome',\n content: \"\\uf036\"\n },\n \"dna\": {\n family: 'icomoon-matrix',\n content: \"\\uea5c\"\n },\n \"collapse-left-side\": {\n family: 'icomoon-matrix',\n content: \"\\uea5a\"\n },\n \"party-note-follows\": {\n family: 'icomoon-matrix',\n content: \"\\uea5b\"\n },\n \"jail-inmate-linked\": {\n family: 'icomoon-matrix',\n content: \"\\uea60\",\n layeredIcons: [\n { content: '\\uea61', color: colors['goal-success'] },\n ]\n },\n \"jail-inmate-not-linked\": {\n family: 'icomoon-matrix',\n content: \"\\uea60\",\n layeredIcons: [\n { content: '\\uea61', color: colors['goal-failure'] },\n ]\n },\n \"file-duplicate\": {\n family: 'icomoon-matrix',\n content: \"\\uea5f\"\n },\n \"attach-to-matter\": {\n family: 'icomoon-matrix',\n content: \"\\uea64\"\n },\n \"local-file-store\": {\n family: \"icomoon-matrix\",\n content: \"\\uea62\",\n color: 'rgb(228, 164, 70)',\n layeredIcons: [\n { family: \"icomoon-matrix\", content: \"\\uea63\" }\n ]\n },\n \"full-content-list-view\": {\n family: 'icomoon-matrix',\n content: \"\\uea69\"\n },\n \"attempt-level-no\": {\n family: 'icomoon-matrix',\n content: \"\\uea6a\",\n color: 'rgb(0, 0, 0)',\n layeredIcons: [\n { family: \"icomoon-matrix\", content: \"\\uea6b\", color: 'rgb(237, 28, 36)' }\n ]\n },\n \"popper\": {\n family: 'icomoon-matrix',\n content: \"\\uea6c\"\n },\n \"digest\": {\n family: 'icomoon-matrix',\n content: \"\\uea6d\"\n },\n \"sections-grid\": {\n family: 'icomoon-matrix',\n content: \"\\uea6e\"\n },\n \"down-arrow-long\": {\n family: 'icomoon-matrix',\n content: \"\\uea6f\"\n },\n \"up-arrow-long\": {\n family: 'icomoon-matrix',\n content: \"\\uea70\"\n },\n \"external-web-link\": {\n family: 'icomoon',\n content: '\\ue0c2'\n },\n \"star-solid\": {\n family: 'fontawesome',\n content: '\\uf005'\n },\n \"star-outline\": {\n family: 'fontawesome',\n content: '\\uf006'\n },\n \"address-book-party-alert\": {\n family: 'icomoon-matrix',\n content: '\\uea71'\n },\n \"court-link-accepted\": {\n family: 'icomoon-matrix',\n content: '\\uea72'\n },\n \"court-link-requested\": {\n family: 'icomoon-matrix',\n content: '\\uea73'\n },\n \"circle-star\": {\n family: 'icomoon-matrix',\n content: '\\uea74'\n },\n \"no-investigation-activity\": {\n family: 'icomoon-matrix',\n content: '\\uea5e'\n },\n \"ohio-search-icon\": {\n family: 'icomoon-matrix',\n content: '\\uea75'\n },\n \"oracle-icon\": {\n family: 'icomoon-matrix',\n content: '\\uea76'\n },\n \"ammunition\": {\n family: 'icomoon-matrix',\n content: '\\uea79'\n },\n \"axon\": {\n family: 'icomoon-matrix',\n content: '\\uea77',\n color: '#FFD700'\n },\n \"curve\": {\n family: 'icomoon-matrix',\n content: '\\uea78'\n },\n 'unlink': {\n family: 'icomoon-matrix',\n content: '\\uea7a'\n },\n 'alcohol': {\n family: 'icomoon-matrix',\n content: '\\uea7b'\n },\n 'client-list': {\n family: 'icomoon-matrix',\n content: '\\uea7c'\n },\n 'events': {\n family: 'icomoon-matrix',\n content: '\\uea7d'\n },\n 'disposition': {\n family: 'fontawesome',\n content: '\\uf24e'\n },\n 'word-file-original': {\n family: 'icomoon-matrix',\n content: '\\uea88'\n },\n 'excel-file-original': {\n family: 'icomoon-matrix',\n content: '\\uea89'\n },\n 'file-cabinet-1': {\n family: 'icomoon-matrix',\n content: '\\uea7e'\n },\n 'disk-storage-2': {\n family: 'icomoon-matrix',\n content: '\\uea7f'\n },\n 'files-multi': {\n family: 'icomoon-matrix',\n content: '\\uea80'\n },\n 'folder-box': {\n family: 'icomoon-matrix',\n content: '\\uea81'\n },\n 'files-misc': {\n family: 'icomoon-matrix',\n content: '\\uea82'\n },\n 'disk-storage-1': {\n family: 'icomoon-matrix',\n content: '\\uea83'\n },\n 'flashdrive': {\n family: 'icomoon-matrix',\n content: '\\uea84'\n },\n 'redweld-2': {\n family: 'icomoon-matrix',\n content: '\\uea85'\n },\n 'redweld-1': {\n family: 'icomoon-matrix',\n content: '\\uea86'\n },\n 'file-box': {\n family: 'icomoon-matrix',\n content: '\\uea87'\n },\n 'disk-storage-3': {\n family: 'fontawesome',\n content: '\\uf1c0'\n },\n 'file-cabinet-2': {\n family: 'icomoon',\n content: '\\ue059'\n },\n 'inactivate': {\n family: 'icomoon-matrix',\n content: '\\uea8b'\n },\n 'follows': {\n family: 'icomoon-matrix',\n content: '\\uea8a'\n },\n 'word-secure': {\n family: 'icomoon-matrix',\n content: '\\uea8c',\n color: colors[\"word-doc\"]\n },\n 'excel-secure': {\n family: 'icomoon-matrix',\n content: '\\uea8d',\n color: colors[\"excel-doc\"]\n },\n 'powerpoint-secure': {\n family: 'icomoon-matrix',\n content: '\\uea8e',\n color: colors[\"powerpoint-doc\"]\n },\n 'alpha': {\n family: 'icomoon-matrix',\n content: '\\uea92'\n },\n 'numeric': {\n family: 'icomoon-matrix',\n content: '\\uea91'\n },\n 'alpha-numeric': {\n family: 'icomoon-matrix',\n content: '\\uea93'\n },\n 'special-character': {\n family: 'icomoon-matrix',\n content: '\\uea94'\n },\n 'save-pattern': {\n family: 'icomoon-matrix',\n content: '\\uea95'\n },\n 'load-pattern': {\n family: 'icomoon-matrix',\n content: '\\uea96'\n },\n 'recycle-bin': {\n family: 'icomoon-matrix',\n content: '\\uea8f'\n },\n 'email-watch': {\n family: 'icomoon-matrix',\n content: '\\uea90'\n },\n 'helios': {\n family: 'icomoon-matrix',\n content: '\\uea97',\n color: '#F7A81B'\n },\n 'detainer': {\n family: 'icomoon-matrix',\n content: '\\uea98'\n },\n 'email-share': {\n family: 'icomoon-matrix',\n content: '\\uea99'\n }\n};\n","import * as React from \"react\";\nimport { FontIcon } from \"./fontIcon\";\nimport { iconKeys, iconLookup, isAlias } from \"./iconInfo\";\n/** Returns all the defined icons keys. */\nexport function getAllIconKeys() {\n return [...iconKeys].sort();\n}\nconst sizes = {\n \"auto\": undefined,\n \"xsmall\": \".7rem\",\n \"small\": \"1.15rem\",\n \"normal\": \"1.4rem\",\n \"large\": \"2.4rem\"\n};\n/** Renders a standard icon. */\nexport function Icon(props) {\n let i = iconLookup[props.icon];\n while (isAlias(i)) {\n i = iconLookup[i.alias];\n }\n return React.createElement(FontIcon, { fontFamily: i.family, content: i.content, fontSize: sizes[props.size || \"normal\"], color: props.color === \"auto\"\n ? undefined\n : (props.color ?? i.color), singleColor: props.singleColor, fontWeight: i.fontWeight, layeredIcons: i.layeredIcons, className: props.className, style: props.style, title: props.title });\n}\n","import * as React from \"react\";\nimport classnames from 'classnames';\nexport function FieldLabel(props) {\n const { text, required, for: propsFor, className, ...domProps } = props;\n const classes = classnames(className, 'label', {\n 'required': required\n });\n return React.createElement(\"label\", { ...domProps, className: classes, htmlFor: propsFor || props.htmlFor },\n props.text,\n props.children);\n}\n","import * as React from \"react\";\nimport { useGeneratedId } from \"spry-react/utils/idGenerator\";\nimport { FieldLabel } from \"spry-react/Label/fieldLabel\";\nimport { wrapDisplayName } from \"recompose\";\n/** Builds a higher-order component which wraps the given ForwardRef Functional component with a label.\n * The labeledRef property will be passed through to the wrapped component's ref property.\n */\nexport function labeledForForwardRef(ComponentTypeToLabel) {\n function LabeledComponent(props) {\n const generatedId = useGeneratedId();\n const { labeledRef, ...domProps } = props;\n const id = props.id || generatedId;\n return React.createElement(React.Fragment, null,\n React.createElement(FieldLabel, { text: props.label, required: props.required, for: id }),\n React.createElement(ComponentTypeToLabel, { id: id, ref: labeledRef, ...domProps }));\n }\n LabeledComponent.displayName = wrapDisplayName(ComponentTypeToLabel, 'labeled');\n return LabeledComponent;\n}\n/** Builds a higher-order component which wraps the Functional component with a label.\n * Functional components do not support a ref property unless you use React.forwardRef,\n * so the labeled component will not have a labeledRef property.\n * If the wrapped component uses React.forwardRef, you should use labeledForForwardRef instead.\n */\nexport function labeledForFunction(ComponentTypeToLabel) {\n function LabeledComponent(props) {\n const id = props.id || useGeneratedId();\n return React.createElement(React.Fragment, null,\n React.createElement(FieldLabel, { text: props.label, required: props.required, for: id }),\n React.createElement(ComponentTypeToLabel, { id: id, ...props }));\n }\n LabeledComponent.displayName = wrapDisplayName(ComponentTypeToLabel, 'labeled');\n return LabeledComponent;\n}\n/** Builds a higher-order component which wraps the given Class component with a label.\n * The labeledRef property will be passed through to the wrapped component's ref property.\n * All class components have an implicit ref property which is set to the class object instance.\n */\nexport function labeledForClass(ComponentTypeToLabel) {\n function LabeledComponent(props) {\n const generatedId = useGeneratedId();\n const { labeledRef, ...domProps } = props;\n const id = props.id || generatedId;\n return React.createElement(React.Fragment, null,\n React.createElement(FieldLabel, { text: props.label, required: props.required, for: id }),\n React.createElement(ComponentTypeToLabel, { id: id, ref: labeledRef, ...domProps }));\n }\n LabeledComponent.displayName = wrapDisplayName(ComponentTypeToLabel, 'labeled');\n return LabeledComponent;\n}\n","import * as React from \"react\";\nimport classnames from 'classnames';\nimport { useGeneratedId } from 'spry-react/utils/idGenerator';\nimport { FieldLabel } from 'spry-react/Label/fieldLabel';\nimport { Link } from 'spry-react/Link/link';\nimport { wrapDisplayName } from 'recompose';\nexport function lockToggle(Component) {\n const higherOrderComponent = function (props) {\n const generatedId = useGeneratedId();\n const iconClass = classnames('l-box-hl-1-2x', {\n 'edit-icon': props.valueIsLocked,\n 'lock-icon': !props.valueIsLocked,\n 'disabled': props.disabled\n });\n const { label, valueIsLocked, onLockToggled, ...innerComponentProps } = props;\n const id = props.id || generatedId;\n return React.createElement(React.Fragment, null,\n React.createElement(FieldLabel, { text: props.label, required: props.required, for: id },\n React.createElement(Link, { className: iconClass, onClick: () => props.onLockToggled(!props.valueIsLocked) })),\n React.createElement(Component, { ...innerComponentProps, id: id, disabled: props.valueIsLocked || props.disabled }));\n };\n higherOrderComponent.displayName = wrapDisplayName(Component, 'lockToggle');\n return higherOrderComponent;\n}\n","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface HandlerResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData\n status?: number;\n}\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n unstable_actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => Promise\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(branches[i], decoded);\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === matches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n HandlerResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n unstable_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n unstable_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized: boolean;\n let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n let hasLoaders = initialMatches.some((m) => m.route.loader);\n if (hasLazyRoutes) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (\n typeof m.route.loader === \"function\" &&\n m.route.loader.hydrate === true\n ) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches\n );\n result = results[0];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.unstable_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n if (\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration)\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n\n let actionData: Record | null | undefined;\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n actionData = {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n actionData = null;\n } else {\n actionData = state.actionData;\n }\n }\n\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(request, redirect.result, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n fetchRequest,\n [match],\n requestMatches\n );\n let actionResult = actionResults[0];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.unstable_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(revalidationRequest, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n fetchRequest,\n [match],\n matches\n );\n let result = results[0];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[]\n ): Promise {\n try {\n let results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n return {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n return matchesToLoad.map(() => ({\n type: ResultType.error,\n error: e,\n }));\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let [loaderResults, ...fetcherResults] = await Promise.all([\n matchesToLoad.length\n ? callDataStrategy(\"loader\", request, matchesToLoad, matches)\n : [],\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n let fetcherRequest = createClientSideRequest(\n init.history,\n f.path,\n f.controller.signal\n );\n return callDataStrategy(\n \"loader\",\n fetcherRequest,\n [f.match],\n f.matches\n ).then((r) => r[0]);\n } else {\n return Promise.resolve({\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n });\n }\n }),\n ]);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `HandlerResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isHandlerResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n result = results[0];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null\n ): Promise {\n let results = await callDataStrategyImpl(\n unstable_dataStrategy || defaultDataStrategy,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[0]\n : undefined;\n let boundaryMatches = boundaryId\n ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n : matches;\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n unstable_actionStatus: actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n unstable_actionStatus: actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nfunction defaultDataStrategy(\n opts: DataStrategyFunctionArgs\n): ReturnType {\n return Promise.all(opts.matches.map((m) => m.resolve()));\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise {\n let routeIdsToLoad = matchesToLoad.reduce(\n (acc, m) => acc.add(m.route.id),\n new Set()\n );\n let loadedMatches = new Set();\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: matches.map((match) => {\n let shouldLoad = routeIdsToLoad.has(match.route.id);\n // `resolve` encapsulates the route.lazy, executing the\n // loader/action, and mapping return values/thrown errors to a\n // HandlerResult. Users can pass a callback to take fine-grained control\n // over the execution of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = (handlerOverride) => {\n loadedMatches.add(match.route.id);\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n manifest,\n mapRouteProperties,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n }),\n request,\n params: matches[0].params,\n context: requestContext,\n });\n\n // Throw if any loadRoute implementations not called since they are what\n // ensures a route is fully loaded\n matches.forEach((m) =>\n invariant(\n loadedMatches.has(m.route.id),\n `\\`match.resolve()\\` was not called for route id \"${m.route.id}\". ` +\n \"You must call `match.resolve()` on every match passed to \" +\n \"`dataStrategy` to ensure all routes are properly loaded.\"\n )\n );\n\n // Filter out any middleware-only matches for which we didn't need to run handlers\n return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id));\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: HandlerResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise;\n if (handlerOverride) {\n handlerPromise = handlerOverride((ctx: unknown) => actualHandler(ctx));\n } else {\n handlerPromise = (async () => {\n try {\n let val = await actualHandler();\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n }\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // HandlerResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertHandlerResultToDataResult(\n handlerResult: HandlerResult\n): Promise {\n let { result, type, status } = handlerResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : status,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result, statusCode: status };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isHandlerResult(result: unknown): result is HandlerResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectHandlerResult(result: HandlerResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a