{"version":3,"file":"static/js/main.27a8b0f1.js","mappings":"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EAAG,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,E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","sources":["../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@mui/icons-material/Close.js","../node_modules/@mui/icons-material/ExpandMore.js","../node_modules/@mui/icons-material/Menu.js","../node_modules/@mui/icons-material/MenuOpen.js","../node_modules/@mui/icons-material/Smartphone.js","../node_modules/@mui/icons-material/utils/createSvgIcon.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/styles/createTransitions.js","../node_modules/@mui/material/colors/common.js","../node_modules/@mui/material/colors/grey.js","../node_modules/@mui/material/colors/purple.js","../node_modules/@mui/material/colors/red.js","../node_modules/@mui/material/colors/orange.js","../node_modules/@mui/material/colors/blue.js","../node_modules/@mui/material/colors/lightBlue.js","../node_modules/@mui/material/colors/green.js","../node_modules/@mui/material/styles/createPalette.js","../node_modules/@mui/material/styles/createTypography.js","../node_modules/@mui/material/styles/shadows.js","../node_modules/@mui/material/styles/zIndex.js","../node_modules/@mui/material/styles/createTheme.js","../node_modules/@mui/material/styles/createMixins.js","../node_modules/@mui/material/styles/defaultTheme.js","../node_modules/@mui/material/styles/identifier.js","../node_modules/@mui/material/styles/slotShouldForwardProp.js","../node_modules/@mui/material/styles/rootShouldForwardProp.js","../node_modules/@mui/material/styles/styled.js","../node_modules/@mui/material/utils/capitalize.js","../node_modules/@mui/material/utils/createChainedFunction.js","../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../node_modules/@mui/material/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/SvgIcon/SvgIcon.js","../node_modules/@mui/material/utils/createSvgIcon.js","../node_modules/@mui/material/utils/debounce.js","../node_modules/@mui/utils/esm/debounce/debounce.js","../node_modules/@mui/material/utils/deprecatedPropType.js","../node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js","../node_modules/@mui/material/utils/isMuiElement.js","../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/material/utils/ownerDocument.js","../node_modules/@mui/material/utils/ownerWindow.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/material/utils/requirePropFactory.js","../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../node_modules/@mui/material/utils/setRef.js","../node_modules/@mui/material/utils/useEnhancedEffect.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/material/utils/useId.js","../node_modules/@mui/material/utils/unsupportedProp.js","../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../node_modules/@mui/material/utils/index.js","../node_modules/@mui/material/utils/useControlled.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/material/utils/useEventCallback.js","../node_modules/@mui/material/utils/useForkRef.js","../node_modules/@mui/utils/esm/useIsFocusVisible/useIsFocusVisible.js","../node_modules/@mui/material/utils/useIsFocusVisible.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js","../node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../node_modules/@mui/styled-engine/index.js","../node_modules/@mui/system/colorManipulator.js","../node_modules/@mui/system/createStyled.js","../node_modules/@mui/system/esm/breakpoints.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/merge.js","../node_modules/@mui/system/esm/spacing.js","../node_modules/@mui/system/esm/memoize.js","../node_modules/@mui/system/esm/style.js","../node_modules/@mui/system/esm/compose.js","../node_modules/@mui/system/esm/borders.js","../node_modules/@mui/system/esm/cssGrid.js","../node_modules/@mui/system/esm/palette.js","../node_modules/@mui/system/esm/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/utils/esm/setRef/setRef.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../node_modules/eve/eve.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-burger-menu/lib/BurgerMenu.js","../node_modules/react-burger-menu/lib/components/BurgerIcon.js","../node_modules/react-burger-menu/lib/components/CrossIcon.js","../node_modules/react-burger-menu/lib/helpers/baseStyles.js","../node_modules/react-burger-menu/lib/helpers/dom.js","../node_modules/react-burger-menu/lib/helpers/snapsvgImporter.js","../node_modules/react-burger-menu/lib/helpers/utils.js","../node_modules/react-burger-menu/lib/menuFactory.js","../node_modules/react-burger-menu/lib/menus/bubble.js","../node_modules/react-burger-menu/lib/menus/elastic.js","../node_modules/react-burger-menu/lib/menus/fallDown.js","../node_modules/react-burger-menu/lib/menus/push.js","../node_modules/react-burger-menu/lib/menus/pushRotate.js","../node_modules/react-burger-menu/lib/menus/reveal.js","../node_modules/react-burger-menu/lib/menus/scaleDown.js","../node_modules/react-burger-menu/lib/menus/scaleRotate.js","../node_modules/react-burger-menu/lib/menus/slide.js","../node_modules/react-burger-menu/lib/menus/stack.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-easy-swipe/lib/index.js","../node_modules/react-easy-swipe/lib/react-swipe.js","../node_modules/react-fast-compare/index.js","../node_modules/react-is/cjs/react-is.production.js","../node_modules/react-responsive-carousel/lib/js/CSSTranslate.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/animations.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/index.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/utils.js","../node_modules/react-responsive-carousel/lib/js/components/Thumbs.js","../node_modules/react-responsive-carousel/lib/js/cssClasses.js","../node_modules/react-responsive-carousel/lib/js/dimensions.js","../node_modules/react-responsive-carousel/lib/js/index.js","../node_modules/react-responsive-carousel/lib/js/shims/document.js","../node_modules/react-responsive-carousel/lib/js/shims/window.js","../node_modules/react-side-effect/lib/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/snapsvg-cjs/dist/snap.svg-cjs.js","fenceImages/capAndTrim|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/chainLink|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/craftsman_final|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/custom|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/hogwire|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/horizontal|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/ornamental|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/reviewPhotos_final|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/standard|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","fenceImages/vinyl|sync|nonrecursive|//.(jpg%7Cjpeg%7Cpng%7Cwebp)$","../node_modules/@babel/runtime/helpers/extends.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/classnames/index.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/clsx/dist/clsx.mjs","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/deprecations.ts","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/react-helmet/es/Helmet.js","../node_modules/@mui/system/esm/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme.js","../node_modules/@mui/material/styles/useTheme.js","../node_modules/@mui/system/esm/useMediaQuery/useMediaQuery.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@mui/material/transitions/utils.js","../node_modules/@mui/material/Collapse/collapseClasses.js","../node_modules/@mui/material/Collapse/Collapse.js","../node_modules/@mui/material/styles/getOverlayAlpha.js","../node_modules/@mui/material/Paper/paperClasses.js","../node_modules/@mui/material/Paper/Paper.js","../node_modules/@mui/material/Accordion/AccordionContext.js","../node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/material/utils/useSlot.js","../node_modules/@mui/material/Accordion/accordionClasses.js","../node_modules/@mui/material/Accordion/Accordion.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@mui/material/ButtonBase/Ripple.js","../node_modules/@mui/material/ButtonBase/touchRippleClasses.js","../node_modules/@mui/material/ButtonBase/TouchRipple.js","../node_modules/@mui/material/ButtonBase/buttonBaseClasses.js","../node_modules/@mui/material/ButtonBase/ButtonBase.js","../node_modules/@mui/material/AccordionSummary/accordionSummaryClasses.js","../node_modules/@mui/material/AccordionSummary/AccordionSummary.js","../node_modules/@mui/material/AccordionDetails/accordionDetailsClasses.js","../node_modules/@mui/material/AccordionDetails/AccordionDetails.js","Components/FaqAccordion/FaqAccordion.jsx","Constants/Constants.jsx","Views/FAQ/FAQ.jsx","Views/About/About.jsx","../node_modules/@mui/material/Button/buttonClasses.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupContext.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupButtonContext.js","../node_modules/@mui/material/Button/Button.js","Components/Button/Button.jsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","Components/adaptiveImage/AdaptiveImage.jsx","Components/ImageCarousel/ImageCarousel.jsx","fenceImages/altTextMap.js","fenceImages/index.js","Constants/fenceData.js","Views/MobileFenceDetails/MobileFenceDetails.jsx","Views/FenceDetails/FenceDetails.jsx","../node_modules/@mui/material/Grid/GridContext.js","../node_modules/@mui/material/Grid/gridClasses.js","../node_modules/@mui/material/Grid/Grid.js","../node_modules/@mui/material/Card/cardClasses.js","../node_modules/@mui/material/Card/Card.js","../node_modules/@mui/material/CardActionArea/cardActionAreaClasses.js","../node_modules/@mui/material/CardActionArea/CardActionArea.js","../node_modules/@mui/material/CardContent/cardContentClasses.js","../node_modules/@mui/material/CardContent/CardContent.js","../node_modules/@mui/material/Typography/typographyClasses.js","../node_modules/@mui/material/Typography/Typography.js","Components/TypeCard/TypeCard.jsx","Views/FenceTypes/FenceTypes.jsx","Views/InstantQuote/InstantQuote.jsx","../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../node_modules/@fortawesome/react-fontawesome/index.es.js","../node_modules/@fortawesome/free-solid-svg-icons/index.mjs","Components/ReviewCarousel/ReviewCarousel.jsx","Views/LandingPage/LandingPage.jsx","Components/MobileNavbar/MobileNavbar.jsx","Components/Navbar/Navbar.jsx","Components/Footer/Footer.jsx","Components/ScrollToTop.jsx","App/App.jsx","reportWebVitals.js","index.js"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n return mergedTheme;\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n });\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n var newProps = {};\n\n for (var _key in props) {\n if (hasOwn.call(props, _key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var _key2 in props) {\n if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n newProps[_key2] = props[_key2];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n // eslint-disable-next-line prefer-rest-params\n var args = arguments;\n\n if (props == null || !hasOwn.call(props, 'css')) {\n return React.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n var JSX;\n\n (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = React.useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false;\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nfunction keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name;\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n}\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && isDevelopment) {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && isDevelopment) {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: React.useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z\"\n}), 'Menu');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 18h13v-2H3zm0-5h10v-2H3zm0-7v2h13V6zm18 9.59L17.42 12 21 8.41 19.59 7l-5 5 5 5z\"\n}), 'MenuOpen');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17 1.01 7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99M17 19H7V5h10z\"\n}), 'Smartphone');","\"use strict\";\n'use client';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n value,\n children\n}) {\n return /*#__PURE__*/_jsx(PropsContext.Provider, {\n value: value,\n children: children\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object\n} : void 0;\nfunction getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name]) {\n return props;\n }\n const config = theme.components[name];\n if (config.defaultProps) {\n // compatible with v5 signature\n return resolveProps(config.defaultProps, props);\n }\n if (!config.styleOverrides && !config.variants) {\n // v6 signature, no property 'defaultProps'\n return resolveProps(config, props);\n }\n return props;\n}\nexport function useDefaultProps({\n props,\n name\n}) {\n const ctx = React.useContext(PropsContext);\n return getThemeProps({\n props,\n name,\n theme: {\n components: ctx\n }\n });\n}\nexport default DefaultPropsProvider;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, _extends({}, props));\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n return useSystemDefaultProps(params);\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"duration\", \"easing\", \"delay\"];\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n const constant = height / 36;\n\n // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\nexport default function createTransitions(inputTransitions) {\n const mergedEasing = _extends({}, easing, inputTransitions.easing);\n const mergedDuration = _extends({}, duration, inputTransitions.duration);\n const create = (props = ['all'], options = {}) => {\n const {\n duration: durationOption = mergedDuration.standard,\n easing: easingOption = mergedEasing.easeInOut,\n delay = 0\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n const isString = value => typeof value === 'string';\n // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n const isNumber = value => !isNaN(parseFloat(value));\n if (!isString(props) && !Array.isArray(props)) {\n console.error('MUI: Argument \"props\" must be a string or Array.');\n }\n if (!isNumber(durationOption) && !isString(durationOption)) {\n console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n }\n if (!isString(easingOption)) {\n console.error('MUI: Argument \"easing\" must be a string.');\n }\n if (!isNumber(delay) && !isString(delay)) {\n console.error('MUI: Argument \"delay\" must be a number or a string.');\n }\n if (typeof options !== 'object') {\n console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n }\n if (Object.keys(other).length !== 0) {\n console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n }\n }\n return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n };\n return _extends({\n getAutoHeightDuration,\n create\n }, inputTransitions, {\n easing: mergedEasing,\n duration: mergedDuration\n });\n}","const common = {\n black: '#000',\n white: '#fff'\n};\nexport default common;","const grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#f5f5f5',\n A200: '#eeeeee',\n A400: '#bdbdbd',\n A700: '#616161'\n};\nexport default grey;","const purple = {\n 50: '#f3e5f5',\n 100: '#e1bee7',\n 200: '#ce93d8',\n 300: '#ba68c8',\n 400: '#ab47bc',\n 500: '#9c27b0',\n 600: '#8e24aa',\n 700: '#7b1fa2',\n 800: '#6a1b9a',\n 900: '#4a148c',\n A100: '#ea80fc',\n A200: '#e040fb',\n A400: '#d500f9',\n A700: '#aa00ff'\n};\nexport default purple;","const red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nexport default red;","const orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n 50: '#e1f5fe',\n 100: '#b3e5fc',\n 200: '#81d4fa',\n 300: '#4fc3f7',\n 400: '#29b6f6',\n 500: '#03a9f4',\n 600: '#039be5',\n 700: '#0288d1',\n 800: '#0277bd',\n 900: '#01579b',\n A100: '#80d8ff',\n A200: '#40c4ff',\n A400: '#00b0ff',\n A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\nexport default green;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nconst _excluded = [\"mode\", \"contrastThreshold\", \"tonalOffset\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from '../colors/common';\nimport grey from '../colors/grey';\nimport purple from '../colors/purple';\nimport red from '../colors/red';\nimport orange from '../colors/orange';\nimport blue from '../colors/blue';\nimport lightBlue from '../colors/lightBlue';\nimport green from '../colors/green';\nexport const light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.6)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: common.white,\n default: common.white\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n};\nexport const dark = {\n text: {\n primary: common.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: '#121212',\n default: '#121212'\n },\n action: {\n active: common.white,\n hover: 'rgba(255, 255, 255, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(255, 255, 255, 0.16)',\n selectedOpacity: 0.16,\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(255, 255, 255, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n};\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = lighten(intent.main, tonalOffsetLight);\n } else if (direction === 'dark') {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction getDefaultPrimary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: blue[200],\n light: blue[50],\n dark: blue[400]\n };\n }\n return {\n main: blue[700],\n light: blue[400],\n dark: blue[800]\n };\n}\nfunction getDefaultSecondary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: purple[200],\n light: purple[50],\n dark: purple[400]\n };\n }\n return {\n main: purple[500],\n light: purple[300],\n dark: purple[700]\n };\n}\nfunction getDefaultError(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: red[500],\n light: red[300],\n dark: red[700]\n };\n }\n return {\n main: red[700],\n light: red[400],\n dark: red[800]\n };\n}\nfunction getDefaultInfo(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: lightBlue[400],\n light: lightBlue[300],\n dark: lightBlue[700]\n };\n }\n return {\n main: lightBlue[700],\n light: lightBlue[500],\n dark: lightBlue[900]\n };\n}\nfunction getDefaultSuccess(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: green[400],\n light: green[300],\n dark: green[700]\n };\n }\n return {\n main: green[800],\n light: green[500],\n dark: green[900]\n };\n}\nfunction getDefaultWarning(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: orange[400],\n light: orange[300],\n dark: orange[700]\n };\n }\n return {\n main: '#ed6c02',\n // closest to orange[800] that pass 3:1.\n light: orange[500],\n dark: orange[900]\n };\n}\nexport default function createPalette(palette) {\n const {\n mode = 'light',\n contrastThreshold = 3,\n tonalOffset = 0.2\n } = palette,\n other = _objectWithoutPropertiesLoose(palette, _excluded);\n const primary = palette.primary || getDefaultPrimary(mode);\n const secondary = palette.secondary || getDefaultSecondary(mode);\n const error = palette.error || getDefaultError(mode);\n const info = palette.info || getDefaultInfo(mode);\n const success = palette.success || getDefaultSuccess(mode);\n const warning = palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background) {\n const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n if (process.env.NODE_ENV !== 'production') {\n const contrast = getContrastRatio(background, contrastText);\n if (contrast < 3) {\n console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n }\n }\n return contrastText;\n }\n const augmentColor = ({\n color,\n name,\n mainShade = 500,\n lightShade = 300,\n darkShade = 700\n }) => {\n color = _extends({}, color);\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n if (!color.hasOwnProperty('main')) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\nThe color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatMuiErrorMessage(11, name ? ` (${name})` : '', mainShade));\n }\n if (typeof color.main !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\n\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\n\nDid you intend to use one of the following approaches?\n\nimport { green } from \"@mui/material/colors\";\n\nconst theme1 = createTheme({ palette: {\n primary: green,\n} });\n\nconst theme2 = createTheme({ palette: {\n primary: { main: green[500] },\n} });` : _formatMuiErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n }\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n return color;\n };\n const modes = {\n dark,\n light\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!modes[mode]) {\n console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n }\n }\n const paletteOutput = deepmerge(_extends({\n // A collection of common colors.\n common: _extends({}, common),\n // prevent mutable object.\n // The palette mode, can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor({\n color: primary,\n name: 'primary'\n }),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor({\n color: secondary,\n name: 'secondary',\n mainShade: 'A400',\n lightShade: 'A200',\n darkShade: 'A700'\n }),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor({\n color: error,\n name: 'error'\n }),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor({\n color: warning,\n name: 'warning'\n }),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor({\n color: info,\n name: 'info'\n }),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor({\n color: success,\n name: 'success'\n }),\n // The grey colors.\n grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset\n }, modes[mode]), other);\n return paletteOutput;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"];\nimport deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n const _ref = typeof typography === 'function' ? typography(palette) : typography,\n {\n fontFamily = defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize = 14,\n // px\n fontWeightLight = 300,\n fontWeightRegular = 400,\n fontWeightMedium = 500,\n fontWeightBold = 700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize = 16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem: pxToRem2\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof fontSize !== 'number') {\n console.error('MUI: `fontSize` is required to be a number.');\n }\n if (typeof htmlFontSize !== 'number') {\n console.error('MUI: `htmlFontSize` is required to be a number.');\n }\n }\n const coef = fontSize / 14;\n const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => _extends({\n fontFamily,\n fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: `${round(letterSpacing / size)}em`\n } : {}, casing, allVariants);\n const variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n inherit: {\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit'\n }\n };\n return deepmerge(_extends({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold\n }, variants), other, {\n clone: false // No need to clone deep\n });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nexport default zIndex;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nconst _excluded = [\"breakpoints\", \"mixins\", \"spacing\", \"palette\", \"transitions\", \"typography\", \"shape\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from './createMixins';\nimport createPalette from './createPalette';\nimport createTypography from './createTypography';\nimport shadows from './shadows';\nimport createTransitions from './createTransitions';\nimport zIndex from './zIndex';\nfunction createTheme(options = {}, ...args) {\n const {\n mixins: mixinsInput = {},\n palette: paletteInput = {},\n transitions: transitionsInput = {},\n typography: typographyInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (options.vars) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`vars\\` is a private field used for CSS variables support.\nPlease use another name.` : _formatMuiErrorMessage(18));\n }\n const palette = createPalette(paletteInput);\n const systemTheme = systemCreateTheme(options);\n let muiTheme = deepmerge(systemTheme, {\n mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows: shadows.slice(),\n typography: createTypography(palette, typographyInput),\n transitions: createTransitions(transitionsInput),\n zIndex: _extends({}, zIndex)\n });\n muiTheme = deepmerge(muiTheme, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n if (process.env.NODE_ENV !== 'production') {\n // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n const traverse = (node, component) => {\n let key;\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (key in node) {\n const child = node[key];\n if (stateClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n if (process.env.NODE_ENV !== 'production') {\n const stateClass = generateUtilityClass('', key);\n console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n root: {\n [`&.${stateClass}`]: child\n }\n }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n }\n // Remove the style to prevent global conflicts.\n node[key] = {};\n }\n }\n };\n Object.keys(muiTheme.components).forEach(component => {\n const styleOverrides = muiTheme.components[component].styleOverrides;\n if (styleOverrides && component.indexOf('Mui') === 0) {\n traverse(styleOverrides, component);\n }\n });\n }\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nlet warnedOnce = false;\nexport function createMuiTheme(...args) {\n if (process.env.NODE_ENV !== 'production') {\n if (!warnedOnce) {\n warnedOnce = true;\n console.error(['MUI: the createMuiTheme function was renamed to createTheme.', '', \"You should use `import { createTheme } from '@mui/material/styles'`\"].join('\\n'));\n }\n }\n return createTheme(...args);\n}\nexport default createTheme;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function createMixins(breakpoints, mixins) {\n return _extends({\n toolbar: {\n minHeight: 56,\n [breakpoints.up('xs')]: {\n '@media (orientation: landscape)': {\n minHeight: 48\n }\n },\n [breakpoints.up('sm')]: {\n minHeight: 64\n }\n }\n }, mixins);\n}","'use client';\n\nimport createTheme from './createTheme';\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from './slotShouldForwardProp';\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nimport rootShouldForwardProp from './rootShouldForwardProp';\nexport { default as slotShouldForwardProp } from './slotShouldForwardProp';\nexport { default as rootShouldForwardProp } from './rootShouldForwardProp';\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","import capitalize from '@mui/utils/capitalize';\nexport default capitalize;","import createChainedFunction from '@mui/utils/createChainedFunction';\nexport default createChainedFunction;","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"inheritViewBox\", \"titleAccess\", \"viewBox\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from '../utils/capitalize';\nimport { useDefaultProps } from '../DefaultPropsProvider';\nimport styled from '../styles/styled';\nimport { getSvgIconUtilityClass } from './svgIconClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(({\n theme,\n ownerState\n}) => {\n var _theme$transitions, _theme$transitions$cr, _theme$transitions2, _theme$typography, _theme$typography$pxT, _theme$typography2, _theme$typography2$px, _theme$typography3, _theme$typography3$px, _palette$ownerState$c, _palette, _palette2, _palette3;\n return {\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n // the will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: ownerState.hasSvgAsChild ? undefined : 'currentColor',\n flexShrink: 0,\n transition: (_theme$transitions = theme.transitions) == null || (_theme$transitions$cr = _theme$transitions.create) == null ? void 0 : _theme$transitions$cr.call(_theme$transitions, 'fill', {\n duration: (_theme$transitions2 = theme.transitions) == null || (_theme$transitions2 = _theme$transitions2.duration) == null ? void 0 : _theme$transitions2.shorter\n }),\n fontSize: {\n inherit: 'inherit',\n small: ((_theme$typography = theme.typography) == null || (_theme$typography$pxT = _theme$typography.pxToRem) == null ? void 0 : _theme$typography$pxT.call(_theme$typography, 20)) || '1.25rem',\n medium: ((_theme$typography2 = theme.typography) == null || (_theme$typography2$px = _theme$typography2.pxToRem) == null ? void 0 : _theme$typography2$px.call(_theme$typography2, 24)) || '1.5rem',\n large: ((_theme$typography3 = theme.typography) == null || (_theme$typography3$px = _theme$typography3.pxToRem) == null ? void 0 : _theme$typography3$px.call(_theme$typography3, 35)) || '2.1875rem'\n }[ownerState.fontSize],\n // TODO v5 deprecate, v6 remove for sx\n color: (_palette$ownerState$c = (_palette = (theme.vars || theme).palette) == null || (_palette = _palette[ownerState.color]) == null ? void 0 : _palette.main) != null ? _palette$ownerState$c : {\n action: (_palette2 = (theme.vars || theme).palette) == null || (_palette2 = _palette2.action) == null ? void 0 : _palette2.active,\n disabled: (_palette3 = (theme.vars || theme).palette) == null || (_palette3 = _palette3.action) == null ? void 0 : _palette3.disabled,\n inherit: undefined\n }[ownerState.color]\n };\n});\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = _extends({}, props, {\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n });\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref\n }, more, other, hasSvgAsChild && children.props, {\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport SvgIcon from '../SvgIcon';\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, _extends({\n \"data-testid\": `${displayName}Icon`,\n ref: ref\n }, props, {\n children: path\n }));\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(Component));\n}","import debounce from '@mui/utils/debounce';\nexport default debounce;","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // @ts-ignore\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}","import deprecatedPropType from '@mui/utils/deprecatedPropType';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import isMuiElement from '@mui/utils/isMuiElement';\nexport default isMuiElement;","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from '@mui/utils/ownerDocument';\nexport default ownerDocument;","import ownerWindow from '@mui/utils/ownerWindow';\nexport default ownerWindow;","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import requirePropFactory from '@mui/utils/requirePropFactory';\nexport default requirePropFactory;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","import setRef from '@mui/utils/setRef';\nexport default setRef;","'use client';\n\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`mui-${globalId}`);\n }\n }, [defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example \n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride != null ? idOverride : reactId;\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}","'use client';\n\nimport useId from '@mui/utils/useId';\nexport default useId;","import unsupportedProp from '@mui/utils/unsupportedProp';\nexport default unsupportedProp;","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/utils';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","'use client';\n\nimport useControlled from '@mui/utils/useControlled';\nexport default useControlled;","'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && !Object.is(defaultValue, defaultProp)) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useRef((...args) =>\n // @ts-expect-error hide `this`\n (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport useEventCallback from '@mui/utils/useEventCallback';\nexport default useEventCallback;","'use client';\n\nimport useForkRef from '@mui/utils/useForkRef';\nexport default useForkRef;","'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport * as React from 'react';\nimport { Timeout } from '../useTimeout/useTimeout';\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nconst hadFocusVisibleRecentlyTimeout = new Timeout();\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const {\n type,\n tagName\n } = node;\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const {\n target\n } = event;\n try {\n return target.matches(':focus-visible');\n } catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = React.useCallback(node => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n const isFocusVisibleRef = React.useRef(false);\n\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n hadFocusVisibleRecentlyTimeout.start(100, () => {\n hadFocusVisibleRecently = false;\n });\n isFocusVisibleRef.current = false;\n return true;\n }\n return false;\n }\n\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n isFocusVisibleRef.current = true;\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref\n };\n}","'use client';\n\nimport useIsFocusVisible from '@mui/utils/useIsFocusVisible';\nexport default useIsFocusVisible;","import memoize from '@emotion/memoize';\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport * as React from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\n\nvar isDevelopment = false;\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n // eslint-disable-next-line prefer-rest-params\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n // eslint-disable-next-line prefer-spread\n styles.push.apply(styles, args);\n } else {\n var templateStringsArr = args[0];\n\n styles.push(templateStringsArr[0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n\n styles.push(args[i], templateStringsArr[i]);\n }\n }\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = React.useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if (finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/React.createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && isDevelopment) {\n return 'NO_COMPONENT_SELECTOR';\n }\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n var newStyled = createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n }));\n return newStyled.apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport { createStyled as default };\n","import createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/react';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\nimport '@emotion/utils';\nimport 'react';\nimport '@emotion/is-prop-valid';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// bind it to avoid mutating the original function\nvar newStyled = createStyled.bind(null);\ntags.forEach(function (tagName) {\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport { newStyled as default };\n","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\n\n// prepend: true moves MUI styles to the top of the so they're loaded first.\n// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nlet cache;\nif (typeof document === 'object') {\n cache = createCache({\n key: 'css',\n prepend: true\n });\n}\nexport default function StyledEngineProvider(props) {\n const {\n injectFirst,\n children\n } = props;\n return injectFirst && cache ? /*#__PURE__*/_jsx(CacheProvider, {\n value: cache,\n children: children\n }) : children;\n}\nprocess.env.NODE_ENV !== \"production\" ? StyledEngineProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: PropTypes.node,\n /**\n * By default, the styles are injected last in the element of the page.\n * As a result, they gain more specificity than any other style sheet.\n * If you want to override MUI's styles, set this prop.\n */\n injectFirst: PropTypes.bool\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Global } from '@emotion/react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction isEmpty(obj) {\n return obj === undefined || obj === null || Object.keys(obj).length === 0;\n}\nexport default function GlobalStyles(props) {\n const {\n styles,\n defaultTheme = {}\n } = props;\n const globalStyles = typeof styles === 'function' ? themeInput => styles(isEmpty(themeInput) ? defaultTheme : themeInput) : styles;\n return /*#__PURE__*/_jsx(Global, {\n styles: globalStyles\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes = {\n defaultTheme: PropTypes.object,\n styles: PropTypes.oneOfType([PropTypes.array, PropTypes.string, PropTypes.object, PropTypes.func])\n} : void 0;","/**\n * @mui/styled-engine v5.16.14\n *\n * @license MIT\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'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const internal_processStyles = (tag, processor) => {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n};\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from './StyledEngineProvider';\nexport { default as GlobalStyles } from './GlobalStyles';","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.alpha = alpha;\nexports.blend = blend;\nexports.colorChannel = void 0;\nexports.darken = darken;\nexports.decomposeColor = decomposeColor;\nexports.emphasize = emphasize;\nexports.getContrastRatio = getContrastRatio;\nexports.getLuminance = getLuminance;\nexports.hexToRgb = hexToRgb;\nexports.hslToRgb = hslToRgb;\nexports.lighten = lighten;\nexports.private_safeAlpha = private_safeAlpha;\nexports.private_safeColorChannel = void 0;\nexports.private_safeDarken = private_safeDarken;\nexports.private_safeEmphasize = private_safeEmphasize;\nexports.private_safeLighten = private_safeLighten;\nexports.recomposeColor = recomposeColor;\nexports.rgbToHex = rgbToHex;\nvar _formatMuiErrorMessage2 = _interopRequireDefault(require(\"@mui/utils/formatMuiErrorMessage\"));\nvar _clamp = _interopRequireDefault(require(\"@mui/utils/clamp\"));\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return (0, _clamp.default)(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nfunction hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nfunction decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\nThe following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` : (0, _formatMuiErrorMessage2.default)(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\nThe following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` : (0, _formatMuiErrorMessage2.default)(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nconst colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexports.colorChannel = colorChannel;\nconst private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexports.private_safeColorChannel = private_safeColorChannel;\nfunction recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.indexOf('color') !== -1) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nfunction rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nfunction hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nfunction getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nfunction getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nfunction private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nfunction private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nfunction private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nfunction private_safeEmphasize(color, coefficient, warning) {\n try {\n return emphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nfunction blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createStyled;\nexports.shouldForwardProp = shouldForwardProp;\nexports.systemDefaultTheme = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\nvar _styledEngine = _interopRequireWildcard(require(\"@mui/styled-engine\"));\nvar _deepmerge = require(\"@mui/utils/deepmerge\");\nvar _capitalize = _interopRequireDefault(require(\"@mui/utils/capitalize\"));\nvar _getDisplayName = _interopRequireDefault(require(\"@mui/utils/getDisplayName\"));\nvar _createTheme = _interopRequireDefault(require(\"./createTheme\"));\nvar _styleFunctionSx = _interopRequireDefault(require(\"./styleFunctionSx\"));\nconst _excluded = [\"ownerState\"],\n _excluded2 = [\"variants\"],\n _excluded3 = [\"name\", \"slot\", \"skipVariantsResolver\", \"skipSx\", \"overridesResolver\"];\n/* eslint-disable no-underscore-dangle */\nfunction _getRequireWildcardCache(e) { if (\"function\" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }\nfunction _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || \"object\" != typeof e && \"function\" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if (\"default\" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\n\n// Update /system/styled/#api in case if this changes\nfunction shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nconst systemDefaultTheme = exports.systemDefaultTheme = (0, _createTheme.default)();\nconst lowercaseFirstLetter = string => {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n};\nfunction resolveTheme({\n defaultTheme,\n theme,\n themeId\n}) {\n return isEmpty(theme) ? defaultTheme : theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (props, styles) => styles[slot];\n}\nfunction processStyleArg(callableStyle, _ref) {\n let {\n ownerState\n } = _ref,\n props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);\n const resolvedStylesArg = typeof callableStyle === 'function' ? callableStyle((0, _extends2.default)({\n ownerState\n }, props)) : callableStyle;\n if (Array.isArray(resolvedStylesArg)) {\n return resolvedStylesArg.flatMap(resolvedStyle => processStyleArg(resolvedStyle, (0, _extends2.default)({\n ownerState\n }, props)));\n }\n if (!!resolvedStylesArg && typeof resolvedStylesArg === 'object' && Array.isArray(resolvedStylesArg.variants)) {\n const {\n variants = []\n } = resolvedStylesArg,\n otherStyles = (0, _objectWithoutPropertiesLoose2.default)(resolvedStylesArg, _excluded2);\n let result = otherStyles;\n variants.forEach(variant => {\n let isMatch = true;\n if (typeof variant.props === 'function') {\n isMatch = variant.props((0, _extends2.default)({\n ownerState\n }, props, ownerState));\n } else {\n Object.keys(variant.props).forEach(key => {\n if ((ownerState == null ? void 0 : ownerState[key]) !== variant.props[key] && props[key] !== variant.props[key]) {\n isMatch = false;\n }\n });\n }\n if (isMatch) {\n if (!Array.isArray(result)) {\n result = [result];\n }\n result.push(typeof variant.style === 'function' ? variant.style((0, _extends2.default)({\n ownerState\n }, props, ownerState)) : variant.style);\n }\n });\n return result;\n }\n return resolvedStylesArg;\n}\nfunction createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n const systemSx = props => {\n return (0, _styleFunctionSx.default)((0, _extends2.default)({}, props, {\n theme: resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }))\n }));\n };\n systemSx.__mui_systemSx = true;\n return (tag, inputOptions = {}) => {\n // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n (0, _styledEngine.internal_processStyles)(tag, styles => styles.filter(style => !(style != null && style.__mui_systemSx)));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n } = inputOptions,\n options = (0, _objectWithoutPropertiesLoose2.default)(inputOptions, _excluded3);\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = (0, _styledEngine.default)(tag, (0, _extends2.default)({\n shouldForwardProp: shouldForwardPropOption,\n label\n }, options));\n const transformStyleArg = stylesArg => {\n // On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n if (typeof stylesArg === 'function' && stylesArg.__emotion_real !== stylesArg || (0, _deepmerge.isPlainObject)(stylesArg)) {\n return props => processStyleArg(stylesArg, (0, _extends2.default)({}, props, {\n theme: resolveTheme({\n theme: props.theme,\n defaultTheme,\n themeId\n })\n }));\n }\n return stylesArg;\n };\n const muiStyledResolver = (styleArg, ...expressions) => {\n let transformedStyleArg = transformStyleArg(styleArg);\n const expressionsWithDefaultTheme = expressions ? expressions.map(transformStyleArg) : [];\n if (componentName && overridesResolver) {\n expressionsWithDefaultTheme.push(props => {\n const theme = resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }));\n if (!theme.components || !theme.components[componentName] || !theme.components[componentName].styleOverrides) {\n return null;\n }\n const styleOverrides = theme.components[componentName].styleOverrides;\n const resolvedStyleOverrides = {};\n // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n Object.entries(styleOverrides).forEach(([slotKey, slotStyle]) => {\n resolvedStyleOverrides[slotKey] = processStyleArg(slotStyle, (0, _extends2.default)({}, props, {\n theme\n }));\n });\n return overridesResolver(props, resolvedStyleOverrides);\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsWithDefaultTheme.push(props => {\n var _theme$components;\n const theme = resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }));\n const themeVariants = theme == null || (_theme$components = theme.components) == null || (_theme$components = _theme$components[componentName]) == null ? void 0 : _theme$components.variants;\n return processStyleArg({\n variants: themeVariants\n }, (0, _extends2.default)({}, props, {\n theme\n }));\n });\n }\n if (!skipSx) {\n expressionsWithDefaultTheme.push(systemSx);\n }\n const numOfCustomFnsApplied = expressionsWithDefaultTheme.length - expressions.length;\n if (Array.isArray(styleArg) && numOfCustomFnsApplied > 0) {\n const placeholders = new Array(numOfCustomFnsApplied).fill('');\n // If the type is array, than we need to add placeholders in the template for the overrides, variants and the sx styles.\n transformedStyleArg = [...styleArg, ...placeholders];\n transformedStyleArg.raw = [...styleArg.raw, ...placeholders];\n }\n const Component = defaultStyledResolver(transformedStyleArg, ...expressionsWithDefaultTheme);\n if (process.env.NODE_ENV !== 'production') {\n let displayName;\n if (componentName) {\n displayName = `${componentName}${(0, _capitalize.default)(componentSlot || '')}`;\n }\n if (displayName === undefined) {\n displayName = `Styled(${(0, _getDisplayName.default)(tag)})`;\n }\n Component.displayName = displayName;\n }\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from './merge';\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !== -1) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction(_extends({\n theme\n }, props[key]));\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n }) : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n var _breakpointsInput$key;\n const breakpointsInOrder = (_breakpointsInput$key = breakpointsInput.keys) == null ? void 0 : _breakpointsInput$key.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/experimental-api/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n *\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars && typeof theme.getColorSchemeSelector === 'function') {\n // If CssVarsProvider is used as a provider,\n // returns '* :where([data-mui-color-scheme=\"light|dark\"]) &'\n const selector = theme.getColorSchemeSelector(key).replace(/(\\[[^\\]]+\\])/, '*:where($1)');\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"values\", \"unit\", \"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return _extends({}, acc, {\n [obj.key]: obj.val\n });\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5\n } = breakpoints,\n other = _objectWithoutPropertiesLoose(breakpoints, _excluded);\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return _extends({\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit\n }, other);\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"breakpoints\", \"palette\", \"spacing\", \"shape\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from './createBreakpoints';\nimport shape from './shape';\nimport createSpacing from './createSpacing';\nimport styleFunctionSx from '../styleFunctionSx/styleFunctionSx';\nimport defaultSxConfig from '../styleFunctionSx/defaultSxConfig';\nimport applyStyles from './applyStyles';\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: _extends({\n mode: 'light'\n }, paletteInput),\n spacing,\n shape: _extends({}, shape, shapeInput)\n }, other);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import { createUnarySpacing } from '../spacing';\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n\n // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n // Smaller components, such as icons, can align to a 4dp grid.\n // https://m2.material.io/design/layout/understanding-layout.html\n const transform = createUnarySpacing({\n spacing: spacingInput\n });\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nimport { getPath } from './style';\nimport merge from './merge';\nimport memoize from './memoize';\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n var _getPath;\n const themeSpacing = (_getPath = getPath(theme, themeKey, false)) != null ? _getPath : defaultValue;\n if (typeof themeSpacing === 'number') {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof abs !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);\n }\n }\n return themeSpacing * abs;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n return themeSpacing[abs];\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n const abs = Math.abs(propValue);\n const transformed = transformer(abs);\n if (propValue >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n return `-${transformed}`;\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (keys.indexOf(prop) === -1) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","import merge from './merge';\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from './responsivePropType';\nimport style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nimport responsivePropType from './responsivePropType';\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from './style';\nimport compose from './compose';\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from './style';\nimport compose from './compose';\nimport { handleBreakpoints, values as breakpointsValues } from './breakpoints';\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n var _props$theme, _props$theme2;\n const breakpoint = ((_props$theme = props.theme) == null || (_props$theme = _props$theme.breakpoints) == null || (_props$theme = _props$theme.values) == null ? void 0 : _props$theme[propValue]) || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (((_props$theme2 = props.theme) == null || (_props$theme2 = _props$theme2.breakpoints) == null ? void 0 : _props$theme2.unit) !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from '../spacing';\nimport { borderRadius, borderTransform } from '../borders';\nimport { gap, rowGap, columnGap } from '../cssGrid';\nimport { paletteTransform } from '../palette';\nimport { maxWidth, sizingTransform } from '../sizing';\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"sx\"];\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from './defaultSxConfig';\nconst splitProps = props => {\n var _props$theme$unstable, _props$theme;\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = (_props$theme$unstable = props == null || (_props$theme = props.theme) == null ? void 0 : _props$theme.unstable_sxConfig) != null ? _props$theme$unstable : defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return _extends({}, systemProps, result);\n };\n } else {\n finalSx = _extends({}, systemProps, inSx);\n }\n return _extends({}, otherProps, {\n sx: finalSx\n });\n}","import capitalize from '@mui/utils/capitalize';\nimport merge from '../merge';\nimport { getPath, getStyleValue as getValue } from '../style';\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from '../breakpoints';\nimport defaultSxConfig from './defaultSxConfig';\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n var _theme$unstable_sxCon;\n const {\n sx,\n theme = {}\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = (_theme$unstable_sxCon = theme.unstable_sxConfig) != null ? _theme$unstable_sxCon : defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n return removeUnusedBreakpoints(breakpointsKeys, css);\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","import _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`capitalize(string)\\` expects a string argument.` : _formatMuiErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","export default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n Object.keys(slots).forEach(\n // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n slot => {\n output[slot] = slots[slot].reduce((acc, key) => {\n if (key) {\n const utilityClass = getUtilityClass(key);\n if (utilityClass !== '') {\n acc.push(utilityClass);\n }\n if (classes && classes[key]) {\n acc.push(classes[key]);\n }\n }\n return acc;\n }, []).join(' ');\n });\n return output;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if ( /*#__PURE__*/React.isValidElement(source) || !isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? _extends({}, target) : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if ( /*#__PURE__*/React.isValidElement(source[key])) {\n output[key] = source[key];\n } else if (isPlainObject(source[key]) &&\n // Avoid prototype pollution\n Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@mui/internal-babel-macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe if we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n /* eslint-disable prefer-template */\n let url = 'https://mui.com/production-error/?code=' + code;\n for (let i = 1; i < arguments.length; i += 1) {\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url += '&args[]=' + encodeURIComponent(arguments[i]);\n }\n return 'Minified MUI error #' + code + '; visit ' + url + ' for the full message.';\n /* eslint-enable prefer-template */\n}","import ClassNameGenerator from '../ClassNameGenerator';\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from '../generateUtilityClass';\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","import { ForwardRef, Memo } from 'react-is';\n\n// Simplified polyfill for IE11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nconst fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nexport function getFunctionName(fn) {\n const match = `${fn}`.match(fnNameMatchRegex);\n const name = match && match[1];\n return name || '';\n}\nfunction getFunctionComponentName(Component, fallback = '') {\n return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n const functionName = getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE11 support\n */\nexport default function getDisplayName(Component) {\n if (Component == null) {\n return undefined;\n }\n if (typeof Component === 'string') {\n return Component;\n }\n if (typeof Component === 'function') {\n return getFunctionComponentName(Component, 'Component');\n }\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component === 'object') {\n switch (Component.$$typeof) {\n case ForwardRef:\n return getWrappedName(Component, Component.render, 'ForwardRef');\n case Memo:\n return getWrappedName(Component, Component.type, 'memo');\n default:\n return undefined;\n }\n }\n return undefined;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param {object} defaultProps\n * @param {object} props\n * @returns {object} resolved props\n */\nexport default function resolveProps(defaultProps, props) {\n const output = _extends({}, props);\n Object.keys(defaultProps).forEach(propName => {\n if (propName.toString().match(/^(components|slots)$/)) {\n output[propName] = _extends({}, defaultProps[propName], output[propName]);\n } else if (propName.toString().match(/^(componentsProps|slotProps)$/)) {\n const defaultSlotProps = defaultProps[propName] || {};\n const slotProps = props[propName];\n output[propName] = {};\n if (!slotProps || !Object.keys(slotProps)) {\n // Reduce the iteration if the slot props is empty\n output[propName] = defaultSlotProps;\n } else if (!defaultSlotProps || !Object.keys(defaultSlotProps)) {\n // Reduce the iteration if the default slot props is empty\n output[propName] = slotProps;\n } else {\n output[propName] = _extends({}, slotProps);\n Object.keys(defaultSlotProps).forEach(slotPropName => {\n output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName]);\n });\n }\n } else if (output[propName] === undefined) {\n output[propName] = defaultProps[propName];\n }\n });\n return output;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return instance => {\n refs.forEach(ref => {\n setRef(ref, instance);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n * const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n const ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = init(initArg);\n }\n return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n /* eslint-disable react-hooks/exhaustive-deps */\n React.useEffect(fn, EMPTY);\n /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from '../useLazyRef/useLazyRef';\nimport useOnMount from '../useOnMount/useOnMount';\nexport class Timeout {\n constructor() {\n this.currentId = null;\n this.clear = () => {\n if (this.currentId !== null) {\n clearTimeout(this.currentId);\n this.currentId = null;\n }\n };\n this.disposeEffect = () => {\n return this.clear;\n };\n }\n static create() {\n return new Timeout();\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(() => {\n this.currentId = null;\n fn();\n }, delay);\n }\n}\nexport default function useTimeout() {\n const timeout = useLazyRef(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ┌────────────────────────────────────────────────────────────┐ \\\\\n// │ Eve 0.5.4 - JavaScript Events Library │ \\\\\n// ├────────────────────────────────────────────────────────────┤ \\\\\n// │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\\\\n// └────────────────────────────────────────────────────────────┘ \\\\\n\n(function (glob) {\n var version = \"0.5.4\",\n has = \"hasOwnProperty\",\n separator = /[\\.\\/]/,\n comaseparator = /\\s*,\\s*/,\n wildcard = \"*\",\n numsort = function (a, b) {\n return a - b;\n },\n current_event,\n stop,\n events = {n: {}},\n firstDefined = function () {\n for (var i = 0, ii = this.length; i < ii; i++) {\n if (typeof this[i] != \"undefined\") {\n return this[i];\n }\n }\n },\n lastDefined = function () {\n var i = this.length;\n while (--i) {\n if (typeof this[i] != \"undefined\") {\n return this[i];\n }\n }\n },\n objtos = Object.prototype.toString,\n Str = String,\n isArray = Array.isArray || function (ar) {\n return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n },\n /*\\\n * eve\n [ method ]\n\n * Fires event with given `name`, given scope and other parameters.\n\n - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n - scope (object) context for the event handlers\n - varargs (...) the rest of arguments will be sent to event handlers\n\n = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n \\*/\n eve = function (name, scope) {\n var oldstop = stop,\n args = Array.prototype.slice.call(arguments, 2),\n listeners = eve.listeners(name),\n z = 0,\n l,\n indexed = [],\n queue = {},\n out = [],\n ce = current_event;\n out.firstDefined = firstDefined;\n out.lastDefined = lastDefined;\n current_event = name;\n stop = 0;\n for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n indexed.push(listeners[i].zIndex);\n if (listeners[i].zIndex < 0) {\n queue[listeners[i].zIndex] = listeners[i];\n }\n }\n indexed.sort(numsort);\n while (indexed[z] < 0) {\n l = queue[indexed[z++]];\n out.push(l.apply(scope, args));\n if (stop) {\n stop = oldstop;\n return out;\n }\n }\n for (i = 0; i < ii; i++) {\n l = listeners[i];\n if (\"zIndex\" in l) {\n if (l.zIndex == indexed[z]) {\n out.push(l.apply(scope, args));\n if (stop) {\n break;\n }\n do {\n z++;\n l = queue[indexed[z]];\n l && out.push(l.apply(scope, args));\n if (stop) {\n break;\n }\n } while (l)\n } else {\n queue[l.zIndex] = l;\n }\n } else {\n out.push(l.apply(scope, args));\n if (stop) {\n break;\n }\n }\n }\n stop = oldstop;\n current_event = ce;\n return out;\n };\n // Undocumented. Debug only.\n eve._events = events;\n /*\\\n * eve.listeners\n [ method ]\n\n * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n = (array) array of event handlers\n \\*/\n eve.listeners = function (name) {\n var names = isArray(name) ? name : name.split(separator),\n e = events,\n item,\n items,\n k,\n i,\n ii,\n j,\n jj,\n nes,\n es = [e],\n out = [];\n for (i = 0, ii = names.length; i < ii; i++) {\n nes = [];\n for (j = 0, jj = es.length; j < jj; j++) {\n e = es[j].n;\n items = [e[names[i]], e[wildcard]];\n k = 2;\n while (k--) {\n item = items[k];\n if (item) {\n nes.push(item);\n out = out.concat(item.f || []);\n }\n }\n }\n es = nes;\n }\n return out;\n };\n /*\\\n * eve.separator\n [ method ]\n\n * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours\n * here. Be aware that if you pass a string longer than one character it will be treated as\n * a list of characters.\n\n - separator (string) new separator. Empty string resets to default: `.` or `/`.\n \\*/\n eve.separator = function (sep) {\n if (sep) {\n sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n sep = \"[\" + sep + \"]\";\n separator = new RegExp(sep);\n } else {\n separator = /[\\.\\/]/;\n }\n };\n /*\\\n * eve.on\n [ method ]\n **\n * Binds given event handler with a given name. You can use wildcards “`*`” for the names:\n | eve.on(\"*.under.*\", f);\n | eve(\"mouse.under.floor\"); // triggers f\n * Use @eve to trigger the listener.\n **\n - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n - f (function) event handler function\n **\n - name (array) if you don’t want to use separators, you can use array of strings\n - f (function) event handler function\n **\n = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\n > Example:\n | eve.on(\"mouse\", eatIt)(2);\n | eve.on(\"mouse\", scream);\n | eve.on(\"mouse\", catchIt)(1);\n * This will ensure that `catchIt` function will be called before `eatIt`.\n *\n * If you want to put your handler before non-indexed handlers, specify a negative value.\n * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.\n \\*/\n eve.on = function (name, f) {\n if (typeof f != \"function\") {\n return function () {};\n }\n var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n for (var i = 0, ii = names.length; i < ii; i++) {\n (function (name) {\n var names = isArray(name) ? name : Str(name).split(separator),\n e = events,\n exist;\n for (var i = 0, ii = names.length; i < ii; i++) {\n e = e.n;\n e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n }\n e.f = e.f || [];\n for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n exist = true;\n break;\n }\n !exist && e.f.push(f);\n }(names[i]));\n }\n return function (zIndex) {\n if (+zIndex == +zIndex) {\n f.zIndex = +zIndex;\n }\n };\n };\n /*\\\n * eve.f\n [ method ]\n **\n * Returns function that will fire given event with optional arguments.\n * Arguments that will be passed to the result function will be also\n * concated to the list of final arguments.\n | el.onclick = eve.f(\"click\", 1, 2);\n | eve.on(\"click\", function (a, b, c) {\n | console.log(a, b, c); // 1, 2, [event object]\n | });\n - event (string) event name\n - varargs (…) and any other arguments\n = (function) possible event handler function\n \\*/\n eve.f = function (event) {\n var attrs = [].slice.call(arguments, 1);\n return function () {\n eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n };\n };\n /*\\\n * eve.stop\n [ method ]\n **\n * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n \\*/\n eve.stop = function () {\n stop = 1;\n };\n /*\\\n * eve.nt\n [ method ]\n **\n * Could be used inside event handler to figure out actual name of the event.\n **\n - subname (string) #optional subname of the event\n **\n = (string) name of the event, if `subname` is not specified\n * or\n = (boolean) `true`, if current event’s name contains `subname`\n \\*/\n eve.nt = function (subname) {\n var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n if (subname) {\n return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n }\n return cur;\n };\n /*\\\n * eve.nts\n [ method ]\n **\n * Could be used inside event handler to figure out actual name of the event.\n **\n **\n = (array) names of the event\n \\*/\n eve.nts = function () {\n return isArray(current_event) ? current_event : current_event.split(separator);\n };\n /*\\\n * eve.off\n [ method ]\n **\n * Removes given function from the list of event listeners assigned to given name.\n * If no arguments specified all the events will be cleared.\n **\n - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n - f (function) event handler function\n \\*/\n /*\\\n * eve.unbind\n [ method ]\n **\n * See @eve.off\n \\*/\n eve.off = eve.unbind = function (name, f) {\n if (!name) {\n eve._events = events = {n: {}};\n return;\n }\n var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n if (names.length > 1) {\n for (var i = 0, ii = names.length; i < ii; i++) {\n eve.off(names[i], f);\n }\n return;\n }\n names = isArray(name) ? name : Str(name).split(separator);\n var e,\n key,\n splice,\n i, ii, j, jj,\n cur = [events],\n inodes = [];\n for (i = 0, ii = names.length; i < ii; i++) {\n for (j = 0; j < cur.length; j += splice.length - 2) {\n splice = [j, 1];\n e = cur[j].n;\n if (names[i] != wildcard) {\n if (e[names[i]]) {\n splice.push(e[names[i]]);\n inodes.unshift({\n n: e,\n name: names[i]\n });\n }\n } else {\n for (key in e) if (e[has](key)) {\n splice.push(e[key]);\n inodes.unshift({\n n: e,\n name: key\n });\n }\n }\n cur.splice.apply(cur, splice);\n }\n }\n for (i = 0, ii = cur.length; i < ii; i++) {\n e = cur[i];\n while (e.n) {\n if (f) {\n if (e.f) {\n for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n e.f.splice(j, 1);\n break;\n }\n !e.f.length && delete e.f;\n }\n for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n var funcs = e.n[key].f;\n for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n funcs.splice(j, 1);\n break;\n }\n !funcs.length && delete e.n[key].f;\n }\n } else {\n delete e.f;\n for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n delete e.n[key].f;\n }\n }\n e = e.n;\n }\n }\n // prune inner nodes in path\n prune: for (i = 0, ii = inodes.length; i < ii; i++) {\n e = inodes[i];\n for (key in e.n[e.name].f) {\n // not empty (has listeners)\n continue prune;\n }\n for (key in e.n[e.name].n) {\n // not empty (has children)\n continue prune;\n }\n // is empty\n delete e.n[e.name];\n }\n };\n /*\\\n * eve.once\n [ method ]\n **\n * Binds given event handler with a given name to only run once then unbind itself.\n | eve.once(\"login\", f);\n | eve(\"login\"); // triggers f\n | eve(\"login\"); // no listeners\n * Use @eve to trigger the listener.\n **\n - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n - f (function) event handler function\n **\n = (function) same return function as @eve.on\n \\*/\n eve.once = function (name, f) {\n var f2 = function () {\n eve.off(name, f2);\n return f.apply(this, arguments);\n };\n return eve.on(name, f2);\n };\n /*\\\n * eve.version\n [ property (string) ]\n **\n * Current version of the library.\n \\*/\n eve.version = version;\n eve.toString = function () {\n return \"You are running Eve \" + version;\n };\n glob.eve = eve;\n typeof module != \"undefined\" && module.exports ? module.exports = eve : typeof define === \"function\" && define.amd ? define(\"eve\", [], function () { return eve; }) : glob.eve = eve;\n})(typeof window != \"undefined\" ? window : this);\n","'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","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\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 bigint: 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","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports['default'] = {\n slide: require('./menus/slide'),\n stack: require('./menus/stack'),\n elastic: require('./menus/elastic'),\n bubble: require('./menus/bubble'),\n push: require('./menus/push'),\n pushRotate: require('./menus/pushRotate'),\n scaleDown: require('./menus/scaleDown'),\n scaleRotate: require('./menus/scaleRotate'),\n fallDown: require('./menus/fallDown'),\n reveal: require('./menus/reveal')\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar BurgerIcon = (function (_Component) {\n _inherits(BurgerIcon, _Component);\n\n function BurgerIcon(props) {\n _classCallCheck(this, BurgerIcon);\n\n _get(Object.getPrototypeOf(BurgerIcon.prototype), 'constructor', this).call(this, props);\n this.state = {\n hover: false\n };\n }\n\n _createClass(BurgerIcon, [{\n key: 'getLineStyle',\n value: function getLineStyle(index) {\n return _extends({\n position: 'absolute',\n height: '20%',\n left: 0,\n right: 0,\n top: 20 * (index * 2) + '%',\n opacity: this.state.hover ? 0.6 : 1\n }, this.state.hover && this.props.styles.bmBurgerBarsHover);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this = this;\n\n var icon = undefined;\n var buttonStyle = {\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 1,\n width: '100%',\n height: '100%',\n margin: 0,\n padding: 0,\n border: 'none',\n fontSize: 0,\n background: 'transparent',\n cursor: 'pointer'\n };\n\n if (this.props.customIcon) {\n var extraProps = {\n className: ('bm-icon ' + (this.props.customIcon.props.className || '')).trim(),\n style: _extends({ width: '100%', height: '100%' }, this.props.styles.bmIcon)\n };\n icon = _react2['default'].cloneElement(this.props.customIcon, extraProps);\n } else {\n icon = _react2['default'].createElement(\n 'span',\n null,\n [0, 1, 2].map(function (bar) {\n return _react2['default'].createElement('span', {\n key: bar,\n className: ('bm-burger-bars ' + _this.props.barClassName + ' ' + (_this.state.hover ? 'bm-burger-bars-hover' : '')).trim(),\n style: _extends({}, _this.getLineStyle(bar), _this.props.styles.bmBurgerBars)\n });\n })\n );\n }\n\n return _react2['default'].createElement(\n 'div',\n {\n className: ('bm-burger-button ' + this.props.className).trim(),\n style: _extends({ zIndex: 1000 }, this.props.styles.bmBurgerButton)\n },\n _react2['default'].createElement(\n 'button',\n {\n type: 'button',\n id: 'react-burger-menu-btn',\n onClick: this.props.onClick,\n onMouseOver: function () {\n _this.setState({ hover: true });\n if (_this.props.onIconHoverChange) {\n _this.props.onIconHoverChange({ isMouseIn: true });\n }\n },\n onMouseOut: function () {\n _this.setState({ hover: false });\n if (_this.props.onIconHoverChange) {\n _this.props.onIconHoverChange({ isMouseIn: false });\n }\n },\n style: buttonStyle\n },\n 'Open Menu'\n ),\n icon\n );\n }\n }]);\n\n return BurgerIcon;\n})(_react.Component);\n\nexports['default'] = BurgerIcon;\n\nBurgerIcon.propTypes = {\n barClassName: _propTypes2['default'].string,\n customIcon: _propTypes2['default'].element,\n styles: _propTypes2['default'].object\n};\n\nBurgerIcon.defaultProps = {\n barClassName: '',\n className: '',\n styles: {}\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\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\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar CrossIcon = (function (_Component) {\n _inherits(CrossIcon, _Component);\n\n function CrossIcon() {\n _classCallCheck(this, CrossIcon);\n\n _get(Object.getPrototypeOf(CrossIcon.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(CrossIcon, [{\n key: 'getCrossStyle',\n value: function getCrossStyle(type) {\n return {\n position: 'absolute',\n width: 3,\n height: 14,\n transform: type === 'before' ? 'rotate(45deg)' : 'rotate(-45deg)'\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _this = this;\n\n var icon;\n var buttonWrapperStyle = {\n position: 'absolute',\n width: 24,\n height: 24,\n right: 8,\n top: 8\n };\n var buttonStyle = {\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 1,\n width: '100%',\n height: '100%',\n margin: 0,\n padding: 0,\n border: 'none',\n fontSize: 0,\n background: 'transparent',\n cursor: 'pointer'\n };\n\n if (this.props.customIcon) {\n var extraProps = {\n className: ('bm-cross ' + (this.props.customIcon.props.className || '')).trim(),\n style: _extends({ width: '100%', height: '100%' }, this.props.styles.bmCross)\n };\n icon = _react2['default'].cloneElement(this.props.customIcon, extraProps);\n } else {\n icon = _react2['default'].createElement(\n 'span',\n { style: { position: 'absolute', top: '6px', right: '14px' } },\n ['before', 'after'].map(function (type, i) {\n return _react2['default'].createElement('span', {\n key: i,\n className: ('bm-cross ' + _this.props.crossClassName).trim(),\n style: _extends({}, _this.getCrossStyle(type), _this.props.styles.bmCross)\n });\n })\n );\n }\n\n return _react2['default'].createElement(\n 'div',\n {\n className: ('bm-cross-button ' + this.props.className).trim(),\n style: _extends({}, buttonWrapperStyle, this.props.styles.bmCrossButton)\n },\n _react2['default'].createElement(\n 'button',\n _extends({\n type: 'button',\n id: 'react-burger-cross-btn',\n onClick: this.props.onClick,\n style: buttonStyle\n }, !this.props.isOpen && { tabIndex: -1 }),\n 'Close Menu'\n ),\n icon\n );\n }\n }]);\n\n return CrossIcon;\n})(_react.Component);\n\nexports['default'] = CrossIcon;\n\nCrossIcon.propTypes = {\n crossClassName: _propTypes2['default'].string,\n customIcon: _propTypes2['default'].element,\n isOpen: _propTypes2['default'].bool,\n styles: _propTypes2['default'].object\n};\n\nCrossIcon.defaultProps = {\n crossClassName: '',\n className: '',\n styles: {},\n isOpen: false\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar styles = {\n overlay: function overlay(isOpen) {\n return {\n position: 'fixed',\n zIndex: 1000,\n width: '100%',\n height: '100%',\n background: 'rgba(0, 0, 0, 0.3)',\n opacity: isOpen ? 1 : 0,\n MozTransform: isOpen ? '' : 'translate3d(100%, 0, 0)',\n MsTransform: isOpen ? '' : 'translate3d(100%, 0, 0)',\n OTransform: isOpen ? '' : 'translate3d(100%, 0, 0)',\n WebkitTransform: isOpen ? '' : 'translate3d(100%, 0, 0)',\n transform: isOpen ? '' : 'translate3d(100%, 0, 0)',\n transition: isOpen ? 'opacity 0.3s' : 'opacity 0.3s, transform 0s 0.3s'\n };\n },\n\n menuWrap: function menuWrap(isOpen, width, right) {\n return {\n position: 'fixed',\n right: right ? 0 : 'inherit',\n zIndex: 1100,\n width: width,\n height: '100%',\n MozTransform: isOpen ? '' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transition: 'all 0.5s'\n };\n },\n\n menu: function menu() {\n return {\n height: '100%',\n boxSizing: 'border-box',\n overflow: 'auto'\n };\n },\n\n itemList: function itemList() {\n return {\n height: '100%'\n };\n },\n\n item: function item() {\n return {\n display: 'block'\n };\n }\n};\n\nexports['default'] = styles;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.focusOnFirstMenuItem = focusOnFirstMenuItem;\nexports.focusOnLastMenuItem = focusOnLastMenuItem;\nexports.focusOnCrossButton = focusOnCrossButton;\nexports.focusOnMenuButton = focusOnMenuButton;\nexports.focusOnMenuItem = focusOnMenuItem;\nexports.focusOnNextMenuItem = focusOnNextMenuItem;\nexports.focusOnPreviousMenuItem = focusOnPreviousMenuItem;\n\nfunction focusOnFirstMenuItem() {\n var firstItem = Array.from(document.getElementsByClassName('bm-item')).shift();\n if (firstItem) {\n firstItem.focus();\n }\n}\n\nfunction focusOnLastMenuItem() {\n var lastItem = Array.from(document.getElementsByClassName('bm-item')).pop();\n if (lastItem) {\n lastItem.focus();\n }\n}\n\nfunction focusOnCrossButton() {\n var crossButton = document.getElementById('react-burger-cross-btn');\n if (crossButton) {\n crossButton.focus();\n }\n}\n\nfunction focusOnMenuButton() {\n var menuButton = document.getElementById('react-burger-menu-btn');\n if (menuButton) {\n menuButton.focus();\n }\n}\n\nfunction focusOnMenuItem(siblingType) {\n if (document.activeElement.className.includes('bm-item')) {\n var sibling = document.activeElement[siblingType];\n if (sibling) {\n sibling.focus();\n } else {\n focusOnCrossButton();\n }\n } else {\n if (siblingType === 'previousElementSibling') {\n focusOnLastMenuItem();\n } else {\n focusOnFirstMenuItem();\n }\n }\n}\n\nfunction focusOnNextMenuItem() {\n focusOnMenuItem('nextElementSibling');\n}\n\nfunction focusOnPreviousMenuItem() {\n focusOnMenuItem('previousElementSibling');\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nexports['default'] = function () {\n var Snap = undefined;\n try {\n Snap = require('snapsvg-cjs');\n } finally {\n return Snap;\n }\n};\n\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar pxToNum = function pxToNum(val) {\n return parseInt(val.slice(0, -2), 10);\n};\nexports.pxToNum = pxToNum;","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _helpersBaseStyles = require('./helpers/baseStyles');\n\nvar _helpersBaseStyles2 = _interopRequireDefault(_helpersBaseStyles);\n\nvar _helpersDom = require('./helpers/dom');\n\nvar _componentsBurgerIcon = require('./components/BurgerIcon');\n\nvar _componentsBurgerIcon2 = _interopRequireDefault(_componentsBurgerIcon);\n\nvar _componentsCrossIcon = require('./components/CrossIcon');\n\nvar _componentsCrossIcon2 = _interopRequireDefault(_componentsCrossIcon);\n\nexports['default'] = function (styles) {\n if (!styles) {\n throw new Error('No styles supplied');\n }\n\n var ARROW_DOWN = 'ArrowDown';\n var ARROW_UP = 'ArrowUp';\n var ESCAPE = 'Escape';\n var SPACE = ' ';\n var HOME = 'Home';\n var END = 'End';\n\n function usePrevious(value) {\n var ref = _react2['default'].useRef(value);\n _react2['default'].useEffect(function () {\n ref.current = value;\n });\n return ref.current;\n }\n\n var Menu = function Menu(props) {\n var defaultProps = {\n bodyClassName: '',\n burgerBarClassName: '',\n burgerButtonClassName: '',\n className: '',\n crossButtonClassName: '',\n crossClassName: '',\n disableAutoFocus: false,\n disableCloseOnEsc: false,\n htmlClassName: '',\n id: '',\n itemClassName: '',\n itemListClassName: '',\n menuClassName: '',\n morphShapeClassName: '',\n noOverlay: false,\n noTransition: false,\n onStateChange: function onStateChange() {},\n outerContainerId: '',\n overlayClassName: '',\n pageWrapId: '',\n styles: {},\n width: 300,\n onIconHoverChange: function onIconHoverChange() {},\n itemListElement: 'nav'\n };\n props = _extends({}, defaultProps, props);\n\n var _React$useState = _react2['default'].useState(false);\n\n var _React$useState2 = _slicedToArray(_React$useState, 2);\n\n var isOpen = _React$useState2[0];\n var setIsOpen = _React$useState2[1];\n\n var timeoutId = _react2['default'].useRef();\n var toggleOptions = _react2['default'].useRef({});\n var prevIsOpenProp = usePrevious(props.isOpen);\n\n _react2['default'].useEffect(function () {\n if (props.isOpen) {\n toggleMenu({ isOpen: true, noStateChange: true });\n }\n\n return function cleanup() {\n applyWrapperStyles(false);\n clearCurrentTimeout();\n };\n }, []);\n\n _react2['default'].useEffect(function () {\n var wasToggled = typeof props.isOpen !== 'undefined' && props.isOpen !== isOpen && props.isOpen !== prevIsOpenProp;\n\n if (wasToggled) {\n toggleMenu();\n // Toggling changes SVG animation requirements, so defer these until next update\n return;\n }\n\n if (styles.svg) {\n (function () {\n var morphShape = document.getElementById('bm-morph-shape');\n var path = styles.svg.lib(morphShape).select('path');\n\n if (isOpen) {\n // Animate SVG path\n styles.svg.animate(path);\n } else {\n // Reset path (timeout ensures animation happens off screen)\n setTimeout(function () {\n path.attr('d', styles.svg.pathInitial);\n }, 300);\n }\n })();\n }\n });\n\n _react2['default'].useEffect(function () {\n var _toggleOptions$current = toggleOptions.current;\n var noStateChange = _toggleOptions$current.noStateChange;\n var focusOnLastItem = _toggleOptions$current.focusOnLastItem;\n\n if (!noStateChange) {\n props.onStateChange({ isOpen: isOpen });\n }\n\n if (!props.disableAutoFocus) {\n // For accessibility reasons, ensures that when we toggle open,\n // we focus the first or last menu item according to given parameter\n if (isOpen) {\n focusOnLastItem ? (0, _helpersDom.focusOnLastMenuItem)() : (0, _helpersDom.focusOnFirstMenuItem)();\n } else {\n if (document.activeElement) {\n document.activeElement.blur();\n } else {\n document.body.blur(); // Needed for IE\n }\n }\n }\n\n // Timeout ensures wrappers are cleared after animation finishes\n clearCurrentTimeout();\n timeoutId.current = setTimeout(function () {\n timeoutId.current = null;\n if (!isOpen) {\n applyWrapperStyles(false);\n }\n }, 500);\n\n // Bind keydown handlers (or custom function if supplied)\n var defaultOnKeyDown = isOpen ? onKeyDownOpen : onKeyDownClosed;\n var onKeyDown = props.customOnKeyDown || defaultOnKeyDown;\n window.addEventListener('keydown', onKeyDown);\n\n return function cleanup() {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen]);\n\n function toggleMenu() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n toggleOptions.current = options;\n\n applyWrapperStyles();\n\n // Ensures wrapper styles are applied before the menu is toggled\n setTimeout(function () {\n setIsOpen(function (open) {\n return typeof options.isOpen !== 'undefined' ? options.isOpen : !open;\n });\n });\n }\n\n function open() {\n if (typeof props.onOpen === 'function') {\n props.onOpen();\n } else {\n toggleMenu();\n }\n }\n\n function close() {\n if (typeof props.onClose === 'function') {\n props.onClose();\n } else {\n toggleMenu();\n }\n }\n\n function getStyle(style, index) {\n var _props = props;\n var width = _props.width;\n var right = _props.right;\n\n var formattedWidth = typeof width !== 'string' ? width + 'px' : width;\n return style(isOpen, formattedWidth, right, index);\n }\n\n // Builds styles incrementally for a given element\n function getStyles(el, index, inline) {\n var propName = 'bm' + el.replace(el.charAt(0), el.charAt(0).toUpperCase());\n\n // Set base styles\n var output = _helpersBaseStyles2['default'][el] ? getStyle(_helpersBaseStyles2['default'][el]) : {};\n\n // Add animation-specific styles\n if (styles[el]) {\n output = _extends({}, output, getStyle(styles[el], index + 1));\n }\n\n // Add custom styles\n if (props.styles[propName]) {\n output = _extends({}, output, props.styles[propName]);\n }\n\n // Add element inline styles\n if (inline) {\n output = _extends({}, output, inline);\n }\n\n // Remove transition if required\n // (useful if rendering open initially)\n if (props.noTransition) {\n delete output.transition;\n }\n\n return output;\n }\n\n // Sets or unsets styles on DOM elements outside the menu component\n // This is necessary for correct page interaction with some of the menus\n // Throws and returns if the required external elements don't exist,\n // which means any external page animations won't be applied\n function handleExternalWrapper(id, wrapperStyles, set) {\n var wrapper = document.getElementById(id);\n\n if (!wrapper) {\n console.error(\"Element with ID '\" + id + \"' not found\");\n return;\n }\n\n var builtStyles = getStyle(wrapperStyles);\n\n for (var prop in builtStyles) {\n if (builtStyles.hasOwnProperty(prop)) {\n wrapper.style[prop] = set ? builtStyles[prop] : '';\n }\n }\n\n // Prevent any horizontal scroll\n // Only set overflow-x as an inline style if htmlClassName or\n // bodyClassName is not passed in. Otherwise, it is up to the caller to\n // decide if they want to set the overflow style in CSS using the custom\n // class names\n var applyOverflow = function applyOverflow(el) {\n return el.style['overflow-x'] = set ? 'hidden' : '';\n };\n if (!props.htmlClassName) {\n applyOverflow(document.querySelector('html'));\n }\n if (!props.bodyClassName) {\n applyOverflow(document.querySelector('body'));\n }\n }\n\n // Applies component-specific styles to external wrapper elements\n function applyWrapperStyles() {\n var set = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\n var applyClass = function applyClass(el, className) {\n return el.classList[set ? 'add' : 'remove'](className);\n };\n\n if (props.htmlClassName) {\n applyClass(document.querySelector('html'), props.htmlClassName);\n }\n if (props.bodyClassName) {\n applyClass(document.querySelector('body'), props.bodyClassName);\n }\n\n if (styles.pageWrap && props.pageWrapId) {\n handleExternalWrapper(props.pageWrapId, styles.pageWrap, set);\n }\n\n if (styles.outerContainer && props.outerContainerId) {\n handleExternalWrapper(props.outerContainerId, styles.outerContainer, set);\n }\n\n var menuWrap = document.querySelector('.bm-menu-wrap');\n if (menuWrap) {\n if (set) {\n menuWrap.removeAttribute('hidden');\n } else {\n menuWrap.setAttribute('hidden', true);\n }\n }\n }\n\n // Avoids potentially attempting to update an unmounted component\n function clearCurrentTimeout() {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n }\n\n function onKeyDownOpen(e) {\n e = e || window.event;\n switch (e.key) {\n case ESCAPE:\n // Close on ESC, unless disabled\n if (!props.disableCloseOnEsc) {\n close();\n (0, _helpersDom.focusOnMenuButton)();\n }\n break;\n case ARROW_DOWN:\n (0, _helpersDom.focusOnNextMenuItem)();\n break;\n case ARROW_UP:\n (0, _helpersDom.focusOnPreviousMenuItem)();\n break;\n case HOME:\n (0, _helpersDom.focusOnFirstMenuItem)();\n break;\n case END:\n (0, _helpersDom.focusOnLastMenuItem)();\n break;\n }\n }\n\n function onKeyDownClosed(e) {\n e = e || window.event;\n // Key downs came from menu button\n if (e.target === document.getElementById('react-burger-menu-btn')) {\n switch (e.key) {\n case ARROW_DOWN:\n case SPACE:\n // If down arrow, space or enter, open menu and focus on first menuitem\n toggleMenu();\n break;\n case ARROW_UP:\n // If arrow up, open menu and focus on last menuitem\n toggleMenu({ focusOnLastItem: true });\n break;\n }\n }\n }\n\n function handleOverlayClick() {\n if (props.disableOverlayClick === true || typeof props.disableOverlayClick === 'function' && props.disableOverlayClick()) {\n return;\n } else {\n close();\n }\n }\n\n return _react2['default'].createElement(\n 'div',\n null,\n !props.noOverlay && _react2['default'].createElement('div', {\n className: ('bm-overlay ' + props.overlayClassName).trim(),\n onClick: handleOverlayClick,\n style: getStyles('overlay')\n }),\n props.customBurgerIcon !== false && _react2['default'].createElement(\n 'div',\n { style: getStyles('burgerIcon') },\n _react2['default'].createElement(_componentsBurgerIcon2['default'], {\n onClick: open,\n styles: props.styles,\n customIcon: props.customBurgerIcon,\n className: props.burgerButtonClassName,\n barClassName: props.burgerBarClassName,\n onIconStateChange: props.onIconStateChange\n })\n ),\n _react2['default'].createElement(\n 'div',\n {\n id: props.id,\n className: ('bm-menu-wrap ' + props.className).trim(),\n style: getStyles('menuWrap'),\n 'aria-hidden': !isOpen\n },\n styles.svg && _react2['default'].createElement(\n 'div',\n {\n id: 'bm-morph-shape',\n className: ('bm-morph-shape ' + props.morphShapeClassName).trim(),\n style: getStyles('morphShape')\n },\n _react2['default'].createElement(\n 'svg',\n {\n width: '100%',\n height: '100%',\n viewBox: '0 0 100 800',\n preserveAspectRatio: 'none'\n },\n _react2['default'].createElement('path', { d: styles.svg.pathInitial })\n )\n ),\n _react2['default'].createElement(\n 'div',\n {\n className: ('bm-menu ' + props.menuClassName).trim(),\n style: getStyles('menu')\n },\n _react2['default'].createElement(props.itemListElement, {\n className: ('bm-item-list ' + props.itemListClassName).trim(),\n style: getStyles('itemList')\n }, _react2['default'].Children.map(props.children, function (item, index) {\n if (item) {\n var classList = ['bm-item', props.itemClassName, item.props.className].filter(function (className) {\n return !!className;\n }).join(' ');\n var extraProps = _extends({\n key: index,\n className: classList,\n style: getStyles('item', index, item.props.style)\n }, !isOpen && { tabIndex: -1 });\n return _react2['default'].cloneElement(item, extraProps);\n }\n }))\n ),\n props.customCrossIcon !== false && _react2['default'].createElement(\n 'div',\n { style: getStyles('closeButton') },\n _react2['default'].createElement(_componentsCrossIcon2['default'], {\n onClick: close,\n styles: props.styles,\n customIcon: props.customCrossIcon,\n className: props.crossButtonClassName,\n crossClassName: props.crossClassName,\n isOpen: isOpen\n })\n )\n )\n );\n };\n\n Menu.propTypes = {\n bodyClassName: _propTypes2['default'].string,\n burgerBarClassName: _propTypes2['default'].string,\n burgerButtonClassName: _propTypes2['default'].string,\n className: _propTypes2['default'].string,\n crossButtonClassName: _propTypes2['default'].string,\n crossClassName: _propTypes2['default'].string,\n customBurgerIcon: _propTypes2['default'].oneOfType([_propTypes2['default'].element, _propTypes2['default'].oneOf([false])]),\n customCrossIcon: _propTypes2['default'].oneOfType([_propTypes2['default'].element, _propTypes2['default'].oneOf([false])]),\n customOnKeyDown: _propTypes2['default'].func,\n disableAutoFocus: _propTypes2['default'].bool,\n disableCloseOnEsc: _propTypes2['default'].bool,\n disableOverlayClick: _propTypes2['default'].oneOfType([_propTypes2['default'].bool, _propTypes2['default'].func]),\n htmlClassName: _propTypes2['default'].string,\n id: _propTypes2['default'].string,\n isOpen: _propTypes2['default'].bool,\n itemClassName: _propTypes2['default'].string,\n itemListClassName: _propTypes2['default'].string,\n itemListElement: _propTypes2['default'].oneOf(['div', 'nav']),\n menuClassName: _propTypes2['default'].string,\n morphShapeClassName: _propTypes2['default'].string,\n noOverlay: _propTypes2['default'].bool,\n noTransition: _propTypes2['default'].bool,\n onClose: _propTypes2['default'].func,\n onIconHoverChange: _propTypes2['default'].func,\n onOpen: _propTypes2['default'].func,\n onStateChange: _propTypes2['default'].func,\n outerContainerId: styles && styles.outerContainer ? _propTypes2['default'].string.isRequired : _propTypes2['default'].string,\n overlayClassName: _propTypes2['default'].string,\n pageWrapId: styles && styles.pageWrap ? _propTypes2['default'].string.isRequired : _propTypes2['default'].string,\n right: _propTypes2['default'].bool,\n styles: _propTypes2['default'].object,\n width: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].string])\n };\n\n return Menu;\n};\n\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersSnapsvgImporter = require('../helpers/snapsvgImporter');\n\nvar _helpersSnapsvgImporter2 = _interopRequireDefault(_helpersSnapsvgImporter);\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar _helpersUtils = require('../helpers/utils');\n\nvar BUBBLE_WIDTH = 140;\n\nvar styles = {\n svg: {\n lib: _helpersSnapsvgImporter2['default'],\n pathInitial: 'M-7.312,0H0c0,0,0,113.839,0,400c0,264.506,0,400,0,400h-7.312V0z',\n pathOpen: 'M-7.312,0H15c0,0,66,113.339,66,399.5C81,664.006,15,800,15,800H-7.312V0z;M-7.312,0H100c0,0,0,113.839,0,400c0,264.506,0,400,0,400H-7.312V0z',\n animate: function animate(path) {\n var pos = 0;\n var steps = this.pathOpen.split(';');\n var stepsTotal = steps.length;\n var mina = window.mina;\n\n var nextStep = function nextStep() {\n if (pos > stepsTotal - 1) return;\n\n path.animate({ path: steps[pos] }, pos === 0 ? 400 : 500, pos === 0 ? mina.easein : mina.elastic, function () {\n nextStep();\n });\n\n pos++;\n };\n\n nextStep();\n }\n },\n\n morphShape: function morphShape(isOpen, width, right) {\n return {\n position: 'absolute',\n width: '100%',\n height: '100%',\n right: right ? 'inherit' : 0,\n left: right ? 0 : 'inherit',\n MozTransform: right ? 'rotateY(180deg)' : 'rotateY(0deg)',\n MsTransform: right ? 'rotateY(180deg)' : 'rotateY(0deg)',\n OTransform: right ? 'rotateY(180deg)' : 'rotateY(0deg)',\n WebkitTransform: right ? 'rotateY(180deg)' : 'rotateY(0deg)',\n transform: right ? 'rotateY(180deg)' : 'rotateY(0deg)'\n };\n },\n\n menuWrap: function menuWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n MsTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n OTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n WebkitTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transition: isOpen ? 'transform 0.4s 0s' : 'transform 0.4s'\n };\n },\n\n menu: function menu(isOpen, width, right) {\n var finalWidth = (0, _helpersUtils.pxToNum)(width) - BUBBLE_WIDTH;\n return {\n position: 'fixed',\n MozTransform: isOpen ? '' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transition: isOpen ? 'opacity 0.1s 0.4s cubic-bezier(.17, .67, .1, 1.27), transform 0.1s 0.4s cubic-bezier(.17, .67, .1, 1.27)' : 'opacity 0s 0.3s cubic-bezier(.17, .67, .1, 1.27), transform 0s 0.3s cubic-bezier(.17, .67, .1, 1.27)',\n opacity: isOpen ? 1 : 0\n };\n },\n\n item: function item(isOpen, width, right, nthChild) {\n var finalWidth = (0, _helpersUtils.pxToNum)(width) - BUBBLE_WIDTH;\n return {\n MozTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n MsTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n OTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n WebkitTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transition: isOpen ? 'opacity 0.3s 0.4s, transform 0.3s 0.4s' : 'opacity 0s 0.3s cubic-bezier(.17, .67, .1, 1.27), transform 0s 0.3s cubic-bezier(.17, .67, .1, 1.27)',\n opacity: isOpen ? 1 : 0\n };\n },\n\n closeButton: function closeButton(isOpen, width, right) {\n var finalWidth = (0, _helpersUtils.pxToNum)(width) - BUBBLE_WIDTH;\n return {\n MozTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n MsTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n OTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n WebkitTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(' + finalWidth + ', 0, 0)' : 'translate3d(-' + finalWidth + ', 0, 0)',\n transition: isOpen ? 'opacity 0.3s 0.4s cubic-bezier(.17, .67, .1, 1.27), transform 0.3s 0.4s cubic-bezier(.17, .67, .1, 1.27)' : 'opacity 0s 0.3s cubic-bezier(.17, .67, .1, 1.27), transform 0s 0.3s cubic-bezier(.17, .67, .1, 1.27)',\n opacity: isOpen ? 1 : 0\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersSnapsvgImporter = require('../helpers/snapsvgImporter');\n\nvar _helpersSnapsvgImporter2 = _interopRequireDefault(_helpersSnapsvgImporter);\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar _helpersUtils = require('../helpers/utils');\n\nvar MORPH_SHAPE_WIDTH = 120;\n\nvar styles = {\n svg: {\n lib: _helpersSnapsvgImporter2['default'],\n pathInitial: 'M-1,0h101c0,0-97.833,153.603-97.833,396.167C2.167,627.579,100,800,100,800H-1V0z',\n pathOpen: 'M-1,0h101c0,0,0-1,0,395c0,404,0,405,0,405H-1V0z',\n animate: function animate(path) {\n path.animate({ path: this.pathOpen }, 400, window.mina.easeinout);\n }\n },\n\n morphShape: function morphShape(isOpen, width, right) {\n return {\n position: 'absolute',\n width: MORPH_SHAPE_WIDTH,\n height: '100%',\n right: right ? 'inherit' : 0,\n left: right ? 0 : 'inherit',\n MozTransform: right ? 'rotateY(180deg)' : '',\n MsTransform: right ? 'rotateY(180deg)' : '',\n OTransform: right ? 'rotateY(180deg)' : '',\n WebkitTransform: right ? 'rotateY(180deg)' : '',\n transform: right ? 'rotateY(180deg)' : ''\n };\n },\n\n menuWrap: function menuWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n MsTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n OTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n WebkitTransform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transform: isOpen ? 'translate3d(0, 0, 0)' : right ? 'translate3d(100%, 0, 0)' : 'translate3d(-100%, 0, 0)',\n transition: 'all 0.3s'\n };\n },\n\n menu: function menu(isOpen, width, right) {\n return {\n position: 'fixed',\n right: right ? 0 : 'inherit',\n width: (0, _helpersUtils.pxToNum)(width) - MORPH_SHAPE_WIDTH,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n overflow: 'visible'\n };\n },\n\n itemList: function itemList(isOpen, width, right) {\n if (right) {\n return {\n position: 'relative',\n left: '-110px',\n width: '170%',\n overflow: 'auto'\n };\n }\n },\n\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, 0)' : 'translate3d(100px, 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, 0)' : 'translate3d(100px, 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, 0)' : 'translate3d(100px, 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, 0)' : 'translate3d(100px, 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(-100px, 0, 0)' : 'translate3d(100px, 0, 0)',\n transition: isOpen ? 'all 0.3s' : 'all 0.3s 0.1s'\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n menuWrap: function menuWrap(isOpen) {\n return {\n MozTransform: isOpen ? '' : 'translate3d(0, -100%, 0)',\n MsTransform: isOpen ? '' : 'translate3d(0, -100%, 0)',\n OTransform: isOpen ? '' : 'translate3d(0, -100%, 0)',\n WebkitTransform: isOpen ? '' : 'translate3d(0, -100%, 0)',\n transform: isOpen ? '' : 'translate3d(0, -100%, 0)',\n transition: 'all 0.5s ease-in-out'\n };\n },\n\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transition: 'all 0.5s'\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n perspective: '1500px',\n perspectiveOrigin: '0% 50%',\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transition: 'all 0.5s'\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0) rotateY(15deg)' : 'translate3d(' + width + ', 0, 0) rotateY(-15deg)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0) rotateY(15deg)' : 'translate3d(' + width + ', 0, 0) rotateY(-15deg)',\n OTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0) rotateY(15deg)' : 'translate3d(' + width + ', 0, 0) rotateY(-15deg)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0) rotateY(15deg)' : 'translate3d(' + width + ', 0, 0) rotateY(-15deg)',\n transform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0) rotateY(15deg)' : 'translate3d(' + width + ', 0, 0) rotateY(-15deg)',\n transformOrigin: right ? '100% 50%' : '0% 50%',\n transformStyle: 'preserve-3d',\n transition: 'all 0.5s'\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n perspective: '1500px',\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n menuWrap: function menuWrap(isOpen, width, right) {\n return {\n MozTransform: 'translate3d(0, 0, 0)',\n MsTransform: 'translate3d(0, 0, 0)',\n OTransform: 'translate3d(0, 0, 0)',\n WebkitTransform: 'translate3d(0, 0, 0)',\n transform: 'translate3d(0, 0, 0)',\n zIndex: isOpen ? 1000 : -1\n };\n },\n\n overlay: function overlay(isOpen, width, right) {\n return {\n zIndex: 1400,\n MozTransform: isOpen ? right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n MsTransform: isOpen ? right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n OTransform: isOpen ? right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n WebkitTransform: isOpen ? right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n transform: isOpen ? right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n transition: 'all 0.5s',\n visibility: isOpen ? 'visible' : 'hidden'\n };\n },\n\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(-' + width + ', 0, 0)' : 'translate3d(' + width + ', 0, 0)',\n transition: 'all 0.5s',\n zIndex: 1200,\n position: 'relative'\n };\n },\n\n burgerIcon: function burgerIcon(isOpen, width, right) {\n return {\n MozTransform: isOpen ? right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n MsTransform: isOpen ? right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n OTransform: isOpen ? right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n WebkitTransform: isOpen ? right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n transform: isOpen ? right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)' : 'translate3d(0, 0, 0)',\n transition: 'all 0.1s',\n position: 'relative',\n zIndex: 1300\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n pageWrap: function pageWrap(isOpen, width) {\n return {\n MozTransform: isOpen ? '' : 'translate3d(0, 0, -' + width + ')',\n MsTransform: isOpen ? '' : 'translate3d(0, 0, -' + width + ')',\n OTransform: isOpen ? '' : 'translate3d(0, 0, -' + width + ')',\n WebkitTransform: isOpen ? '' : 'translate3d(0, 0, -' + width + ')',\n transform: isOpen ? '' : 'translate3d(0, 0, -' + width + ')',\n transformOrigin: '100%',\n transformStyle: 'preserve-3d',\n transition: 'all 0.5s'\n };\n },\n\n outerContainer: function outerContainer() {\n return {\n perspective: '1500px'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n pageWrap: function pageWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, -600px) rotateY(20deg)' : 'translate3d(100px, 0, -600px) rotateY(-20deg)',\n MsTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, -600px) rotateY(20deg)' : 'translate3d(100px, 0, -600px) rotateY(-20deg)',\n OTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, -600px) rotateY(20deg)' : 'translate3d(100px, 0, -600px) rotateY(-20deg)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(-100px, 0, -600px) rotateY(20deg)' : 'translate3d(100px, 0, -600px) rotateY(-20deg)',\n transform: isOpen ? '' : right ? 'translate3d(-100px, 0, -600px) rotateY(20deg)' : 'translate3d(100px, 0, -600px) rotateY(-20deg)',\n transformStyle: 'preserve-3d',\n transition: 'all 0.5s',\n overflow: isOpen ? '' : 'hidden'\n };\n },\n\n outerContainer: function outerContainer(isOpen) {\n return {\n perspective: '1500px',\n overflow: isOpen ? '' : 'hidden'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _menuFactory = require('../menuFactory');\n\nvar _menuFactory2 = _interopRequireDefault(_menuFactory);\n\nvar styles = {\n menuWrap: function menuWrap(isOpen, width, right) {\n return {\n MozTransform: isOpen ? '' : right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)',\n MsTransform: isOpen ? '' : right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)',\n OTransform: isOpen ? '' : right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)',\n WebkitTransform: isOpen ? '' : right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)',\n transform: isOpen ? '' : right ? 'translate3d(' + width + ', 0, 0)' : 'translate3d(-' + width + ', 0, 0)',\n transition: isOpen ? 'transform 0.8s cubic-bezier(0.7, 0, 0.3, 1)' : 'transform 0.4s cubic-bezier(0.7, 0, 0.3, 1)'\n };\n },\n\n item: function item(isOpen, width, right, nthChild) {\n return {\n MozTransform: isOpen ? '' : 'translate3d(0, ' + nthChild * 500 + 'px, 0)',\n MsTransform: isOpen ? '' : 'translate3d(0, ' + nthChild * 500 + 'px, 0)',\n OTransform: isOpen ? '' : 'translate3d(0, ' + nthChild * 500 + 'px, 0)',\n WebkitTransform: isOpen ? '' : 'translate3d(0, ' + nthChild * 500 + 'px, 0)',\n transform: isOpen ? '' : 'translate3d(0, ' + nthChild * 500 + 'px, 0)',\n transition: isOpen ? 'transform 0.8s cubic-bezier(0.7, 0, 0.3, 1)' : 'transform 0s 0.2s cubic-bezier(0.7, 0, 0.3, 1)'\n };\n }\n};\n\nexports['default'] = (0, _menuFactory2['default'])(styles);\nmodule.exports = exports['default'];","/**\n * @license React\n * react-dom.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 Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var supportsCaptureOption = false;\n function setHasSupportToCaptureOption(hasSupport) {\n supportsCaptureOption = hasSupport;\n }\n\n try {\n addEventListener('test', null, Object.defineProperty({}, 'capture', { get: function get() {\n setHasSupportToCaptureOption(true);\n } }));\n } catch (e) {} // eslint-disable-line no-empty\n\n function getSafeEventHandlerOpts() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { capture: true };\n\n return supportsCaptureOption ? options : options.capture;\n }\n\n /**\n * [getPosition returns a position element that works for mouse or touch events]\n * @param {[Event]} event [the received event]\n * @return {[Object]} [x and y coords]\n */\n function getPosition(event) {\n if ('touches' in event) {\n var _event$touches$ = event.touches[0],\n pageX = _event$touches$.pageX,\n pageY = _event$touches$.pageY;\n\n return { x: pageX, y: pageY };\n }\n\n var screenX = event.screenX,\n screenY = event.screenY;\n\n return { x: screenX, y: screenY };\n }\n\n var ReactSwipe = function (_Component) {\n _inherits(ReactSwipe, _Component);\n\n function ReactSwipe() {\n var _ref;\n\n _classCallCheck(this, ReactSwipe);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = ReactSwipe.__proto__ || Object.getPrototypeOf(ReactSwipe)).call.apply(_ref, [this].concat(args)));\n\n _this._handleSwipeStart = _this._handleSwipeStart.bind(_this);\n _this._handleSwipeMove = _this._handleSwipeMove.bind(_this);\n _this._handleSwipeEnd = _this._handleSwipeEnd.bind(_this);\n\n _this._onMouseDown = _this._onMouseDown.bind(_this);\n _this._onMouseMove = _this._onMouseMove.bind(_this);\n _this._onMouseUp = _this._onMouseUp.bind(_this);\n\n _this._setSwiperRef = _this._setSwiperRef.bind(_this);\n return _this;\n }\n\n _createClass(ReactSwipe, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.swiper) {\n this.swiper.addEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.swiper) {\n this.swiper.removeEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: '_onMouseDown',\n value: function _onMouseDown(event) {\n if (!this.props.allowMouseEvents) {\n return;\n }\n\n this.mouseDown = true;\n\n document.addEventListener('mouseup', this._onMouseUp);\n document.addEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeStart(event);\n }\n }, {\n key: '_onMouseMove',\n value: function _onMouseMove(event) {\n if (!this.mouseDown) {\n return;\n }\n\n this._handleSwipeMove(event);\n }\n }, {\n key: '_onMouseUp',\n value: function _onMouseUp(event) {\n this.mouseDown = false;\n\n document.removeEventListener('mouseup', this._onMouseUp);\n document.removeEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeEnd(event);\n }\n }, {\n key: '_handleSwipeStart',\n value: function _handleSwipeStart(event) {\n var _getPosition = getPosition(event),\n x = _getPosition.x,\n y = _getPosition.y;\n\n this.moveStart = { x: x, y: y };\n this.props.onSwipeStart(event);\n }\n }, {\n key: '_handleSwipeMove',\n value: function _handleSwipeMove(event) {\n if (!this.moveStart) {\n return;\n }\n\n var _getPosition2 = getPosition(event),\n x = _getPosition2.x,\n y = _getPosition2.y;\n\n var deltaX = x - this.moveStart.x;\n var deltaY = y - this.moveStart.y;\n this.moving = true;\n\n // handling the responsability of cancelling the scroll to\n // the component handling the event\n var shouldPreventDefault = this.props.onSwipeMove({\n x: deltaX,\n y: deltaY\n }, event);\n\n if (shouldPreventDefault && event.cancelable) {\n event.preventDefault();\n }\n\n this.movePosition = { deltaX: deltaX, deltaY: deltaY };\n }\n }, {\n key: '_handleSwipeEnd',\n value: function _handleSwipeEnd(event) {\n this.props.onSwipeEnd(event);\n\n var tolerance = this.props.tolerance;\n\n\n if (this.moving && this.movePosition) {\n if (this.movePosition.deltaX < -tolerance) {\n this.props.onSwipeLeft(1, event);\n } else if (this.movePosition.deltaX > tolerance) {\n this.props.onSwipeRight(1, event);\n }\n if (this.movePosition.deltaY < -tolerance) {\n this.props.onSwipeUp(1, event);\n } else if (this.movePosition.deltaY > tolerance) {\n this.props.onSwipeDown(1, event);\n }\n }\n\n this.moveStart = null;\n this.moving = false;\n this.movePosition = null;\n }\n }, {\n key: '_setSwiperRef',\n value: function _setSwiperRef(node) {\n this.swiper = node;\n this.props.innerRef(node);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n tagName = _props.tagName,\n className = _props.className,\n style = _props.style,\n children = _props.children,\n allowMouseEvents = _props.allowMouseEvents,\n onSwipeUp = _props.onSwipeUp,\n onSwipeDown = _props.onSwipeDown,\n onSwipeLeft = _props.onSwipeLeft,\n onSwipeRight = _props.onSwipeRight,\n onSwipeStart = _props.onSwipeStart,\n onSwipeMove = _props.onSwipeMove,\n onSwipeEnd = _props.onSwipeEnd,\n innerRef = _props.innerRef,\n tolerance = _props.tolerance,\n props = _objectWithoutProperties(_props, ['tagName', 'className', 'style', 'children', 'allowMouseEvents', 'onSwipeUp', 'onSwipeDown', 'onSwipeLeft', 'onSwipeRight', 'onSwipeStart', 'onSwipeMove', 'onSwipeEnd', 'innerRef', 'tolerance']);\n\n return _react2.default.createElement(\n this.props.tagName,\n _extends({\n ref: this._setSwiperRef,\n onMouseDown: this._onMouseDown,\n onTouchStart: this._handleSwipeStart,\n onTouchEnd: this._handleSwipeEnd,\n className: className,\n style: style\n }, props),\n children\n );\n }\n }]);\n\n return ReactSwipe;\n }(_react.Component);\n\n ReactSwipe.displayName = 'ReactSwipe';\n ReactSwipe.propTypes = {\n tagName: _propTypes2.default.string,\n className: _propTypes2.default.string,\n style: _propTypes2.default.object,\n children: _propTypes2.default.node,\n allowMouseEvents: _propTypes2.default.bool,\n onSwipeUp: _propTypes2.default.func,\n onSwipeDown: _propTypes2.default.func,\n onSwipeLeft: _propTypes2.default.func,\n onSwipeRight: _propTypes2.default.func,\n onSwipeStart: _propTypes2.default.func,\n onSwipeMove: _propTypes2.default.func,\n onSwipeEnd: _propTypes2.default.func,\n innerRef: _propTypes2.default.func,\n tolerance: _propTypes2.default.number.isRequired\n };\n ReactSwipe.defaultProps = {\n tagName: 'div',\n allowMouseEvents: false,\n onSwipeUp: function onSwipeUp() {},\n onSwipeDown: function onSwipeDown() {},\n onSwipeLeft: function onSwipeLeft() {},\n onSwipeRight: function onSwipeRight() {},\n onSwipeStart: function onSwipeStart() {},\n onSwipeMove: function onSwipeMove() {},\n onSwipeEnd: function onSwipeEnd() {},\n innerRef: function innerRef() {},\n\n tolerance: 0\n };\n exports.default = ReactSwipe;\n});","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\nSymbol.for(\"react.provider\");\nvar REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n};\nexports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n};\nexports.typeOf = typeOf;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(position, metric, axis) {\n var positionPercent = position === 0 ? position : position + metric;\n var positionCss = axis === 'horizontal' ? [positionPercent, 0, 0] : [0, positionPercent, 0];\n var transitionProp = 'translate3d';\n var translatedPosition = '(' + positionCss.join(',') + ')';\n return transitionProp + translatedPosition;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fadeAnimationHandler = exports.slideStopSwipingHandler = exports.slideSwipeAnimationHandler = exports.slideAnimationHandler = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Main animation handler for the default 'sliding' style animation\n * @param props\n * @param state\n */\nvar slideAnimationHandler = function slideAnimationHandler(props, state) {\n var returnStyles = {};\n var selectedItem = state.selectedItem;\n var previousItem = selectedItem;\n var lastPosition = _react.Children.count(props.children) - 1;\n var needClonedSlide = props.infiniteLoop && (selectedItem < 0 || selectedItem > lastPosition); // Handle list position if it needs a clone\n\n if (needClonedSlide) {\n if (previousItem < 0) {\n if (props.centerMode && props.centerSlidePercentage && props.axis === 'horizontal') {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * props.centerSlidePercentage - (100 - props.centerSlidePercentage) / 2, props.axis);\n } else {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * 100, props.axis);\n }\n } else if (previousItem > lastPosition) {\n returnStyles.itemListStyle = (0, _utils.setPosition)(0, props.axis);\n }\n\n return returnStyles;\n }\n\n var currentPosition = (0, _utils.getPosition)(selectedItem, props); // if 3d is available, let's take advantage of the performance of transform\n\n var transformProp = (0, _CSSTranslate.default)(currentPosition, '%', props.axis);\n var transitionTime = props.transitionTime + 'ms';\n returnStyles.itemListStyle = {\n WebkitTransform: transformProp,\n msTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp\n };\n\n if (!state.swiping) {\n returnStyles.itemListStyle = _objectSpread(_objectSpread({}, returnStyles.itemListStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return returnStyles;\n};\n/**\n * Swiping animation handler for the default 'sliding' style animation\n * @param delta\n * @param props\n * @param state\n * @param setState\n */\n\n\nexports.slideAnimationHandler = slideAnimationHandler;\n\nvar slideSwipeAnimationHandler = function slideSwipeAnimationHandler(delta, props, state, setState) {\n var returnStyles = {};\n var isHorizontal = props.axis === 'horizontal';\n\n var childrenLength = _react.Children.count(props.children);\n\n var initialBoundry = 0;\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var finalBoundry = props.infiniteLoop ? (0, _utils.getPosition)(childrenLength - 1, props) - 100 : (0, _utils.getPosition)(childrenLength - 1, props);\n var axisDelta = isHorizontal ? delta.x : delta.y;\n var handledDelta = axisDelta; // prevent user from swiping left out of boundaries\n\n if (currentPosition === initialBoundry && axisDelta > 0) {\n handledDelta = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === finalBoundry && axisDelta < 0) {\n handledDelta = 0;\n }\n\n var position = currentPosition + 100 / (state.itemSize / handledDelta);\n var hasMoved = Math.abs(axisDelta) > props.swipeScrollTolerance;\n\n if (props.infiniteLoop && hasMoved) {\n // When allowing infinite loop, if we slide left from position 0 we reveal the cloned last slide that appears before it\n // if we slide even further we need to jump to other side so it can continue - and vice versa for the last slide\n if (state.selectedItem === 0 && position > -100) {\n position -= childrenLength * 100;\n } else if (state.selectedItem === childrenLength - 1 && position < -childrenLength * 100) {\n position += childrenLength * 100;\n }\n }\n\n if (!props.preventMovementUntilSwipeScrollTolerance || hasMoved || state.swipeMovementStarted) {\n if (!state.swipeMovementStarted) {\n setState({\n swipeMovementStarted: true\n });\n }\n\n returnStyles.itemListStyle = (0, _utils.setPosition)(position, props.axis);\n } //allows scroll if the swipe was within the tolerance\n\n\n if (hasMoved && !state.cancelClick) {\n setState({\n cancelClick: true\n });\n }\n\n return returnStyles;\n};\n/**\n * Default 'sliding' style animination handler for when a swipe action stops.\n * @param props\n * @param state\n */\n\n\nexports.slideSwipeAnimationHandler = slideSwipeAnimationHandler;\n\nvar slideStopSwipingHandler = function slideStopSwipingHandler(props, state) {\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var itemListStyle = (0, _utils.setPosition)(currentPosition, props.axis);\n return {\n itemListStyle: itemListStyle\n };\n};\n/**\n * Main animation handler for the default 'fade' style animation\n * @param props\n * @param state\n */\n\n\nexports.slideStopSwipingHandler = slideStopSwipingHandler;\n\nvar fadeAnimationHandler = function fadeAnimationHandler(props, state) {\n var transitionTime = props.transitionTime + 'ms';\n var transitionTimingFunction = 'ease-in-out';\n var slideStyle = {\n position: 'absolute',\n display: 'block',\n zIndex: -2,\n minHeight: '100%',\n opacity: 0,\n top: 0,\n right: 0,\n left: 0,\n bottom: 0,\n transitionTimingFunction: transitionTimingFunction,\n msTransitionTimingFunction: transitionTimingFunction,\n MozTransitionTimingFunction: transitionTimingFunction,\n WebkitTransitionTimingFunction: transitionTimingFunction,\n OTransitionTimingFunction: transitionTimingFunction\n };\n\n if (!state.swiping) {\n slideStyle = _objectSpread(_objectSpread({}, slideStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return {\n slideStyle: slideStyle,\n selectedStyle: _objectSpread(_objectSpread({}, slideStyle), {}, {\n opacity: 1,\n position: 'relative'\n }),\n prevStyle: _objectSpread({}, slideStyle)\n };\n};\n\nexports.fadeAnimationHandler = fadeAnimationHandler;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../../cssClasses\"));\n\nvar _Thumbs = _interopRequireDefault(require(\"../Thumbs\"));\n\nvar _document = _interopRequireDefault(require(\"../../shims/document\"));\n\nvar _window = _interopRequireDefault(require(\"../../shims/window\"));\n\nvar _utils = require(\"./utils\");\n\nvar _animations = require(\"./animations\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n _inherits(Carousel, _React$Component);\n\n var _super = _createSuper(Carousel);\n\n // @ts-ignore\n function Carousel(props) {\n var _this;\n\n _classCallCheck(this, Carousel);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"carouselWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"listRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"timer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"animationHandler\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node) {\n _this.thumbsRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setCarouselWrapperRef\", function (node) {\n _this.carouselWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setListRef\", function (node) {\n _this.listRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsRef\", function (node, index) {\n if (!_this.itemsRef) {\n _this.itemsRef = [];\n }\n\n _this.itemsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"autoPlay\", function () {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.clearAutoPlay();\n\n if (!_this.props.autoPlay) {\n return;\n }\n\n _this.timer = setTimeout(function () {\n _this.increment();\n }, _this.props.interval);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"clearAutoPlay\", function () {\n if (_this.timer) clearTimeout(_this.timer);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"resetAutoPlay\", function () {\n _this.clearAutoPlay();\n\n _this.autoPlay();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"stopOnHover\", function () {\n _this.setState({\n isMouseEntered: true\n }, _this.clearAutoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"startOnLeave\", function () {\n _this.setState({\n isMouseEntered: false\n }, _this.autoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"isFocusWithinTheCarousel\", function () {\n if (!_this.carouselWrapperRef) {\n return false;\n }\n\n if ((0, _document.default)().activeElement === _this.carouselWrapperRef || _this.carouselWrapperRef.contains((0, _document.default)().activeElement)) {\n return true;\n }\n\n return false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"navigateWithKeyboard\", function (e) {\n if (!_this.isFocusWithinTheCarousel()) {\n return;\n }\n\n var axis = _this.props.axis;\n var isHorizontal = axis === 'horizontal';\n var keyNames = {\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n ArrowLeft: 37\n };\n var nextKey = isHorizontal ? keyNames.ArrowRight : keyNames.ArrowDown;\n var prevKey = isHorizontal ? keyNames.ArrowLeft : keyNames.ArrowUp;\n\n if (nextKey === e.keyCode) {\n _this.increment();\n } else if (prevKey === e.keyCode) {\n _this.decrement();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.state.initialized || !_this.itemsRef || _this.itemsRef.length === 0) {\n return;\n }\n\n var isHorizontal = _this.props.axis === 'horizontal';\n var firstItem = _this.itemsRef[0];\n\n if (!firstItem) {\n return;\n }\n\n var itemSize = isHorizontal ? firstItem.clientWidth : firstItem.clientHeight;\n\n _this.setState({\n itemSize: itemSize\n });\n\n if (_this.thumbsRef) {\n _this.thumbsRef.updateSizes();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setMountState\", function () {\n _this.setState({\n hasMount: true\n });\n\n _this.updateSizes();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item) {\n if (_react.Children.count(_this.props.children) === 0) {\n return;\n }\n\n if (_this.state.cancelClick) {\n _this.setState({\n cancelClick: false\n });\n\n return;\n }\n\n _this.props.onClickItem(index, item);\n\n if (index !== _this.state.selectedItem) {\n _this.setState({\n selectedItem: index\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleOnChange\", function (index, item) {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.props.onChange(index, item);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickThumb\", function (index, item) {\n _this.props.onClickThumb(index, item);\n\n _this.moveTo(index);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function (event) {\n _this.setState({\n swiping: true\n });\n\n _this.props.onSwipeStart(event);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function (event) {\n _this.setState({\n swiping: false,\n cancelClick: false,\n swipeMovementStarted: false\n });\n\n _this.props.onSwipeEnd(event);\n\n _this.clearAutoPlay();\n\n if (_this.state.autoPlay) {\n _this.autoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta, event) {\n _this.props.onSwipeMove(event);\n\n var animationHandlerResponse = _this.props.swipeAnimationHandler(delta, _this.props, _this.state, _this.setState.bind(_assertThisInitialized(_this)));\n\n _this.setState(_objectSpread({}, animationHandlerResponse)); // If we have not moved, we should have an empty object returned\n // Return false to allow scrolling when not swiping\n\n\n return !!Object.keys(animationHandlerResponse).length;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"decrement\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"increment\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n if (typeof position !== 'number') {\n return;\n }\n\n var lastPosition = _react.Children.count(_this.props.children) - 1;\n\n if (position < 0) {\n position = _this.props.infiniteLoop ? lastPosition : 0;\n }\n\n if (position > lastPosition) {\n position = _this.props.infiniteLoop ? 0 : lastPosition;\n }\n\n _this.selectItem({\n // if it's not a slider, we don't need to set position here\n selectedItem: position\n }); // don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once\n // and will result in the interval function not being cleared correctly.\n\n\n if (_this.state.autoPlay && _this.state.isMouseEntered === false) {\n _this.resetAutoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickNext\", function () {\n _this.increment(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickPrev\", function () {\n _this.decrement(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeForward\", function () {\n _this.increment(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeBackwards\", function () {\n _this.decrement(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"changeItem\", function (newIndex) {\n return function (e) {\n if (!(0, _utils.isKeyboardEvent)(e) || e.key === 'Enter') {\n _this.moveTo(newIndex);\n }\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectItem\", function (state) {\n // Merge in the new state while updating updating previous item\n _this.setState(_objectSpread({\n previousItem: _this.state.selectedItem\n }, state), function () {\n // Run animation handler and update styles based on it\n _this.setState(_this.animationHandler(_this.props, _this.state));\n });\n\n _this.handleOnChange(state.selectedItem, _react.Children.toArray(_this.props.children)[state.selectedItem]);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getInitialImage\", function () {\n var selectedItem = _this.props.selectedItem;\n var item = _this.itemsRef && _this.itemsRef[selectedItem];\n var images = item && item.getElementsByTagName('img') || [];\n return images[0];\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getVariableItemHeight\", function (position) {\n var item = _this.itemsRef && _this.itemsRef[position];\n\n if (_this.state.hasMount && item && item.children.length) {\n var slideImages = item.children[0].getElementsByTagName('img') || [];\n\n if (slideImages.length > 0) {\n var image = slideImages[0];\n\n if (!image.complete) {\n // if the image is still loading, the size won't be available so we trigger a new render after it's done\n var onImageLoad = function onImageLoad() {\n _this.forceUpdate();\n\n image.removeEventListener('load', onImageLoad);\n };\n\n image.addEventListener('load', onImageLoad);\n }\n } // try to get img first, if img not there find first display tag\n\n\n var displayItem = slideImages[0] || item.children[0];\n var height = displayItem.clientHeight;\n return height > 0 ? height : null;\n }\n\n return null;\n });\n\n var initState = {\n initialized: false,\n previousItem: props.selectedItem,\n selectedItem: props.selectedItem,\n hasMount: false,\n isMouseEntered: false,\n autoPlay: props.autoPlay,\n swiping: false,\n swipeMovementStarted: false,\n cancelClick: false,\n itemSize: 1,\n itemListStyle: {},\n slideStyle: {},\n selectedStyle: {},\n prevStyle: {}\n };\n _this.animationHandler = typeof props.animationHandler === 'function' && props.animationHandler || props.animationHandler === 'fade' && _animations.fadeAnimationHandler || _animations.slideAnimationHandler;\n _this.state = _objectSpread(_objectSpread({}, initState), _this.animationHandler(props, initState));\n return _this;\n }\n\n _createClass(Carousel, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this.props.children) {\n return;\n }\n\n this.setupCarousel();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (!prevProps.children && this.props.children && !this.state.initialized) {\n this.setupCarousel();\n }\n\n if (!prevProps.autoFocus && this.props.autoFocus) {\n this.forceFocus();\n }\n\n if (prevState.swiping && !this.state.swiping) {\n // We stopped swiping, ensure we are heading to the new/current slide and not stuck\n this.setState(_objectSpread({}, this.props.stopSwipingHandler(this.props, this.state)));\n }\n\n if (prevProps.selectedItem !== this.props.selectedItem || prevProps.centerMode !== this.props.centerMode) {\n this.updateSizes();\n this.moveTo(this.props.selectedItem);\n }\n\n if (prevProps.autoPlay !== this.props.autoPlay) {\n if (this.props.autoPlay) {\n this.setupAutoPlay();\n } else {\n this.destroyAutoPlay();\n }\n\n this.setState({\n autoPlay: this.props.autoPlay\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyCarousel();\n }\n }, {\n key: \"setupCarousel\",\n value: function setupCarousel() {\n var _this2 = this;\n\n this.bindEvents();\n\n if (this.state.autoPlay && _react.Children.count(this.props.children) > 1) {\n this.setupAutoPlay();\n }\n\n if (this.props.autoFocus) {\n this.forceFocus();\n }\n\n this.setState({\n initialized: true\n }, function () {\n var initialImage = _this2.getInitialImage();\n\n if (initialImage && !initialImage.complete) {\n // if it's a carousel of images, we set the mount state after the first image is loaded\n initialImage.addEventListener('load', _this2.setMountState);\n } else {\n _this2.setMountState();\n }\n });\n }\n }, {\n key: \"destroyCarousel\",\n value: function destroyCarousel() {\n if (this.state.initialized) {\n this.unbindEvents();\n this.destroyAutoPlay();\n }\n }\n }, {\n key: \"setupAutoPlay\",\n value: function setupAutoPlay() {\n this.autoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.addEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.addEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"destroyAutoPlay\",\n value: function destroyAutoPlay() {\n this.clearAutoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.removeEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.removeEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes);\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().addEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n var initialImage = this.getInitialImage();\n\n if (initialImage) {\n initialImage.removeEventListener('load', this.setMountState);\n }\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().removeEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"forceFocus\",\n value: function forceFocus() {\n var _this$carouselWrapper;\n\n (_this$carouselWrapper = this.carouselWrapperRef) === null || _this$carouselWrapper === void 0 ? void 0 : _this$carouselWrapper.focus();\n }\n }, {\n key: \"renderItems\",\n value: function renderItems(isClone) {\n var _this3 = this;\n\n if (!this.props.children) {\n return [];\n }\n\n return _react.Children.map(this.props.children, function (item, index) {\n var isSelected = index === _this3.state.selectedItem;\n var isPrevious = index === _this3.state.previousItem;\n var style = isSelected && _this3.state.selectedStyle || isPrevious && _this3.state.prevStyle || _this3.state.slideStyle || {};\n\n if (_this3.props.centerMode && _this3.props.axis === 'horizontal') {\n style = _objectSpread(_objectSpread({}, style), {}, {\n minWidth: _this3.props.centerSlidePercentage + '%'\n });\n }\n\n if (_this3.state.swiping && _this3.state.swipeMovementStarted) {\n style = _objectSpread(_objectSpread({}, style), {}, {\n pointerEvents: 'none'\n });\n }\n\n var slideProps = {\n ref: function ref(e) {\n return _this3.setItemsRef(e, index);\n },\n key: 'itemKey' + index + (isClone ? 'clone' : ''),\n className: _cssClasses.default.ITEM(true, index === _this3.state.selectedItem, index === _this3.state.previousItem),\n onClick: _this3.handleClickItem.bind(_this3, index, item),\n style: style\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", slideProps, _this3.props.renderItem(item, {\n isSelected: index === _this3.state.selectedItem,\n isPrevious: index === _this3.state.previousItem\n }));\n });\n }\n }, {\n key: \"renderControls\",\n value: function renderControls() {\n var _this4 = this;\n\n var _this$props = this.props,\n showIndicators = _this$props.showIndicators,\n labels = _this$props.labels,\n renderIndicator = _this$props.renderIndicator,\n children = _this$props.children;\n\n if (!showIndicators) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: \"control-dots\"\n }, _react.Children.map(children, function (_, index) {\n return renderIndicator && renderIndicator(_this4.changeItem(index), index === _this4.state.selectedItem, index, labels.item);\n }));\n }\n }, {\n key: \"renderStatus\",\n value: function renderStatus() {\n if (!this.props.showStatus) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"p\", {\n className: \"carousel-status\"\n }, this.props.statusFormatter(this.state.selectedItem + 1, _react.Children.count(this.props.children)));\n }\n }, {\n key: \"renderThumbs\",\n value: function renderThumbs() {\n if (!this.props.showThumbs || !this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(_Thumbs.default, {\n ref: this.setThumbsRef,\n onSelectItem: this.handleClickThumb,\n selectedItem: this.state.selectedItem,\n transitionTime: this.props.transitionTime,\n thumbWidth: this.props.thumbWidth,\n labels: this.props.labels,\n emulateTouch: this.props.emulateTouch\n }, this.props.renderThumbs(this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n\n if (!this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n var isSwipeable = this.props.swipeable && _react.Children.count(this.props.children) > 1;\n var isHorizontal = this.props.axis === 'horizontal';\n var canShowArrows = this.props.showArrows && _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = canShowArrows && (this.state.selectedItem > 0 || this.props.infiniteLoop) || false; // show right arrow\n\n var hasNext = canShowArrows && (this.state.selectedItem < _react.Children.count(this.props.children) - 1 || this.props.infiniteLoop) || false;\n var itemsClone = this.renderItems(true);\n var firstClone = itemsClone.shift();\n var lastClone = itemsClone.pop();\n var swiperProps = {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: this.state.itemListStyle,\n tolerance: this.props.swipeScrollTolerance\n };\n var containerStyles = {};\n\n if (isHorizontal) {\n swiperProps.onSwipeLeft = this.onSwipeForward;\n swiperProps.onSwipeRight = this.onSwipeBackwards;\n\n if (this.props.dynamicHeight) {\n var itemHeight = this.getVariableItemHeight(this.state.selectedItem); // swiperProps.style.height = itemHeight || 'auto';\n\n containerStyles.height = itemHeight || 'auto';\n }\n } else {\n swiperProps.onSwipeUp = this.props.verticalSwipe === 'natural' ? this.onSwipeBackwards : this.onSwipeForward;\n swiperProps.onSwipeDown = this.props.verticalSwipe === 'natural' ? this.onSwipeForward : this.onSwipeBackwards;\n swiperProps.style = _objectSpread(_objectSpread({}, swiperProps.style), {}, {\n height: this.state.itemSize\n });\n containerStyles.height = this.state.itemSize;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n \"aria-label\": this.props.ariaLabel,\n className: _cssClasses.default.ROOT(this.props.className),\n ref: this.setCarouselWrapperRef,\n tabIndex: this.props.useKeyboardArrows ? 0 : undefined\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(true),\n style: {\n width: this.props.width\n }\n }, this.renderControls(), this.props.renderArrowPrev(this.onClickPrev, hasPrev, this.props.labels.leftArrow), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(true, this.props.axis),\n style: containerStyles\n }, isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, _extends({\n tagName: \"ul\",\n innerRef: this.setListRef\n }, swiperProps, {\n allowMouseEvents: this.props.emulateTouch\n }), this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n ref: function ref(node) {\n return _this5.setListRef(node);\n },\n style: this.state.itemListStyle || {}\n }, this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone)), this.props.renderArrowNext(this.onClickNext, hasNext, this.props.labels.rightArrow), this.renderStatus()), this.renderThumbs());\n }\n }]);\n\n return Carousel;\n}(_react.default.Component);\n\nexports.default = Carousel;\n\n_defineProperty(Carousel, \"displayName\", 'Carousel');\n\n_defineProperty(Carousel, \"defaultProps\", {\n ariaLabel: undefined,\n axis: 'horizontal',\n centerSlidePercentage: 80,\n interval: 3000,\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n onClickItem: _utils.noop,\n onClickThumb: _utils.noop,\n onChange: _utils.noop,\n onSwipeStart: function onSwipeStart() {},\n onSwipeEnd: function onSwipeEnd() {},\n onSwipeMove: function onSwipeMove() {\n return false;\n },\n preventMovementUntilSwipeScrollTolerance: false,\n renderArrowPrev: function renderArrowPrev(onClickHandler, hasPrev, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: onClickHandler\n });\n },\n renderArrowNext: function renderArrowNext(onClickHandler, hasNext, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: onClickHandler\n });\n },\n renderIndicator: function renderIndicator(onClickHandler, isSelected, index, label) {\n return /*#__PURE__*/_react.default.createElement(\"li\", {\n className: _cssClasses.default.DOT(isSelected),\n onClick: onClickHandler,\n onKeyDown: onClickHandler,\n value: index,\n key: index,\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": \"\".concat(label, \" \").concat(index + 1)\n });\n },\n renderItem: function renderItem(item) {\n return item;\n },\n renderThumbs: function renderThumbs(children) {\n var images = _react.Children.map(children, function (item) {\n var img = item; // if the item is not an image, try to find the first image in the item's children.\n\n if (item.type !== 'img') {\n img = _react.Children.toArray(item.props.children).find(function (children) {\n return children.type === 'img';\n });\n }\n\n if (!img) {\n return undefined;\n }\n\n return img;\n });\n\n if (images.filter(function (image) {\n return image;\n }).length === 0) {\n console.warn(\"No images found! Can't build the thumb list without images. If you don't need thumbs, set showThumbs={false} in the Carousel. Note that it's not possible to get images rendered inside custom components. More info at https://github.com/leandrowd/react-responsive-carousel/blob/master/TROUBLESHOOTING.md\");\n return [];\n }\n\n return images;\n },\n statusFormatter: _utils.defaultStatusFormatter,\n selectedItem: 0,\n showArrows: true,\n showIndicators: true,\n showStatus: true,\n showThumbs: true,\n stopOnHover: true,\n swipeScrollTolerance: 5,\n swipeable: true,\n transitionTime: 350,\n verticalSwipe: 'standard',\n width: '100%',\n animationHandler: 'slide',\n swipeAnimationHandler: _animations.slideSwipeAnimationHandler,\n stopSwipingHandler: _animations.slideStopSwipingHandler\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setPosition = exports.getPosition = exports.isKeyboardEvent = exports.defaultStatusFormatter = exports.noop = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar noop = function noop() {};\n\nexports.noop = noop;\n\nvar defaultStatusFormatter = function defaultStatusFormatter(current, total) {\n return \"\".concat(current, \" of \").concat(total);\n};\n\nexports.defaultStatusFormatter = defaultStatusFormatter;\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e ? e.hasOwnProperty('key') : false;\n};\n/**\n * Gets the list 'position' relative to a current index\n * @param index\n */\n\n\nexports.isKeyboardEvent = isKeyboardEvent;\n\nvar getPosition = function getPosition(index, props) {\n if (props.infiniteLoop) {\n // index has to be added by 1 because of the first cloned slide\n ++index;\n }\n\n if (index === 0) {\n return 0;\n }\n\n var childrenLength = _react.Children.count(props.children);\n\n if (props.centerMode && props.axis === 'horizontal') {\n var currentPosition = -index * props.centerSlidePercentage;\n var lastPosition = childrenLength - 1;\n\n if (index && (index !== lastPosition || props.infiniteLoop)) {\n currentPosition += (100 - props.centerSlidePercentage) / 2;\n } else if (index === lastPosition) {\n currentPosition += 100 - props.centerSlidePercentage;\n }\n\n return currentPosition;\n }\n\n return -index * 100;\n};\n/**\n * Sets the 'position' transform for sliding animations\n * @param position\n * @param forceReflow\n */\n\n\nexports.getPosition = getPosition;\n\nvar setPosition = function setPosition(position, axis) {\n var style = {};\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n // @ts-ignore\n style[prop] = (0, _CSSTranslate.default)(position, '%', axis);\n });\n return style;\n};\n\nexports.setPosition = setPosition;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../cssClasses\"));\n\nvar _dimensions = require(\"../dimensions\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../CSSTranslate\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _window = _interopRequireDefault(require(\"../shims/window\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e.hasOwnProperty('key');\n};\n\nvar Thumbs = /*#__PURE__*/function (_Component) {\n _inherits(Thumbs, _Component);\n\n var _super = _createSuper(Thumbs);\n\n function Thumbs(_props) {\n var _this;\n\n _classCallCheck(this, Thumbs);\n\n _this = _super.call(this, _props);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsListRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsWrapperRef\", function (node) {\n _this.itemsWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsListRef\", function (node) {\n _this.itemsListRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node, index) {\n if (!_this.thumbsRef) {\n _this.thumbsRef = [];\n }\n\n _this.thumbsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.props.children || !_this.itemsWrapperRef || !_this.thumbsRef) {\n return;\n }\n\n var total = _react.Children.count(_this.props.children);\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var itemSize = _this.props.thumbWidth ? _this.props.thumbWidth : (0, _dimensions.outerWidth)(_this.thumbsRef[0]);\n var visibleItems = Math.floor(wrapperSize / itemSize);\n var showArrows = visibleItems < total;\n var lastPosition = showArrows ? total - visibleItems : 0;\n\n _this.setState(function (_state, props) {\n return {\n itemSize: itemSize,\n visibleItems: visibleItems,\n firstItem: showArrows ? _this.getFirstItem(props.selectedItem) : 0,\n lastPosition: lastPosition,\n showArrows: showArrows\n };\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item, e) {\n if (!isKeyboardEvent(e) || e.key === 'Enter') {\n var handler = _this.props.onSelectItem;\n\n if (typeof handler === 'function') {\n handler(index, item);\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function () {\n _this.setState({\n swiping: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function () {\n _this.setState({\n swiping: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta) {\n var deltaX = delta.x;\n\n if (!_this.state.itemSize || !_this.itemsWrapperRef || !_this.state.visibleItems) {\n return false;\n }\n\n var leftBoundary = 0;\n\n var childrenLength = _react.Children.count(_this.props.children);\n\n var currentPosition = -(_this.state.firstItem * 100) / _this.state.visibleItems;\n var lastLeftItem = Math.max(childrenLength - _this.state.visibleItems, 0);\n var lastLeftBoundary = -lastLeftItem * 100 / _this.state.visibleItems; // prevent user from swiping left out of boundaries\n\n if (currentPosition === leftBoundary && deltaX > 0) {\n deltaX = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === lastLeftBoundary && deltaX < 0) {\n deltaX = 0;\n }\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var position = currentPosition + 100 / (wrapperSize / deltaX); // if 3d isn't available we will use left to move\n\n if (_this.itemsListRef) {\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n _this.itemsListRef.style[prop] = (0, _CSSTranslate.default)(position, '%', _this.props.axis);\n });\n }\n\n return true;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideRight\", function (positions) {\n _this.moveTo(_this.state.firstItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideLeft\", function (positions) {\n _this.moveTo(_this.state.firstItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n // position can't be lower than 0\n position = position < 0 ? 0 : position; // position can't be higher than last postion\n\n position = position >= _this.state.lastPosition ? _this.state.lastPosition : position;\n\n _this.setState({\n firstItem: position\n });\n });\n\n _this.state = {\n selectedItem: _props.selectedItem,\n swiping: false,\n showArrows: false,\n firstItem: 0,\n visibleItems: 0,\n lastPosition: 0\n };\n return _this;\n }\n\n _createClass(Thumbs, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.setupThumbs();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.selectedItem !== this.state.selectedItem) {\n this.setState({\n selectedItem: this.props.selectedItem,\n firstItem: this.getFirstItem(this.props.selectedItem)\n });\n }\n\n if (this.props.children === prevProps.children) {\n return;\n } // This will capture any size changes for arrow adjustments etc.\n // usually in the same render cycle so we don't see any flickers\n\n\n this.updateSizes();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyThumbs();\n }\n }, {\n key: \"setupThumbs\",\n value: function setupThumbs() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes); // when the component is rendered we need to calculate\n // the container size to adjust the responsive behaviour\n\n this.updateSizes();\n }\n }, {\n key: \"destroyThumbs\",\n value: function destroyThumbs() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n }\n }, {\n key: \"getFirstItem\",\n value: function getFirstItem(selectedItem) {\n var firstItem = selectedItem;\n\n if (selectedItem >= this.state.lastPosition) {\n firstItem = this.state.lastPosition;\n }\n\n if (selectedItem < this.state.firstItem + this.state.visibleItems) {\n firstItem = this.state.firstItem;\n }\n\n if (selectedItem < this.state.firstItem) {\n firstItem = selectedItem;\n }\n\n return firstItem;\n }\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this2 = this;\n\n return this.props.children.map(function (img, index) {\n var itemClass = _cssClasses.default.ITEM(false, index === _this2.state.selectedItem);\n\n var thumbProps = {\n key: index,\n ref: function ref(e) {\n return _this2.setThumbsRef(e, index);\n },\n className: itemClass,\n onClick: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n onKeyDown: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n 'aria-label': \"\".concat(_this2.props.labels.item, \" \").concat(index + 1),\n style: {\n width: _this2.props.thumbWidth\n }\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", _extends({}, thumbProps, {\n role: \"button\",\n tabIndex: 0\n }), img);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n if (!this.props.children) {\n return null;\n }\n\n var isSwipeable = _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = this.state.showArrows && this.state.firstItem > 0; // show right arrow\n\n var hasNext = this.state.showArrows && this.state.firstItem < this.state.lastPosition; // obj to hold the transformations and styles\n\n var itemListStyles = {};\n var currentPosition = -this.state.firstItem * (this.state.itemSize || 0);\n var transformProp = (0, _CSSTranslate.default)(currentPosition, 'px', this.props.axis);\n var transitionTime = this.props.transitionTime + 'ms';\n itemListStyles = {\n WebkitTransform: transformProp,\n MozTransform: transformProp,\n MsTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp,\n msTransform: transformProp,\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n MsTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(false)\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(false),\n ref: this.setItemsWrapperRef\n }, /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: function onClick() {\n return _this3.slideRight();\n },\n \"aria-label\": this.props.labels.leftArrow\n }), isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, {\n tagName: \"ul\",\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n onSwipeLeft: this.slideLeft,\n onSwipeRight: this.slideRight,\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: itemListStyles,\n innerRef: this.setItemsListRef,\n allowMouseEvents: this.props.emulateTouch\n }, this.renderItems()) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n ref: function ref(node) {\n return _this3.setItemsListRef(node);\n },\n style: itemListStyles\n }, this.renderItems()), /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: function onClick() {\n return _this3.slideLeft();\n },\n \"aria-label\": this.props.labels.rightArrow\n })));\n }\n }]);\n\n return Thumbs;\n}(_react.Component);\n\nexports.default = Thumbs;\n\n_defineProperty(Thumbs, \"displayName\", 'Thumbs');\n\n_defineProperty(Thumbs, \"defaultProps\", {\n axis: 'horizontal',\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n selectedItem: 0,\n thumbWidth: 80,\n transitionTime: 350\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n ROOT: function ROOT(customClassName) {\n return (0, _classnames.default)(_defineProperty({\n 'carousel-root': true\n }, customClassName || '', !!customClassName));\n },\n CAROUSEL: function CAROUSEL(isSlider) {\n return (0, _classnames.default)({\n carousel: true,\n 'carousel-slider': isSlider\n });\n },\n WRAPPER: function WRAPPER(isSlider, axis) {\n return (0, _classnames.default)({\n 'thumbs-wrapper': !isSlider,\n 'slider-wrapper': isSlider,\n 'axis-horizontal': axis === 'horizontal',\n 'axis-vertical': axis !== 'horizontal'\n });\n },\n SLIDER: function SLIDER(isSlider, isSwiping) {\n return (0, _classnames.default)({\n thumbs: !isSlider,\n slider: isSlider,\n animated: !isSwiping\n });\n },\n ITEM: function ITEM(isSlider, selected, previous) {\n return (0, _classnames.default)({\n thumb: !isSlider,\n slide: isSlider,\n selected: selected,\n previous: previous\n });\n },\n ARROW_PREV: function ARROW_PREV(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-prev': true,\n 'control-disabled': disabled\n });\n },\n ARROW_NEXT: function ARROW_NEXT(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-next': true,\n 'control-disabled': disabled\n });\n },\n DOT: function DOT(selected) {\n return (0, _classnames.default)({\n dot: true,\n selected: selected\n });\n }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.outerWidth = void 0;\n\nvar outerWidth = function outerWidth(el) {\n var width = el.offsetWidth;\n var style = getComputedStyle(el);\n width += parseInt(style.marginLeft) + parseInt(style.marginRight);\n return width;\n};\n\nexports.outerWidth = outerWidth;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Carousel\", {\n enumerable: true,\n get: function get() {\n return _Carousel.default;\n }\n});\nObject.defineProperty(exports, \"CarouselProps\", {\n enumerable: true,\n get: function get() {\n return _types.CarouselProps;\n }\n});\nObject.defineProperty(exports, \"Thumbs\", {\n enumerable: true,\n get: function get() {\n return _Thumbs.default;\n }\n});\n\nvar _Carousel = _interopRequireDefault(require(\"./components/Carousel\"));\n\nvar _types = require(\"./components/Carousel/types\");\n\nvar _Thumbs = _interopRequireDefault(require(\"./components/Thumbs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return document;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return window;\n};\n\nexports.default = _default;","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\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 if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\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\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n 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 // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\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 React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n","/**\n * @license React\n * react-jsx-runtime.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'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.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'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","window.eve = require('eve')\n\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nvar mina = (function (eve) {\n var animations = {},\n requestAnimFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16, new Date().getTime());\n return true;\n },\n requestID,\n isArray = Array.isArray || function (a) {\n return a instanceof Array ||\n Object.prototype.toString.call(a) == \"[object Array]\";\n },\n idgen = 0,\n idprefix = \"M\" + (+new Date).toString(36),\n ID = function () {\n return idprefix + (idgen++).toString(36);\n },\n diff = function (a, b, A, B) {\n if (isArray(a)) {\n res = [];\n for (var i = 0, ii = a.length; i < ii; i++) {\n res[i] = diff(a[i], b, A[i], B);\n }\n return res;\n }\n var dif = (A - a) / (B - b);\n return function (bb) {\n return a + dif * (bb - b);\n };\n },\n timer = Date.now || function () {\n return +new Date;\n },\n sta = function (val) {\n var a = this;\n if (val == null) {\n return a.s;\n }\n var ds = a.s - val;\n a.b += a.dur * ds;\n a.B += a.dur * ds;\n a.s = val;\n },\n speed = function (val) {\n var a = this;\n if (val == null) {\n return a.spd;\n }\n a.spd = val;\n },\n duration = function (val) {\n var a = this;\n if (val == null) {\n return a.dur;\n }\n a.s = a.s * val / a.dur;\n a.dur = val;\n },\n stopit = function () {\n var a = this;\n delete animations[a.id];\n a.update();\n eve(\"mina.stop.\" + a.id, a);\n },\n pause = function () {\n var a = this;\n if (a.pdif) {\n return;\n }\n delete animations[a.id];\n a.update();\n a.pdif = a.get() - a.b;\n },\n resume = function () {\n var a = this;\n if (!a.pdif) {\n return;\n }\n a.b = a.get() - a.pdif;\n delete a.pdif;\n animations[a.id] = a;\n frame();\n },\n update = function () {\n var a = this,\n res;\n if (isArray(a.start)) {\n res = [];\n for (var j = 0, jj = a.start.length; j < jj; j++) {\n res[j] = +a.start[j] +\n (a.end[j] - a.start[j]) * a.easing(a.s);\n }\n } else {\n res = +a.start + (a.end - a.start) * a.easing(a.s);\n }\n a.set(res);\n },\n frame = function (timeStamp) {\n // Manual invokation?\n if (!timeStamp) {\n // Frame loop stopped?\n if (!requestID) {\n // Start frame loop...\n requestID = requestAnimFrame(frame);\n }\n return;\n }\n var len = 0;\n for (var i in animations) if (animations.hasOwnProperty(i)) {\n var a = animations[i],\n b = a.get(),\n res;\n len++;\n a.s = (b - a.b) / (a.dur / a.spd);\n if (a.s >= 1) {\n delete animations[i];\n a.s = 1;\n len--;\n (function (a) {\n setTimeout(function () {\n eve(\"mina.finish.\" + a.id, a);\n });\n }(a));\n }\n a.update();\n }\n requestID = len ? requestAnimFrame(frame) : false;\n },\n /*\\\n * mina\n [ method ]\n **\n * Generic animation of numbers\n **\n - a (number) start _slave_ number\n - A (number) end _slave_ number\n - b (number) start _master_ number (start time in general case)\n - B (number) end _master_ number (end time in general case)\n - get (function) getter of _master_ number (see @mina.time)\n - set (function) setter of _slave_ number\n - easing (function) #optional easing function, default is @mina.linear\n = (object) animation descriptor\n o {\n o id (string) animation id,\n o start (number) start _slave_ number,\n o end (number) end _slave_ number,\n o b (number) start _master_ number,\n o s (number) animation status (0..1),\n o dur (number) animation duration,\n o spd (number) animation speed,\n o get (function) getter of _master_ number (see @mina.time),\n o set (function) setter of _slave_ number,\n o easing (function) easing function, default is @mina.linear,\n o status (function) status getter/setter,\n o speed (function) speed getter/setter,\n o duration (function) duration getter/setter,\n o stop (function) animation stopper\n o pause (function) pauses the animation\n o resume (function) resumes the animation\n o update (function) calles setter with the right value of the animation\n o }\n \\*/\n mina = function (a, A, b, B, get, set, easing) {\n var anim = {\n id: ID(),\n start: a,\n end: A,\n b: b,\n s: 0,\n dur: B - b,\n spd: 1,\n get: get,\n set: set,\n easing: easing || mina.linear,\n status: sta,\n speed: speed,\n duration: duration,\n stop: stopit,\n pause: pause,\n resume: resume,\n update: update\n };\n animations[anim.id] = anim;\n var len = 0, i;\n for (i in animations) if (animations.hasOwnProperty(i)) {\n len++;\n if (len == 2) {\n break;\n }\n }\n len == 1 && frame();\n return anim;\n };\n /*\\\n * mina.time\n [ method ]\n **\n * Returns the current time. Equivalent to:\n | function () {\n | return (new Date).getTime();\n | }\n \\*/\n mina.time = timer;\n /*\\\n * mina.getById\n [ method ]\n **\n * Returns an animation by its id\n - id (string) animation's id\n = (object) See @mina\n \\*/\n mina.getById = function (id) {\n return animations[id] || null;\n };\n\n /*\\\n * mina.linear\n [ method ]\n **\n * Default linear easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.linear = function (n) {\n return n;\n };\n /*\\\n * mina.easeout\n [ method ]\n **\n * Easeout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easeout = function (n) {\n return Math.pow(n, 1.7);\n };\n /*\\\n * mina.easein\n [ method ]\n **\n * Easein easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easein = function (n) {\n return Math.pow(n, .48);\n };\n /*\\\n * mina.easeinout\n [ method ]\n **\n * Easeinout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easeinout = function (n) {\n if (n == 1) {\n return 1;\n }\n if (n == 0) {\n return 0;\n }\n var q = .48 - n / 1.04,\n Q = Math.sqrt(.1734 + q * q),\n x = Q - q,\n X = Math.pow(Math.abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n y = -Q - q,\n Y = Math.pow(Math.abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n t = X + Y + .5;\n return (1 - t) * 3 * t * t + t * t * t;\n };\n /*\\\n * mina.backin\n [ method ]\n **\n * Backin easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.backin = function (n) {\n if (n == 1) {\n return 1;\n }\n var s = 1.70158;\n return n * n * ((s + 1) * n - s);\n };\n /*\\\n * mina.backout\n [ method ]\n **\n * Backout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.backout = function (n) {\n if (n == 0) {\n return 0;\n }\n n = n - 1;\n var s = 1.70158;\n return n * n * ((s + 1) * n + s) + 1;\n };\n /*\\\n * mina.elastic\n [ method ]\n **\n * Elastic easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.elastic = function (n) {\n if (n == !!n) {\n return n;\n }\n return Math.pow(2, -10 * n) * Math.sin((n - .075) *\n (2 * Math.PI) / .3) + 1;\n };\n /*\\\n * mina.bounce\n [ method ]\n **\n * Bounce easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.bounce = function (n) {\n var s = 7.5625,\n p = 2.75,\n l;\n if (n < 1 / p) {\n l = s * n * n;\n } else {\n if (n < 2 / p) {\n n -= 1.5 / p;\n l = s * n * n + .75;\n } else {\n if (n < 2.5 / p) {\n n -= 2.25 / p;\n l = s * n * n + .9375;\n } else {\n n -= 2.625 / p;\n l = s * n * n + .984375;\n }\n }\n }\n return l;\n };\n window.mina = mina;\n return mina;\n})(typeof eve == \"undefined\" ? function () {} : eve);\n\n// Copyright (c) 2013 - 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nvar Snap = (function(root) {\nSnap.version = \"0.5.1\";\n/*\\\n * Snap\n [ method ]\n **\n * Creates a drawing surface or wraps existing SVG element.\n **\n - width (number|string) width of surface\n - height (number|string) height of surface\n * or\n - DOM (SVGElement) element to be wrapped into Snap structure\n * or\n - array (array) array of elements (will return set of elements)\n * or\n - query (string) CSS query selector\n = (object) @Element\n\\*/\nfunction Snap(w, h) {\n if (w) {\n if (w.nodeType) {\n return wrap(w);\n }\n if (is(w, \"array\") && Snap.set) {\n return Snap.set.apply(Snap, w);\n }\n if (w instanceof Element) {\n return w;\n }\n if (h == null) {\n try {\n w = glob.doc.querySelector(String(w));\n return wrap(w);\n } catch (e) {\n return null;\n }\n }\n }\n w = w == null ? \"100%\" : w;\n h = h == null ? \"100%\" : h;\n return new Paper(w, h);\n}\nSnap.toString = function () {\n return \"Snap v\" + this.version;\n};\nSnap._ = {};\nvar glob = {\n win: root.window,\n doc: root.window.document\n};\nSnap._.glob = glob;\nvar has = \"hasOwnProperty\",\n Str = String,\n toFloat = parseFloat,\n toInt = parseInt,\n math = Math,\n mmax = math.max,\n mmin = math.min,\n abs = math.abs,\n pow = math.pow,\n PI = math.PI,\n round = math.round,\n E = \"\",\n S = \" \",\n objectToString = Object.prototype.toString,\n ISURL = /^url\\(['\"]?([^\\)]+?)['\"]?\\)$/i,\n colourRegExp = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?%?)\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?%?)\\s*\\))\\s*$/i,\n bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n separator = Snap._.separator = /[,\\s]+/,\n whitespace = /[\\s]/g,\n commaSpaces = /[\\s]*,[\\s]*/,\n hsrg = {hs: 1, rg: 1},\n pathCommand = /([a-z])[\\s,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\s]*,?[\\s]*)+)/ig,\n tCommand = /([rstm])[\\s,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\s]*,?[\\s]*)+)/ig,\n pathValues = /(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\s]*,?[\\s]*/ig,\n idgen = 0,\n idprefix = \"S\" + (+new Date).toString(36),\n ID = function (el) {\n return (el && el.type ? el.type : E) + idprefix + (idgen++).toString(36);\n },\n xlink = \"http://www.w3.org/1999/xlink\",\n xmlns = \"http://www.w3.org/2000/svg\",\n hub = {},\n /*\\\n * Snap.url\n [ method ]\n **\n * Wraps path into `\"url('')\"`.\n - value (string) path\n = (string) wrapped path\n \\*/\n URL = Snap.url = function (url) {\n return \"url('#\" + url + \"')\";\n };\n\nfunction $(el, attr) {\n if (attr) {\n if (el == \"#text\") {\n el = glob.doc.createTextNode(attr.text || attr[\"#text\"] || \"\");\n }\n if (el == \"#comment\") {\n el = glob.doc.createComment(attr.text || attr[\"#text\"] || \"\");\n }\n if (typeof el == \"string\") {\n el = $(el);\n }\n if (typeof attr == \"string\") {\n if (el.nodeType == 1) {\n if (attr.substring(0, 6) == \"xlink:\") {\n return el.getAttributeNS(xlink, attr.substring(6));\n }\n if (attr.substring(0, 4) == \"xml:\") {\n return el.getAttributeNS(xmlns, attr.substring(4));\n }\n return el.getAttribute(attr);\n } else if (attr == \"text\") {\n return el.nodeValue;\n } else {\n return null;\n }\n }\n if (el.nodeType == 1) {\n for (var key in attr) if (attr[has](key)) {\n var val = Str(attr[key]);\n if (val) {\n if (key.substring(0, 6) == \"xlink:\") {\n el.setAttributeNS(xlink, key.substring(6), val);\n } else if (key.substring(0, 4) == \"xml:\") {\n el.setAttributeNS(xmlns, key.substring(4), val);\n } else {\n el.setAttribute(key, val);\n }\n } else {\n el.removeAttribute(key);\n }\n }\n } else if (\"text\" in attr) {\n el.nodeValue = attr.text;\n }\n } else {\n el = glob.doc.createElementNS(xmlns, el);\n }\n return el;\n}\nSnap._.$ = $;\nSnap._.id = ID;\nfunction getAttrs(el) {\n var attrs = el.attributes,\n name,\n out = {};\n for (var i = 0; i < attrs.length; i++) {\n if (attrs[i].namespaceURI == xlink) {\n name = \"xlink:\";\n } else {\n name = \"\";\n }\n name += attrs[i].name;\n out[name] = attrs[i].textContent;\n }\n return out;\n}\nfunction is(o, type) {\n type = Str.prototype.toLowerCase.call(type);\n if (type == \"finite\") {\n return isFinite(o);\n }\n if (type == \"array\" &&\n (o instanceof Array || Array.isArray && Array.isArray(o))) {\n return true;\n }\n return type == \"null\" && o === null ||\n type == typeof o && o !== null ||\n type == \"object\" && o === Object(o) ||\n objectToString.call(o).slice(8, -1).toLowerCase() == type;\n}\n/*\\\n * Snap.format\n [ method ]\n **\n * Replaces construction of type `{}` to the corresponding argument\n **\n - token (string) string to format\n - json (object) object which properties are used as a replacement\n = (string) formatted string\n > Usage\n | // this draws a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n | paper.path(Snap.format(\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\", {\n | x: 10,\n | y: 20,\n | dim: {\n | width: 40,\n | height: 50,\n | \"negative width\": -40\n | }\n | }));\n\\*/\nSnap.format = (function () {\n var tokenRegex = /\\{([^\\}]+)\\}/g,\n objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n replacer = function (all, key, obj) {\n var res = obj;\n key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n name = name || quotedName;\n if (res) {\n if (name in res) {\n res = res[name];\n }\n typeof res == \"function\" && isFunc && (res = res());\n }\n });\n res = (res == null || res == obj ? all : res) + \"\";\n return res;\n };\n return function (str, obj) {\n return Str(str).replace(tokenRegex, function (all, key) {\n return replacer(all, key, obj);\n });\n };\n})();\nfunction clone(obj) {\n if (typeof obj == \"function\" || Object(obj) !== obj) {\n return obj;\n }\n var res = new obj.constructor;\n for (var key in obj) if (obj[has](key)) {\n res[key] = clone(obj[key]);\n }\n return res;\n}\nSnap._.clone = clone;\nfunction repush(array, item) {\n for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n return array.push(array.splice(i, 1)[0]);\n }\n}\nfunction cacher(f, scope, postprocessor) {\n function newf() {\n var arg = Array.prototype.slice.call(arguments, 0),\n args = arg.join(\"\\u2400\"),\n cache = newf.cache = newf.cache || {},\n count = newf.count = newf.count || [];\n if (cache[has](args)) {\n repush(count, args);\n return postprocessor ? postprocessor(cache[args]) : cache[args];\n }\n count.length >= 1e3 && delete cache[count.shift()];\n count.push(args);\n cache[args] = f.apply(scope, arg);\n return postprocessor ? postprocessor(cache[args]) : cache[args];\n }\n return newf;\n}\nSnap._.cacher = cacher;\nfunction angle(x1, y1, x2, y2, x3, y3) {\n if (x3 == null) {\n var x = x1 - x2,\n y = y1 - y2;\n if (!x && !y) {\n return 0;\n }\n return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n } else {\n return angle(x1, y1, x3, y3) - angle(x2, y2, x3, y3);\n }\n}\nfunction rad(deg) {\n return deg % 360 * PI / 180;\n}\nfunction deg(rad) {\n return rad * 180 / PI % 360;\n}\nfunction x_y() {\n return this.x + S + this.y;\n}\nfunction x_y_w_h() {\n return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n}\n\n/*\\\n * Snap.rad\n [ method ]\n **\n * Transform angle to radians\n - deg (number) angle in degrees\n = (number) angle in radians\n\\*/\nSnap.rad = rad;\n/*\\\n * Snap.deg\n [ method ]\n **\n * Transform angle to degrees\n - rad (number) angle in radians\n = (number) angle in degrees\n\\*/\nSnap.deg = deg;\n/*\\\n * Snap.sin\n [ method ]\n **\n * Equivalent to `Math.sin()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) sin\n\\*/\nSnap.sin = function (angle) {\n return math.sin(Snap.rad(angle));\n};\n/*\\\n * Snap.tan\n [ method ]\n **\n * Equivalent to `Math.tan()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) tan\n\\*/\nSnap.tan = function (angle) {\n return math.tan(Snap.rad(angle));\n};\n/*\\\n * Snap.cos\n [ method ]\n **\n * Equivalent to `Math.cos()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) cos\n\\*/\nSnap.cos = function (angle) {\n return math.cos(Snap.rad(angle));\n};\n/*\\\n * Snap.asin\n [ method ]\n **\n * Equivalent to `Math.asin()` only works with degrees, not radians.\n - num (number) value\n = (number) asin in degrees\n\\*/\nSnap.asin = function (num) {\n return Snap.deg(math.asin(num));\n};\n/*\\\n * Snap.acos\n [ method ]\n **\n * Equivalent to `Math.acos()` only works with degrees, not radians.\n - num (number) value\n = (number) acos in degrees\n\\*/\nSnap.acos = function (num) {\n return Snap.deg(math.acos(num));\n};\n/*\\\n * Snap.atan\n [ method ]\n **\n * Equivalent to `Math.atan()` only works with degrees, not radians.\n - num (number) value\n = (number) atan in degrees\n\\*/\nSnap.atan = function (num) {\n return Snap.deg(math.atan(num));\n};\n/*\\\n * Snap.atan2\n [ method ]\n **\n * Equivalent to `Math.atan2()` only works with degrees, not radians.\n - num (number) value\n = (number) atan2 in degrees\n\\*/\nSnap.atan2 = function (num) {\n return Snap.deg(math.atan2(num));\n};\n/*\\\n * Snap.angle\n [ method ]\n **\n * Returns an angle between two or three points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n - x3 (number) #optional x coord of third point\n - y3 (number) #optional y coord of third point\n = (number) angle in degrees\n\\*/\nSnap.angle = angle;\n/*\\\n * Snap.len\n [ method ]\n **\n * Returns distance between two points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n = (number) distance\n\\*/\nSnap.len = function (x1, y1, x2, y2) {\n return Math.sqrt(Snap.len2(x1, y1, x2, y2));\n};\n/*\\\n * Snap.len2\n [ method ]\n **\n * Returns squared distance between two points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n = (number) distance\n\\*/\nSnap.len2 = function (x1, y1, x2, y2) {\n return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n};\n/*\\\n * Snap.closestPoint\n [ method ]\n **\n * Returns closest point to a given one on a given path.\n - path (Element) path element\n - x (number) x coord of a point\n - y (number) y coord of a point\n = (object) in format\n {\n x (number) x coord of the point on the path\n y (number) y coord of the point on the path\n length (number) length of the path to the point\n distance (number) distance from the given point to the path\n }\n\\*/\n// Copied from http://bl.ocks.org/mbostock/8027637\nSnap.closestPoint = function (path, x, y) {\n function distance2(p) {\n var dx = p.x - x,\n dy = p.y - y;\n return dx * dx + dy * dy;\n }\n var pathNode = path.node,\n pathLength = pathNode.getTotalLength(),\n precision = pathLength / pathNode.pathSegList.numberOfItems * .125,\n best,\n bestLength,\n bestDistance = Infinity;\n\n // linear scan for coarse approximation\n for (var scan, scanLength = 0, scanDistance; scanLength <= pathLength; scanLength += precision) {\n if ((scanDistance = distance2(scan = pathNode.getPointAtLength(scanLength))) < bestDistance) {\n best = scan;\n bestLength = scanLength;\n bestDistance = scanDistance;\n }\n }\n\n // binary search for precise estimate\n precision *= .5;\n while (precision > .5) {\n var before,\n after,\n beforeLength,\n afterLength,\n beforeDistance,\n afterDistance;\n if ((beforeLength = bestLength - precision) >= 0 && (beforeDistance = distance2(before = pathNode.getPointAtLength(beforeLength))) < bestDistance) {\n best = before;\n bestLength = beforeLength;\n bestDistance = beforeDistance;\n } else if ((afterLength = bestLength + precision) <= pathLength && (afterDistance = distance2(after = pathNode.getPointAtLength(afterLength))) < bestDistance) {\n best = after;\n bestLength = afterLength;\n bestDistance = afterDistance;\n } else {\n precision *= .5;\n }\n }\n\n best = {\n x: best.x,\n y: best.y,\n length: bestLength,\n distance: Math.sqrt(bestDistance)\n };\n return best;\n}\n/*\\\n * Snap.is\n [ method ]\n **\n * Handy replacement for the `typeof` operator\n - o (…) any object or primitive\n - type (string) name of the type, e.g., `string`, `function`, `number`, etc.\n = (boolean) `true` if given value is of given type\n\\*/\nSnap.is = is;\n/*\\\n * Snap.snapTo\n [ method ]\n **\n * Snaps given value to given grid\n - values (array|number) given array of values or step of the grid\n - value (number) value to adjust\n - tolerance (number) #optional maximum distance to the target value that would trigger the snap. Default is `10`.\n = (number) adjusted value\n\\*/\nSnap.snapTo = function (values, value, tolerance) {\n tolerance = is(tolerance, \"finite\") ? tolerance : 10;\n if (is(values, \"array\")) {\n var i = values.length;\n while (i--) if (abs(values[i] - value) <= tolerance) {\n return values[i];\n }\n } else {\n values = +values;\n var rem = value % values;\n if (rem < tolerance) {\n return value - rem;\n }\n if (rem > values - tolerance) {\n return value - rem + values;\n }\n }\n return value;\n};\n// Colour\n/*\\\n * Snap.getRGB\n [ method ]\n **\n * Parses color string as RGB object\n - color (string) color string in one of the following formats:\n # \n # Color name (red, green, cornflowerblue, etc)\n # #••• — shortened HTML color: (#000, #fc0, etc.)\n # #•••••• — full length HTML color: (#000000, #bd2300)\n # rgb(•••, •••, •••) — red, green and blue channels values: (rgb(200, 100, 0))\n # rgba(•••, •••, •••, •••) — also with opacity\n # rgb(•••%, •••%, •••%) — same as above, but in %: (rgb(100%, 175%, 0%))\n # rgba(•••%, •••%, •••%, •••%) — also with opacity\n # hsb(•••, •••, •••) — hue, saturation and brightness values: (hsb(0.5, 0.25, 1))\n # hsba(•••, •••, •••, •••) — also with opacity\n # hsb(•••%, •••%, •••%) — same as above, but in %\n # hsba(•••%, •••%, •••%, •••%) — also with opacity\n # hsl(•••, •••, •••) — hue, saturation and luminosity values: (hsb(0.5, 0.25, 0.5))\n # hsla(•••, •••, •••, •••) — also with opacity\n # hsl(•••%, •••%, •••%) — same as above, but in %\n # hsla(•••%, •••%, •••%, •••%) — also with opacity\n # \n * Note that `%` can be used any time: `rgb(20%, 255, 50%)`.\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••,\n o error (boolean) true if string can't be parsed\n o }\n\\*/\nSnap.getRGB = cacher(function (colour) {\n if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n }\n if (colour == \"none\") {\n return {r: -1, g: -1, b: -1, hex: \"none\", toString: rgbtoString};\n }\n !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n if (!colour) {\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n }\n var res,\n red,\n green,\n blue,\n opacity,\n t,\n values,\n rgb = colour.match(colourRegExp);\n if (rgb) {\n if (rgb[2]) {\n blue = toInt(rgb[2].substring(5), 16);\n green = toInt(rgb[2].substring(3, 5), 16);\n red = toInt(rgb[2].substring(1, 3), 16);\n }\n if (rgb[3]) {\n blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n green = toInt((t = rgb[3].charAt(2)) + t, 16);\n red = toInt((t = rgb[3].charAt(1)) + t, 16);\n }\n if (rgb[4]) {\n values = rgb[4].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red *= 2.55);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green *= 2.55);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue *= 2.55);\n rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n }\n if (rgb[5]) {\n values = rgb[5].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red /= 100);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green /= 100);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue /= 100);\n (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n return Snap.hsb2rgb(red, green, blue, opacity);\n }\n if (rgb[6]) {\n values = rgb[6].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red /= 100);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green /= 100);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue /= 100);\n (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n return Snap.hsl2rgb(red, green, blue, opacity);\n }\n red = mmin(math.round(red), 255);\n green = mmin(math.round(green), 255);\n blue = mmin(math.round(blue), 255);\n opacity = mmin(mmax(opacity, 0), 1);\n rgb = {r: red, g: green, b: blue, toString: rgbtoString};\n rgb.hex = \"#\" + (16777216 | blue | green << 8 | red << 16).toString(16).slice(1);\n rgb.opacity = is(opacity, \"finite\") ? opacity : 1;\n return rgb;\n }\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n}, Snap);\n/*\\\n * Snap.hsb\n [ method ]\n **\n * Converts HSB values to a hex representation of the color\n - h (number) hue\n - s (number) saturation\n - b (number) value or brightness\n = (string) hex representation of the color\n\\*/\nSnap.hsb = cacher(function (h, s, b) {\n return Snap.hsb2rgb(h, s, b).hex;\n});\n/*\\\n * Snap.hsl\n [ method ]\n **\n * Converts HSL values to a hex representation of the color\n - h (number) hue\n - s (number) saturation\n - l (number) luminosity\n = (string) hex representation of the color\n\\*/\nSnap.hsl = cacher(function (h, s, l) {\n return Snap.hsl2rgb(h, s, l).hex;\n});\n/*\\\n * Snap.rgb\n [ method ]\n **\n * Converts RGB values to a hex representation of the color\n - r (number) red\n - g (number) green\n - b (number) blue\n = (string) hex representation of the color\n\\*/\nSnap.rgb = cacher(function (r, g, b, o) {\n if (is(o, \"finite\")) {\n var round = math.round;\n return \"rgba(\" + [round(r), round(g), round(b), +o.toFixed(2)] + \")\";\n }\n return \"#\" + (16777216 | b | g << 8 | r << 16).toString(16).slice(1);\n});\nvar toHex = function (color) {\n var i = glob.doc.getElementsByTagName(\"head\")[0] || glob.doc.getElementsByTagName(\"svg\")[0],\n red = \"rgb(255, 0, 0)\";\n toHex = cacher(function (color) {\n if (color.toLowerCase() == \"red\") {\n return red;\n }\n i.style.color = red;\n i.style.color = color;\n var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n return out == red ? null : out;\n });\n return toHex(color);\n},\nhsbtoString = function () {\n return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n},\nhsltoString = function () {\n return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n},\nrgbtoString = function () {\n return this.opacity == 1 || this.opacity == null ?\n this.hex :\n \"rgba(\" + [this.r, this.g, this.b, this.opacity] + \")\";\n},\nprepareRGB = function (r, g, b) {\n if (g == null && is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n b = r.b;\n g = r.g;\n r = r.r;\n }\n if (g == null && is(r, string)) {\n var clr = Snap.getRGB(r);\n r = clr.r;\n g = clr.g;\n b = clr.b;\n }\n if (r > 1 || g > 1 || b > 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n }\n\n return [r, g, b];\n},\npackageRGB = function (r, g, b, o) {\n r = math.round(r * 255);\n g = math.round(g * 255);\n b = math.round(b * 255);\n var rgb = {\n r: r,\n g: g,\n b: b,\n opacity: is(o, \"finite\") ? o : 1,\n hex: Snap.rgb(r, g, b),\n toString: rgbtoString\n };\n is(o, \"finite\") && (rgb.opacity = o);\n return rgb;\n};\n/*\\\n * Snap.color\n [ method ]\n **\n * Parses the color string and returns an object featuring the color's component values\n - clr (string) color string in one of the supported formats (see @Snap.getRGB)\n = (object) Combined RGB/HSB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••,\n o error (boolean) `true` if string can't be parsed,\n o h (number) hue,\n o s (number) saturation,\n o v (number) value (brightness),\n o l (number) lightness\n o }\n\\*/\nSnap.color = function (clr) {\n var rgb;\n if (is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n rgb = Snap.hsb2rgb(clr);\n clr.r = rgb.r;\n clr.g = rgb.g;\n clr.b = rgb.b;\n clr.opacity = 1;\n clr.hex = rgb.hex;\n } else if (is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n rgb = Snap.hsl2rgb(clr);\n clr.r = rgb.r;\n clr.g = rgb.g;\n clr.b = rgb.b;\n clr.opacity = 1;\n clr.hex = rgb.hex;\n } else {\n if (is(clr, \"string\")) {\n clr = Snap.getRGB(clr);\n }\n if (is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr && !(\"error\" in clr)) {\n rgb = Snap.rgb2hsl(clr);\n clr.h = rgb.h;\n clr.s = rgb.s;\n clr.l = rgb.l;\n rgb = Snap.rgb2hsb(clr);\n clr.v = rgb.b;\n } else {\n clr = {hex: \"none\"};\n clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n clr.error = 1;\n }\n }\n clr.toString = rgbtoString;\n return clr;\n};\n/*\\\n * Snap.hsb2rgb\n [ method ]\n **\n * Converts HSB values to an RGB object\n - h (number) hue\n - s (number) saturation\n - v (number) value or brightness\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••\n o }\n\\*/\nSnap.hsb2rgb = function (h, s, v, o) {\n if (is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n v = h.b;\n s = h.s;\n o = h.o;\n h = h.h;\n }\n h *= 360;\n var R, G, B, X, C;\n h = h % 360 / 60;\n C = v * s;\n X = C * (1 - abs(h % 2 - 1));\n R = G = B = v - C;\n\n h = ~~h;\n R += [C, X, 0, 0, X, C][h];\n G += [X, C, C, X, 0, 0][h];\n B += [0, 0, X, C, C, X][h];\n return packageRGB(R, G, B, o);\n};\n/*\\\n * Snap.hsl2rgb\n [ method ]\n **\n * Converts HSL values to an RGB object\n - h (number) hue\n - s (number) saturation\n - l (number) luminosity\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••\n o }\n\\*/\nSnap.hsl2rgb = function (h, s, l, o) {\n if (is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n l = h.l;\n s = h.s;\n h = h.h;\n }\n if (h > 1 || s > 1 || l > 1) {\n h /= 360;\n s /= 100;\n l /= 100;\n }\n h *= 360;\n var R, G, B, X, C;\n h = h % 360 / 60;\n C = 2 * s * (l < .5 ? l : 1 - l);\n X = C * (1 - abs(h % 2 - 1));\n R = G = B = l - C / 2;\n\n h = ~~h;\n R += [C, X, 0, 0, X, C][h];\n G += [X, C, C, X, 0, 0][h];\n B += [0, 0, X, C, C, X][h];\n return packageRGB(R, G, B, o);\n};\n/*\\\n * Snap.rgb2hsb\n [ method ]\n **\n * Converts RGB values to an HSB object\n - r (number) red\n - g (number) green\n - b (number) blue\n = (object) HSB object in the following format:\n o {\n o h (number) hue,\n o s (number) saturation,\n o b (number) brightness\n o }\n\\*/\nSnap.rgb2hsb = function (r, g, b) {\n b = prepareRGB(r, g, b);\n r = b[0];\n g = b[1];\n b = b[2];\n\n var H, S, V, C;\n V = mmax(r, g, b);\n C = V - mmin(r, g, b);\n H = C == 0 ? null :\n V == r ? (g - b) / C :\n V == g ? (b - r) / C + 2 :\n (r - g) / C + 4;\n H = (H + 360) % 6 * 60 / 360;\n S = C == 0 ? 0 : C / V;\n return {h: H, s: S, b: V, toString: hsbtoString};\n};\n/*\\\n * Snap.rgb2hsl\n [ method ]\n **\n * Converts RGB values to an HSL object\n - r (number) red\n - g (number) green\n - b (number) blue\n = (object) HSL object in the following format:\n o {\n o h (number) hue,\n o s (number) saturation,\n o l (number) luminosity\n o }\n\\*/\nSnap.rgb2hsl = function (r, g, b) {\n b = prepareRGB(r, g, b);\n r = b[0];\n g = b[1];\n b = b[2];\n\n var H, S, L, M, m, C;\n M = mmax(r, g, b);\n m = mmin(r, g, b);\n C = M - m;\n H = C == 0 ? null :\n M == r ? (g - b) / C :\n M == g ? (b - r) / C + 2 :\n (r - g) / C + 4;\n H = (H + 360) % 6 * 60 / 360;\n L = (M + m) / 2;\n S = C == 0 ? 0 :\n L < .5 ? C / (2 * L) :\n C / (2 - 2 * L);\n return {h: H, s: S, l: L, toString: hsltoString};\n};\n\n// Transformations\n/*\\\n * Snap.parsePathString\n [ method ]\n **\n * Utility method\n **\n * Parses given path string into an array of arrays of path segments\n - pathString (string|array) path string or array of segments (in the last case it is returned straight away)\n = (array) array of segments\n\\*/\nSnap.parsePathString = function (pathString) {\n if (!pathString) {\n return null;\n }\n var pth = Snap.path(pathString);\n if (pth.arr) {\n return Snap.path.clone(pth.arr);\n }\n\n var paramCounts = {a: 7, c: 6, o: 2, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, u: 3, z: 0},\n data = [];\n if (is(pathString, \"array\") && is(pathString[0], \"array\")) { // rough assumption\n data = Snap.path.clone(pathString);\n }\n if (!data.length) {\n Str(pathString).replace(pathCommand, function (a, b, c) {\n var params = [],\n name = b.toLowerCase();\n c.replace(pathValues, function (a, b) {\n b && params.push(+b);\n });\n if (name == \"m\" && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = \"l\";\n b = b == \"m\" ? \"l\" : \"L\";\n }\n if (name == \"o\" && params.length == 1) {\n data.push([b, params[0]]);\n }\n if (name == \"r\") {\n data.push([b].concat(params));\n } else while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n });\n }\n data.toString = Snap.path.toString;\n pth.arr = Snap.path.clone(data);\n return data;\n};\n/*\\\n * Snap.parseTransformString\n [ method ]\n **\n * Utility method\n **\n * Parses given transform string into an array of transformations\n - TString (string|array) transform string or array of transformations (in the last case it is returned straight away)\n = (array) array of transformations\n\\*/\nvar parseTransformString = Snap.parseTransformString = function (TString) {\n if (!TString) {\n return null;\n }\n var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n data = [];\n if (is(TString, \"array\") && is(TString[0], \"array\")) { // rough assumption\n data = Snap.path.clone(TString);\n }\n if (!data.length) {\n Str(TString).replace(tCommand, function (a, b, c) {\n var params = [],\n name = b.toLowerCase();\n c.replace(pathValues, function (a, b) {\n b && params.push(+b);\n });\n data.push([b].concat(params));\n });\n }\n data.toString = Snap.path.toString;\n return data;\n};\nfunction svgTransform2string(tstr) {\n var res = [];\n tstr = tstr.replace(/(?:^|\\s)(\\w+)\\(([^)]+)\\)/g, function (all, name, params) {\n params = params.split(/\\s*,\\s*|\\s+/);\n if (name == \"rotate\" && params.length == 1) {\n params.push(0, 0);\n }\n if (name == \"scale\") {\n if (params.length > 2) {\n params = params.slice(0, 2);\n } else if (params.length == 2) {\n params.push(0, 0);\n }\n if (params.length == 1) {\n params.push(params[0], 0, 0);\n }\n }\n if (name == \"skewX\") {\n res.push([\"m\", 1, 0, math.tan(rad(params[0])), 1, 0, 0]);\n } else if (name == \"skewY\") {\n res.push([\"m\", 1, math.tan(rad(params[0])), 0, 1, 0, 0]);\n } else {\n res.push([name.charAt(0)].concat(params));\n }\n return all;\n });\n return res;\n}\nSnap._.svgTransform2string = svgTransform2string;\nSnap._.rgTransform = /^[a-z][\\s]*-?\\.?\\d/i;\nfunction transform2matrix(tstr, bbox) {\n var tdata = parseTransformString(tstr),\n m = new Snap.Matrix;\n if (tdata) {\n for (var i = 0, ii = tdata.length; i < ii; i++) {\n var t = tdata[i],\n tlen = t.length,\n command = Str(t[0]).toLowerCase(),\n absolute = t[0] != command,\n inver = absolute ? m.invert() : 0,\n x1,\n y1,\n x2,\n y2,\n bb;\n if (command == \"t\" && tlen == 2){\n m.translate(t[1], 0);\n } else if (command == \"t\" && tlen == 3) {\n if (absolute) {\n x1 = inver.x(0, 0);\n y1 = inver.y(0, 0);\n x2 = inver.x(t[1], t[2]);\n y2 = inver.y(t[1], t[2]);\n m.translate(x2 - x1, y2 - y1);\n } else {\n m.translate(t[1], t[2]);\n }\n } else if (command == \"r\") {\n if (tlen == 2) {\n bb = bb || bbox;\n m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n } else if (tlen == 4) {\n if (absolute) {\n x2 = inver.x(t[2], t[3]);\n y2 = inver.y(t[2], t[3]);\n m.rotate(t[1], x2, y2);\n } else {\n m.rotate(t[1], t[2], t[3]);\n }\n }\n } else if (command == \"s\") {\n if (tlen == 2 || tlen == 3) {\n bb = bb || bbox;\n m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n } else if (tlen == 4) {\n if (absolute) {\n x2 = inver.x(t[2], t[3]);\n y2 = inver.y(t[2], t[3]);\n m.scale(t[1], t[1], x2, y2);\n } else {\n m.scale(t[1], t[1], t[2], t[3]);\n }\n } else if (tlen == 5) {\n if (absolute) {\n x2 = inver.x(t[3], t[4]);\n y2 = inver.y(t[3], t[4]);\n m.scale(t[1], t[2], x2, y2);\n } else {\n m.scale(t[1], t[2], t[3], t[4]);\n }\n }\n } else if (command == \"m\" && tlen == 7) {\n m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n }\n }\n }\n return m;\n}\nSnap._.transform2matrix = transform2matrix;\nSnap._unit2px = unit2px;\nvar contains = glob.doc.contains || glob.doc.compareDocumentPosition ?\n function (a, b) {\n var adown = a.nodeType == 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a == bup || !!(bup && bup.nodeType == 1 && (\n adown.contains ?\n adown.contains(bup) :\n a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n ));\n } :\n function (a, b) {\n if (b) {\n while (b) {\n b = b.parentNode;\n if (b == a) {\n return true;\n }\n }\n }\n return false;\n };\nfunction getSomeDefs(el) {\n var p = el.node.ownerSVGElement && wrap(el.node.ownerSVGElement) ||\n el.node.parentNode && wrap(el.node.parentNode) ||\n Snap.select(\"svg\") ||\n Snap(0, 0),\n pdefs = p.select(\"defs\"),\n defs = pdefs == null ? false : pdefs.node;\n if (!defs) {\n defs = make(\"defs\", p.node).node;\n }\n return defs;\n}\nfunction getSomeSVG(el) {\n return el.node.ownerSVGElement && wrap(el.node.ownerSVGElement) || Snap.select(\"svg\");\n}\nSnap._.getSomeDefs = getSomeDefs;\nSnap._.getSomeSVG = getSomeSVG;\nfunction unit2px(el, name, value) {\n var svg = getSomeSVG(el).node,\n out = {},\n mgr = svg.querySelector(\".svg---mgr\");\n if (!mgr) {\n mgr = $(\"rect\");\n $(mgr, {x: -9e9, y: -9e9, width: 10, height: 10, \"class\": \"svg---mgr\", fill: \"none\"});\n svg.appendChild(mgr);\n }\n function getW(val) {\n if (val == null) {\n return E;\n }\n if (val == +val) {\n return val;\n }\n $(mgr, {width: val});\n try {\n return mgr.getBBox().width;\n } catch (e) {\n return 0;\n }\n }\n function getH(val) {\n if (val == null) {\n return E;\n }\n if (val == +val) {\n return val;\n }\n $(mgr, {height: val});\n try {\n return mgr.getBBox().height;\n } catch (e) {\n return 0;\n }\n }\n function set(nam, f) {\n if (name == null) {\n out[nam] = f(el.attr(nam) || 0);\n } else if (nam == name) {\n out = f(value == null ? el.attr(nam) || 0 : value);\n }\n }\n switch (el.type) {\n case \"rect\":\n set(\"rx\", getW);\n set(\"ry\", getH);\n case \"image\":\n set(\"width\", getW);\n set(\"height\", getH);\n case \"text\":\n set(\"x\", getW);\n set(\"y\", getH);\n break;\n case \"circle\":\n set(\"cx\", getW);\n set(\"cy\", getH);\n set(\"r\", getW);\n break;\n case \"ellipse\":\n set(\"cx\", getW);\n set(\"cy\", getH);\n set(\"rx\", getW);\n set(\"ry\", getH);\n break;\n case \"line\":\n set(\"x1\", getW);\n set(\"x2\", getW);\n set(\"y1\", getH);\n set(\"y2\", getH);\n break;\n case \"marker\":\n set(\"refX\", getW);\n set(\"markerWidth\", getW);\n set(\"refY\", getH);\n set(\"markerHeight\", getH);\n break;\n case \"radialGradient\":\n set(\"fx\", getW);\n set(\"fy\", getH);\n break;\n case \"tspan\":\n set(\"dx\", getW);\n set(\"dy\", getH);\n break;\n default:\n set(name, getW);\n }\n svg.removeChild(mgr);\n return out;\n}\n/*\\\n * Snap.select\n [ method ]\n **\n * Wraps a DOM element specified by CSS selector as @Element\n - query (string) CSS selector of the element\n = (Element) the current element\n\\*/\nSnap.select = function (query) {\n query = Str(query).replace(/([^\\\\]):/g, \"$1\\\\:\");\n return wrap(glob.doc.querySelector(query));\n};\n/*\\\n * Snap.selectAll\n [ method ]\n **\n * Wraps DOM elements specified by CSS selector as set or array of @Element\n - query (string) CSS selector of the element\n = (Element) the current element\n\\*/\nSnap.selectAll = function (query) {\n var nodelist = glob.doc.querySelectorAll(query),\n set = (Snap.set || Array)();\n for (var i = 0; i < nodelist.length; i++) {\n set.push(wrap(nodelist[i]));\n }\n return set;\n};\n\nfunction add2group(list) {\n if (!is(list, \"array\")) {\n list = Array.prototype.slice.call(arguments, 0);\n }\n var i = 0,\n j = 0,\n node = this.node;\n while (this[i]) delete this[i++];\n for (i = 0; i < list.length; i++) {\n if (list[i].type == \"set\") {\n list[i].forEach(function (el) {\n node.appendChild(el.node);\n });\n } else {\n node.appendChild(list[i].node);\n }\n }\n var children = node.childNodes;\n for (i = 0; i < children.length; i++) {\n this[j++] = wrap(children[i]);\n }\n return this;\n}\n// Hub garbage collector every 10s\nsetInterval(function () {\n for (var key in hub) if (hub[has](key)) {\n var el = hub[key],\n node = el.node;\n if (el.type != \"svg\" && !node.ownerSVGElement || el.type == \"svg\" && (!node.parentNode || \"ownerSVGElement\" in node.parentNode && !node.ownerSVGElement)) {\n delete hub[key];\n }\n }\n}, 1e4);\nfunction Element(el) {\n if (el.snap in hub) {\n return hub[el.snap];\n }\n var svg;\n try {\n svg = el.ownerSVGElement;\n } catch(e) {}\n /*\\\n * Element.node\n [ property (object) ]\n **\n * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\n > Usage\n | // draw a circle at coordinate 10,10 with radius of 10\n | var c = paper.circle(10, 10, 10);\n | c.node.onclick = function () {\n | c.attr(\"fill\", \"red\");\n | };\n \\*/\n this.node = el;\n if (svg) {\n this.paper = new Paper(svg);\n }\n /*\\\n * Element.type\n [ property (string) ]\n **\n * SVG tag name of the given element.\n \\*/\n this.type = el.tagName || el.nodeName;\n var id = this.id = ID(this);\n this.anims = {};\n this._ = {\n transform: []\n };\n el.snap = id;\n hub[id] = this;\n if (this.type == \"g\") {\n this.add = add2group;\n }\n if (this.type in {g: 1, mask: 1, pattern: 1, symbol: 1}) {\n for (var method in Paper.prototype) if (Paper.prototype[has](method)) {\n this[method] = Paper.prototype[method];\n }\n }\n}\n /*\\\n * Element.attr\n [ method ]\n **\n * Gets or sets given attributes of the element.\n **\n - params (object) contains key-value pairs of attributes you want to set\n * or\n - param (string) name of the attribute\n = (Element) the current element\n * or\n = (string) value of attribute\n > Usage\n | el.attr({\n | fill: \"#fc0\",\n | stroke: \"#000\",\n | strokeWidth: 2, // CamelCase...\n | \"fill-opacity\": 0.5, // or dash-separated names\n | width: \"*=2\" // prefixed values\n | });\n | console.log(el.attr(\"fill\")); // #fc0\n * Prefixed values in format `\"+=10\"` supported. All four operations\n * (`+`, `-`, `*` and `/`) could be used. Optionally you can use units for `+`\n * and `-`: `\"+=2em\"`.\n \\*/\n Element.prototype.attr = function (params, value) {\n var el = this,\n node = el.node;\n if (!params) {\n if (node.nodeType != 1) {\n return {\n text: node.nodeValue\n };\n }\n var attr = node.attributes,\n out = {};\n for (var i = 0, ii = attr.length; i < ii; i++) {\n out[attr[i].nodeName] = attr[i].nodeValue;\n }\n return out;\n }\n if (is(params, \"string\")) {\n if (arguments.length > 1) {\n var json = {};\n json[params] = value;\n params = json;\n } else {\n return eve(\"snap.util.getattr.\" + params, el).firstDefined();\n }\n }\n for (var att in params) {\n if (params[has](att)) {\n eve(\"snap.util.attr.\" + att, el, params[att]);\n }\n }\n return el;\n };\n/*\\\n * Snap.parse\n [ method ]\n **\n * Parses SVG fragment and converts it into a @Fragment\n **\n - svg (string) SVG string\n = (Fragment) the @Fragment\n\\*/\nSnap.parse = function (svg) {\n var f = glob.doc.createDocumentFragment(),\n full = true,\n div = glob.doc.createElement(\"div\");\n svg = Str(svg);\n if (!svg.match(/^\\s*<\\s*svg(?:\\s|>)/)) {\n svg = \"\" + svg + \"\";\n full = false;\n }\n div.innerHTML = svg;\n svg = div.getElementsByTagName(\"svg\")[0];\n if (svg) {\n if (full) {\n f = svg;\n } else {\n while (svg.firstChild) {\n f.appendChild(svg.firstChild);\n }\n }\n }\n return new Fragment(f);\n};\nfunction Fragment(frag) {\n this.node = frag;\n}\n/*\\\n * Snap.fragment\n [ method ]\n **\n * Creates a DOM fragment from a given list of elements or strings\n **\n - varargs (…) SVG string\n = (Fragment) the @Fragment\n\\*/\nSnap.fragment = function () {\n var args = Array.prototype.slice.call(arguments, 0),\n f = glob.doc.createDocumentFragment();\n for (var i = 0, ii = args.length; i < ii; i++) {\n var item = args[i];\n if (item.node && item.node.nodeType) {\n f.appendChild(item.node);\n }\n if (item.nodeType) {\n f.appendChild(item);\n }\n if (typeof item == \"string\") {\n f.appendChild(Snap.parse(item).node);\n }\n }\n return new Fragment(f);\n};\n\nfunction make(name, parent) {\n var res = $(name);\n parent.appendChild(res);\n var el = wrap(res);\n return el;\n}\nfunction Paper(w, h) {\n var res,\n desc,\n defs,\n proto = Paper.prototype;\n if (w && w.tagName && w.tagName.toLowerCase() == \"svg\") {\n if (w.snap in hub) {\n return hub[w.snap];\n }\n var doc = w.ownerDocument;\n res = new Element(w);\n desc = w.getElementsByTagName(\"desc\")[0];\n defs = w.getElementsByTagName(\"defs\")[0];\n if (!desc) {\n desc = $(\"desc\");\n desc.appendChild(doc.createTextNode(\"Created with Snap\"));\n res.node.appendChild(desc);\n }\n if (!defs) {\n defs = $(\"defs\");\n res.node.appendChild(defs);\n }\n res.defs = defs;\n for (var key in proto) if (proto[has](key)) {\n res[key] = proto[key];\n }\n res.paper = res.root = res;\n } else {\n res = make(\"svg\", glob.doc.body);\n $(res.node, {\n height: h,\n version: 1.1,\n width: w,\n xmlns: xmlns\n });\n }\n return res;\n}\nfunction wrap(dom) {\n if (!dom) {\n return dom;\n }\n if (dom instanceof Element || dom instanceof Fragment) {\n return dom;\n }\n if (dom.tagName && dom.tagName.toLowerCase() == \"svg\") {\n return new Paper(dom);\n }\n if (dom.tagName && dom.tagName.toLowerCase() == \"object\" && dom.type == \"image/svg+xml\") {\n return new Paper(dom.contentDocument.getElementsByTagName(\"svg\")[0]);\n }\n return new Element(dom);\n}\n\nSnap._.make = make;\nSnap._.wrap = wrap;\n/*\\\n * Paper.el\n [ method ]\n **\n * Creates an element on paper with a given name and no attributes\n **\n - name (string) tag name\n - attr (object) attributes\n = (Element) the current element\n > Usage\n | var c = paper.circle(10, 10, 10); // is the same as...\n | var c = paper.el(\"circle\").attr({\n | cx: 10,\n | cy: 10,\n | r: 10\n | });\n | // and the same as\n | var c = paper.el(\"circle\", {\n | cx: 10,\n | cy: 10,\n | r: 10\n | });\n\\*/\nPaper.prototype.el = function (name, attr) {\n var el = make(name, this.node);\n attr && el.attr(attr);\n return el;\n};\n/*\\\n * Element.children\n [ method ]\n **\n * Returns array of all the children of the element.\n = (array) array of Elements\n\\*/\nElement.prototype.children = function () {\n var out = [],\n ch = this.node.childNodes;\n for (var i = 0, ii = ch.length; i < ii; i++) {\n out[i] = Snap(ch[i]);\n }\n return out;\n};\nfunction jsonFiller(root, o) {\n for (var i = 0, ii = root.length; i < ii; i++) {\n var item = {\n type: root[i].type,\n attr: root[i].attr()\n },\n children = root[i].children();\n o.push(item);\n if (children.length) {\n jsonFiller(children, item.childNodes = []);\n }\n }\n}\n/*\\\n * Element.toJSON\n [ method ]\n **\n * Returns object representation of the given element and all its children.\n = (object) in format\n o {\n o type (string) this.type,\n o attr (object) attributes map,\n o childNodes (array) optional array of children in the same format\n o }\n\\*/\nElement.prototype.toJSON = function () {\n var out = [];\n jsonFiller([this], out);\n return out[0];\n};\n// default\neve.on(\"snap.util.getattr\", function () {\n var att = eve.nt();\n att = att.substring(att.lastIndexOf(\".\") + 1);\n var css = att.replace(/[A-Z]/g, function (letter) {\n return \"-\" + letter.toLowerCase();\n });\n if (cssAttr[has](css)) {\n return this.node.ownerDocument.defaultView.getComputedStyle(this.node, null).getPropertyValue(css);\n } else {\n return $(this.node, att);\n }\n});\nvar cssAttr = {\n \"alignment-baseline\": 0,\n \"baseline-shift\": 0,\n \"clip\": 0,\n \"clip-path\": 0,\n \"clip-rule\": 0,\n \"color\": 0,\n \"color-interpolation\": 0,\n \"color-interpolation-filters\": 0,\n \"color-profile\": 0,\n \"color-rendering\": 0,\n \"cursor\": 0,\n \"direction\": 0,\n \"display\": 0,\n \"dominant-baseline\": 0,\n \"enable-background\": 0,\n \"fill\": 0,\n \"fill-opacity\": 0,\n \"fill-rule\": 0,\n \"filter\": 0,\n \"flood-color\": 0,\n \"flood-opacity\": 0,\n \"font\": 0,\n \"font-family\": 0,\n \"font-size\": 0,\n \"font-size-adjust\": 0,\n \"font-stretch\": 0,\n \"font-style\": 0,\n \"font-variant\": 0,\n \"font-weight\": 0,\n \"glyph-orientation-horizontal\": 0,\n \"glyph-orientation-vertical\": 0,\n \"image-rendering\": 0,\n \"kerning\": 0,\n \"letter-spacing\": 0,\n \"lighting-color\": 0,\n \"marker\": 0,\n \"marker-end\": 0,\n \"marker-mid\": 0,\n \"marker-start\": 0,\n \"mask\": 0,\n \"opacity\": 0,\n \"overflow\": 0,\n \"pointer-events\": 0,\n \"shape-rendering\": 0,\n \"stop-color\": 0,\n \"stop-opacity\": 0,\n \"stroke\": 0,\n \"stroke-dasharray\": 0,\n \"stroke-dashoffset\": 0,\n \"stroke-linecap\": 0,\n \"stroke-linejoin\": 0,\n \"stroke-miterlimit\": 0,\n \"stroke-opacity\": 0,\n \"stroke-width\": 0,\n \"text-anchor\": 0,\n \"text-decoration\": 0,\n \"text-rendering\": 0,\n \"unicode-bidi\": 0,\n \"visibility\": 0,\n \"word-spacing\": 0,\n \"writing-mode\": 0\n};\n\neve.on(\"snap.util.attr\", function (value) {\n var att = eve.nt(),\n attr = {};\n att = att.substring(att.lastIndexOf(\".\") + 1);\n attr[att] = value;\n var style = att.replace(/-(\\w)/gi, function (all, letter) {\n return letter.toUpperCase();\n }),\n css = att.replace(/[A-Z]/g, function (letter) {\n return \"-\" + letter.toLowerCase();\n });\n if (cssAttr[has](css)) {\n this.node.style[style] = value == null ? E : value;\n } else {\n $(this.node, attr);\n }\n});\n(function (proto) {}(Paper.prototype));\n\n// simple ajax\n/*\\\n * Snap.ajax\n [ method ]\n **\n * Simple implementation of Ajax\n **\n - url (string) URL\n - postData (object|string) data for post request\n - callback (function) callback\n - scope (object) #optional scope of callback\n * or\n - url (string) URL\n - callback (function) callback\n - scope (object) #optional scope of callback\n = (XMLHttpRequest) the XMLHttpRequest object, just in case\n\\*/\nSnap.ajax = function (url, postData, callback, scope){\n var req = new XMLHttpRequest,\n id = ID();\n if (req) {\n if (is(postData, \"function\")) {\n scope = callback;\n callback = postData;\n postData = null;\n } else if (is(postData, \"object\")) {\n var pd = [];\n for (var key in postData) if (postData.hasOwnProperty(key)) {\n pd.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(postData[key]));\n }\n postData = pd.join(\"&\");\n }\n req.open(postData ? \"POST\" : \"GET\", url, true);\n if (postData) {\n req.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n req.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n if (callback) {\n eve.once(\"snap.ajax.\" + id + \".0\", callback);\n eve.once(\"snap.ajax.\" + id + \".200\", callback);\n eve.once(\"snap.ajax.\" + id + \".304\", callback);\n }\n req.onreadystatechange = function() {\n if (req.readyState != 4) return;\n eve(\"snap.ajax.\" + id + \".\" + req.status, scope, req);\n };\n if (req.readyState == 4) {\n return req;\n }\n req.send(postData);\n return req;\n }\n};\n/*\\\n * Snap.load\n [ method ]\n **\n * Loads external SVG file as a @Fragment (see @Snap.ajax for more advanced AJAX)\n **\n - url (string) URL\n - callback (function) callback\n - scope (object) #optional scope of callback\n\\*/\nSnap.load = function (url, callback, scope) {\n Snap.ajax(url, function (req) {\n var f = Snap.parse(req.responseText);\n scope ? callback.call(scope, f) : callback(f);\n });\n};\nvar getOffset = function (elem) {\n var box = elem.getBoundingClientRect(),\n doc = elem.ownerDocument,\n body = doc.body,\n docElem = doc.documentElement,\n clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n top = box.top + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n return {\n y: top,\n x: left\n };\n};\n/*\\\n * Snap.getElementByPoint\n [ method ]\n **\n * Returns you topmost element under given point.\n **\n = (object) Snap element object\n - x (number) x coordinate from the top left corner of the window\n - y (number) y coordinate from the top left corner of the window\n > Usage\n | Snap.getElementByPoint(mouseX, mouseY).attr({stroke: \"#f00\"});\n\\*/\nSnap.getElementByPoint = function (x, y) {\n var paper = this,\n svg = paper.canvas,\n target = glob.doc.elementFromPoint(x, y);\n if (glob.win.opera && target.tagName == \"svg\") {\n var so = getOffset(target),\n sr = target.createSVGRect();\n sr.x = x - so.x;\n sr.y = y - so.y;\n sr.width = sr.height = 1;\n var hits = target.getIntersectionList(sr, null);\n if (hits.length) {\n target = hits[hits.length - 1];\n }\n }\n if (!target) {\n return null;\n }\n return wrap(target);\n};\n/*\\\n * Snap.plugin\n [ method ]\n **\n * Let you write plugins. You pass in a function with five arguments, like this:\n | Snap.plugin(function (Snap, Element, Paper, global, Fragment) {\n | Snap.newmethod = function () {};\n | Element.prototype.newmethod = function () {};\n | Paper.prototype.newmethod = function () {};\n | });\n * Inside the function you have access to all main objects (and their\n * prototypes). This allow you to extend anything you want.\n **\n - f (function) your plugin body\n\\*/\nSnap.plugin = function (f) {\n f(Snap, Element, Paper, glob, Fragment);\n};\nglob.win.Snap = Snap;\nreturn Snap;\n}(window || this));\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var elproto = Element.prototype,\n is = Snap.is,\n Str = String,\n unit2px = Snap._unit2px,\n $ = Snap._.$,\n make = Snap._.make,\n getSomeDefs = Snap._.getSomeDefs,\n has = \"hasOwnProperty\",\n wrap = Snap._.wrap;\n /*\\\n * Element.getBBox\n [ method ]\n **\n * Returns the bounding box descriptor for the given element\n **\n = (object) bounding box descriptor:\n o {\n o cx: (number) x of the center,\n o cy: (number) x of the center,\n o h: (number) height,\n o height: (number) height,\n o path: (string) path command for the box,\n o r0: (number) radius of a circle that fully encloses the box,\n o r1: (number) radius of the smallest circle that can be enclosed,\n o r2: (number) radius of the largest circle that can be enclosed,\n o vb: (string) box as a viewbox command,\n o w: (number) width,\n o width: (number) width,\n o x2: (number) x of the right side,\n o x: (number) x of the left side,\n o y2: (number) y of the bottom edge,\n o y: (number) y of the top edge\n o }\n \\*/\n elproto.getBBox = function (isWithoutTransform) {\n if (this.type == \"tspan\") {\n return Snap._.box(this.node.getClientRects().item(0));\n }\n if (!Snap.Matrix || !Snap.path) {\n return this.node.getBBox();\n }\n var el = this,\n m = new Snap.Matrix;\n if (el.removed) {\n return Snap._.box();\n }\n while (el.type == \"use\") {\n if (!isWithoutTransform) {\n m = m.add(el.transform().localMatrix.translate(el.attr(\"x\") || 0, el.attr(\"y\") || 0));\n }\n if (el.original) {\n el = el.original;\n } else {\n var href = el.attr(\"xlink:href\");\n el = el.original = el.node.ownerDocument.getElementById(href.substring(href.indexOf(\"#\") + 1));\n }\n }\n var _ = el._,\n pathfinder = Snap.path.get[el.type] || Snap.path.get.deflt;\n try {\n if (isWithoutTransform) {\n _.bboxwt = pathfinder ? Snap.path.getBBox(el.realPath = pathfinder(el)) : Snap._.box(el.node.getBBox());\n return Snap._.box(_.bboxwt);\n } else {\n el.realPath = pathfinder(el);\n el.matrix = el.transform().localMatrix;\n _.bbox = Snap.path.getBBox(Snap.path.map(el.realPath, m.add(el.matrix)));\n return Snap._.box(_.bbox);\n }\n } catch (e) {\n // Firefox doesn’t give you bbox of hidden element\n return Snap._.box();\n }\n };\n var propString = function () {\n return this.string;\n };\n function extractTransform(el, tstr) {\n if (tstr == null) {\n var doReturn = true;\n if (el.type == \"linearGradient\" || el.type == \"radialGradient\") {\n tstr = el.node.getAttribute(\"gradientTransform\");\n } else if (el.type == \"pattern\") {\n tstr = el.node.getAttribute(\"patternTransform\");\n } else {\n tstr = el.node.getAttribute(\"transform\");\n }\n if (!tstr) {\n return new Snap.Matrix;\n }\n tstr = Snap._.svgTransform2string(tstr);\n } else {\n if (!Snap._.rgTransform.test(tstr)) {\n tstr = Snap._.svgTransform2string(tstr);\n } else {\n tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || \"\");\n }\n if (is(tstr, \"array\")) {\n tstr = Snap.path ? Snap.path.toString.call(tstr) : Str(tstr);\n }\n el._.transform = tstr;\n }\n var m = Snap._.transform2matrix(tstr, el.getBBox(1));\n if (doReturn) {\n return m;\n } else {\n el.matrix = m;\n }\n }\n /*\\\n * Element.transform\n [ method ]\n **\n * Gets or sets transformation of the element\n **\n - tstr (string) transform string in Snap or SVG format\n = (Element) the current element\n * or\n = (object) transformation descriptor:\n o {\n o string (string) transform string,\n o globalMatrix (Matrix) matrix of all transformations applied to element or its parents,\n o localMatrix (Matrix) matrix of transformations applied only to the element,\n o diffMatrix (Matrix) matrix of difference between global and local transformations,\n o global (string) global transformation as string,\n o local (string) local transformation as string,\n o toString (function) returns `string` property\n o }\n \\*/\n elproto.transform = function (tstr) {\n var _ = this._;\n if (tstr == null) {\n var papa = this,\n global = new Snap.Matrix(this.node.getCTM()),\n local = extractTransform(this),\n ms = [local],\n m = new Snap.Matrix,\n i,\n localString = local.toTransformString(),\n string = Str(local) == Str(this.matrix) ?\n Str(_.transform) : localString;\n while (papa.type != \"svg\" && (papa = papa.parent())) {\n ms.push(extractTransform(papa));\n }\n i = ms.length;\n while (i--) {\n m.add(ms[i]);\n }\n return {\n string: string,\n globalMatrix: global,\n totalMatrix: m,\n localMatrix: local,\n diffMatrix: global.clone().add(local.invert()),\n global: global.toTransformString(),\n total: m.toTransformString(),\n local: localString,\n toString: propString\n };\n }\n if (tstr instanceof Snap.Matrix) {\n this.matrix = tstr;\n this._.transform = tstr.toTransformString();\n } else {\n extractTransform(this, tstr);\n }\n\n if (this.node) {\n if (this.type == \"linearGradient\" || this.type == \"radialGradient\") {\n $(this.node, {gradientTransform: this.matrix});\n } else if (this.type == \"pattern\") {\n $(this.node, {patternTransform: this.matrix});\n } else {\n $(this.node, {transform: this.matrix});\n }\n }\n\n return this;\n };\n /*\\\n * Element.parent\n [ method ]\n **\n * Returns the element's parent\n **\n = (Element) the parent element\n \\*/\n elproto.parent = function () {\n return wrap(this.node.parentNode);\n };\n /*\\\n * Element.append\n [ method ]\n **\n * Appends the given element to current one\n **\n - el (Element|Set) element to append\n = (Element) the parent element\n \\*/\n /*\\\n * Element.add\n [ method ]\n **\n * See @Element.append\n \\*/\n elproto.append = elproto.add = function (el) {\n if (el) {\n if (el.type == \"set\") {\n var it = this;\n el.forEach(function (el) {\n it.add(el);\n });\n return this;\n }\n el = wrap(el);\n this.node.appendChild(el.node);\n el.paper = this.paper;\n }\n return this;\n };\n /*\\\n * Element.appendTo\n [ method ]\n **\n * Appends the current element to the given one\n **\n - el (Element) parent element to append to\n = (Element) the child element\n \\*/\n elproto.appendTo = function (el) {\n if (el) {\n el = wrap(el);\n el.append(this);\n }\n return this;\n };\n /*\\\n * Element.prepend\n [ method ]\n **\n * Prepends the given element to the current one\n **\n - el (Element) element to prepend\n = (Element) the parent element\n \\*/\n elproto.prepend = function (el) {\n if (el) {\n if (el.type == \"set\") {\n var it = this,\n first;\n el.forEach(function (el) {\n if (first) {\n first.after(el);\n } else {\n it.prepend(el);\n }\n first = el;\n });\n return this;\n }\n el = wrap(el);\n var parent = el.parent();\n this.node.insertBefore(el.node, this.node.firstChild);\n this.add && this.add();\n el.paper = this.paper;\n this.parent() && this.parent().add();\n parent && parent.add();\n }\n return this;\n };\n /*\\\n * Element.prependTo\n [ method ]\n **\n * Prepends the current element to the given one\n **\n - el (Element) parent element to prepend to\n = (Element) the child element\n \\*/\n elproto.prependTo = function (el) {\n el = wrap(el);\n el.prepend(this);\n return this;\n };\n /*\\\n * Element.before\n [ method ]\n **\n * Inserts given element before the current one\n **\n - el (Element) element to insert\n = (Element) the parent element\n \\*/\n elproto.before = function (el) {\n if (el.type == \"set\") {\n var it = this;\n el.forEach(function (el) {\n var parent = el.parent();\n it.node.parentNode.insertBefore(el.node, it.node);\n parent && parent.add();\n });\n this.parent().add();\n return this;\n }\n el = wrap(el);\n var parent = el.parent();\n this.node.parentNode.insertBefore(el.node, this.node);\n this.parent() && this.parent().add();\n parent && parent.add();\n el.paper = this.paper;\n return this;\n };\n /*\\\n * Element.after\n [ method ]\n **\n * Inserts given element after the current one\n **\n - el (Element) element to insert\n = (Element) the parent element\n \\*/\n elproto.after = function (el) {\n el = wrap(el);\n var parent = el.parent();\n if (this.node.nextSibling) {\n this.node.parentNode.insertBefore(el.node, this.node.nextSibling);\n } else {\n this.node.parentNode.appendChild(el.node);\n }\n this.parent() && this.parent().add();\n parent && parent.add();\n el.paper = this.paper;\n return this;\n };\n /*\\\n * Element.insertBefore\n [ method ]\n **\n * Inserts the element after the given one\n **\n - el (Element) element next to whom insert to\n = (Element) the parent element\n \\*/\n elproto.insertBefore = function (el) {\n el = wrap(el);\n var parent = this.parent();\n el.node.parentNode.insertBefore(this.node, el.node);\n this.paper = el.paper;\n parent && parent.add();\n el.parent() && el.parent().add();\n return this;\n };\n /*\\\n * Element.insertAfter\n [ method ]\n **\n * Inserts the element after the given one\n **\n - el (Element) element next to whom insert to\n = (Element) the parent element\n \\*/\n elproto.insertAfter = function (el) {\n el = wrap(el);\n var parent = this.parent();\n el.node.parentNode.insertBefore(this.node, el.node.nextSibling);\n this.paper = el.paper;\n parent && parent.add();\n el.parent() && el.parent().add();\n return this;\n };\n /*\\\n * Element.remove\n [ method ]\n **\n * Removes element from the DOM\n = (Element) the detached element\n \\*/\n elproto.remove = function () {\n var parent = this.parent();\n this.node.parentNode && this.node.parentNode.removeChild(this.node);\n delete this.paper;\n this.removed = true;\n parent && parent.add();\n return this;\n };\n /*\\\n * Element.select\n [ method ]\n **\n * Gathers the nested @Element matching the given set of CSS selectors\n **\n - query (string) CSS selector\n = (Element) result of query selection\n \\*/\n elproto.select = function (query) {\n return wrap(this.node.querySelector(query));\n };\n /*\\\n * Element.selectAll\n [ method ]\n **\n * Gathers nested @Element objects matching the given set of CSS selectors\n **\n - query (string) CSS selector\n = (Set|array) result of query selection\n \\*/\n elproto.selectAll = function (query) {\n var nodelist = this.node.querySelectorAll(query),\n set = (Snap.set || Array)();\n for (var i = 0; i < nodelist.length; i++) {\n set.push(wrap(nodelist[i]));\n }\n return set;\n };\n /*\\\n * Element.asPX\n [ method ]\n **\n * Returns given attribute of the element as a `px` value (not %, em, etc.)\n **\n - attr (string) attribute name\n - value (string) #optional attribute value\n = (Element) result of query selection\n \\*/\n elproto.asPX = function (attr, value) {\n if (value == null) {\n value = this.attr(attr);\n }\n return +unit2px(this, attr, value);\n };\n // SIERRA Element.use(): I suggest adding a note about how to access the original element the returned instantiates. It's a part of SVG with which ordinary web developers may be least familiar.\n /*\\\n * Element.use\n [ method ]\n **\n * Creates a `` element linked to the current element\n **\n = (Element) the `` element\n \\*/\n elproto.use = function () {\n var use,\n id = this.node.id;\n if (!id) {\n id = this.id;\n $(this.node, {\n id: id\n });\n }\n if (this.type == \"linearGradient\" || this.type == \"radialGradient\" ||\n this.type == \"pattern\") {\n use = make(this.type, this.node.parentNode);\n } else {\n use = make(\"use\", this.node.parentNode);\n }\n $(use.node, {\n \"xlink:href\": \"#\" + id\n });\n use.original = this;\n return use;\n };\n function fixids(el) {\n var els = el.selectAll(\"*\"),\n it,\n url = /^\\s*url\\((\"|'|)(.*)\\1\\)\\s*$/,\n ids = [],\n uses = {};\n function urltest(it, name) {\n var val = $(it.node, name);\n val = val && val.match(url);\n val = val && val[2];\n if (val && val.charAt() == \"#\") {\n val = val.substring(1);\n } else {\n return;\n }\n if (val) {\n uses[val] = (uses[val] || []).concat(function (id) {\n var attr = {};\n attr[name] = Snap.url(id);\n $(it.node, attr);\n });\n }\n }\n function linktest(it) {\n var val = $(it.node, \"xlink:href\");\n if (val && val.charAt() == \"#\") {\n val = val.substring(1);\n } else {\n return;\n }\n if (val) {\n uses[val] = (uses[val] || []).concat(function (id) {\n it.attr(\"xlink:href\", \"#\" + id);\n });\n }\n }\n for (var i = 0, ii = els.length; i < ii; i++) {\n it = els[i];\n urltest(it, \"fill\");\n urltest(it, \"stroke\");\n urltest(it, \"filter\");\n urltest(it, \"mask\");\n urltest(it, \"clip-path\");\n linktest(it);\n var oldid = $(it.node, \"id\");\n if (oldid) {\n $(it.node, {id: it.id});\n ids.push({\n old: oldid,\n id: it.id\n });\n }\n }\n for (i = 0, ii = ids.length; i < ii; i++) {\n var fs = uses[ids[i].old];\n if (fs) {\n for (var j = 0, jj = fs.length; j < jj; j++) {\n fs[j](ids[i].id);\n }\n }\n }\n }\n /*\\\n * Element.clone\n [ method ]\n **\n * Creates a clone of the element and inserts it after the element\n **\n = (Element) the clone\n \\*/\n elproto.clone = function () {\n var clone = wrap(this.node.cloneNode(true));\n if ($(clone.node, \"id\")) {\n $(clone.node, {id: clone.id});\n }\n fixids(clone);\n clone.insertAfter(this);\n return clone;\n };\n /*\\\n * Element.toDefs\n [ method ]\n **\n * Moves element to the shared `` area\n **\n = (Element) the element\n \\*/\n elproto.toDefs = function () {\n var defs = getSomeDefs(this);\n defs.appendChild(this.node);\n return this;\n };\n /*\\\n * Element.toPattern\n [ method ]\n **\n * Creates a `` element from the current element\n **\n * To create a pattern you have to specify the pattern rect:\n - x (string|number)\n - y (string|number)\n - width (string|number)\n - height (string|number)\n = (Element) the `` element\n * You can use pattern later on as an argument for `fill` attribute:\n | var p = paper.path(\"M10-5-10,15M15,0,0,15M0-5-20,15\").attr({\n | fill: \"none\",\n | stroke: \"#bada55\",\n | strokeWidth: 5\n | }).pattern(0, 0, 10, 10),\n | c = paper.circle(200, 200, 100);\n | c.attr({\n | fill: p\n | });\n \\*/\n elproto.pattern = elproto.toPattern = function (x, y, width, height) {\n var p = make(\"pattern\", getSomeDefs(this));\n if (x == null) {\n x = this.getBBox();\n }\n if (is(x, \"object\") && \"x\" in x) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n $(p.node, {\n x: x,\n y: y,\n width: width,\n height: height,\n patternUnits: \"userSpaceOnUse\",\n id: p.id,\n viewBox: [x, y, width, height].join(\" \")\n });\n p.node.appendChild(this.node);\n return p;\n };\n// SIERRA Element.marker(): clarify what a reference point is. E.g., helps you offset the object from its edge such as when centering it over a path.\n// SIERRA Element.marker(): I suggest the method should accept default reference point values. Perhaps centered with (refX = width/2) and (refY = height/2)? Also, couldn't it assume the element's current _width_ and _height_? And please specify what _x_ and _y_ mean: offsets? If so, from where? Couldn't they also be assigned default values?\n /*\\\n * Element.marker\n [ method ]\n **\n * Creates a `` element from the current element\n **\n * To create a marker you have to specify the bounding rect and reference point:\n - x (number)\n - y (number)\n - width (number)\n - height (number)\n - refX (number)\n - refY (number)\n = (Element) the `` element\n * You can specify the marker later as an argument for `marker-start`, `marker-end`, `marker-mid`, and `marker` attributes. The `marker` attribute places the marker at every point along the path, and `marker-mid` places them at every point except the start and end.\n \\*/\n // TODO add usage for markers\n elproto.marker = function (x, y, width, height, refX, refY) {\n var p = make(\"marker\", getSomeDefs(this));\n if (x == null) {\n x = this.getBBox();\n }\n if (is(x, \"object\") && \"x\" in x) {\n y = x.y;\n width = x.width;\n height = x.height;\n refX = x.refX || x.cx;\n refY = x.refY || x.cy;\n x = x.x;\n }\n $(p.node, {\n viewBox: [x, y, width, height].join(\" \"),\n markerWidth: width,\n markerHeight: height,\n orient: \"auto\",\n refX: refX || 0,\n refY: refY || 0,\n id: p.id\n });\n p.node.appendChild(this.node);\n return p;\n };\n var eldata = {};\n /*\\\n * Element.data\n [ method ]\n **\n * Adds or retrieves given value associated with given key. (Don’t confuse\n * with `data-` attributes)\n *\n * See also @Element.removeData\n - key (string) key to store data\n - value (any) #optional value to store\n = (object) @Element\n * or, if value is not specified:\n = (any) value\n > Usage\n | for (var i = 0, i < 5, i++) {\n | paper.circle(10 + 15 * i, 10, 10)\n | .attr({fill: \"#000\"})\n | .data(\"i\", i)\n | .click(function () {\n | alert(this.data(\"i\"));\n | });\n | }\n \\*/\n elproto.data = function (key, value) {\n var data = eldata[this.id] = eldata[this.id] || {};\n if (arguments.length == 0){\n eve(\"snap.data.get.\" + this.id, this, data, null);\n return data;\n }\n if (arguments.length == 1) {\n if (Snap.is(key, \"object\")) {\n for (var i in key) if (key[has](i)) {\n this.data(i, key[i]);\n }\n return this;\n }\n eve(\"snap.data.get.\" + this.id, this, data[key], key);\n return data[key];\n }\n data[key] = value;\n eve(\"snap.data.set.\" + this.id, this, value, key);\n return this;\n };\n /*\\\n * Element.removeData\n [ method ]\n **\n * Removes value associated with an element by given key.\n * If key is not provided, removes all the data of the element.\n - key (string) #optional key\n = (object) @Element\n \\*/\n elproto.removeData = function (key) {\n if (key == null) {\n eldata[this.id] = {};\n } else {\n eldata[this.id] && delete eldata[this.id][key];\n }\n return this;\n };\n /*\\\n * Element.outerSVG\n [ method ]\n **\n * Returns SVG code for the element, equivalent to HTML's `outerHTML`.\n *\n * See also @Element.innerSVG\n = (string) SVG code for the element\n \\*/\n /*\\\n * Element.toString\n [ method ]\n **\n * See @Element.outerSVG\n \\*/\n elproto.outerSVG = elproto.toString = toString(1);\n /*\\\n * Element.innerSVG\n [ method ]\n **\n * Returns SVG code for the element's contents, equivalent to HTML's `innerHTML`\n = (string) SVG code for the element\n \\*/\n elproto.innerSVG = toString();\n function toString(type) {\n return function () {\n var res = type ? \"<\" + this.type : \"\",\n attr = this.node.attributes,\n chld = this.node.childNodes;\n if (type) {\n for (var i = 0, ii = attr.length; i < ii; i++) {\n res += \" \" + attr[i].name + '=\"' +\n attr[i].value.replace(/\"/g, '\\\\\"') + '\"';\n }\n }\n if (chld.length) {\n type && (res += \">\");\n for (i = 0, ii = chld.length; i < ii; i++) {\n if (chld[i].nodeType == 3) {\n res += chld[i].nodeValue;\n } else if (chld[i].nodeType == 1) {\n res += wrap(chld[i]).toString();\n }\n }\n type && (res += \"\" + this.type + \">\");\n } else {\n type && (res += \"/>\");\n }\n return res;\n };\n }\n elproto.toDataURL = function () {\n if (window && window.btoa) {\n var bb = this.getBBox(),\n svg = Snap.format('{contents}', {\n x: +bb.x.toFixed(3),\n y: +bb.y.toFixed(3),\n width: +bb.width.toFixed(3),\n height: +bb.height.toFixed(3),\n contents: this.outerSVG()\n });\n return \"data:image/svg+xml;base64,\" + btoa(unescape(encodeURIComponent(svg)));\n }\n };\n /*\\\n * Fragment.select\n [ method ]\n **\n * See @Element.select\n \\*/\n Fragment.prototype.select = elproto.select;\n /*\\\n * Fragment.selectAll\n [ method ]\n **\n * See @Element.selectAll\n \\*/\n Fragment.prototype.selectAll = elproto.selectAll;\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var objectToString = Object.prototype.toString,\n Str = String,\n math = Math,\n E = \"\";\n function Matrix(a, b, c, d, e, f) {\n if (b == null && objectToString.call(a) == \"[object SVGMatrix]\") {\n this.a = a.a;\n this.b = a.b;\n this.c = a.c;\n this.d = a.d;\n this.e = a.e;\n this.f = a.f;\n return;\n }\n if (a != null) {\n this.a = +a;\n this.b = +b;\n this.c = +c;\n this.d = +d;\n this.e = +e;\n this.f = +f;\n } else {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n }\n }\n (function (matrixproto) {\n /*\\\n * Matrix.add\n [ method ]\n **\n * Adds the given matrix to existing one\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - matrix (object) @Matrix\n \\*/\n matrixproto.add = function (a, b, c, d, e, f) {\n if (a && a instanceof Matrix) {\n return this.add(a.a, a.b, a.c, a.d, a.e, a.f);\n }\n var aNew = a * this.a + b * this.c,\n bNew = a * this.b + b * this.d;\n this.e += e * this.a + f * this.c;\n this.f += e * this.b + f * this.d;\n this.c = c * this.a + d * this.c;\n this.d = c * this.b + d * this.d;\n\n this.a = aNew;\n this.b = bNew;\n return this;\n };\n /*\\\n * Matrix.multLeft\n [ method ]\n **\n * Multiplies a passed affine transform to the left: M * this.\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - matrix (object) @Matrix\n \\*/\n Matrix.prototype.multLeft = function (a, b, c, d, e, f) {\n if (a && a instanceof Matrix) {\n return this.multLeft(a.a, a.b, a.c, a.d, a.e, a.f);\n }\n var aNew = a * this.a + c * this.b,\n cNew = a * this.c + c * this.d,\n eNew = a * this.e + c * this.f + e;\n this.b = b * this.a + d * this.b;\n this.d = b * this.c + d * this.d;\n this.f = b * this.e + d * this.f + f;\n\n this.a = aNew;\n this.c = cNew;\n this.e = eNew;\n return this;\n };\n /*\\\n * Matrix.invert\n [ method ]\n **\n * Returns an inverted version of the matrix\n = (object) @Matrix\n \\*/\n matrixproto.invert = function () {\n var me = this,\n x = me.a * me.d - me.b * me.c;\n return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\n };\n /*\\\n * Matrix.clone\n [ method ]\n **\n * Returns a copy of the matrix\n = (object) @Matrix\n \\*/\n matrixproto.clone = function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n /*\\\n * Matrix.translate\n [ method ]\n **\n * Translate the matrix\n - x (number) horizontal offset distance\n - y (number) vertical offset distance\n \\*/\n matrixproto.translate = function (x, y) {\n this.e += x * this.a + y * this.c;\n this.f += x * this.b + y * this.d;\n return this;\n };\n /*\\\n * Matrix.scale\n [ method ]\n **\n * Scales the matrix\n - x (number) amount to be scaled, with `1` resulting in no change\n - y (number) #optional amount to scale along the vertical axis. (Otherwise `x` applies to both axes.)\n - cx (number) #optional horizontal origin point from which to scale\n - cy (number) #optional vertical origin point from which to scale\n * Default cx, cy is the middle point of the element.\n \\*/\n matrixproto.scale = function (x, y, cx, cy) {\n y == null && (y = x);\n (cx || cy) && this.translate(cx, cy);\n this.a *= x;\n this.b *= x;\n this.c *= y;\n this.d *= y;\n (cx || cy) && this.translate(-cx, -cy);\n return this;\n };\n /*\\\n * Matrix.rotate\n [ method ]\n **\n * Rotates the matrix\n - a (number) angle of rotation, in degrees\n - x (number) horizontal origin point from which to rotate\n - y (number) vertical origin point from which to rotate\n \\*/\n matrixproto.rotate = function (a, x, y) {\n a = Snap.rad(a);\n x = x || 0;\n y = y || 0;\n var cos = +math.cos(a).toFixed(9),\n sin = +math.sin(a).toFixed(9);\n this.add(cos, sin, -sin, cos, x, y);\n return this.add(1, 0, 0, 1, -x, -y);\n };\n /*\\\n * Matrix.skewX\n [ method ]\n **\n * Skews the matrix along the x-axis\n - x (number) Angle to skew along the x-axis (in degrees).\n \\*/\n matrixproto.skewX = function (x) {\n return this.skew(x, 0);\n };\n /*\\\n * Matrix.skewY\n [ method ]\n **\n * Skews the matrix along the y-axis\n - y (number) Angle to skew along the y-axis (in degrees).\n \\*/\n matrixproto.skewY = function (y) {\n return this.skew(0, y);\n };\n /*\\\n * Matrix.skew\n [ method ]\n **\n * Skews the matrix\n - y (number) Angle to skew along the y-axis (in degrees).\n - x (number) Angle to skew along the x-axis (in degrees).\n \\*/\n matrixproto.skew = function (x, y) {\n x = x || 0;\n y = y || 0;\n x = Snap.rad(x);\n y = Snap.rad(y);\n var c = math.tan(x).toFixed(9);\n var b = math.tan(y).toFixed(9);\n return this.add(1, b, c, 1, 0, 0);\n };\n /*\\\n * Matrix.x\n [ method ]\n **\n * Returns x coordinate for given point after transformation described by the matrix. See also @Matrix.y\n - x (number)\n - y (number)\n = (number) x\n \\*/\n matrixproto.x = function (x, y) {\n return x * this.a + y * this.c + this.e;\n };\n /*\\\n * Matrix.y\n [ method ]\n **\n * Returns y coordinate for given point after transformation described by the matrix. See also @Matrix.x\n - x (number)\n - y (number)\n = (number) y\n \\*/\n matrixproto.y = function (x, y) {\n return x * this.b + y * this.d + this.f;\n };\n matrixproto.get = function (i) {\n return +this[Str.fromCharCode(97 + i)].toFixed(4);\n };\n matrixproto.toString = function () {\n return \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\";\n };\n matrixproto.offset = function () {\n return [this.e.toFixed(4), this.f.toFixed(4)];\n };\n function norm(a) {\n return a[0] * a[0] + a[1] * a[1];\n }\n function normalize(a) {\n var mag = math.sqrt(norm(a));\n a[0] && (a[0] /= mag);\n a[1] && (a[1] /= mag);\n }\n /*\\\n * Matrix.determinant\n [ method ]\n **\n * Finds determinant of the given matrix.\n = (number) determinant\n \\*/\n matrixproto.determinant = function () {\n return this.a * this.d - this.b * this.c;\n };\n /*\\\n * Matrix.split\n [ method ]\n **\n * Splits matrix into primitive transformations\n = (object) in format:\n o dx (number) translation by x\n o dy (number) translation by y\n o scalex (number) scale by x\n o scaley (number) scale by y\n o shear (number) shear\n o rotate (number) rotation in deg\n o isSimple (boolean) could it be represented via simple transformations\n \\*/\n matrixproto.split = function () {\n var out = {};\n // translation\n out.dx = this.e;\n out.dy = this.f;\n\n // scale and shear\n var row = [[this.a, this.b], [this.c, this.d]];\n out.scalex = math.sqrt(norm(row[0]));\n normalize(row[0]);\n\n out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n out.scaley = math.sqrt(norm(row[1]));\n normalize(row[1]);\n out.shear /= out.scaley;\n\n if (this.determinant() < 0) {\n out.scalex = -out.scalex;\n }\n\n // rotation\n var sin = row[0][1],\n cos = row[1][1];\n if (cos < 0) {\n out.rotate = Snap.deg(math.acos(cos));\n if (sin < 0) {\n out.rotate = 360 - out.rotate;\n }\n } else {\n out.rotate = Snap.deg(math.asin(sin));\n }\n\n out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n return out;\n };\n /*\\\n * Matrix.toTransformString\n [ method ]\n **\n * Returns transform string that represents given matrix\n = (string) transform string\n \\*/\n matrixproto.toTransformString = function (shorter) {\n var s = shorter || this.split();\n if (!+s.shear.toFixed(9)) {\n s.scalex = +s.scalex.toFixed(4);\n s.scaley = +s.scaley.toFixed(4);\n s.rotate = +s.rotate.toFixed(4);\n return (s.dx || s.dy ? \"t\" + [+s.dx.toFixed(4), +s.dy.toFixed(4)] : E) +\n (s.rotate ? \"r\" + [+s.rotate.toFixed(4), 0, 0] : E) +\n (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E);\n } else {\n return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n }\n };\n })(Matrix.prototype);\n /*\\\n * Snap.Matrix\n [ method ]\n **\n * Matrix constructor, extend on your own risk.\n * To create matrices use @Snap.matrix.\n \\*/\n Snap.Matrix = Matrix;\n /*\\\n * Snap.matrix\n [ method ]\n **\n * Utility method\n **\n * Returns a matrix based on the given parameters\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - svgMatrix (SVGMatrix)\n = (object) @Matrix\n \\*/\n Snap.matrix = function (a, b, c, d, e, f) {\n return new Matrix(a, b, c, d, e, f);\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var has = \"hasOwnProperty\",\n make = Snap._.make,\n wrap = Snap._.wrap,\n is = Snap.is,\n getSomeDefs = Snap._.getSomeDefs,\n reURLValue = /^url\\((['\"]?)([^)]+)\\1\\)$/,\n $ = Snap._.$,\n URL = Snap.url,\n Str = String,\n separator = Snap._.separator,\n E = \"\";\n /*\\\n * Snap.deurl\n [ method ]\n **\n * Unwraps path from `\"url()\"`.\n - value (string) url path\n = (string) unwrapped path\n \\*/\n Snap.deurl = function (value) {\n var res = String(value).match(reURLValue);\n return res ? res[2] : value;\n }\n // Attributes event handlers\n eve.on(\"snap.util.attr.mask\", function (value) {\n if (value instanceof Element || value instanceof Fragment) {\n eve.stop();\n if (value instanceof Fragment && value.node.childNodes.length == 1) {\n value = value.node.firstChild;\n getSomeDefs(this).appendChild(value);\n value = wrap(value);\n }\n if (value.type == \"mask\") {\n var mask = value;\n } else {\n mask = make(\"mask\", getSomeDefs(this));\n mask.node.appendChild(value.node);\n }\n !mask.node.id && $(mask.node, {\n id: mask.id\n });\n $(this.node, {\n mask: URL(mask.id)\n });\n }\n });\n (function (clipIt) {\n eve.on(\"snap.util.attr.clip\", clipIt);\n eve.on(\"snap.util.attr.clip-path\", clipIt);\n eve.on(\"snap.util.attr.clipPath\", clipIt);\n }(function (value) {\n if (value instanceof Element || value instanceof Fragment) {\n eve.stop();\n var clip,\n node = value.node;\n while (node) {\n if (node.nodeName === \"clipPath\") {\n clip = new Element(node);\n break;\n }\n if (node.nodeName === \"svg\") {\n clip = undefined;\n break;\n }\n node = node.parentNode;\n }\n if (!clip) {\n clip = make(\"clipPath\", getSomeDefs(this));\n clip.node.appendChild(value.node);\n !clip.node.id && $(clip.node, {\n id: clip.id\n });\n }\n $(this.node, {\n \"clip-path\": URL(clip.node.id || clip.id)\n });\n }\n }));\n function fillStroke(name) {\n return function (value) {\n eve.stop();\n if (value instanceof Fragment && value.node.childNodes.length == 1 &&\n (value.node.firstChild.tagName == \"radialGradient\" ||\n value.node.firstChild.tagName == \"linearGradient\" ||\n value.node.firstChild.tagName == \"pattern\")) {\n value = value.node.firstChild;\n getSomeDefs(this).appendChild(value);\n value = wrap(value);\n }\n if (value instanceof Element) {\n if (value.type == \"radialGradient\" || value.type == \"linearGradient\"\n || value.type == \"pattern\") {\n if (!value.node.id) {\n $(value.node, {\n id: value.id\n });\n }\n var fill = URL(value.node.id);\n } else {\n fill = value.attr(name);\n }\n } else {\n fill = Snap.color(value);\n if (fill.error) {\n var grad = Snap(getSomeDefs(this).ownerSVGElement).gradient(value);\n if (grad) {\n if (!grad.node.id) {\n $(grad.node, {\n id: grad.id\n });\n }\n fill = URL(grad.node.id);\n } else {\n fill = value;\n }\n } else {\n fill = Str(fill);\n }\n }\n var attrs = {};\n attrs[name] = fill;\n $(this.node, attrs);\n this.node.style[name] = E;\n };\n }\n eve.on(\"snap.util.attr.fill\", fillStroke(\"fill\"));\n eve.on(\"snap.util.attr.stroke\", fillStroke(\"stroke\"));\n var gradrg = /^([lr])(?:\\(([^)]*)\\))?(.*)$/i;\n eve.on(\"snap.util.grad.parse\", function parseGrad(string) {\n string = Str(string);\n var tokens = string.match(gradrg);\n if (!tokens) {\n return null;\n }\n var type = tokens[1],\n params = tokens[2],\n stops = tokens[3];\n params = params.split(/\\s*,\\s*/).map(function (el) {\n return +el == el ? +el : el;\n });\n if (params.length == 1 && params[0] == 0) {\n params = [];\n }\n stops = stops.split(\"-\");\n stops = stops.map(function (el) {\n el = el.split(\":\");\n var out = {\n color: el[0]\n };\n if (el[1]) {\n out.offset = parseFloat(el[1]);\n }\n return out;\n });\n var len = stops.length,\n start = 0,\n j = 0;\n function seed(i, end) {\n var step = (end - start) / (i - j);\n for (var k = j; k < i; k++) {\n stops[k].offset = +(+start + step * (k - j)).toFixed(2);\n }\n j = i;\n start = end;\n }\n len--;\n for (var i = 0; i < len; i++) if (\"offset\" in stops[i]) {\n seed(i, stops[i].offset);\n }\n stops[len].offset = stops[len].offset || 100;\n seed(len, stops[len].offset);\n return {\n type: type,\n params: params,\n stops: stops\n };\n });\n\n eve.on(\"snap.util.attr.d\", function (value) {\n eve.stop();\n if (is(value, \"array\") && is(value[0], \"array\")) {\n value = Snap.path.toString.call(value);\n }\n value = Str(value);\n if (value.match(/[ruo]/i)) {\n value = Snap.path.toAbsolute(value);\n }\n $(this.node, {d: value});\n })(-1);\n eve.on(\"snap.util.attr.#text\", function (value) {\n eve.stop();\n value = Str(value);\n var txt = glob.doc.createTextNode(value);\n while (this.node.firstChild) {\n this.node.removeChild(this.node.firstChild);\n }\n this.node.appendChild(txt);\n })(-1);\n eve.on(\"snap.util.attr.path\", function (value) {\n eve.stop();\n this.attr({d: value});\n })(-1);\n eve.on(\"snap.util.attr.class\", function (value) {\n eve.stop();\n this.node.className.baseVal = value;\n })(-1);\n eve.on(\"snap.util.attr.viewBox\", function (value) {\n var vb;\n if (is(value, \"object\") && \"x\" in value) {\n vb = [value.x, value.y, value.width, value.height].join(\" \");\n } else if (is(value, \"array\")) {\n vb = value.join(\" \");\n } else {\n vb = value;\n }\n $(this.node, {\n viewBox: vb\n });\n eve.stop();\n })(-1);\n eve.on(\"snap.util.attr.transform\", function (value) {\n this.transform(value);\n eve.stop();\n })(-1);\n eve.on(\"snap.util.attr.r\", function (value) {\n if (this.type == \"rect\") {\n eve.stop();\n $(this.node, {\n rx: value,\n ry: value\n });\n }\n })(-1);\n eve.on(\"snap.util.attr.textpath\", function (value) {\n eve.stop();\n if (this.type == \"text\") {\n var id, tp, node;\n if (!value && this.textPath) {\n tp = this.textPath;\n while (tp.node.firstChild) {\n this.node.appendChild(tp.node.firstChild);\n }\n tp.remove();\n delete this.textPath;\n return;\n }\n if (is(value, \"string\")) {\n var defs = getSomeDefs(this),\n path = wrap(defs.parentNode).path(value);\n defs.appendChild(path.node);\n id = path.id;\n path.attr({id: id});\n } else {\n value = wrap(value);\n if (value instanceof Element) {\n id = value.attr(\"id\");\n if (!id) {\n id = value.id;\n value.attr({id: id});\n }\n }\n }\n if (id) {\n tp = this.textPath;\n node = this.node;\n if (tp) {\n tp.attr({\"xlink:href\": \"#\" + id});\n } else {\n tp = $(\"textPath\", {\n \"xlink:href\": \"#\" + id\n });\n while (node.firstChild) {\n tp.appendChild(node.firstChild);\n }\n node.appendChild(tp);\n this.textPath = wrap(tp);\n }\n }\n }\n })(-1);\n eve.on(\"snap.util.attr.text\", function (value) {\n if (this.type == \"text\") {\n var i = 0,\n node = this.node,\n tuner = function (chunk) {\n var out = $(\"tspan\");\n if (is(chunk, \"array\")) {\n for (var i = 0; i < chunk.length; i++) {\n out.appendChild(tuner(chunk[i]));\n }\n } else {\n out.appendChild(glob.doc.createTextNode(chunk));\n }\n out.normalize && out.normalize();\n return out;\n };\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n var tuned = tuner(value);\n while (tuned.firstChild) {\n node.appendChild(tuned.firstChild);\n }\n }\n eve.stop();\n })(-1);\n function setFontSize(value) {\n eve.stop();\n if (value == +value) {\n value += \"px\";\n }\n this.node.style.fontSize = value;\n }\n eve.on(\"snap.util.attr.fontSize\", setFontSize)(-1);\n eve.on(\"snap.util.attr.font-size\", setFontSize)(-1);\n\n\n eve.on(\"snap.util.getattr.transform\", function () {\n eve.stop();\n return this.transform();\n })(-1);\n eve.on(\"snap.util.getattr.textpath\", function () {\n eve.stop();\n return this.textPath;\n })(-1);\n // Markers\n (function () {\n function getter(end) {\n return function () {\n eve.stop();\n var style = glob.doc.defaultView.getComputedStyle(this.node, null).getPropertyValue(\"marker-\" + end);\n if (style == \"none\") {\n return style;\n } else {\n return Snap(glob.doc.getElementById(style.match(reURLValue)[1]));\n }\n };\n }\n function setter(end) {\n return function (value) {\n eve.stop();\n var name = \"marker\" + end.charAt(0).toUpperCase() + end.substring(1);\n if (value == \"\" || !value) {\n this.node.style[name] = \"none\";\n return;\n }\n if (value.type == \"marker\") {\n var id = value.node.id;\n if (!id) {\n $(value.node, {id: value.id});\n }\n this.node.style[name] = URL(id);\n return;\n }\n };\n }\n eve.on(\"snap.util.getattr.marker-end\", getter(\"end\"))(-1);\n eve.on(\"snap.util.getattr.markerEnd\", getter(\"end\"))(-1);\n eve.on(\"snap.util.getattr.marker-start\", getter(\"start\"))(-1);\n eve.on(\"snap.util.getattr.markerStart\", getter(\"start\"))(-1);\n eve.on(\"snap.util.getattr.marker-mid\", getter(\"mid\"))(-1);\n eve.on(\"snap.util.getattr.markerMid\", getter(\"mid\"))(-1);\n eve.on(\"snap.util.attr.marker-end\", setter(\"end\"))(-1);\n eve.on(\"snap.util.attr.markerEnd\", setter(\"end\"))(-1);\n eve.on(\"snap.util.attr.marker-start\", setter(\"start\"))(-1);\n eve.on(\"snap.util.attr.markerStart\", setter(\"start\"))(-1);\n eve.on(\"snap.util.attr.marker-mid\", setter(\"mid\"))(-1);\n eve.on(\"snap.util.attr.markerMid\", setter(\"mid\"))(-1);\n }());\n eve.on(\"snap.util.getattr.r\", function () {\n if (this.type == \"rect\" && $(this.node, \"rx\") == $(this.node, \"ry\")) {\n eve.stop();\n return $(this.node, \"rx\");\n }\n })(-1);\n function textExtract(node) {\n var out = [];\n var children = node.childNodes;\n for (var i = 0, ii = children.length; i < ii; i++) {\n var chi = children[i];\n if (chi.nodeType == 3) {\n out.push(chi.nodeValue);\n }\n if (chi.tagName == \"tspan\") {\n if (chi.childNodes.length == 1 && chi.firstChild.nodeType == 3) {\n out.push(chi.firstChild.nodeValue);\n } else {\n out.push(textExtract(chi));\n }\n }\n }\n return out;\n }\n eve.on(\"snap.util.getattr.text\", function () {\n if (this.type == \"text\" || this.type == \"tspan\") {\n eve.stop();\n var out = textExtract(this.node);\n return out.length == 1 ? out[0] : out;\n }\n })(-1);\n eve.on(\"snap.util.getattr.#text\", function () {\n return this.node.textContent;\n })(-1);\n eve.on(\"snap.util.getattr.fill\", function (internal) {\n if (internal) {\n return;\n }\n eve.stop();\n var value = eve(\"snap.util.getattr.fill\", this, true).firstDefined();\n return Snap(Snap.deurl(value)) || value;\n })(-1);\n eve.on(\"snap.util.getattr.stroke\", function (internal) {\n if (internal) {\n return;\n }\n eve.stop();\n var value = eve(\"snap.util.getattr.stroke\", this, true).firstDefined();\n return Snap(Snap.deurl(value)) || value;\n })(-1);\n eve.on(\"snap.util.getattr.viewBox\", function () {\n eve.stop();\n var vb = $(this.node, \"viewBox\");\n if (vb) {\n vb = vb.split(separator);\n return Snap._.box(+vb[0], +vb[1], +vb[2], +vb[3]);\n } else {\n return;\n }\n })(-1);\n eve.on(\"snap.util.getattr.points\", function () {\n var p = $(this.node, \"points\");\n eve.stop();\n if (p) {\n return p.split(separator);\n } else {\n return;\n }\n })(-1);\n eve.on(\"snap.util.getattr.path\", function () {\n var p = $(this.node, \"d\");\n eve.stop();\n return p;\n })(-1);\n eve.on(\"snap.util.getattr.class\", function () {\n return this.node.className.baseVal;\n })(-1);\n function getFontSize() {\n eve.stop();\n return this.node.style.fontSize;\n }\n eve.on(\"snap.util.getattr.fontSize\", getFontSize)(-1);\n eve.on(\"snap.util.getattr.font-size\", getFontSize)(-1);\n});\n\n// Copyright (c) 2014 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var rgNotSpace = /\\S+/g,\n rgBadSpace = /[\\t\\r\\n\\f]/g,\n rgTrim = /(^\\s+|\\s+$)/g,\n Str = String,\n elproto = Element.prototype;\n /*\\\n * Element.addClass\n [ method ]\n **\n * Adds given class name or list of class names to the element.\n - value (string) class name or space separated list of class names\n **\n = (Element) original element.\n \\*/\n elproto.addClass = function (value) {\n var classes = Str(value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n\n if (classes.length) {\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (!~pos) {\n curClasses.push(clazz);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n }\n return this;\n };\n /*\\\n * Element.removeClass\n [ method ]\n **\n * Removes given class name or list of class names from the element.\n - value (string) class name or space separated list of class names\n **\n = (Element) original element.\n \\*/\n elproto.removeClass = function (value) {\n var classes = Str(value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n if (curClasses.length) {\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (~pos) {\n curClasses.splice(pos, 1);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n }\n return this;\n };\n /*\\\n * Element.hasClass\n [ method ]\n **\n * Checks if the element has a given class name in the list of class names applied to it.\n - value (string) class name\n **\n = (boolean) `true` if the element has given class\n \\*/\n elproto.hasClass = function (value) {\n var elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [];\n return !!~curClasses.indexOf(value);\n };\n /*\\\n * Element.toggleClass\n [ method ]\n **\n * Add or remove one or more classes from the element, depending on either\n * the class’s presence or the value of the `flag` argument.\n - value (string) class name or space separated list of class names\n - flag (boolean) value to determine whether the class should be added or removed\n **\n = (Element) original element.\n \\*/\n elproto.toggleClass = function (value, flag) {\n if (flag != null) {\n if (flag) {\n return this.addClass(value);\n } else {\n return this.removeClass(value);\n }\n }\n var classes = (value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (~pos) {\n curClasses.splice(pos, 1);\n } else {\n curClasses.push(clazz);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n return this;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var operators = {\n \"+\": function (x, y) {\n return x + y;\n },\n \"-\": function (x, y) {\n return x - y;\n },\n \"/\": function (x, y) {\n return x / y;\n },\n \"*\": function (x, y) {\n return x * y;\n }\n },\n Str = String,\n reUnit = /[a-z]+$/i,\n reAddon = /^\\s*([+\\-\\/*])\\s*=\\s*([\\d.eE+\\-]+)\\s*([^\\d\\s]+)?\\s*$/;\n function getNumber(val) {\n return val;\n }\n function getUnit(unit) {\n return function (val) {\n return +val.toFixed(3) + unit;\n };\n }\n eve.on(\"snap.util.attr\", function (val) {\n var plus = Str(val).match(reAddon);\n if (plus) {\n var evnt = eve.nt(),\n name = evnt.substring(evnt.lastIndexOf(\".\") + 1),\n a = this.attr(name),\n atr = {};\n eve.stop();\n var unit = plus[3] || \"\",\n aUnit = a.match(reUnit),\n op = operators[plus[1]];\n if (aUnit && aUnit == unit) {\n val = op(parseFloat(a), +plus[2]);\n } else {\n a = this.asPX(name);\n val = op(this.asPX(name), this.asPX(name, plus[2] + unit));\n }\n if (isNaN(a) || isNaN(val)) {\n return;\n }\n atr[name] = val;\n this.attr(atr);\n }\n })(-10);\n eve.on(\"snap.util.equal\", function (name, b) {\n var A, B, a = Str(this.attr(name) || \"\"),\n el = this,\n bplus = Str(b).match(reAddon);\n if (bplus) {\n eve.stop();\n var unit = bplus[3] || \"\",\n aUnit = a.match(reUnit),\n op = operators[bplus[1]];\n if (aUnit && aUnit == unit) {\n return {\n from: parseFloat(a),\n to: op(parseFloat(a), +bplus[2]),\n f: getUnit(aUnit)\n };\n } else {\n a = this.asPX(name);\n return {\n from: a,\n to: op(a, this.asPX(name, bplus[2] + unit)),\n f: getNumber\n };\n }\n }\n })(-10);\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var proto = Paper.prototype,\n is = Snap.is;\n /*\\\n * Paper.rect\n [ method ]\n *\n * Draws a rectangle\n **\n - x (number) x coordinate of the top left corner\n - y (number) y coordinate of the top left corner\n - width (number) width\n - height (number) height\n - rx (number) #optional horizontal radius for rounded corners, default is 0\n - ry (number) #optional vertical radius for rounded corners, default is rx or 0\n = (object) the `rect` element\n **\n > Usage\n | // regular rectangle\n | var c = paper.rect(10, 10, 50, 50);\n | // rectangle with rounded corners\n | var c = paper.rect(40, 40, 50, 50, 10);\n \\*/\n proto.rect = function (x, y, w, h, rx, ry) {\n var attr;\n if (ry == null) {\n ry = rx;\n }\n if (is(x, \"object\") && x == \"[object Object]\") {\n attr = x;\n } else if (x != null) {\n attr = {\n x: x,\n y: y,\n width: w,\n height: h\n };\n if (rx != null) {\n attr.rx = rx;\n attr.ry = ry;\n }\n }\n return this.el(\"rect\", attr);\n };\n /*\\\n * Paper.circle\n [ method ]\n **\n * Draws a circle\n **\n - x (number) x coordinate of the centre\n - y (number) y coordinate of the centre\n - r (number) radius\n = (object) the `circle` element\n **\n > Usage\n | var c = paper.circle(50, 50, 40);\n \\*/\n proto.circle = function (cx, cy, r) {\n var attr;\n if (is(cx, \"object\") && cx == \"[object Object]\") {\n attr = cx;\n } else if (cx != null) {\n attr = {\n cx: cx,\n cy: cy,\n r: r\n };\n }\n return this.el(\"circle\", attr);\n };\n\n var preload = (function () {\n function onerror() {\n this.parentNode.removeChild(this);\n }\n return function (src, f) {\n var img = glob.doc.createElement(\"img\"),\n body = glob.doc.body;\n img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n img.onload = function () {\n f.call(img);\n img.onload = img.onerror = null;\n body.removeChild(img);\n };\n img.onerror = onerror;\n body.appendChild(img);\n img.src = src;\n };\n }());\n\n /*\\\n * Paper.image\n [ method ]\n **\n * Places an image on the surface\n **\n - src (string) URI of the source image\n - x (number) x offset position\n - y (number) y offset position\n - width (number) width of the image\n - height (number) height of the image\n = (object) the `image` element\n * or\n = (object) Snap element object with type `image`\n **\n > Usage\n | var c = paper.image(\"apple.png\", 10, 10, 80, 80);\n \\*/\n proto.image = function (src, x, y, width, height) {\n var el = this.el(\"image\");\n if (is(src, \"object\") && \"src\" in src) {\n el.attr(src);\n } else if (src != null) {\n var set = {\n \"xlink:href\": src,\n preserveAspectRatio: \"none\"\n };\n if (x != null && y != null) {\n set.x = x;\n set.y = y;\n }\n if (width != null && height != null) {\n set.width = width;\n set.height = height;\n } else {\n preload(src, function () {\n Snap._.$(el.node, {\n width: this.offsetWidth,\n height: this.offsetHeight\n });\n });\n }\n Snap._.$(el.node, set);\n }\n return el;\n };\n /*\\\n * Paper.ellipse\n [ method ]\n **\n * Draws an ellipse\n **\n - x (number) x coordinate of the centre\n - y (number) y coordinate of the centre\n - rx (number) horizontal radius\n - ry (number) vertical radius\n = (object) the `ellipse` element\n **\n > Usage\n | var c = paper.ellipse(50, 50, 40, 20);\n \\*/\n proto.ellipse = function (cx, cy, rx, ry) {\n var attr;\n if (is(cx, \"object\") && cx == \"[object Object]\") {\n attr = cx;\n } else if (cx != null) {\n attr ={\n cx: cx,\n cy: cy,\n rx: rx,\n ry: ry\n };\n }\n return this.el(\"ellipse\", attr);\n };\n // SIERRA Paper.path(): Unclear from the link what a Catmull-Rom curveto is, and why it would make life any easier.\n /*\\\n * Paper.path\n [ method ]\n **\n * Creates a `` element using the given string as the path's definition\n - pathString (string) #optional path string in SVG format\n * Path string consists of one-letter commands, followed by comma seprarated arguments in numerical form. Example:\n | \"M10,20L30,40\"\n * This example features two commands: `M`, with arguments `(10, 20)` and `L` with arguments `(30, 40)`. Uppercase letter commands express coordinates in absolute terms, while lowercase commands express them in relative terms from the most recently declared coordinates.\n *\n # Here is short list of commands available, for more details see SVG path string format or article about path strings at MDN.\n # CommandNameParameters\n # Mmoveto(x y)+\n # Zclosepath(none)\n # Llineto(x y)+\n # Hhorizontal linetox+\n # Vvertical linetoy+\n # Ccurveto(x1 y1 x2 y2 x y)+\n # Ssmooth curveto(x2 y2 x y)+\n # Qquadratic Bézier curveto(x1 y1 x y)+\n # Tsmooth quadratic Bézier curveto(x y)+\n # Aelliptical arc(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+\n # RCatmull-Rom curveto*x1 y1 (x y)+\n * * _Catmull-Rom curveto_ is a not standard SVG command and added to make life easier.\n * Note: there is a special case when a path consists of only three commands: `M10,10R…z`. In this case the path connects back to its starting point.\n > Usage\n | var c = paper.path(\"M10 10L90 90\");\n | // draw a diagonal line:\n | // move to 10,10, line to 90,90\n \\*/\n proto.path = function (d) {\n var attr;\n if (is(d, \"object\") && !is(d, \"array\")) {\n attr = d;\n } else if (d) {\n attr = {d: d};\n }\n return this.el(\"path\", attr);\n };\n /*\\\n * Paper.g\n [ method ]\n **\n * Creates a group element\n **\n - varargs (…) #optional elements to nest within the group\n = (object) the `g` element\n **\n > Usage\n | var c1 = paper.circle(),\n | c2 = paper.rect(),\n | g = paper.g(c2, c1); // note that the order of elements is different\n * or\n | var c1 = paper.circle(),\n | c2 = paper.rect(),\n | g = paper.g();\n | g.add(c2, c1);\n \\*/\n /*\\\n * Paper.group\n [ method ]\n **\n * See @Paper.g\n \\*/\n proto.group = proto.g = function (first) {\n var attr,\n el = this.el(\"g\");\n if (arguments.length == 1 && first && !first.type) {\n el.attr(first);\n } else if (arguments.length) {\n el.add(Array.prototype.slice.call(arguments, 0));\n }\n return el;\n };\n /*\\\n * Paper.svg\n [ method ]\n **\n * Creates a nested SVG element.\n - x (number) @optional X of the element\n - y (number) @optional Y of the element\n - width (number) @optional width of the element\n - height (number) @optional height of the element\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n **\n = (object) the `svg` element\n **\n \\*/\n proto.svg = function (x, y, width, height, vbx, vby, vbw, vbh) {\n var attrs = {};\n if (is(x, \"object\") && y == null) {\n attrs = x;\n } else {\n if (x != null) {\n attrs.x = x;\n }\n if (y != null) {\n attrs.y = y;\n }\n if (width != null) {\n attrs.width = width;\n }\n if (height != null) {\n attrs.height = height;\n }\n if (vbx != null && vby != null && vbw != null && vbh != null) {\n attrs.viewBox = [vbx, vby, vbw, vbh];\n }\n }\n return this.el(\"svg\", attrs);\n };\n /*\\\n * Paper.mask\n [ method ]\n **\n * Equivalent in behaviour to @Paper.g, except it’s a mask.\n **\n = (object) the `mask` element\n **\n \\*/\n proto.mask = function (first) {\n var attr,\n el = this.el(\"mask\");\n if (arguments.length == 1 && first && !first.type) {\n el.attr(first);\n } else if (arguments.length) {\n el.add(Array.prototype.slice.call(arguments, 0));\n }\n return el;\n };\n /*\\\n * Paper.ptrn\n [ method ]\n **\n * Equivalent in behaviour to @Paper.g, except it’s a pattern.\n - x (number) @optional X of the element\n - y (number) @optional Y of the element\n - width (number) @optional width of the element\n - height (number) @optional height of the element\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n **\n = (object) the `pattern` element\n **\n \\*/\n proto.ptrn = function (x, y, width, height, vx, vy, vw, vh) {\n if (is(x, \"object\")) {\n var attr = x;\n } else {\n attr = {patternUnits: \"userSpaceOnUse\"};\n if (x) {\n attr.x = x;\n }\n if (y) {\n attr.y = y;\n }\n if (width != null) {\n attr.width = width;\n }\n if (height != null) {\n attr.height = height;\n }\n if (vx != null && vy != null && vw != null && vh != null) {\n attr.viewBox = [vx, vy, vw, vh];\n } else {\n attr.viewBox = [x || 0, y || 0, width || 0, height || 0];\n }\n }\n return this.el(\"pattern\", attr);\n };\n /*\\\n * Paper.use\n [ method ]\n **\n * Creates a element.\n - id (string) @optional id of element to link\n * or\n - id (Element) @optional element to link\n **\n = (object) the `use` element\n **\n \\*/\n proto.use = function (id) {\n if (id != null) {\n if (id instanceof Element) {\n if (!id.attr(\"id\")) {\n id.attr({id: Snap._.id(id)});\n }\n id = id.attr(\"id\");\n }\n if (String(id).charAt() == \"#\") {\n id = id.substring(1);\n }\n return this.el(\"use\", {\"xlink:href\": \"#\" + id});\n } else {\n return Element.prototype.use.call(this);\n }\n };\n /*\\\n * Paper.symbol\n [ method ]\n **\n * Creates a element.\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n = (object) the `symbol` element\n **\n \\*/\n proto.symbol = function (vx, vy, vw, vh) {\n var attr = {};\n if (vx != null && vy != null && vw != null && vh != null) {\n attr.viewBox = [vx, vy, vw, vh];\n }\n\n return this.el(\"symbol\", attr);\n };\n /*\\\n * Paper.text\n [ method ]\n **\n * Draws a text string\n **\n - x (number) x coordinate position\n - y (number) y coordinate position\n - text (string|array) The text string to draw or array of strings to nest within separate `` elements\n = (object) the `text` element\n **\n > Usage\n | var t1 = paper.text(50, 50, \"Snap\");\n | var t2 = paper.text(50, 50, [\"S\",\"n\",\"a\",\"p\"]);\n | // Text path usage\n | t1.attr({textpath: \"M10,10L100,100\"});\n | // or\n | var pth = paper.path(\"M10,10L100,100\");\n | t1.attr({textpath: pth});\n \\*/\n proto.text = function (x, y, text) {\n var attr = {};\n if (is(x, \"object\")) {\n attr = x;\n } else if (x != null) {\n attr = {\n x: x,\n y: y,\n text: text || \"\"\n };\n }\n return this.el(\"text\", attr);\n };\n /*\\\n * Paper.line\n [ method ]\n **\n * Draws a line\n **\n - x1 (number) x coordinate position of the start\n - y1 (number) y coordinate position of the start\n - x2 (number) x coordinate position of the end\n - y2 (number) y coordinate position of the end\n = (object) the `line` element\n **\n > Usage\n | var t1 = paper.line(50, 50, 100, 100);\n \\*/\n proto.line = function (x1, y1, x2, y2) {\n var attr = {};\n if (is(x1, \"object\")) {\n attr = x1;\n } else if (x1 != null) {\n attr = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n }\n return this.el(\"line\", attr);\n };\n /*\\\n * Paper.polyline\n [ method ]\n **\n * Draws a polyline\n **\n - points (array) array of points\n * or\n - varargs (…) points\n = (object) the `polyline` element\n **\n > Usage\n | var p1 = paper.polyline([10, 10, 100, 100]);\n | var p2 = paper.polyline(10, 10, 100, 100);\n \\*/\n proto.polyline = function (points) {\n if (arguments.length > 1) {\n points = Array.prototype.slice.call(arguments, 0);\n }\n var attr = {};\n if (is(points, \"object\") && !is(points, \"array\")) {\n attr = points;\n } else if (points != null) {\n attr = {points: points};\n }\n return this.el(\"polyline\", attr);\n };\n /*\\\n * Paper.polygon\n [ method ]\n **\n * Draws a polygon. See @Paper.polyline\n \\*/\n proto.polygon = function (points) {\n if (arguments.length > 1) {\n points = Array.prototype.slice.call(arguments, 0);\n }\n var attr = {};\n if (is(points, \"object\") && !is(points, \"array\")) {\n attr = points;\n } else if (points != null) {\n attr = {points: points};\n }\n return this.el(\"polygon\", attr);\n };\n // gradients\n (function () {\n var $ = Snap._.$;\n // gradients' helpers\n /*\\\n * Element.stops\n [ method ]\n **\n * Only for gradients!\n * Returns array of gradient stops elements.\n = (array) the stops array.\n \\*/\n function Gstops() {\n return this.selectAll(\"stop\");\n }\n /*\\\n * Element.addStop\n [ method ]\n **\n * Only for gradients!\n * Adds another stop to the gradient.\n - color (string) stops color\n - offset (number) stops offset 0..100\n = (object) gradient element\n \\*/\n function GaddStop(color, offset) {\n var stop = $(\"stop\"),\n attr = {\n offset: +offset + \"%\"\n };\n color = Snap.color(color);\n attr[\"stop-color\"] = color.hex;\n if (color.opacity < 1) {\n attr[\"stop-opacity\"] = color.opacity;\n }\n $(stop, attr);\n var stops = this.stops(),\n inserted;\n for (var i = 0; i < stops.length; i++) {\n var stopOffset = parseFloat(stops[i].attr(\"offset\"));\n if (stopOffset > offset) {\n this.node.insertBefore(stop, stops[i].node);\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this.node.appendChild(stop);\n }\n return this;\n }\n function GgetBBox() {\n if (this.type == \"linearGradient\") {\n var x1 = $(this.node, \"x1\") || 0,\n x2 = $(this.node, \"x2\") || 1,\n y1 = $(this.node, \"y1\") || 0,\n y2 = $(this.node, \"y2\") || 0;\n return Snap._.box(x1, y1, math.abs(x2 - x1), math.abs(y2 - y1));\n } else {\n var cx = this.node.cx || .5,\n cy = this.node.cy || .5,\n r = this.node.r || 0;\n return Snap._.box(cx - r, cy - r, r * 2, r * 2);\n }\n }\n /*\\\n * Element.setStops\n [ method ]\n **\n * Only for gradients!\n * Updates stops of the gradient based on passed gradient descriptor. See @Ppaer.gradient\n - str (string) gradient descriptor part after `()`.\n = (object) gradient element\n | var g = paper.gradient(\"l(0, 0, 1, 1)#000-#f00-#fff\");\n | g.setStops(\"#fff-#000-#f00-#fc0\");\n \\*/\n function GsetStops(str) {\n var grad = str,\n stops = this.stops();\n if (typeof str == \"string\") {\n grad = eve(\"snap.util.grad.parse\", null, \"l(0,0,0,1)\" + str).firstDefined().stops;\n }\n if (!Snap.is(grad, \"array\")) {\n return;\n }\n for (var i = 0; i < stops.length; i++) {\n if (grad[i]) {\n var color = Snap.color(grad[i].color),\n attr = {\"offset\": grad[i].offset + \"%\"};\n attr[\"stop-color\"] = color.hex;\n if (color.opacity < 1) {\n attr[\"stop-opacity\"] = color.opacity;\n }\n stops[i].attr(attr);\n } else {\n stops[i].remove();\n }\n }\n for (i = stops.length; i < grad.length; i++) {\n this.addStop(grad[i].color, grad[i].offset);\n }\n return this;\n }\n function gradient(defs, str) {\n var grad = eve(\"snap.util.grad.parse\", null, str).firstDefined(),\n el;\n if (!grad) {\n return null;\n }\n grad.params.unshift(defs);\n if (grad.type.toLowerCase() == \"l\") {\n el = gradientLinear.apply(0, grad.params);\n } else {\n el = gradientRadial.apply(0, grad.params);\n }\n if (grad.type != grad.type.toLowerCase()) {\n $(el.node, {\n gradientUnits: \"userSpaceOnUse\"\n });\n }\n var stops = grad.stops,\n len = stops.length;\n for (var i = 0; i < len; i++) {\n var stop = stops[i];\n el.addStop(stop.color, stop.offset);\n }\n return el;\n }\n function gradientLinear(defs, x1, y1, x2, y2) {\n var el = Snap._.make(\"linearGradient\", defs);\n el.stops = Gstops;\n el.addStop = GaddStop;\n el.getBBox = GgetBBox;\n el.setStops = GsetStops;\n if (x1 != null) {\n $(el.node, {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n }\n return el;\n }\n function gradientRadial(defs, cx, cy, r, fx, fy) {\n var el = Snap._.make(\"radialGradient\", defs);\n el.stops = Gstops;\n el.addStop = GaddStop;\n el.getBBox = GgetBBox;\n if (cx != null) {\n $(el.node, {\n cx: cx,\n cy: cy,\n r: r\n });\n }\n if (fx != null && fy != null) {\n $(el.node, {\n fx: fx,\n fy: fy\n });\n }\n return el;\n }\n /*\\\n * Paper.gradient\n [ method ]\n **\n * Creates a gradient element\n **\n - gradient (string) gradient descriptor\n > Gradient Descriptor\n * The gradient descriptor is an expression formatted as\n * follows: `()`. The `` can be\n * either linear or radial. The uppercase `L` or `R` letters\n * indicate absolute coordinates offset from the SVG surface.\n * Lowercase `l` or `r` letters indicate coordinates\n * calculated relative to the element to which the gradient is\n * applied. Coordinates specify a linear gradient vector as\n * `x1`, `y1`, `x2`, `y2`, or a radial gradient as `cx`, `cy`,\n * `r` and optional `fx`, `fy` specifying a focal point away\n * from the center of the circle. Specify `` as a list\n * of dash-separated CSS color values. Each color may be\n * followed by a custom offset value, separated with a colon\n * character.\n > Examples\n * Linear gradient, relative from top-left corner to bottom-right\n * corner, from black through red to white:\n | var g = paper.gradient(\"l(0, 0, 1, 1)#000-#f00-#fff\");\n * Linear gradient, absolute from (0, 0) to (100, 100), from black\n * through red at 25% to white:\n | var g = paper.gradient(\"L(0, 0, 100, 100)#000-#f00:25-#fff\");\n * Radial gradient, relative from the center of the element with radius\n * half the width, from black to white:\n | var g = paper.gradient(\"r(0.5, 0.5, 0.5)#000-#fff\");\n * To apply the gradient:\n | paper.circle(50, 50, 40).attr({\n | fill: g\n | });\n = (object) the `gradient` element\n \\*/\n proto.gradient = function (str) {\n return gradient(this.defs, str);\n };\n proto.gradientLinear = function (x1, y1, x2, y2) {\n return gradientLinear(this.defs, x1, y1, x2, y2);\n };\n proto.gradientRadial = function (cx, cy, r, fx, fy) {\n return gradientRadial(this.defs, cx, cy, r, fx, fy);\n };\n /*\\\n * Paper.toString\n [ method ]\n **\n * Returns SVG code for the @Paper\n = (string) SVG code for the @Paper\n \\*/\n proto.toString = function () {\n var doc = this.node.ownerDocument,\n f = doc.createDocumentFragment(),\n d = doc.createElement(\"div\"),\n svg = this.node.cloneNode(true),\n res;\n f.appendChild(d);\n d.appendChild(svg);\n Snap._.$(svg, {xmlns: \"http://www.w3.org/2000/svg\"});\n res = d.innerHTML;\n f.removeChild(f.firstChild);\n return res;\n };\n /*\\\n * Paper.toDataURL\n [ method ]\n **\n * Returns SVG code for the @Paper as Data URI string.\n = (string) Data URI string\n \\*/\n proto.toDataURL = function () {\n if (window && window.btoa) {\n return \"data:image/svg+xml;base64,\" + btoa(unescape(encodeURIComponent(this)));\n }\n };\n /*\\\n * Paper.clear\n [ method ]\n **\n * Removes all child nodes of the paper, except .\n \\*/\n proto.clear = function () {\n var node = this.node.firstChild,\n next;\n while (node) {\n next = node.nextSibling;\n if (node.tagName != \"defs\") {\n node.parentNode.removeChild(node);\n } else {\n proto.clear.call({node: node});\n }\n node = next;\n }\n };\n }());\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n is = Snap.is,\n clone = Snap._.clone,\n has = \"hasOwnProperty\",\n p2s = /,?([a-z]),?/gi,\n toFloat = parseFloat,\n math = Math,\n PI = math.PI,\n mmin = math.min,\n mmax = math.max,\n pow = math.pow,\n abs = math.abs;\n function paths(ps) {\n var p = paths.ps = paths.ps || {};\n if (p[ps]) {\n p[ps].sleep = 100;\n } else {\n p[ps] = {\n sleep: 100\n };\n }\n setTimeout(function () {\n for (var key in p) if (p[has](key) && key != ps) {\n p[key].sleep--;\n !p[key].sleep && delete p[key];\n }\n });\n return p[ps];\n }\n function box(x, y, width, height) {\n if (x == null) {\n x = y = width = height = 0;\n }\n if (y == null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: math.min(width, height) / 2,\n r2: math.max(width, height) / 2,\n r0: math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(\" \")\n };\n }\n function toString() {\n return this.join(\",\").replace(p2s, \"$1\");\n }\n function pathClone(pathArray) {\n var res = clone(pathArray);\n res.toString = toString;\n return res;\n }\n function getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n if (length == null) {\n return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n } else {\n return findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y,\n getTotLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n }\n }\n function getLengthFactory(istotal, subpath) {\n function O(val) {\n return +(+val).toFixed(3);\n }\n return Snap._.cacher(function (path, length, onlystart) {\n if (path instanceof Element) {\n path = path.attr(\"d\");\n }\n path = path2curve(path);\n var x, y, p, l, sp = \"\", subpaths = {}, point,\n len = 0;\n for (var i = 0, ii = path.length; i < ii; i++) {\n p = path[i];\n if (p[0] == \"M\") {\n x = +p[1];\n y = +p[2];\n } else {\n l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n if (len + l > length) {\n if (subpath && !subpaths.start) {\n point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n sp += [\n \"C\" + O(point.start.x),\n O(point.start.y),\n O(point.m.x),\n O(point.m.y),\n O(point.x),\n O(point.y)\n ];\n if (onlystart) {return sp;}\n subpaths.start = sp;\n sp = [\n \"M\" + O(point.x),\n O(point.y) + \"C\" + O(point.n.x),\n O(point.n.y),\n O(point.end.x),\n O(point.end.y),\n O(p[5]),\n O(p[6])\n ].join();\n len += l;\n x = +p[5];\n y = +p[6];\n continue;\n }\n if (!istotal && !subpath) {\n point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n return point;\n }\n }\n len += l;\n x = +p[5];\n y = +p[6];\n }\n sp += p.shift() + p;\n }\n subpaths.end = sp;\n point = istotal ? len : subpath ? subpaths : findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n return point;\n }, null, Snap._.clone);\n }\n var getTotalLength = getLengthFactory(1),\n getPointAtLength = getLengthFactory(),\n getSubpathsAtLength = getLengthFactory(0, 1);\n function findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t,\n t13 = pow(t1, 3),\n t12 = pow(t1, 2),\n t2 = t * t,\n t3 = t2 * t,\n x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n ax = t1 * p1x + t * c1x,\n ay = t1 * p1y + t * c1y,\n cx = t1 * c2x + t * p2x,\n cy = t1 * c2y + t * p2y,\n alpha = 90 - math.atan2(mx - nx, my - ny) * 180 / PI;\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {x: mx, y: my},\n n: {x: nx, y: ny},\n start: {x: ax, y: ay},\n end: {x: cx, y: cy},\n alpha: alpha\n };\n }\n function bezierBBox(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!Snap.is(p1x, \"array\")) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(\n bbox.min.x,\n bbox.min.y,\n bbox.max.x - bbox.min.x,\n bbox.max.y - bbox.min.y\n );\n }\n function isPointInsideBBox(bbox, x, y) {\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n }\n function isBBoxIntersect(bbox1, bbox2) {\n bbox1 = box(bbox1);\n bbox2 = box(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2)\n || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x\n || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y\n || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n }\n function base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n }\n function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z == null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2,\n n = 12,\n Tvalues = [-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],\n Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2,\n xbase = base3(ct, x1, x2, x3, x4),\n ybase = base3(ct, y1, y2, y3, y4),\n comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * math.sqrt(comb);\n }\n return z2 * sum;\n }\n function getTotLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n return;\n }\n var t = 1,\n step = t / 2,\n t2 = t - step,\n l,\n e = .01;\n l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n while (abs(l - ll) > e) {\n step /= 2;\n t2 += (l < ll ? 1 : -1) * step;\n l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n }\n return t2;\n }\n function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n if (\n mmax(x1, x2) < mmin(x3, x4) ||\n mmin(x1, x2) > mmax(x3, x4) ||\n mmax(y1, y2) < mmin(y3, y4) ||\n mmin(y1, y2) > mmax(y3, y4)\n ) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n if (!denominator) {\n return;\n }\n var px = nx / denominator,\n py = ny / denominator,\n px2 = +px.toFixed(2),\n py2 = +py.toFixed(2);\n if (\n px2 < +mmin(x1, x2).toFixed(2) ||\n px2 > +mmax(x1, x2).toFixed(2) ||\n px2 < +mmin(x3, x4).toFixed(2) ||\n px2 > +mmax(x3, x4).toFixed(2) ||\n py2 < +mmin(y1, y2).toFixed(2) ||\n py2 > +mmax(y1, y2).toFixed(2) ||\n py2 < +mmin(y3, y4).toFixed(2) ||\n py2 > +mmax(y3, y4).toFixed(2)\n ) {\n return;\n }\n return {x: px, y: py};\n }\n function inter(bez1, bez2) {\n return interHelper(bez1, bez2);\n }\n function interCount(bez1, bez2) {\n return interHelper(bez1, bez2, 1);\n }\n function interHelper(bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1),\n bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1),\n l2 = bezlen.apply(0, bez2),\n n1 = ~~(l1 / 8),\n n2 = ~~(l2 / 8),\n dots1 = [],\n dots2 = [],\n xy = {},\n res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var p = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({x: p.x, y: p.y, t: i / n1});\n }\n for (i = 0; i < n2 + 1; i++) {\n p = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({x: p.x, y: p.y, t: i / n2});\n }\n for (i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i],\n di1 = dots1[i + 1],\n dj = dots2[j],\n dj1 = dots2[j + 1],\n ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n res++;\n } else {\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2\n });\n }\n }\n }\n }\n }\n return res;\n }\n function pathIntersection(path1, path2) {\n return interPathHelper(path1, path2);\n }\n function pathIntersectionNumber(path1, path2) {\n return interPathHelper(path1, path2, 1);\n }\n function interPathHelper(path1, path2, justCount) {\n path1 = path2curve(path1);\n path2 = path2curve(path2);\n var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] == \"M\") {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n } else {\n if (pi[0] == \"C\") {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n } else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] == \"M\") {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n } else {\n if (pj[0] == \"C\") {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n } else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n res += intr;\n } else {\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n }\n function isPointInsidePath(path, x, y) {\n var bbox = pathBBox(path);\n return isPointInsideBBox(bbox, x, y) &&\n interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n }\n function pathBBox(path) {\n var pth = paths(path);\n if (pth.bbox) {\n return clone(pth.bbox);\n }\n if (!path) {\n return box();\n }\n path = path2curve(path);\n var x = 0,\n y = 0,\n X = [],\n Y = [],\n p;\n for (var i = 0, ii = path.length; i < ii; i++) {\n p = path[i];\n if (p[0] == \"M\") {\n x = p[1];\n y = p[2];\n X.push(x);\n Y.push(y);\n } else {\n var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n X = X.concat(dim.min.x, dim.max.x);\n Y = Y.concat(dim.min.y, dim.max.y);\n x = p[5];\n y = p[6];\n }\n }\n var xmin = mmin.apply(0, X),\n ymin = mmin.apply(0, Y),\n xmax = mmax.apply(0, X),\n ymax = mmax.apply(0, Y),\n bb = box(xmin, ymin, xmax - xmin, ymax - ymin);\n pth.bbox = clone(bb);\n return bb;\n }\n function rectPath(x, y, w, h, r) {\n if (r) {\n return [\n [\"M\", +x + +r, y],\n [\"l\", w - r * 2, 0],\n [\"a\", r, r, 0, 0, 1, r, r],\n [\"l\", 0, h - r * 2],\n [\"a\", r, r, 0, 0, 1, -r, r],\n [\"l\", r * 2 - w, 0],\n [\"a\", r, r, 0, 0, 1, -r, -r],\n [\"l\", 0, r * 2 - h],\n [\"a\", r, r, 0, 0, 1, r, -r],\n [\"z\"]\n ];\n }\n var res = [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n res.toString = toString;\n return res;\n }\n function ellipsePath(x, y, rx, ry, a) {\n if (a == null && ry == null) {\n ry = rx;\n }\n x = +x;\n y = +y;\n rx = +rx;\n ry = +ry;\n if (a != null) {\n var rad = Math.PI / 180,\n x1 = x + rx * Math.cos(-ry * rad),\n x2 = x + rx * Math.cos(-a * rad),\n y1 = y + rx * Math.sin(-ry * rad),\n y2 = y + rx * Math.sin(-a * rad),\n res = [[\"M\", x1, y1], [\"A\", rx, rx, 0, +(a - ry > 180), 0, x2, y2]];\n } else {\n res = [\n [\"M\", x, y],\n [\"m\", 0, -ry],\n [\"a\", rx, ry, 0, 1, 1, 0, 2 * ry],\n [\"a\", rx, ry, 0, 1, 1, 0, -2 * ry],\n [\"z\"]\n ];\n }\n res.toString = toString;\n return res;\n }\n var unit2px = Snap._unit2px,\n getPath = {\n path: function (el) {\n return el.attr(\"path\");\n },\n circle: function (el) {\n var attr = unit2px(el);\n return ellipsePath(attr.cx, attr.cy, attr.r);\n },\n ellipse: function (el) {\n var attr = unit2px(el);\n return ellipsePath(attr.cx || 0, attr.cy || 0, attr.rx, attr.ry);\n },\n rect: function (el) {\n var attr = unit2px(el);\n return rectPath(attr.x || 0, attr.y || 0, attr.width, attr.height, attr.rx, attr.ry);\n },\n image: function (el) {\n var attr = unit2px(el);\n return rectPath(attr.x || 0, attr.y || 0, attr.width, attr.height);\n },\n line: function (el) {\n return \"M\" + [el.attr(\"x1\") || 0, el.attr(\"y1\") || 0, el.attr(\"x2\"), el.attr(\"y2\")];\n },\n polyline: function (el) {\n return \"M\" + el.attr(\"points\");\n },\n polygon: function (el) {\n return \"M\" + el.attr(\"points\") + \"z\";\n },\n deflt: function (el) {\n var bbox = el.node.getBBox();\n return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n }\n };\n function pathToRelative(pathArray) {\n var pth = paths(pathArray),\n lowerCase = String.prototype.toLowerCase;\n if (pth.rel) {\n return pathClone(pth.rel);\n }\n if (!Snap.is(pathArray, \"array\") || !Snap.is(pathArray && pathArray[0], \"array\")) {\n pathArray = Snap.parsePathString(pathArray);\n }\n var res = [],\n x = 0,\n y = 0,\n mx = 0,\n my = 0,\n start = 0;\n if (pathArray[0][0] == \"M\") {\n x = pathArray[0][1];\n y = pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res.push([\"M\", x, y]);\n }\n for (var i = start, ii = pathArray.length; i < ii; i++) {\n var r = res[i] = [],\n pa = pathArray[i];\n if (pa[0] != lowerCase.call(pa[0])) {\n r[0] = lowerCase.call(pa[0]);\n switch (r[0]) {\n case \"a\":\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +(pa[6] - x).toFixed(3);\n r[7] = +(pa[7] - y).toFixed(3);\n break;\n case \"v\":\n r[1] = +(pa[1] - y).toFixed(3);\n break;\n case \"m\":\n mx = pa[1];\n my = pa[2];\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +(pa[j] - (j % 2 ? x : y)).toFixed(3);\n }\n }\n } else {\n r = res[i] = [];\n if (pa[0] == \"m\") {\n mx = pa[1] + x;\n my = pa[2] + y;\n }\n for (var k = 0, kk = pa.length; k < kk; k++) {\n res[i][k] = pa[k];\n }\n }\n var len = res[i].length;\n switch (res[i][0]) {\n case \"z\":\n x = mx;\n y = my;\n break;\n case \"h\":\n x += +res[i][len - 1];\n break;\n case \"v\":\n y += +res[i][len - 1];\n break;\n default:\n x += +res[i][len - 2];\n y += +res[i][len - 1];\n }\n }\n res.toString = toString;\n pth.rel = pathClone(res);\n return res;\n }\n function pathToAbsolute(pathArray) {\n var pth = paths(pathArray);\n if (pth.abs) {\n return pathClone(pth.abs);\n }\n if (!is(pathArray, \"array\") || !is(pathArray && pathArray[0], \"array\")) { // rough assumption\n pathArray = Snap.parsePathString(pathArray);\n }\n if (!pathArray || !pathArray.length) {\n return [[\"M\", 0, 0]];\n }\n var res = [],\n x = 0,\n y = 0,\n mx = 0,\n my = 0,\n start = 0,\n pa0;\n if (pathArray[0][0] == \"M\") {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = [\"M\", x, y];\n }\n var crz = pathArray.length == 3 &&\n pathArray[0][0] == \"M\" &&\n pathArray[1][0].toUpperCase() == \"R\" &&\n pathArray[2][0].toUpperCase() == \"Z\";\n for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n res.push(r = []);\n pa = pathArray[i];\n pa0 = pa[0];\n if (pa0 != pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n switch (r[0]) {\n case \"A\":\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case \"V\":\n r[1] = +pa[1] + y;\n break;\n case \"H\":\n r[1] = +pa[1] + x;\n break;\n case \"R\":\n var dots = [x, y].concat(pa.slice(1));\n for (var j = 2, jj = dots.length; j < jj; j++) {\n dots[j] = +dots[j] + x;\n dots[++j] = +dots[j] + y;\n }\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n break;\n case \"O\":\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n break;\n case \"U\":\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = [\"U\"].concat(res[res.length - 1].slice(-2));\n break;\n case \"M\":\n mx = +pa[1] + x;\n my = +pa[2] + y;\n default:\n for (j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + (j % 2 ? x : y);\n }\n }\n } else if (pa0 == \"R\") {\n dots = [x, y].concat(pa.slice(1));\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n r = [\"R\"].concat(pa.slice(-2));\n } else if (pa0 == \"O\") {\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n } else if (pa0 == \"U\") {\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = [\"U\"].concat(res[res.length - 1].slice(-2));\n } else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n if (pa0 != \"O\") {\n switch (r[0]) {\n case \"Z\":\n x = +mx;\n y = +my;\n break;\n case \"H\":\n x = r[1];\n break;\n case \"V\":\n y = r[1];\n break;\n case \"M\":\n mx = r[r.length - 2];\n my = r[r.length - 1];\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n }\n res.toString = toString;\n pth.abs = pathClone(res);\n return res;\n }\n function l2c(x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n }\n function q2c(x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3,\n _23 = 2 / 3;\n return [\n _13 * x1 + _23 * ax,\n _13 * y1 + _23 * ay,\n _13 * x2 + _23 * ax,\n _13 * y2 + _23 * ay,\n x2,\n y2\n ];\n }\n function a2c(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n var _120 = PI * 120 / 180,\n rad = PI / 180 * (+angle || 0),\n res = [],\n xy,\n rotate = Snap._.cacher(function (x, y, rad) {\n var X = x * math.cos(rad) - y * math.sin(rad),\n Y = x * math.sin(rad) + y * math.cos(rad);\n return {x: X, y: Y};\n });\n if (!rx || !ry) {\n return [x1, y1, x2, y2, x2, y2];\n }\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n var cos = math.cos(PI / 180 * angle),\n sin = math.sin(PI / 180 * angle),\n x = (x1 - x2) / 2,\n y = (y1 - y2) / 2;\n var h = x * x / (rx * rx) + y * y / (ry * ry);\n if (h > 1) {\n h = math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx,\n ry2 = ry * ry,\n k = (large_arc_flag == sweep_flag ? -1 : 1) *\n math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n cx = k * rx * y / ry + (x1 + x2) / 2,\n cy = k * -ry * x / rx + (y1 + y2) / 2,\n f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n f1 = x1 < cx ? PI - f1 : f1;\n f2 = x2 < cx ? PI - f2 : f2;\n f1 < 0 && (f1 = PI * 2 + f1);\n f2 < 0 && (f2 = PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - PI * 2;\n }\n } else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (abs(df) > _120) {\n var f2old = f2,\n x2old = x2,\n y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * math.cos(f2);\n y2 = cy + ry * math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = math.cos(f1),\n s1 = math.sin(f1),\n c2 = math.cos(f2),\n s2 = math.sin(f2),\n t = math.tan(df / 4),\n hx = 4 / 3 * rx * t,\n hy = 4 / 3 * ry * t,\n m1 = [x1, y1],\n m2 = [x1 + hx * s1, y1 - hy * c1],\n m3 = [x2 + hx * s2, y2 - hy * c2],\n m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n } else {\n res = [m2, m3, m4].concat(res).join().split(\",\");\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n }\n }\n function findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n return {\n x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n };\n }\n\n // Returns bounding box of cubic bezier curve.\n // Source: http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n // Original version: NISHIO Hirokazu\n // Modifications: https://github.com/timo22345\n function curveDim(x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n for (var i = 0; i < 2; ++i) {\n if (i == 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length,\n jlen = j,\n mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n\n return {\n min: {x: mmin.apply(0, bounds[0]), y: mmin.apply(0, bounds[1])},\n max: {x: mmax.apply(0, bounds[0]), y: mmax.apply(0, bounds[1])}\n };\n }\n\n function path2curve(path, path2) {\n var pth = !path2 && paths(path);\n if (!path2 && pth.curve) {\n return pathClone(pth.curve);\n }\n var p = pathToAbsolute(path),\n p2 = path2 && pathToAbsolute(path2),\n attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n processPath = function (path, d, pcom) {\n var nx, ny;\n if (!path) {\n return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n }\n !(path[0] in {T: 1, Q: 1}) && (d.qx = d.qy = null);\n switch (path[0]) {\n case \"M\":\n d.X = path[1];\n d.Y = path[2];\n break;\n case \"A\":\n path = [\"C\"].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case \"S\":\n if (pcom == \"C\" || pcom == \"S\") { // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else { // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = [\"C\", nx, ny].concat(path.slice(1));\n break;\n case \"T\":\n if (pcom == \"Q\" || pcom == \"T\") { // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n }\n else { // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = [\"C\"].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case \"Q\":\n d.qx = path[1];\n d.qy = path[2];\n path = [\"C\"].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case \"L\":\n path = [\"C\"].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case \"H\":\n path = [\"C\"].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case \"V\":\n path = [\"C\"].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case \"Z\":\n path = [\"C\"].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n }\n return path;\n },\n fixArc = function (pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = \"A\"; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = \"A\"); // the same as above\n pp.splice(i++, 0, [\"C\"].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = mmax(p.length, p2 && p2.length || 0);\n }\n },\n fixM = function (path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = mmax(p.length, p2 && p2.length || 0);\n }\n },\n pcoms1 = [], // path commands of original path p\n pcoms2 = [], // path commands of original path p2\n pfirst = \"\", // temporary holder for original path command\n pcom = \"\"; // holder for previous path command of original path\n for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n p[i] && (pfirst = p[i][0]); // save current path command\n\n if (pfirst != \"C\") // C is not saved yet, because it may be result of conversion\n {\n pcoms1[i] = pfirst; // Save current path command\n i && ( pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n if (pcoms1[i] != \"A\" && pfirst == \"C\") pcoms1[i] = \"C\"; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n if (p2) { // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst != \"C\") {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n\n if (pcoms2[i] != \"A\" && pfirst == \"C\") {\n pcoms2[i] = \"C\";\n }\n\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i],\n seg2 = p2 && p2[i],\n seglen = seg.length,\n seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n if (!p2) {\n pth.curve = pathClone(p);\n }\n return p2 ? [p, p2] : p;\n }\n function mapPath(path, matrix) {\n if (!matrix) {\n return path;\n }\n var x, y, i, j, ii, jj, pathi;\n path = path2curve(path);\n for (i = 0, ii = path.length; i < ii; i++) {\n pathi = path[i];\n for (j = 1, jj = pathi.length; j < jj; j += 2) {\n x = matrix.x(pathi[j], pathi[j + 1]);\n y = matrix.y(pathi[j], pathi[j + 1]);\n pathi[j] = x;\n pathi[j + 1] = y;\n }\n }\n return path;\n }\n\n // http://schepers.cc/getting-to-the-point\n function catmullRom2bezier(crp, z) {\n var d = [];\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {x: +crp[i - 2], y: +crp[i - 1]},\n {x: +crp[i], y: +crp[i + 1]},\n {x: +crp[i + 2], y: +crp[i + 3]},\n {x: +crp[i + 4], y: +crp[i + 5]}\n ];\n if (z) {\n if (!i) {\n p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n } else if (iLen - 4 == i) {\n p[3] = {x: +crp[0], y: +crp[1]};\n } else if (iLen - 2 == i) {\n p[2] = {x: +crp[0], y: +crp[1]};\n p[3] = {x: +crp[2], y: +crp[3]};\n }\n } else {\n if (iLen - 4 == i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {x: +crp[i], y: +crp[i + 1]};\n }\n }\n d.push([\"C\",\n (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n (p[1].x + 6 * p[2].x - p[3].x) / 6,\n (p[1].y + 6*p[2].y - p[3].y) / 6,\n p[2].x,\n p[2].y\n ]);\n }\n\n return d;\n }\n\n // export\n Snap.path = paths;\n\n /*\\\n * Snap.path.getTotalLength\n [ method ]\n **\n * Returns the length of the given path in pixels\n **\n - path (string) SVG path string\n **\n = (number) length\n \\*/\n Snap.path.getTotalLength = getTotalLength;\n /*\\\n * Snap.path.getPointAtLength\n [ method ]\n **\n * Returns the coordinates of the point located at the given length along the given path\n **\n - path (string) SVG path string\n - length (number) length, in pixels, from the start of the path, excluding non-rendering jumps\n **\n = (object) representation of the point:\n o {\n o x: (number) x coordinate,\n o y: (number) y coordinate,\n o alpha: (number) angle of derivative\n o }\n \\*/\n Snap.path.getPointAtLength = getPointAtLength;\n /*\\\n * Snap.path.getSubpath\n [ method ]\n **\n * Returns the subpath of a given path between given start and end lengths\n **\n - path (string) SVG path string\n - from (number) length, in pixels, from the start of the path to the start of the segment\n - to (number) length, in pixels, from the start of the path to the end of the segment\n **\n = (string) path string definition for the segment\n \\*/\n Snap.path.getSubpath = function (path, from, to) {\n if (this.getTotalLength(path) - to < 1e-6) {\n return getSubpathsAtLength(path, from).end;\n }\n var a = getSubpathsAtLength(path, to, 1);\n return from ? getSubpathsAtLength(a, from).end : a;\n };\n /*\\\n * Element.getTotalLength\n [ method ]\n **\n * Returns the length of the path in pixels (only works for `path` elements)\n = (number) length\n \\*/\n elproto.getTotalLength = function () {\n if (this.node.getTotalLength) {\n return this.node.getTotalLength();\n }\n };\n // SIERRA Element.getPointAtLength()/Element.getTotalLength(): If a is broken into different segments, is the jump distance to the new coordinates set by the _M_ or _m_ commands calculated as part of the path's total length?\n /*\\\n * Element.getPointAtLength\n [ method ]\n **\n * Returns coordinates of the point located at the given length on the given path (only works for `path` elements)\n **\n - length (number) length, in pixels, from the start of the path, excluding non-rendering jumps\n **\n = (object) representation of the point:\n o {\n o x: (number) x coordinate,\n o y: (number) y coordinate,\n o alpha: (number) angle of derivative\n o }\n \\*/\n elproto.getPointAtLength = function (length) {\n return getPointAtLength(this.attr(\"d\"), length);\n };\n // SIERRA Element.getSubpath(): Similar to the problem for Element.getPointAtLength(). Unclear how this would work for a segmented path. Overall, the concept of _subpath_ and what I'm calling a _segment_ (series of non-_M_ or _Z_ commands) is unclear.\n /*\\\n * Element.getSubpath\n [ method ]\n **\n * Returns subpath of a given element from given start and end lengths (only works for `path` elements)\n **\n - from (number) length, in pixels, from the start of the path to the start of the segment\n - to (number) length, in pixels, from the start of the path to the end of the segment\n **\n = (string) path string definition for the segment\n \\*/\n elproto.getSubpath = function (from, to) {\n return Snap.path.getSubpath(this.attr(\"d\"), from, to);\n };\n Snap._.box = box;\n /*\\\n * Snap.path.findDotsAtSegment\n [ method ]\n **\n * Utility method\n **\n * Finds dot coordinates on the given cubic beziér curve at the given t\n - p1x (number) x of the first point of the curve\n - p1y (number) y of the first point of the curve\n - c1x (number) x of the first anchor of the curve\n - c1y (number) y of the first anchor of the curve\n - c2x (number) x of the second anchor of the curve\n - c2y (number) y of the second anchor of the curve\n - p2x (number) x of the second point of the curve\n - p2y (number) y of the second point of the curve\n - t (number) position on the curve (0..1)\n = (object) point information in format:\n o {\n o x: (number) x coordinate of the point,\n o y: (number) y coordinate of the point,\n o m: {\n o x: (number) x coordinate of the left anchor,\n o y: (number) y coordinate of the left anchor\n o },\n o n: {\n o x: (number) x coordinate of the right anchor,\n o y: (number) y coordinate of the right anchor\n o },\n o start: {\n o x: (number) x coordinate of the start of the curve,\n o y: (number) y coordinate of the start of the curve\n o },\n o end: {\n o x: (number) x coordinate of the end of the curve,\n o y: (number) y coordinate of the end of the curve\n o },\n o alpha: (number) angle of the curve derivative at the point\n o }\n \\*/\n Snap.path.findDotsAtSegment = findDotsAtSegment;\n /*\\\n * Snap.path.bezierBBox\n [ method ]\n **\n * Utility method\n **\n * Returns the bounding box of a given cubic beziér curve\n - p1x (number) x of the first point of the curve\n - p1y (number) y of the first point of the curve\n - c1x (number) x of the first anchor of the curve\n - c1y (number) y of the first anchor of the curve\n - c2x (number) x of the second anchor of the curve\n - c2y (number) y of the second anchor of the curve\n - p2x (number) x of the second point of the curve\n - p2y (number) y of the second point of the curve\n * or\n - bez (array) array of six points for beziér curve\n = (object) bounding box\n o {\n o x: (number) x coordinate of the left top point of the box,\n o y: (number) y coordinate of the left top point of the box,\n o x2: (number) x coordinate of the right bottom point of the box,\n o y2: (number) y coordinate of the right bottom point of the box,\n o width: (number) width of the box,\n o height: (number) height of the box\n o }\n \\*/\n Snap.path.bezierBBox = bezierBBox;\n /*\\\n * Snap.path.isPointInsideBBox\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if given point is inside bounding box\n - bbox (string) bounding box\n - x (string) x coordinate of the point\n - y (string) y coordinate of the point\n = (boolean) `true` if point is inside\n \\*/\n Snap.path.isPointInsideBBox = isPointInsideBBox;\n Snap.closest = function (x, y, X, Y) {\n var r = 100,\n b = box(x - r / 2, y - r / 2, r, r),\n inside = [],\n getter = X[0].hasOwnProperty(\"x\") ? function (i) {\n return {\n x: X[i].x,\n y: X[i].y\n };\n } : function (i) {\n return {\n x: X[i],\n y: Y[i]\n };\n },\n found = 0;\n while (r <= 1e6 && !found) {\n for (var i = 0, ii = X.length; i < ii; i++) {\n var xy = getter(i);\n if (isPointInsideBBox(b, xy.x, xy.y)) {\n found++;\n inside.push(xy);\n break;\n }\n }\n if (!found) {\n r *= 2;\n b = box(x - r / 2, y - r / 2, r, r)\n }\n }\n if (r == 1e6) {\n return;\n }\n var len = Infinity,\n res;\n for (i = 0, ii = inside.length; i < ii; i++) {\n var l = Snap.len(x, y, inside[i].x, inside[i].y);\n if (len > l) {\n len = l;\n inside[i].len = l;\n res = inside[i];\n }\n }\n return res;\n };\n /*\\\n * Snap.path.isBBoxIntersect\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if two bounding boxes intersect\n - bbox1 (string) first bounding box\n - bbox2 (string) second bounding box\n = (boolean) `true` if bounding boxes intersect\n \\*/\n Snap.path.isBBoxIntersect = isBBoxIntersect;\n /*\\\n * Snap.path.intersection\n [ method ]\n **\n * Utility method\n **\n * Finds intersections of two paths\n - path1 (string) path string\n - path2 (string) path string\n = (array) dots of intersection\n o [\n o {\n o x: (number) x coordinate of the point,\n o y: (number) y coordinate of the point,\n o t1: (number) t value for segment of path1,\n o t2: (number) t value for segment of path2,\n o segment1: (number) order number for segment of path1,\n o segment2: (number) order number for segment of path2,\n o bez1: (array) eight coordinates representing beziér curve for the segment of path1,\n o bez2: (array) eight coordinates representing beziér curve for the segment of path2\n o }\n o ]\n \\*/\n Snap.path.intersection = pathIntersection;\n Snap.path.intersectionNumber = pathIntersectionNumber;\n /*\\\n * Snap.path.isPointInside\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if given point is inside a given closed path.\n *\n * Note: fill mode doesn’t affect the result of this method.\n - path (string) path string\n - x (number) x of the point\n - y (number) y of the point\n = (boolean) `true` if point is inside the path\n \\*/\n Snap.path.isPointInside = isPointInsidePath;\n /*\\\n * Snap.path.getBBox\n [ method ]\n **\n * Utility method\n **\n * Returns the bounding box of a given path\n - path (string) path string\n = (object) bounding box\n o {\n o x: (number) x coordinate of the left top point of the box,\n o y: (number) y coordinate of the left top point of the box,\n o x2: (number) x coordinate of the right bottom point of the box,\n o y2: (number) y coordinate of the right bottom point of the box,\n o width: (number) width of the box,\n o height: (number) height of the box\n o }\n \\*/\n Snap.path.getBBox = pathBBox;\n Snap.path.get = getPath;\n /*\\\n * Snap.path.toRelative\n [ method ]\n **\n * Utility method\n **\n * Converts path coordinates into relative values\n - path (string) path string\n = (array) path string\n \\*/\n Snap.path.toRelative = pathToRelative;\n /*\\\n * Snap.path.toAbsolute\n [ method ]\n **\n * Utility method\n **\n * Converts path coordinates into absolute values\n - path (string) path string\n = (array) path string\n \\*/\n Snap.path.toAbsolute = pathToAbsolute;\n /*\\\n * Snap.path.toCubic\n [ method ]\n **\n * Utility method\n **\n * Converts path to a new path where all segments are cubic beziér curves\n - pathString (string|array) path string or array of segments\n = (array) array of segments\n \\*/\n Snap.path.toCubic = path2curve;\n /*\\\n * Snap.path.map\n [ method ]\n **\n * Transform the path string with the given matrix\n - path (string) path string\n - matrix (object) see @Matrix\n = (string) transformed path string\n \\*/\n Snap.path.map = mapPath;\n Snap.path.toString = toString;\n Snap.path.clone = pathClone;\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var mmax = Math.max,\n mmin = Math.min;\n\n // Set\n var Set = function (items) {\n this.items = [];\n\tthis.bindings = {};\n this.length = 0;\n this.type = \"set\";\n if (items) {\n for (var i = 0, ii = items.length; i < ii; i++) {\n if (items[i]) {\n this[this.items.length] = this.items[this.items.length] = items[i];\n this.length++;\n }\n }\n }\n },\n setproto = Set.prototype;\n /*\\\n * Set.push\n [ method ]\n **\n * Adds each argument to the current set\n = (object) original element\n \\*/\n setproto.push = function () {\n var item,\n len;\n for (var i = 0, ii = arguments.length; i < ii; i++) {\n item = arguments[i];\n if (item) {\n len = this.items.length;\n this[len] = this.items[len] = item;\n this.length++;\n }\n }\n return this;\n };\n /*\\\n * Set.pop\n [ method ]\n **\n * Removes last element and returns it\n = (object) element\n \\*/\n setproto.pop = function () {\n this.length && delete this[this.length--];\n return this.items.pop();\n };\n /*\\\n * Set.forEach\n [ method ]\n **\n * Executes given function for each element in the set\n *\n * If the function returns `false`, the loop stops running.\n **\n - callback (function) function to run\n - thisArg (object) context object for the callback\n = (object) Set object\n \\*/\n setproto.forEach = function (callback, thisArg) {\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n if (callback.call(thisArg, this.items[i], i) === false) {\n return this;\n }\n }\n return this;\n };\n /*\\\n * Set.animate\n [ method ]\n **\n * Animates each element in set in sync.\n *\n **\n - attrs (object) key-value pairs of destination attributes\n - duration (number) duration of the animation in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function that executes when the animation ends\n * or\n - animation (array) array of animation parameter for each element in set in format `[attrs, duration, easing, callback]`\n > Usage\n | // animate all elements in set to radius 10\n | set.animate({r: 10}, 500, mina.easein);\n | // or\n | // animate first element to radius 10, but second to radius 20 and in different time\n | set.animate([{r: 10}, 500, mina.easein], [{r: 20}, 1500, mina.easein]);\n = (Element) the current element\n \\*/\n setproto.animate = function (attrs, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n if (attrs instanceof Snap._.Animation) {\n callback = attrs.callback;\n easing = attrs.easing;\n ms = easing.dur;\n attrs = attrs.attr;\n }\n var args = arguments;\n if (Snap.is(attrs, \"array\") && Snap.is(args[args.length - 1], \"array\")) {\n var each = true;\n }\n var begin,\n handler = function () {\n if (begin) {\n this.b = begin;\n } else {\n begin = this.b;\n }\n },\n cb = 0,\n set = this,\n callbacker = callback && function () {\n if (++cb == set.length) {\n callback.call(this);\n }\n };\n return this.forEach(function (el, i) {\n eve.once(\"snap.animcreated.\" + el.id, handler);\n if (each) {\n args[i] && el.animate.apply(el, args[i]);\n } else {\n el.animate(attrs, ms, easing, callbacker);\n }\n });\n };\n /*\\\n * Set.remove\n [ method ]\n **\n * Removes all children of the set.\n *\n = (object) Set object\n \\*/\n setproto.remove = function () {\n while (this.length) {\n this.pop().remove();\n }\n return this;\n };\n /*\\\n * Set.bind\n [ method ]\n **\n * Specifies how to handle a specific attribute when applied\n * to a set.\n *\n **\n - attr (string) attribute name\n - callback (function) function to run\n * or\n - attr (string) attribute name\n - element (Element) specific element in the set to apply the attribute to\n * or\n - attr (string) attribute name\n - element (Element) specific element in the set to apply the attribute to\n - eattr (string) attribute on the element to bind the attribute to\n = (object) Set object\n \\*/\n setproto.bind = function (attr, a, b) {\n var data = {};\n if (typeof a == \"function\") {\n this.bindings[attr] = a;\n } else {\n var aname = b || attr;\n this.bindings[attr] = function (v) {\n data[aname] = v;\n a.attr(data);\n };\n }\n return this;\n };\n /*\\\n * Set.attr\n [ method ]\n **\n * Equivalent of @Element.attr.\n = (object) Set object\n \\*/\n setproto.attr = function (value) {\n var unbound = {};\n for (var k in value) {\n if (this.bindings[k]) {\n this.bindings[k](value[k]);\n } else {\n unbound[k] = value[k];\n }\n }\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n this.items[i].attr(unbound);\n }\n return this;\n };\n /*\\\n * Set.clear\n [ method ]\n **\n * Removes all elements from the set\n \\*/\n setproto.clear = function () {\n while (this.length) {\n this.pop();\n }\n };\n /*\\\n * Set.splice\n [ method ]\n **\n * Removes range of elements from the set\n **\n - index (number) position of the deletion\n - count (number) number of element to remove\n - insertion… (object) #optional elements to insert\n = (object) set elements that were deleted\n \\*/\n setproto.splice = function (index, count, insertion) {\n index = index < 0 ? mmax(this.length + index, 0) : index;\n count = mmax(0, mmin(this.length - index, count));\n var tail = [],\n todel = [],\n args = [],\n i;\n for (i = 2; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n for (i = 0; i < count; i++) {\n todel.push(this[index + i]);\n }\n for (; i < this.length - index; i++) {\n tail.push(this[index + i]);\n }\n var arglen = args.length;\n for (i = 0; i < arglen + tail.length; i++) {\n this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n }\n i = this.items.length = this.length -= count - arglen;\n while (this[i]) {\n delete this[i++];\n }\n return new Set(todel);\n };\n /*\\\n * Set.exclude\n [ method ]\n **\n * Removes given element from the set\n **\n - element (object) element to remove\n = (boolean) `true` if object was found and removed from the set\n \\*/\n setproto.exclude = function (el) {\n for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n this.splice(i, 1);\n return true;\n }\n return false;\n };\n /*\\\n * Set.insertAfter\n [ method ]\n **\n * Inserts set elements after given element.\n **\n - element (object) set will be inserted after this element\n = (object) Set object\n \\*/\n setproto.insertAfter = function (el) {\n var i = this.items.length;\n while (i--) {\n this.items[i].insertAfter(el);\n }\n return this;\n };\n /*\\\n * Set.getBBox\n [ method ]\n **\n * Union of all bboxes of the set. See @Element.getBBox.\n = (object) bounding box descriptor. See @Element.getBBox.\n \\*/\n setproto.getBBox = function () {\n var x = [],\n y = [],\n x2 = [],\n y2 = [];\n for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n var box = this.items[i].getBBox();\n x.push(box.x);\n y.push(box.y);\n x2.push(box.x + box.width);\n y2.push(box.y + box.height);\n }\n x = mmin.apply(0, x);\n y = mmin.apply(0, y);\n x2 = mmax.apply(0, x2);\n y2 = mmax.apply(0, y2);\n return {\n x: x,\n y: y,\n x2: x2,\n y2: y2,\n width: x2 - x,\n height: y2 - y,\n cx: x + (x2 - x) / 2,\n cy: y + (y2 - y) / 2\n };\n };\n /*\\\n * Set.insertAfter\n [ method ]\n **\n * Creates a clone of the set.\n **\n = (object) New Set object\n \\*/\n setproto.clone = function (s) {\n s = new Set;\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n s.push(this.items[i].clone());\n }\n return s;\n };\n setproto.toString = function () {\n return \"Snap\\u2018s set\";\n };\n setproto.type = \"set\";\n // export\n /*\\\n * Snap.Set\n [ property ]\n **\n * Set constructor.\n \\*/\n Snap.Set = Set;\n /*\\\n * Snap.set\n [ method ]\n **\n * Creates a set and fills it with list of arguments.\n **\n = (object) New Set object\n | var r = paper.rect(0, 0, 10, 10),\n | s1 = Snap.set(), // empty set\n | s2 = Snap.set(r, paper.circle(100, 100, 20)); // prefilled set\n \\*/\n Snap.set = function () {\n var set = new Set;\n if (arguments.length) {\n set.push.apply(set, Array.prototype.slice.call(arguments, 0));\n }\n return set;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var names = {},\n reUnit = /[%a-z]+$/i,\n Str = String;\n names.stroke = names.fill = \"colour\";\n function getEmpty(item) {\n var l = item[0];\n switch (l.toLowerCase()) {\n case \"t\": return [l, 0, 0];\n case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n case \"r\": if (item.length == 4) {\n return [l, 0, item[2], item[3]];\n } else {\n return [l, 0];\n }\n case \"s\": if (item.length == 5) {\n return [l, 1, 1, item[3], item[4]];\n } else if (item.length == 3) {\n return [l, 1, 1];\n } else {\n return [l, 1];\n }\n }\n }\n function equaliseTransform(t1, t2, getBBox) {\n t1 = t1 || new Snap.Matrix;\n t2 = t2 || new Snap.Matrix;\n t1 = Snap.parseTransformString(t1.toTransformString()) || [];\n t2 = Snap.parseTransformString(t2.toTransformString()) || [];\n var maxlength = Math.max(t1.length, t2.length),\n from = [],\n to = [],\n i = 0, j, jj,\n tt1, tt2;\n for (; i < maxlength; i++) {\n tt1 = t1[i] || getEmpty(t2[i]);\n tt2 = t2[i] || getEmpty(tt1);\n if (tt1[0] != tt2[0] ||\n tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3]) ||\n tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4])\n ) {\n t1 = Snap._.transform2matrix(t1, getBBox());\n t2 = Snap._.transform2matrix(t2, getBBox());\n from = [[\"m\", t1.a, t1.b, t1.c, t1.d, t1.e, t1.f]];\n to = [[\"m\", t2.a, t2.b, t2.c, t2.d, t2.e, t2.f]];\n break;\n }\n from[i] = [];\n to[i] = [];\n for (j = 0, jj = Math.max(tt1.length, tt2.length); j < jj; j++) {\n j in tt1 && (from[i][j] = tt1[j]);\n j in tt2 && (to[i][j] = tt2[j]);\n }\n }\n return {\n from: path2array(from),\n to: path2array(to),\n f: getPath(from)\n };\n }\n function getNumber(val) {\n return val;\n }\n function getUnit(unit) {\n return function (val) {\n return +val.toFixed(3) + unit;\n };\n }\n function getViewBox(val) {\n return val.join(\" \");\n }\n function getColour(clr) {\n return Snap.rgb(clr[0], clr[1], clr[2], clr[3]);\n }\n function getPath(path) {\n var k = 0, i, ii, j, jj, out, a, b = [];\n for (i = 0, ii = path.length; i < ii; i++) {\n out = \"[\";\n a = ['\"' + path[i][0] + '\"'];\n for (j = 1, jj = path[i].length; j < jj; j++) {\n a[j] = \"val[\" + k++ + \"]\";\n }\n out += a + \"]\";\n b[i] = out;\n }\n return Function(\"val\", \"return Snap.path.toString.call([\" + b + \"])\");\n }\n function path2array(path) {\n var out = [];\n for (var i = 0, ii = path.length; i < ii; i++) {\n for (var j = 1, jj = path[i].length; j < jj; j++) {\n out.push(path[i][j]);\n }\n }\n return out;\n }\n function isNumeric(obj) {\n return isFinite(obj);\n }\n function arrayEqual(arr1, arr2) {\n if (!Snap.is(arr1, \"array\") || !Snap.is(arr2, \"array\")) {\n return false;\n }\n return arr1.toString() == arr2.toString();\n }\n Element.prototype.equal = function (name, b) {\n return eve(\"snap.util.equal\", this, name, b).firstDefined();\n };\n eve.on(\"snap.util.equal\", function (name, b) {\n var A, B, a = Str(this.attr(name) || \"\"),\n el = this;\n if (names[name] == \"colour\") {\n A = Snap.color(a);\n B = Snap.color(b);\n return {\n from: [A.r, A.g, A.b, A.opacity],\n to: [B.r, B.g, B.b, B.opacity],\n f: getColour\n };\n }\n if (name == \"viewBox\") {\n A = this.attr(name).vb.split(\" \").map(Number);\n B = b.split(\" \").map(Number);\n return {\n from: A,\n to: B,\n f: getViewBox\n };\n }\n if (name == \"transform\" || name == \"gradientTransform\" || name == \"patternTransform\") {\n if (typeof b == \"string\") {\n b = Str(b).replace(/\\.{3}|\\u2026/g, a);\n }\n a = this.matrix;\n if (!Snap._.rgTransform.test(b)) {\n b = Snap._.transform2matrix(Snap._.svgTransform2string(b), this.getBBox());\n } else {\n b = Snap._.transform2matrix(b, this.getBBox());\n }\n return equaliseTransform(a, b, function () {\n return el.getBBox(1);\n });\n }\n if (name == \"d\" || name == \"path\") {\n A = Snap.path.toCubic(a, b);\n return {\n from: path2array(A[0]),\n to: path2array(A[1]),\n f: getPath(A[0])\n };\n }\n if (name == \"points\") {\n A = Str(a).split(Snap._.separator);\n B = Str(b).split(Snap._.separator);\n return {\n from: A,\n to: B,\n f: function (val) { return val; }\n };\n }\n if (isNumeric(a) && isNumeric(b)) {\n return {\n from: parseFloat(a),\n to: parseFloat(b),\n f: getNumber\n };\n }\n var aUnit = a.match(reUnit),\n bUnit = Str(b).match(reUnit);\n if (aUnit && arrayEqual(aUnit, bUnit)) {\n return {\n from: parseFloat(a),\n to: parseFloat(b),\n f: getUnit(aUnit)\n };\n } else {\n return {\n from: this.asPX(name),\n to: this.asPX(name, b),\n f: getNumber\n };\n }\n });\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n has = \"hasOwnProperty\",\n supportsTouch = \"createTouch\" in glob.doc,\n events = [\n \"click\", \"dblclick\", \"mousedown\", \"mousemove\", \"mouseout\",\n \"mouseover\", \"mouseup\", \"touchstart\", \"touchmove\", \"touchend\",\n \"touchcancel\"\n ],\n touchMap = {\n mousedown: \"touchstart\",\n mousemove: \"touchmove\",\n mouseup: \"touchend\"\n },\n getScroll = function (xy, el) {\n var name = xy == \"y\" ? \"scrollTop\" : \"scrollLeft\",\n doc = el && el.node ? el.node.ownerDocument : glob.doc;\n return doc[name in doc.documentElement ? \"documentElement\" : \"body\"][name];\n },\n preventDefault = function () {\n this.returnValue = false;\n },\n preventTouch = function () {\n return this.originalEvent.preventDefault();\n },\n stopPropagation = function () {\n this.cancelBubble = true;\n },\n stopTouch = function () {\n return this.originalEvent.stopPropagation();\n },\n addEvent = function (obj, type, fn, element) {\n var realName = supportsTouch && touchMap[type] ? touchMap[type] : type,\n f = function (e) {\n var scrollY = getScroll(\"y\", element),\n scrollX = getScroll(\"x\", element);\n if (supportsTouch && touchMap[has](type)) {\n for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n if (e.targetTouches[i].target == obj || obj.contains(e.targetTouches[i].target)) {\n var olde = e;\n e = e.targetTouches[i];\n e.originalEvent = olde;\n e.preventDefault = preventTouch;\n e.stopPropagation = stopTouch;\n break;\n }\n }\n }\n var x = e.clientX + scrollX,\n y = e.clientY + scrollY;\n return fn.call(element, e, x, y);\n };\n\n if (type !== realName) {\n obj.addEventListener(type, f, false);\n }\n\n obj.addEventListener(realName, f, false);\n\n return function () {\n if (type !== realName) {\n obj.removeEventListener(type, f, false);\n }\n\n obj.removeEventListener(realName, f, false);\n return true;\n };\n },\n drag = [],\n dragMove = function (e) {\n var x = e.clientX,\n y = e.clientY,\n scrollY = getScroll(\"y\"),\n scrollX = getScroll(\"x\"),\n dragi,\n j = drag.length;\n while (j--) {\n dragi = drag[j];\n if (supportsTouch) {\n var i = e.touches && e.touches.length,\n touch;\n while (i--) {\n touch = e.touches[i];\n if (touch.identifier == dragi.el._drag.id || dragi.el.node.contains(touch.target)) {\n x = touch.clientX;\n y = touch.clientY;\n (e.originalEvent ? e.originalEvent : e).preventDefault();\n break;\n }\n }\n } else {\n e.preventDefault();\n }\n var node = dragi.el.node,\n o,\n next = node.nextSibling,\n parent = node.parentNode,\n display = node.style.display;\n // glob.win.opera && parent.removeChild(node);\n // node.style.display = \"none\";\n // o = dragi.el.paper.getElementByPoint(x, y);\n // node.style.display = display;\n // glob.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n // o && eve(\"snap.drag.over.\" + dragi.el.id, dragi.el, o);\n x += scrollX;\n y += scrollY;\n eve(\"snap.drag.move.\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\n }\n },\n dragUp = function (e) {\n Snap.unmousemove(dragMove).unmouseup(dragUp);\n var i = drag.length,\n dragi;\n while (i--) {\n dragi = drag[i];\n dragi.el._drag = {};\n eve(\"snap.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n eve.off(\"snap.drag.*.\" + dragi.el.id);\n }\n drag = [];\n };\n /*\\\n * Element.click\n [ method ]\n **\n * Adds a click event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unclick\n [ method ]\n **\n * Removes a click event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.dblclick\n [ method ]\n **\n * Adds a double click event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.undblclick\n [ method ]\n **\n * Removes a double click event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mousedown\n [ method ]\n **\n * Adds a mousedown event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmousedown\n [ method ]\n **\n * Removes a mousedown event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mousemove\n [ method ]\n **\n * Adds a mousemove event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmousemove\n [ method ]\n **\n * Removes a mousemove event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseout\n [ method ]\n **\n * Adds a mouseout event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseout\n [ method ]\n **\n * Removes a mouseout event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseover\n [ method ]\n **\n * Adds a mouseover event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseover\n [ method ]\n **\n * Removes a mouseover event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseup\n [ method ]\n **\n * Adds a mouseup event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseup\n [ method ]\n **\n * Removes a mouseup event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchstart\n [ method ]\n **\n * Adds a touchstart event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchstart\n [ method ]\n **\n * Removes a touchstart event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchmove\n [ method ]\n **\n * Adds a touchmove event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchmove\n [ method ]\n **\n * Removes a touchmove event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchend\n [ method ]\n **\n * Adds a touchend event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchend\n [ method ]\n **\n * Removes a touchend event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchcancel\n [ method ]\n **\n * Adds a touchcancel event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchcancel\n [ method ]\n **\n * Removes a touchcancel event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n for (var i = events.length; i--;) {\n (function (eventName) {\n Snap[eventName] = elproto[eventName] = function (fn, scope) {\n if (Snap.is(fn, \"function\")) {\n this.events = this.events || [];\n this.events.push({\n name: eventName,\n f: fn,\n unbind: addEvent(this.node || document, eventName, fn, scope || this)\n });\n } else {\n for (var i = 0, ii = this.events.length; i < ii; i++) if (this.events[i].name == eventName) {\n try {\n this.events[i].f.call(this);\n } catch (e) {}\n }\n }\n return this;\n };\n Snap[\"un\" + eventName] =\n elproto[\"un\" + eventName] = function (fn) {\n var events = this.events || [],\n l = events.length;\n while (l--) if (events[l].name == eventName &&\n (events[l].f == fn || !fn)) {\n events[l].unbind();\n events.splice(l, 1);\n !events.length && delete this.events;\n return this;\n }\n return this;\n };\n })(events[i]);\n }\n /*\\\n * Element.hover\n [ method ]\n **\n * Adds hover event handlers to the element\n - f_in (function) handler for hover in\n - f_out (function) handler for hover out\n - icontext (object) #optional context for hover in handler\n - ocontext (object) #optional context for hover out handler\n = (object) @Element\n \\*/\n elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n };\n /*\\\n * Element.unhover\n [ method ]\n **\n * Removes hover event handlers from the element\n - f_in (function) handler for hover in\n - f_out (function) handler for hover out\n = (object) @Element\n \\*/\n elproto.unhover = function (f_in, f_out) {\n return this.unmouseover(f_in).unmouseout(f_out);\n };\n var draggable = [];\n // SIERRA unclear what _context_ refers to for starting, ending, moving the drag gesture.\n // SIERRA Element.drag(): _x position of the mouse_: Where are the x/y values offset from?\n // SIERRA Element.drag(): much of this member's doc appears to be duplicated for some reason.\n // SIERRA Unclear about this sentence: _Additionally following drag events will be triggered: drag.start. on start, drag.end. on end and drag.move. on every move._ Is there a global _drag_ object to which you can assign handlers keyed by an element's ID?\n /*\\\n * Element.drag\n [ method ]\n **\n * Adds event handlers for an element's drag gesture\n **\n - onmove (function) handler for moving\n - onstart (function) handler for drag start\n - onend (function) handler for drag end\n - mcontext (object) #optional context for moving handler\n - scontext (object) #optional context for drag start handler\n - econtext (object) #optional context for drag end handler\n * Additionaly following `drag` events are triggered: `drag.start.` on start, \n * `drag.end.` on end and `drag.move.` on every move. When element is dragged over another element \n * `drag.over.` fires as well.\n *\n * Start event and start handler are called in specified context or in context of the element with following parameters:\n o x (number) x position of the mouse\n o y (number) y position of the mouse\n o event (object) DOM event object\n * Move event and move handler are called in specified context or in context of the element with following parameters:\n o dx (number) shift by x from the start point\n o dy (number) shift by y from the start point\n o x (number) x position of the mouse\n o y (number) y position of the mouse\n o event (object) DOM event object\n * End event and end handler are called in specified context or in context of the element with following parameters:\n o event (object) DOM event object\n = (object) @Element\n \\*/\n elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n var el = this;\n if (!arguments.length) {\n var origTransform;\n return el.drag(function (dx, dy) {\n this.attr({\n transform: origTransform + (origTransform ? \"T\" : \"t\") + [dx, dy]\n });\n }, function () {\n origTransform = this.transform().local;\n });\n }\n function start(e, x, y) {\n (e.originalEvent || e).preventDefault();\n el._drag.x = x;\n el._drag.y = y;\n el._drag.id = e.identifier;\n !drag.length && Snap.mousemove(dragMove).mouseup(dragUp);\n drag.push({el: el, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n onstart && eve.on(\"snap.drag.start.\" + el.id, onstart);\n onmove && eve.on(\"snap.drag.move.\" + el.id, onmove);\n onend && eve.on(\"snap.drag.end.\" + el.id, onend);\n eve(\"snap.drag.start.\" + el.id, start_scope || move_scope || el, x, y, e);\n }\n function init(e, x, y) {\n eve(\"snap.draginit.\" + el.id, el, e, x, y);\n }\n eve.on(\"snap.draginit.\" + el.id, start);\n el._drag = {};\n draggable.push({el: el, start: start, init: init});\n el.mousedown(init);\n return el;\n };\n /*\n * Element.onDragOver\n [ method ]\n **\n * Shortcut to assign event handler for `drag.over.` event, where `id` is the element's `id` (see @Element.id)\n - f (function) handler for event, first argument would be the element you are dragging over\n \\*/\n // elproto.onDragOver = function (f) {\n // f ? eve.on(\"snap.drag.over.\" + this.id, f) : eve.unbind(\"snap.drag.over.\" + this.id);\n // };\n /*\\\n * Element.undrag\n [ method ]\n **\n * Removes all drag event handlers from the given element\n \\*/\n elproto.undrag = function () {\n var i = draggable.length;\n while (i--) if (draggable[i].el == this) {\n this.unmousedown(draggable[i].init);\n draggable.splice(i, 1);\n eve.unbind(\"snap.drag.*.\" + this.id);\n eve.unbind(\"snap.draginit.\" + this.id);\n }\n !draggable.length && Snap.unmousemove(dragMove).unmouseup(dragUp);\n return this;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n pproto = Paper.prototype,\n rgurl = /^\\s*url\\((.+)\\)/,\n Str = String,\n $ = Snap._.$;\n Snap.filter = {};\n /*\\\n * Paper.filter\n [ method ]\n **\n * Creates a `` element\n **\n - filstr (string) SVG fragment of filter provided as a string\n = (object) @Element\n * Note: It is recommended to use filters embedded into the page inside an empty SVG element.\n > Usage\n | var f = paper.filter(''),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n pproto.filter = function (filstr) {\n var paper = this;\n if (paper.type != \"svg\") {\n paper = paper.paper;\n }\n var f = Snap.parse(Str(filstr)),\n id = Snap._.id(),\n width = paper.node.offsetWidth,\n height = paper.node.offsetHeight,\n filter = $(\"filter\");\n $(filter, {\n id: id,\n filterUnits: \"userSpaceOnUse\"\n });\n filter.appendChild(f.node);\n paper.defs.appendChild(filter);\n return new Element(filter);\n };\n\n eve.on(\"snap.util.getattr.filter\", function () {\n eve.stop();\n var p = $(this.node, \"filter\");\n if (p) {\n var match = Str(p).match(rgurl);\n return match && Snap.select(match[1]);\n }\n });\n eve.on(\"snap.util.attr.filter\", function (value) {\n if (value instanceof Element && value.type == \"filter\") {\n eve.stop();\n var id = value.node.id;\n if (!id) {\n $(value.node, {id: value.id});\n id = value.id;\n }\n $(this.node, {\n filter: Snap.url(id)\n });\n }\n if (!value || value == \"none\") {\n eve.stop();\n this.node.removeAttribute(\"filter\");\n }\n });\n /*\\\n * Snap.filter.blur\n [ method ]\n **\n * Returns an SVG markup string for the blur filter\n **\n - x (number) amount of horizontal blur, in pixels\n - y (number) #optional amount of vertical blur, in pixels\n = (string) filter representation\n > Usage\n | var f = paper.filter(Snap.filter.blur(5, 10)),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n Snap.filter.blur = function (x, y) {\n if (x == null) {\n x = 2;\n }\n var def = y == null ? x : [x, y];\n return Snap.format('\\', {\n def: def\n });\n };\n Snap.filter.blur.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.shadow\n [ method ]\n **\n * Returns an SVG markup string for the shadow filter\n **\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - blur (number) #optional amount of blur\n - color (string) #optional color of the shadow\n - opacity (number) #optional `0..1` opacity of the shadow\n * or\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - color (string) #optional color of the shadow\n - opacity (number) #optional `0..1` opacity of the shadow\n * which makes blur default to `4`. Or\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - opacity (number) #optional `0..1` opacity of the shadow\n = (string) filter representation\n > Usage\n | var f = paper.filter(Snap.filter.shadow(0, 2, .3)),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n Snap.filter.shadow = function (dx, dy, blur, color, opacity) {\n if (opacity == null) {\n if (color == null) {\n opacity = blur;\n blur = 4;\n color = \"#000\";\n } else {\n opacity = color;\n color = blur;\n blur = 4;\n }\n }\n if (blur == null) {\n blur = 4;\n }\n if (opacity == null) {\n opacity = 1;\n }\n if (dx == null) {\n dx = 0;\n dy = 2;\n }\n if (dy == null) {\n dy = dx;\n }\n color = Snap.color(color);\n return Snap.format('', {\n color: color,\n dx: dx,\n dy: dy,\n blur: blur,\n opacity: opacity\n });\n };\n Snap.filter.shadow.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.grayscale\n [ method ]\n **\n * Returns an SVG markup string for the grayscale filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.grayscale = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n a: 0.2126 + 0.7874 * (1 - amount),\n b: 0.7152 - 0.7152 * (1 - amount),\n c: 0.0722 - 0.0722 * (1 - amount),\n d: 0.2126 - 0.2126 * (1 - amount),\n e: 0.7152 + 0.2848 * (1 - amount),\n f: 0.0722 - 0.0722 * (1 - amount),\n g: 0.2126 - 0.2126 * (1 - amount),\n h: 0.0722 + 0.9278 * (1 - amount)\n });\n };\n Snap.filter.grayscale.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.sepia\n [ method ]\n **\n * Returns an SVG markup string for the sepia filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.sepia = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n a: 0.393 + 0.607 * (1 - amount),\n b: 0.769 - 0.769 * (1 - amount),\n c: 0.189 - 0.189 * (1 - amount),\n d: 0.349 - 0.349 * (1 - amount),\n e: 0.686 + 0.314 * (1 - amount),\n f: 0.168 - 0.168 * (1 - amount),\n g: 0.272 - 0.272 * (1 - amount),\n h: 0.534 - 0.534 * (1 - amount),\n i: 0.131 + 0.869 * (1 - amount)\n });\n };\n Snap.filter.sepia.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.saturate\n [ method ]\n **\n * Returns an SVG markup string for the saturate filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.saturate = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: 1 - amount\n });\n };\n Snap.filter.saturate.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.hueRotate\n [ method ]\n **\n * Returns an SVG markup string for the hue-rotate filter\n **\n - angle (number) angle of rotation\n = (string) filter representation\n \\*/\n Snap.filter.hueRotate = function (angle) {\n angle = angle || 0;\n return Snap.format('', {\n angle: angle\n });\n };\n Snap.filter.hueRotate.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.invert\n [ method ]\n **\n * Returns an SVG markup string for the invert filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.invert = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n// \n return Snap.format('', {\n amount: amount,\n amount2: 1 - amount\n });\n };\n Snap.filter.invert.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.brightness\n [ method ]\n **\n * Returns an SVG markup string for the brightness filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.brightness = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: amount\n });\n };\n Snap.filter.brightness.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.contrast\n [ method ]\n **\n * Returns an SVG markup string for the contrast filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.contrast = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: amount,\n amount2: .5 - amount / 2\n });\n };\n Snap.filter.contrast.toString = function () {\n return this();\n };\n});\n\n// Copyright (c) 2014 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var box = Snap._.box,\n is = Snap.is,\n firstLetter = /^[^a-z]*([tbmlrc])/i,\n toString = function () {\n return \"T\" + this.dx + \",\" + this.dy;\n };\n /*\\\n * Element.getAlign\n [ method ]\n **\n * Returns shift needed to align the element relatively to given element.\n * If no elements specified, parent `` container will be used.\n - el (object) @optional alignment element\n - way (string) one of six values: `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"left\"`, `\"center\"`, `\"right\"`\n = (object|string) Object in format `{dx: , dy: }` also has a string representation as a transformation string\n > Usage\n | el.transform(el.getAlign(el2, \"top\"));\n * or\n | var dy = el.getAlign(el2, \"top\").dy;\n \\*/\n Element.prototype.getAlign = function (el, way) {\n if (way == null && is(el, \"string\")) {\n way = el;\n el = null;\n }\n el = el || this.paper;\n var bx = el.getBBox ? el.getBBox() : box(el),\n bb = this.getBBox(),\n out = {};\n way = way && way.match(firstLetter);\n way = way ? way[1].toLowerCase() : \"c\";\n switch (way) {\n case \"t\":\n out.dx = 0;\n out.dy = bx.y - bb.y;\n break;\n case \"b\":\n out.dx = 0;\n out.dy = bx.y2 - bb.y2;\n break;\n case \"m\":\n out.dx = 0;\n out.dy = bx.cy - bb.cy;\n break;\n case \"l\":\n out.dx = bx.x - bb.x;\n out.dy = 0;\n break;\n case \"r\":\n out.dx = bx.x2 - bb.x2;\n out.dy = 0;\n break;\n default:\n out.dx = bx.cx - bb.cx;\n out.dy = 0;\n break;\n }\n out.toString = toString;\n return out;\n };\n /*\\\n * Element.align\n [ method ]\n **\n * Aligns the element relatively to given one via transformation.\n * If no elements specified, parent `` container will be used.\n - el (object) @optional alignment element\n - way (string) one of six values: `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"left\"`, `\"center\"`, `\"right\"`\n = (object) this element\n > Usage\n | el.align(el2, \"top\");\n * or\n | el.align(\"middle\");\n \\*/\n Element.prototype.align = function (el, way) {\n return this.transform(\"...\" + this.getAlign(el, way));\n };\n});\n\n// Copyright (c) 2016 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var elproto = Element.prototype,\n is = Snap.is,\n Str = String,\n has = \"hasOwnProperty\";\n function slice(from, to, f) {\n return function (arr) {\n var res = arr.slice(from, to);\n if (res.length == 1) {\n res = res[0];\n }\n return f ? f(res) : res;\n };\n }\n var Animation = function (attr, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n this.attr = attr;\n this.dur = ms;\n easing && (this.easing = easing);\n callback && (this.callback = callback);\n };\n Snap._.Animation = Animation;\n /*\\\n * Snap.animation\n [ method ]\n **\n * Creates an animation object\n **\n - attr (object) attributes of final destination\n - duration (number) duration of the animation, in milliseconds\n - easing (function) #optional one of easing functions of @mina or custom one\n - callback (function) #optional callback function that fires when animation ends\n = (object) animation object\n \\*/\n Snap.animation = function (attr, ms, easing, callback) {\n return new Animation(attr, ms, easing, callback);\n };\n /*\\\n * Element.inAnim\n [ method ]\n **\n * Returns a set of animations that may be able to manipulate the current element\n **\n = (object) in format:\n o {\n o anim (object) animation object,\n o mina (object) @mina object,\n o curStatus (number) 0..1 — status of the animation: 0 — just started, 1 — just finished,\n o status (function) gets or sets the status of the animation,\n o stop (function) stops the animation\n o }\n \\*/\n elproto.inAnim = function () {\n var el = this,\n res = [];\n for (var id in el.anims) if (el.anims[has](id)) {\n (function (a) {\n res.push({\n anim: new Animation(a._attrs, a.dur, a.easing, a._callback),\n mina: a,\n curStatus: a.status(),\n status: function (val) {\n return a.status(val);\n },\n stop: function () {\n a.stop();\n }\n });\n }(el.anims[id]));\n }\n return res;\n };\n /*\\\n * Snap.animate\n [ method ]\n **\n * Runs generic animation of one number into another with a caring function\n **\n - from (number|array) number or array of numbers\n - to (number|array) number or array of numbers\n - setter (function) caring function that accepts one number argument\n - duration (number) duration, in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function to execute when animation ends\n = (object) animation object in @mina format\n o {\n o id (string) animation id, consider it read-only,\n o duration (function) gets or sets the duration of the animation,\n o easing (function) easing,\n o speed (function) gets or sets the speed of the animation,\n o status (function) gets or sets the status of the animation,\n o stop (function) stops the animation\n o }\n | var rect = Snap().rect(0, 0, 10, 10);\n | Snap.animate(0, 10, function (val) {\n | rect.attr({\n | x: val\n | });\n | }, 1000);\n | // in given context is equivalent to\n | rect.animate({x: 10}, 1000);\n \\*/\n Snap.animate = function (from, to, setter, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n var now = mina.time(),\n anim = mina(from, to, now, now + ms, mina.time, setter, easing);\n callback && eve.once(\"mina.finish.\" + anim.id, callback);\n return anim;\n };\n /*\\\n * Element.stop\n [ method ]\n **\n * Stops all the animations for the current element\n **\n = (Element) the current element\n \\*/\n elproto.stop = function () {\n var anims = this.inAnim();\n for (var i = 0, ii = anims.length; i < ii; i++) {\n anims[i].stop();\n }\n return this;\n };\n /*\\\n * Element.animate\n [ method ]\n **\n * Animates the given attributes of the element\n **\n - attrs (object) key-value pairs of destination attributes\n - duration (number) duration of the animation in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function that executes when the animation ends\n = (Element) the current element\n \\*/\n elproto.animate = function (attrs, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n if (attrs instanceof Animation) {\n callback = attrs.callback;\n easing = attrs.easing;\n ms = attrs.dur;\n attrs = attrs.attr;\n }\n var fkeys = [], tkeys = [], keys = {}, from, to, f, eq,\n el = this;\n for (var key in attrs) if (attrs[has](key)) {\n if (el.equal) {\n eq = el.equal(key, Str(attrs[key]));\n from = eq.from;\n to = eq.to;\n f = eq.f;\n } else {\n from = +el.attr(key);\n to = +attrs[key];\n }\n var len = is(from, \"array\") ? from.length : 1;\n keys[key] = slice(fkeys.length, fkeys.length + len, f);\n fkeys = fkeys.concat(from);\n tkeys = tkeys.concat(to);\n }\n var now = mina.time(),\n anim = mina(fkeys, tkeys, now, now + ms, mina.time, function (val) {\n var attr = {};\n for (var key in keys) if (keys[has](key)) {\n attr[key] = keys[key](val);\n }\n el.attr(attr);\n }, easing);\n el.anims[anim.id] = anim;\n anim._attrs = attrs;\n anim._callback = callback;\n eve(\"snap.animcreated.\" + el.id, anim);\n eve.once(\"mina.finish.\" + anim.id, function () {\n eve.off(\"mina.*.\" + anim.id);\n delete el.anims[anim.id];\n callback && callback.call(el);\n });\n eve.once(\"mina.stop.\" + anim.id, function () {\n eve.off(\"mina.*.\" + anim.id);\n delete el.anims[anim.id];\n });\n return el;\n };\n});\n\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n // Colours are from https://www.materialui.co\n var red = \"#ffebee#ffcdd2#ef9a9a#e57373#ef5350#f44336#e53935#d32f2f#c62828#b71c1c#ff8a80#ff5252#ff1744#d50000\",\n pink = \"#FCE4EC#F8BBD0#F48FB1#F06292#EC407A#E91E63#D81B60#C2185B#AD1457#880E4F#FF80AB#FF4081#F50057#C51162\",\n purple = \"#F3E5F5#E1BEE7#CE93D8#BA68C8#AB47BC#9C27B0#8E24AA#7B1FA2#6A1B9A#4A148C#EA80FC#E040FB#D500F9#AA00FF\",\n deeppurple = \"#EDE7F6#D1C4E9#B39DDB#9575CD#7E57C2#673AB7#5E35B1#512DA8#4527A0#311B92#B388FF#7C4DFF#651FFF#6200EA\",\n indigo = \"#E8EAF6#C5CAE9#9FA8DA#7986CB#5C6BC0#3F51B5#3949AB#303F9F#283593#1A237E#8C9EFF#536DFE#3D5AFE#304FFE\",\n blue = \"#E3F2FD#BBDEFB#90CAF9#64B5F6#64B5F6#2196F3#1E88E5#1976D2#1565C0#0D47A1#82B1FF#448AFF#2979FF#2962FF\",\n lightblue = \"#E1F5FE#B3E5FC#81D4FA#4FC3F7#29B6F6#03A9F4#039BE5#0288D1#0277BD#01579B#80D8FF#40C4FF#00B0FF#0091EA\",\n cyan = \"#E0F7FA#B2EBF2#80DEEA#4DD0E1#26C6DA#00BCD4#00ACC1#0097A7#00838F#006064#84FFFF#18FFFF#00E5FF#00B8D4\",\n teal = \"#E0F2F1#B2DFDB#80CBC4#4DB6AC#26A69A#009688#00897B#00796B#00695C#004D40#A7FFEB#64FFDA#1DE9B6#00BFA5\",\n green = \"#E8F5E9#C8E6C9#A5D6A7#81C784#66BB6A#4CAF50#43A047#388E3C#2E7D32#1B5E20#B9F6CA#69F0AE#00E676#00C853\",\n lightgreen = \"#F1F8E9#DCEDC8#C5E1A5#AED581#9CCC65#8BC34A#7CB342#689F38#558B2F#33691E#CCFF90#B2FF59#76FF03#64DD17\",\n lime = \"#F9FBE7#F0F4C3#E6EE9C#DCE775#D4E157#CDDC39#C0CA33#AFB42B#9E9D24#827717#F4FF81#EEFF41#C6FF00#AEEA00\",\n yellow = \"#FFFDE7#FFF9C4#FFF59D#FFF176#FFEE58#FFEB3B#FDD835#FBC02D#F9A825#F57F17#FFFF8D#FFFF00#FFEA00#FFD600\",\n amber = \"#FFF8E1#FFECB3#FFE082#FFD54F#FFCA28#FFC107#FFB300#FFA000#FF8F00#FF6F00#FFE57F#FFD740#FFC400#FFAB00\",\n orange = \"#FFF3E0#FFE0B2#FFCC80#FFB74D#FFA726#FF9800#FB8C00#F57C00#EF6C00#E65100#FFD180#FFAB40#FF9100#FF6D00\",\n deeporange = \"#FBE9E7#FFCCBC#FFAB91#FF8A65#FF7043#FF5722#F4511E#E64A19#D84315#BF360C#FF9E80#FF6E40#FF3D00#DD2C00\",\n brown = \"#EFEBE9#D7CCC8#BCAAA4#A1887F#8D6E63#795548#6D4C41#5D4037#4E342E#3E2723\",\n grey = \"#FAFAFA#F5F5F5#EEEEEE#E0E0E0#BDBDBD#9E9E9E#757575#616161#424242#212121\",\n bluegrey = \"#ECEFF1#CFD8DC#B0BEC5#90A4AE#78909C#607D8B#546E7A#455A64#37474F#263238\";\n /*\\\n * Snap.mui\n [ property ]\n **\n * Contain Material UI colours.\n | Snap().rect(0, 0, 10, 10).attr({fill: Snap.mui.deeppurple, stroke: Snap.mui.amber[600]});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.mui = {};\n /*\\\n * Snap.flat\n [ property ]\n **\n * Contain Flat UI colours.\n | Snap().rect(0, 0, 10, 10).attr({fill: Snap.flat.carrot, stroke: Snap.flat.wetasphalt});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.flat = {};\n function saveColor(colors) {\n colors = colors.split(/(?=#)/);\n var color = new String(colors[5]);\n color[50] = colors[0];\n color[100] = colors[1];\n color[200] = colors[2];\n color[300] = colors[3];\n color[400] = colors[4];\n color[500] = colors[5];\n color[600] = colors[6];\n color[700] = colors[7];\n color[800] = colors[8];\n color[900] = colors[9];\n if (colors[10]) {\n color.A100 = colors[10];\n color.A200 = colors[11];\n color.A400 = colors[12];\n color.A700 = colors[13];\n }\n return color;\n }\n Snap.mui.red = saveColor(red);\n Snap.mui.pink = saveColor(pink);\n Snap.mui.purple = saveColor(purple);\n Snap.mui.deeppurple = saveColor(deeppurple);\n Snap.mui.indigo = saveColor(indigo);\n Snap.mui.blue = saveColor(blue);\n Snap.mui.lightblue = saveColor(lightblue);\n Snap.mui.cyan = saveColor(cyan);\n Snap.mui.teal = saveColor(teal);\n Snap.mui.green = saveColor(green);\n Snap.mui.lightgreen = saveColor(lightgreen);\n Snap.mui.lime = saveColor(lime);\n Snap.mui.yellow = saveColor(yellow);\n Snap.mui.amber = saveColor(amber);\n Snap.mui.orange = saveColor(orange);\n Snap.mui.deeporange = saveColor(deeporange);\n Snap.mui.brown = saveColor(brown);\n Snap.mui.grey = saveColor(grey);\n Snap.mui.bluegrey = saveColor(bluegrey);\n Snap.flat.turquoise = \"#1abc9c\";\n Snap.flat.greensea = \"#16a085\";\n Snap.flat.sunflower = \"#f1c40f\";\n Snap.flat.orange = \"#f39c12\";\n Snap.flat.emerland = \"#2ecc71\";\n Snap.flat.nephritis = \"#27ae60\";\n Snap.flat.carrot = \"#e67e22\";\n Snap.flat.pumpkin = \"#d35400\";\n Snap.flat.peterriver = \"#3498db\";\n Snap.flat.belizehole = \"#2980b9\";\n Snap.flat.alizarin = \"#e74c3c\";\n Snap.flat.pomegranate = \"#c0392b\";\n Snap.flat.amethyst = \"#9b59b6\";\n Snap.flat.wisteria = \"#8e44ad\";\n Snap.flat.clouds = \"#ecf0f1\";\n Snap.flat.silver = \"#bdc3c7\";\n Snap.flat.wetasphalt = \"#34495e\";\n Snap.flat.midnightblue = \"#2c3e50\";\n Snap.flat.concrete = \"#95a5a6\";\n Snap.flat.asbestos = \"#7f8c8d\";\n /*\\\n * Snap.importMUIColors\n [ method ]\n **\n * Imports Material UI colours into global object.\n | Snap.importMUIColors();\n | Snap().rect(0, 0, 10, 10).attr({fill: deeppurple, stroke: amber[600]});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.importMUIColors = function () {\n for (var color in Snap.mui) {\n if (Snap.mui.hasOwnProperty(color)) {\n window[color] = Snap.mui[color];\n }\n }\n };\n});\n\nmodule.exports = Snap\n","var map = {\n\t\"./1-capNtrim-high.webp\": 7685,\n\t\"./1-capNtrim-low.webp\": 1713,\n\t\"./2-capNtrim-high.webp\": 9532,\n\t\"./2-capNtrim-low.webp\": 1734,\n\t\"./3-capNtrim-high.webp\": 8115,\n\t\"./3-capNtrim-low.webp\": 8895,\n\t\"./4-capNtrim-high.webp\": 9434,\n\t\"./4-capNtrim-low.webp\": 6148,\n\t\"./5-capNtrim-high.webp\": 721,\n\t\"./5-capNtrim-low.webp\": 725,\n\t\"./6-capNtrim-high.webp\": 7992,\n\t\"./6-capNtrim-low.webp\": 1658,\n\t\"./7-capNtrim-high.webp\": 7295,\n\t\"./7-capNtrim-low.webp\": 4723\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 88;","var map = {\n\t\"./1-chainLink-high.webp\": 3632,\n\t\"./1-chainLink-low.webp\": 3026,\n\t\"./10-chainLink-high.webp\": 1710,\n\t\"./10-chainLink-low.webp\": 3536,\n\t\"./11-chainLink-high.webp\": 6615,\n\t\"./11-chainLink-low.webp\": 155,\n\t\"./12-chainLink-high.webp\": 1904,\n\t\"./12-chainLink-low.webp\": 946,\n\t\"./13-chainLink-high.webp\": 9097,\n\t\"./13-chainLink-low.webp\": 2461,\n\t\"./14-chainLink-high.webp\": 9138,\n\t\"./14-chainLink-low.webp\": 4972,\n\t\"./15-chainLink-high.webp\": 443,\n\t\"./15-chainLink-low.webp\": 6551,\n\t\"./16-chainLink-high.webp\": 3364,\n\t\"./16-chainLink-low.webp\": 3742,\n\t\"./17-chainLink-high.webp\": 7085,\n\t\"./17-chainLink-low.webp\": 1289,\n\t\"./18-chainLink-high.webp\": 1062,\n\t\"./18-chainLink-low.webp\": 712,\n\t\"./19-chainLink-high.webp\": 5423,\n\t\"./19-chainLink-low.webp\": 6483,\n\t\"./2-chainLink-high.webp\": 7447,\n\t\"./2-chainLink-low.webp\": 1291,\n\t\"./20-chainLink-high.webp\": 3327,\n\t\"./20-chainLink-low.webp\": 8419,\n\t\"./21-chainLink-high.webp\": 8390,\n\t\"./21-chainLink-low.webp\": 7112,\n\t\"./22-chainLink-high.webp\": 1969,\n\t\"./22-chainLink-low.webp\": 6005,\n\t\"./23-chainLink-high.webp\": 6360,\n\t\"./23-chainLink-low.webp\": 1914,\n\t\"./24-chainLink-high.webp\": 2659,\n\t\"./24-chainLink-low.webp\": 8127,\n\t\"./3-chainLink-high.webp\": 9822,\n\t\"./3-chainLink-low.webp\": 3328,\n\t\"./4-chainLink-high.webp\": 557,\n\t\"./4-chainLink-low.webp\": 5657,\n\t\"./5-chainLink-high.webp\": 1940,\n\t\"./5-chainLink-low.webp\": 4814,\n\t\"./6-chainLink-high.webp\": 3675,\n\t\"./6-chainLink-low.webp\": 1767,\n\t\"./7-chainLink-high.webp\": 8386,\n\t\"./7-chainLink-low.webp\": 268,\n\t\"./8-chainLink-high.webp\": 4417,\n\t\"./8-chainLink-low.webp\": 3797,\n\t\"./9-chainLink-high.webp\": 9096,\n\t\"./9-chainLink-low.webp\": 3466\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7590;","var map = {\n\t\"./1-craftsman-high.webp\": 7077,\n\t\"./1-craftsman-low.webp\": 2737,\n\t\"./10-craftsman-high.webp\": 5025,\n\t\"./10-craftsman-low.webp\": 7189,\n\t\"./11-craftsman-high.webp\": 1836,\n\t\"./11-craftsman-low.webp\": 262,\n\t\"./12-craftsman-high.webp\": 8867,\n\t\"./12-craftsman-low.webp\": 5855,\n\t\"./13-craftsman-high.webp\": 7478,\n\t\"./13-craftsman-low.webp\": 9688,\n\t\"./14-craftsman-high.webp\": 6549,\n\t\"./14-craftsman-low.webp\": 881,\n\t\"./15-craftsman-high.webp\": 9792,\n\t\"./15-craftsman-low.webp\": 4434,\n\t\"./16-craftsman-high.webp\": 839,\n\t\"./16-craftsman-low.webp\": 8331,\n\t\"./17-craftsman-high.webp\": 6602,\n\t\"./17-craftsman-low.webp\": 8228,\n\t\"./18-craftsman-high.webp\": 9,\n\t\"./18-craftsman-low.webp\": 669,\n\t\"./19-craftsman-high.webp\": 500,\n\t\"./19-craftsman-low.webp\": 9886,\n\t\"./2-craftsman-high.webp\": 4122,\n\t\"./2-craftsman-low.webp\": 6724,\n\t\"./20-craftsman-high.webp\": 1656,\n\t\"./20-craftsman-low.webp\": 8490,\n\t\"./21-craftsman-high.webp\": 3837,\n\t\"./21-craftsman-low.webp\": 2361,\n\t\"./3-craftsman-high.webp\": 9383,\n\t\"./3-craftsman-low.webp\": 6203,\n\t\"./4-craftsman-high.webp\": 9980,\n\t\"./4-craftsman-low.webp\": 8678,\n\t\"./5-craftsman-high.webp\": 5121,\n\t\"./5-craftsman-low.webp\": 7525,\n\t\"./6-craftsman-high.webp\": 6134,\n\t\"./6-craftsman-low.webp\": 1768,\n\t\"./7-craftsman-high.webp\": 7424,\n\t\"./7-craftsman-low.webp\": 895,\n\t\"./8-craftsman-high.webp\": 4504,\n\t\"./8-craftsman-low.webp\": 7242,\n\t\"./9-craftsman-high.webp\": 8397,\n\t\"./9-craftsman-low.webp\": 345\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9377;","var map = {\n\t\"./1-custom-high.webp\": 2400,\n\t\"./1-custom-low.webp\": 5890,\n\t\"./10-custom-high.webp\": 538,\n\t\"./10-custom-low.webp\": 1636,\n\t\"./11-custom-high.webp\": 2761,\n\t\"./11-custom-low.webp\": 333,\n\t\"./2-custom-high.webp\": 5809,\n\t\"./2-custom-low.webp\": 8559,\n\t\"./3-custom-high.webp\": 8642,\n\t\"./3-custom-low.webp\": 8828,\n\t\"./4-custom-high.webp\": 1403,\n\t\"./4-custom-low.webp\": 7815,\n\t\"./5-custom-high.webp\": 1508,\n\t\"./5-custom-low.webp\": 8142,\n\t\"./6-custom-high.webp\": 1333,\n\t\"./6-custom-low.webp\": 6449,\n\t\"./7-custom-high.webp\": 9302,\n\t\"./7-custom-low.webp\": 4376,\n\t\"./8-custom-high.webp\": 1839,\n\t\"./8-custom-low.webp\": 563,\n\t\"./9-custom-high.webp\": 9416,\n\t\"./9-custom-low.webp\": 8186\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 566;","var map = {\n\t\"./1-hogwire-high.webp\": 5592,\n\t\"./1-hogwire-low.webp\": 9578,\n\t\"./2-hogwire-high.webp\": 8519,\n\t\"./2-hogwire-low.webp\": 3755,\n\t\"./3-hogwire-high.webp\": 290,\n\t\"./3-hogwire-low.webp\": 7644,\n\t\"./4-hogwire-high.webp\": 4633,\n\t\"./4-hogwire-low.webp\": 1885,\n\t\"./5-hogwire-high.webp\": 2292,\n\t\"./5-hogwire-low.webp\": 1438,\n\t\"./6-hogwire-high.webp\": 2403,\n\t\"./6-hogwire-low.webp\": 575,\n\t\"./7-hogwire-high.webp\": 9854,\n\t\"./7-hogwire-low.webp\": 8496,\n\t\"./8-hogwire-high.webp\": 341,\n\t\"./8-hogwire-low.webp\": 9025\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3712;","var map = {\n\t\"./1-horizontal-high.webp\": 9658,\n\t\"./1-horizontal-low.webp\": 3588,\n\t\"./10-horizontal-high.webp\": 6498,\n\t\"./10-horizontal-low.webp\": 556,\n\t\"./11-horizontal-high.webp\": 4093,\n\t\"./11-horizontal-low.webp\": 537,\n\t\"./12-horizontal-high.webp\": 4188,\n\t\"./12-horizontal-low.webp\": 518,\n\t\"./13-horizontal-high.webp\": 8695,\n\t\"./13-horizontal-low.webp\": 8987,\n\t\"./14-horizontal-high.webp\": 7374,\n\t\"./14-horizontal-low.webp\": 6208,\n\t\"./15-horizontal-high.webp\": 7657,\n\t\"./15-horizontal-low.webp\": 6717,\n\t\"./2-horizontal-high.webp\": 5743,\n\t\"./2-horizontal-low.webp\": 4755,\n\t\"./3-horizontal-high.webp\": 7876,\n\t\"./3-horizontal-low.webp\": 5454,\n\t\"./4-horizontal-high.webp\": 1809,\n\t\"./4-horizontal-low.webp\": 6741,\n\t\"./5-horizontal-high.webp\": 6950,\n\t\"./5-horizontal-low.webp\": 7912,\n\t\"./6-horizontal-high.webp\": 9739,\n\t\"./6-horizontal-low.webp\": 7335,\n\t\"./7-horizontal-high.webp\": 7936,\n\t\"./7-horizontal-low.webp\": 3346,\n\t\"./8-horizontal-high.webp\": 6925,\n\t\"./8-horizontal-low.webp\": 7305,\n\t\"./9-horizontal-high.webp\": 9282,\n\t\"./9-horizontal-low.webp\": 3980\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2365;","var map = {\n\t\"./1-ornamental-high.webp\": 1384,\n\t\"./1-ornamental-low.webp\": 6474,\n\t\"./10-ornamental-high.webp\": 2058,\n\t\"./10-ornamental-low.webp\": 4532,\n\t\"./11-ornamental-high.webp\": 781,\n\t\"./11-ornamental-low.webp\": 9817,\n\t\"./12-ornamental-high.webp\": 8608,\n\t\"./12-ornamental-low.webp\": 8594,\n\t\"./13-ornamental-high.webp\": 2579,\n\t\"./13-ornamental-low.webp\": 127,\n\t\"./14-ornamental-high.webp\": 7966,\n\t\"./14-ornamental-low.webp\": 9040,\n\t\"./15-ornamental-high.webp\": 7185,\n\t\"./15-ornamental-low.webp\": 6597,\n\t\"./16-ornamental-high.webp\": 9380,\n\t\"./16-ornamental-low.webp\": 8814,\n\t\"./17-ornamental-high.webp\": 247,\n\t\"./17-ornamental-low.webp\": 5803,\n\t\"./18-ornamental-high.webp\": 6178,\n\t\"./18-ornamental-low.webp\": 5916,\n\t\"./19-ornamental-high.webp\": 8437,\n\t\"./19-ornamental-low.webp\": 6945,\n\t\"./2-ornamental-high.webp\": 1397,\n\t\"./2-ornamental-low.webp\": 2385,\n\t\"./20-ornamental-high.webp\": 613,\n\t\"./20-ornamental-low.webp\": 417,\n\t\"./3-ornamental-high.webp\": 3378,\n\t\"./3-ornamental-low.webp\": 6220,\n\t\"./4-ornamental-high.webp\": 991,\n\t\"./4-ornamental-low.webp\": 3555,\n\t\"./5-ornamental-high.webp\": 9548,\n\t\"./5-ornamental-low.webp\": 8038,\n\t\"./6-ornamental-high.webp\": 2985,\n\t\"./6-ornamental-low.webp\": 6173,\n\t\"./7-ornamental-high.webp\": 4934,\n\t\"./7-ornamental-low.webp\": 6008,\n\t\"./8-ornamental-high.webp\": 5699,\n\t\"./8-ornamental-low.webp\": 9615,\n\t\"./9-ornamental-high.webp\": 800,\n\t\"./9-ornamental-low.webp\": 2466\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5632;","var map = {\n\t\"./becky-review-high.webp\": 6429,\n\t\"./becky-review-low.webp\": 4985,\n\t\"./erica-review-high.webp\": 2309,\n\t\"./erica-review-low.webp\": 5441,\n\t\"./karin-review-high.webp\": 5606,\n\t\"./karin-review-low.webp\": 728,\n\t\"./kelly-review-high.webp\": 5748,\n\t\"./kelly-review-low.webp\": 6430,\n\t\"./nathan-review-high.webp\": 8743,\n\t\"./nathan-review-low.webp\": 5227\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7919;","var map = {\n\t\"./1-standard-high.webp\": 5664,\n\t\"./1-standard-low.webp\": 2274,\n\t\"./10-standard-high.webp\": 934,\n\t\"./10-standard-low.webp\": 1960,\n\t\"./11-standard-high.webp\": 8509,\n\t\"./11-standard-low.webp\": 4761,\n\t\"./2-standard-high.webp\": 5485,\n\t\"./2-standard-low.webp\": 3209,\n\t\"./3-standard-high.webp\": 2198,\n\t\"./3-standard-low.webp\": 5112,\n\t\"./4-standard-high.webp\": 603,\n\t\"./4-standard-low.webp\": 3399,\n\t\"./5-standard-high.webp\": 5700,\n\t\"./5-standard-low.webp\": 3902,\n\t\"./6-standard-high.webp\": 7729,\n\t\"./6-standard-low.webp\": 7797,\n\t\"./7-standard-high.webp\": 2570,\n\t\"./7-standard-low.webp\": 4948,\n\t\"./8-standard-high.webp\": 6703,\n\t\"./8-standard-low.webp\": 355,\n\t\"./9-standard-high.webp\": 3528,\n\t\"./9-standard-low.webp\": 1274\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 8744;","var map = {\n\t\"./1-vinyl-high.webp\": 4980,\n\t\"./1-vinyl-low.webp\": 6798,\n\t\"./10-vinyl-high.webp\": 7884,\n\t\"./10-vinyl-low.webp\": 246,\n\t\"./2-vinyl-high.webp\": 1343,\n\t\"./2-vinyl-low.webp\": 3587,\n\t\"./3-vinyl-high.webp\": 8470,\n\t\"./3-vinyl-low.webp\": 7080,\n\t\"./4-vinyl-high.webp\": 7241,\n\t\"./4-vinyl-low.webp\": 1293,\n\t\"./5-vinyl-high.webp\": 1944,\n\t\"./5-vinyl-low.webp\": 2474,\n\t\"./6-vinyl-high.webp\": 3635,\n\t\"./6-vinyl-low.webp\": 1535,\n\t\"./7-vinyl-high.webp\": 1770,\n\t\"./7-vinyl-low.webp\": 2548,\n\t\"./8-vinyl-high.webp\": 1069,\n\t\"./8-vinyl-low.webp\": 3609,\n\t\"./9-vinyl-high.webp\": 5692,\n\t\"./9-vinyl-low.webp\": 6550\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1203;","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"f45e20f0\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"nates-fence-and-gate:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknates_fence_and_gate\"] = self[\"webpackChunknates_fence_and_gate\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\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\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 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 ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n signal: AbortSignal;\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n opts: AgnosticPatchRoutesOnNavigationFunctionArgs\n) => void | Promise;\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: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(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/v6/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 return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\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(\n branches[i],\n decoded,\n allowPartial\n );\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 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 allowPartial = false\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 let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\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/v6/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/v6/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\nexport function 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/v6/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 === pathMatches.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 *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\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 class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\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\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\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\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"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 DataStrategyResult,\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 AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\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 matchRoutesImpl,\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 * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): 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 v7_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 dataStrategy?: DataStrategyFunction;\n patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\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 dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n 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 viewTransitionOpts?: ViewTransitionOpts;\n 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 flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n 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 * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\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 * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\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.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\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 v7_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 initialMatchesIsFOW = false;\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\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 // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\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 (!initialMatches.some((m) => m.route.loader)) {\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 // 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\n .slice(0, idx + 1)\n .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\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: Set = new Set();\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 // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\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 unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\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 (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\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 let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\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, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => 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 // Remove any lingering deleted fetchers that have already been removed\n // from state.fetchers\n deletedFetchers.forEach((key) => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n deletedFetchersKeys.push(key);\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 viewTransitionOpts: opts.viewTransitionOpts,\n 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 } else {\n // We already called deleteFetcher() on these, can remove them from this\n // Set now that we've handed the keys off to the data layer\n deletedFetchersKeys.forEach((key) => deletedFetchers.delete(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 // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\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 }\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.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.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 {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\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 =\n opts?.initialHydration &&\n state.matches &&\n state.matches.length > 0 &&\n !initialMatchesIsFOW\n ? // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches\n : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\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 hydration 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 fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = 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 {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\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: updatedMatches || 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 isFogOfWar: boolean,\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 if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error: discoverResult.error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\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 state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\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, true, {\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 to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\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 isFogOfWar: boolean,\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 // 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 let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\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.v7_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 (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\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,\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\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);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\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 fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\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 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 // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): 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 return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\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 return new Map(state.fetchers);\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 abortFetcher(key);\n\n let flushSync = (opts && opts.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 let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\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 let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\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 fogOfWar.active,\n flushSync,\n preventScrollReset,\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 isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.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 true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\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 let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\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, false, {\n fetcherSubmission: submission,\n preventScrollReset,\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.v7_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 abortFetcher(staleKey);\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,\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);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\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 fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\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 isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: 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 let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\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, false, {\n preventScrollReset,\n });\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 isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n preventScrollReset?: boolean;\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 || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : 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 these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\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 these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\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 state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\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 matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\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.add(key);\n }\n abortFetcher(key);\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 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 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\n // If we opted into the flag we can clear this now since we're calling\n // deleteFetcher() at the end of updateState() and we've already handed the\n // deleted fetcher keys off to the data layer.\n // If not, we're eagerly calling deleteFetcher() and we need to keep this\n // Set populated until the next updateState call, and we'll clear\n // `deletedFetchers` then\n if (future.v7_fetcherPersist) {\n deletedFetchers.delete(key);\n }\n\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n if (!future.v7_fetcherPersist) {\n deleteFetcher(key);\n }\n } else {\n activeFetchers.set(key, count);\n }\n\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\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 handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\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 checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n if (!patchRoutesOnNavigationImpl) {\n return { type: \"success\", matches };\n }\n\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n signal,\n path: pathname,\n matches: partialMatches,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties\n );\n },\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\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 patchRoutes,\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 dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n 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 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 dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n 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 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 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 dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n 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 `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(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 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 dataStrategy\n );\n result = results[actionMatch.route.id];\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 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 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 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 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 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 dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(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 match.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 dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\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 // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\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 at/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 includeBoundary = false\n) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n initialHydration: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\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 boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\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 (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\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 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 hydration (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 initialHydration ||\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.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\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 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 shouldLoadRouteOnHydration(\n route: AgnosticDataRouteObject,\n loaderData: RouteData | null | undefined,\n errors: RouteData | null | undefined\n) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\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\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n let childrenToPatch: AgnosticDataRouteObject[];\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(\n (newRoute) =>\n !childrenToPatch.some((existingRoute) =>\n isSameRoute(newRoute, existingRoute)\n )\n );\n\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n\n childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n newRoute: AgnosticRouteObject,\n existingRoute: AgnosticRouteObject\n): boolean {\n // Most optimal check is by id\n if (\n \"id\" in newRoute &&\n \"id\" in existingRoute &&\n newRoute.id === existingRoute.id\n ) {\n return true;\n }\n\n // Second is by pathing differences\n if (\n !(\n newRoute.index === existingRoute.index &&\n newRoute.path === existingRoute.path &&\n newRoute.caseSensitive === existingRoute.caseSensitive\n )\n ) {\n return false;\n }\n\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if (\n (!newRoute.children || newRoute.children.length === 0) &&\n (!existingRoute.children || existingRoute.children.length === 0)\n ) {\n return true;\n }\n\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children!.every((aChild, i) =>\n existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\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\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\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\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: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\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 loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\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 = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\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 loadRoutePromise,\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 loadRoutePromise;\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 // DataStrategyResults 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 convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\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 if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n // Convert thrown data() to ErrorResponse instances\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n ),\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\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 if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\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 results: Record,\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 matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[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 results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\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 revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\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 message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n message?: string;\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: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\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 isPromise
a||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","window.eve = require('eve')\n\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nvar mina = (function (eve) {\n var animations = {},\n requestAnimFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16, new Date().getTime());\n return true;\n },\n requestID,\n isArray = Array.isArray || function (a) {\n return a instanceof Array ||\n Object.prototype.toString.call(a) == \"[object Array]\";\n },\n idgen = 0,\n idprefix = \"M\" + (+new Date).toString(36),\n ID = function () {\n return idprefix + (idgen++).toString(36);\n },\n diff = function (a, b, A, B) {\n if (isArray(a)) {\n res = [];\n for (var i = 0, ii = a.length; i < ii; i++) {\n res[i] = diff(a[i], b, A[i], B);\n }\n return res;\n }\n var dif = (A - a) / (B - b);\n return function (bb) {\n return a + dif * (bb - b);\n };\n },\n timer = Date.now || function () {\n return +new Date;\n },\n sta = function (val) {\n var a = this;\n if (val == null) {\n return a.s;\n }\n var ds = a.s - val;\n a.b += a.dur * ds;\n a.B += a.dur * ds;\n a.s = val;\n },\n speed = function (val) {\n var a = this;\n if (val == null) {\n return a.spd;\n }\n a.spd = val;\n },\n duration = function (val) {\n var a = this;\n if (val == null) {\n return a.dur;\n }\n a.s = a.s * val / a.dur;\n a.dur = val;\n },\n stopit = function () {\n var a = this;\n delete animations[a.id];\n a.update();\n eve(\"mina.stop.\" + a.id, a);\n },\n pause = function () {\n var a = this;\n if (a.pdif) {\n return;\n }\n delete animations[a.id];\n a.update();\n a.pdif = a.get() - a.b;\n },\n resume = function () {\n var a = this;\n if (!a.pdif) {\n return;\n }\n a.b = a.get() - a.pdif;\n delete a.pdif;\n animations[a.id] = a;\n frame();\n },\n update = function () {\n var a = this,\n res;\n if (isArray(a.start)) {\n res = [];\n for (var j = 0, jj = a.start.length; j < jj; j++) {\n res[j] = +a.start[j] +\n (a.end[j] - a.start[j]) * a.easing(a.s);\n }\n } else {\n res = +a.start + (a.end - a.start) * a.easing(a.s);\n }\n a.set(res);\n },\n frame = function (timeStamp) {\n // Manual invokation?\n if (!timeStamp) {\n // Frame loop stopped?\n if (!requestID) {\n // Start frame loop...\n requestID = requestAnimFrame(frame);\n }\n return;\n }\n var len = 0;\n for (var i in animations) if (animations.hasOwnProperty(i)) {\n var a = animations[i],\n b = a.get(),\n res;\n len++;\n a.s = (b - a.b) / (a.dur / a.spd);\n if (a.s >= 1) {\n delete animations[i];\n a.s = 1;\n len--;\n (function (a) {\n setTimeout(function () {\n eve(\"mina.finish.\" + a.id, a);\n });\n }(a));\n }\n a.update();\n }\n requestID = len ? requestAnimFrame(frame) : false;\n },\n /*\\\n * mina\n [ method ]\n **\n * Generic animation of numbers\n **\n - a (number) start _slave_ number\n - A (number) end _slave_ number\n - b (number) start _master_ number (start time in general case)\n - B (number) end _master_ number (end time in general case)\n - get (function) getter of _master_ number (see @mina.time)\n - set (function) setter of _slave_ number\n - easing (function) #optional easing function, default is @mina.linear\n = (object) animation descriptor\n o {\n o id (string) animation id,\n o start (number) start _slave_ number,\n o end (number) end _slave_ number,\n o b (number) start _master_ number,\n o s (number) animation status (0..1),\n o dur (number) animation duration,\n o spd (number) animation speed,\n o get (function) getter of _master_ number (see @mina.time),\n o set (function) setter of _slave_ number,\n o easing (function) easing function, default is @mina.linear,\n o status (function) status getter/setter,\n o speed (function) speed getter/setter,\n o duration (function) duration getter/setter,\n o stop (function) animation stopper\n o pause (function) pauses the animation\n o resume (function) resumes the animation\n o update (function) calles setter with the right value of the animation\n o }\n \\*/\n mina = function (a, A, b, B, get, set, easing) {\n var anim = {\n id: ID(),\n start: a,\n end: A,\n b: b,\n s: 0,\n dur: B - b,\n spd: 1,\n get: get,\n set: set,\n easing: easing || mina.linear,\n status: sta,\n speed: speed,\n duration: duration,\n stop: stopit,\n pause: pause,\n resume: resume,\n update: update\n };\n animations[anim.id] = anim;\n var len = 0, i;\n for (i in animations) if (animations.hasOwnProperty(i)) {\n len++;\n if (len == 2) {\n break;\n }\n }\n len == 1 && frame();\n return anim;\n };\n /*\\\n * mina.time\n [ method ]\n **\n * Returns the current time. Equivalent to:\n | function () {\n | return (new Date).getTime();\n | }\n \\*/\n mina.time = timer;\n /*\\\n * mina.getById\n [ method ]\n **\n * Returns an animation by its id\n - id (string) animation's id\n = (object) See @mina\n \\*/\n mina.getById = function (id) {\n return animations[id] || null;\n };\n\n /*\\\n * mina.linear\n [ method ]\n **\n * Default linear easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.linear = function (n) {\n return n;\n };\n /*\\\n * mina.easeout\n [ method ]\n **\n * Easeout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easeout = function (n) {\n return Math.pow(n, 1.7);\n };\n /*\\\n * mina.easein\n [ method ]\n **\n * Easein easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easein = function (n) {\n return Math.pow(n, .48);\n };\n /*\\\n * mina.easeinout\n [ method ]\n **\n * Easeinout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.easeinout = function (n) {\n if (n == 1) {\n return 1;\n }\n if (n == 0) {\n return 0;\n }\n var q = .48 - n / 1.04,\n Q = Math.sqrt(.1734 + q * q),\n x = Q - q,\n X = Math.pow(Math.abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n y = -Q - q,\n Y = Math.pow(Math.abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n t = X + Y + .5;\n return (1 - t) * 3 * t * t + t * t * t;\n };\n /*\\\n * mina.backin\n [ method ]\n **\n * Backin easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.backin = function (n) {\n if (n == 1) {\n return 1;\n }\n var s = 1.70158;\n return n * n * ((s + 1) * n - s);\n };\n /*\\\n * mina.backout\n [ method ]\n **\n * Backout easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.backout = function (n) {\n if (n == 0) {\n return 0;\n }\n n = n - 1;\n var s = 1.70158;\n return n * n * ((s + 1) * n + s) + 1;\n };\n /*\\\n * mina.elastic\n [ method ]\n **\n * Elastic easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.elastic = function (n) {\n if (n == !!n) {\n return n;\n }\n return Math.pow(2, -10 * n) * Math.sin((n - .075) *\n (2 * Math.PI) / .3) + 1;\n };\n /*\\\n * mina.bounce\n [ method ]\n **\n * Bounce easing\n - n (number) input 0..1\n = (number) output 0..1\n \\*/\n mina.bounce = function (n) {\n var s = 7.5625,\n p = 2.75,\n l;\n if (n < 1 / p) {\n l = s * n * n;\n } else {\n if (n < 2 / p) {\n n -= 1.5 / p;\n l = s * n * n + .75;\n } else {\n if (n < 2.5 / p) {\n n -= 2.25 / p;\n l = s * n * n + .9375;\n } else {\n n -= 2.625 / p;\n l = s * n * n + .984375;\n }\n }\n }\n return l;\n };\n window.mina = mina;\n return mina;\n})(typeof eve == \"undefined\" ? function () {} : eve);\n\n// Copyright (c) 2013 - 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nvar Snap = (function(root) {\nSnap.version = \"0.5.1\";\n/*\\\n * Snap\n [ method ]\n **\n * Creates a drawing surface or wraps existing SVG element.\n **\n - width (number|string) width of surface\n - height (number|string) height of surface\n * or\n - DOM (SVGElement) element to be wrapped into Snap structure\n * or\n - array (array) array of elements (will return set of elements)\n * or\n - query (string) CSS query selector\n = (object) @Element\n\\*/\nfunction Snap(w, h) {\n if (w) {\n if (w.nodeType) {\n return wrap(w);\n }\n if (is(w, \"array\") && Snap.set) {\n return Snap.set.apply(Snap, w);\n }\n if (w instanceof Element) {\n return w;\n }\n if (h == null) {\n try {\n w = glob.doc.querySelector(String(w));\n return wrap(w);\n } catch (e) {\n return null;\n }\n }\n }\n w = w == null ? \"100%\" : w;\n h = h == null ? \"100%\" : h;\n return new Paper(w, h);\n}\nSnap.toString = function () {\n return \"Snap v\" + this.version;\n};\nSnap._ = {};\nvar glob = {\n win: root.window,\n doc: root.window.document\n};\nSnap._.glob = glob;\nvar has = \"hasOwnProperty\",\n Str = String,\n toFloat = parseFloat,\n toInt = parseInt,\n math = Math,\n mmax = math.max,\n mmin = math.min,\n abs = math.abs,\n pow = math.pow,\n PI = math.PI,\n round = math.round,\n E = \"\",\n S = \" \",\n objectToString = Object.prototype.toString,\n ISURL = /^url\\(['\"]?([^\\)]+?)['\"]?\\)$/i,\n colourRegExp = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?%?)\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?%?)\\s*\\))\\s*$/i,\n bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n separator = Snap._.separator = /[,\\s]+/,\n whitespace = /[\\s]/g,\n commaSpaces = /[\\s]*,[\\s]*/,\n hsrg = {hs: 1, rg: 1},\n pathCommand = /([a-z])[\\s,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\s]*,?[\\s]*)+)/ig,\n tCommand = /([rstm])[\\s,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\s]*,?[\\s]*)+)/ig,\n pathValues = /(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\s]*,?[\\s]*/ig,\n idgen = 0,\n idprefix = \"S\" + (+new Date).toString(36),\n ID = function (el) {\n return (el && el.type ? el.type : E) + idprefix + (idgen++).toString(36);\n },\n xlink = \"http://www.w3.org/1999/xlink\",\n xmlns = \"http://www.w3.org/2000/svg\",\n hub = {},\n /*\\\n * Snap.url\n [ method ]\n **\n * Wraps path into `\"url('')\"`.\n - value (string) path\n = (string) wrapped path\n \\*/\n URL = Snap.url = function (url) {\n return \"url('#\" + url + \"')\";\n };\n\nfunction $(el, attr) {\n if (attr) {\n if (el == \"#text\") {\n el = glob.doc.createTextNode(attr.text || attr[\"#text\"] || \"\");\n }\n if (el == \"#comment\") {\n el = glob.doc.createComment(attr.text || attr[\"#text\"] || \"\");\n }\n if (typeof el == \"string\") {\n el = $(el);\n }\n if (typeof attr == \"string\") {\n if (el.nodeType == 1) {\n if (attr.substring(0, 6) == \"xlink:\") {\n return el.getAttributeNS(xlink, attr.substring(6));\n }\n if (attr.substring(0, 4) == \"xml:\") {\n return el.getAttributeNS(xmlns, attr.substring(4));\n }\n return el.getAttribute(attr);\n } else if (attr == \"text\") {\n return el.nodeValue;\n } else {\n return null;\n }\n }\n if (el.nodeType == 1) {\n for (var key in attr) if (attr[has](key)) {\n var val = Str(attr[key]);\n if (val) {\n if (key.substring(0, 6) == \"xlink:\") {\n el.setAttributeNS(xlink, key.substring(6), val);\n } else if (key.substring(0, 4) == \"xml:\") {\n el.setAttributeNS(xmlns, key.substring(4), val);\n } else {\n el.setAttribute(key, val);\n }\n } else {\n el.removeAttribute(key);\n }\n }\n } else if (\"text\" in attr) {\n el.nodeValue = attr.text;\n }\n } else {\n el = glob.doc.createElementNS(xmlns, el);\n }\n return el;\n}\nSnap._.$ = $;\nSnap._.id = ID;\nfunction getAttrs(el) {\n var attrs = el.attributes,\n name,\n out = {};\n for (var i = 0; i < attrs.length; i++) {\n if (attrs[i].namespaceURI == xlink) {\n name = \"xlink:\";\n } else {\n name = \"\";\n }\n name += attrs[i].name;\n out[name] = attrs[i].textContent;\n }\n return out;\n}\nfunction is(o, type) {\n type = Str.prototype.toLowerCase.call(type);\n if (type == \"finite\") {\n return isFinite(o);\n }\n if (type == \"array\" &&\n (o instanceof Array || Array.isArray && Array.isArray(o))) {\n return true;\n }\n return type == \"null\" && o === null ||\n type == typeof o && o !== null ||\n type == \"object\" && o === Object(o) ||\n objectToString.call(o).slice(8, -1).toLowerCase() == type;\n}\n/*\\\n * Snap.format\n [ method ]\n **\n * Replaces construction of type `{}` to the corresponding argument\n **\n - token (string) string to format\n - json (object) object which properties are used as a replacement\n = (string) formatted string\n > Usage\n | // this draws a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n | paper.path(Snap.format(\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\", {\n | x: 10,\n | y: 20,\n | dim: {\n | width: 40,\n | height: 50,\n | \"negative width\": -40\n | }\n | }));\n\\*/\nSnap.format = (function () {\n var tokenRegex = /\\{([^\\}]+)\\}/g,\n objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n replacer = function (all, key, obj) {\n var res = obj;\n key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n name = name || quotedName;\n if (res) {\n if (name in res) {\n res = res[name];\n }\n typeof res == \"function\" && isFunc && (res = res());\n }\n });\n res = (res == null || res == obj ? all : res) + \"\";\n return res;\n };\n return function (str, obj) {\n return Str(str).replace(tokenRegex, function (all, key) {\n return replacer(all, key, obj);\n });\n };\n})();\nfunction clone(obj) {\n if (typeof obj == \"function\" || Object(obj) !== obj) {\n return obj;\n }\n var res = new obj.constructor;\n for (var key in obj) if (obj[has](key)) {\n res[key] = clone(obj[key]);\n }\n return res;\n}\nSnap._.clone = clone;\nfunction repush(array, item) {\n for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n return array.push(array.splice(i, 1)[0]);\n }\n}\nfunction cacher(f, scope, postprocessor) {\n function newf() {\n var arg = Array.prototype.slice.call(arguments, 0),\n args = arg.join(\"\\u2400\"),\n cache = newf.cache = newf.cache || {},\n count = newf.count = newf.count || [];\n if (cache[has](args)) {\n repush(count, args);\n return postprocessor ? postprocessor(cache[args]) : cache[args];\n }\n count.length >= 1e3 && delete cache[count.shift()];\n count.push(args);\n cache[args] = f.apply(scope, arg);\n return postprocessor ? postprocessor(cache[args]) : cache[args];\n }\n return newf;\n}\nSnap._.cacher = cacher;\nfunction angle(x1, y1, x2, y2, x3, y3) {\n if (x3 == null) {\n var x = x1 - x2,\n y = y1 - y2;\n if (!x && !y) {\n return 0;\n }\n return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n } else {\n return angle(x1, y1, x3, y3) - angle(x2, y2, x3, y3);\n }\n}\nfunction rad(deg) {\n return deg % 360 * PI / 180;\n}\nfunction deg(rad) {\n return rad * 180 / PI % 360;\n}\nfunction x_y() {\n return this.x + S + this.y;\n}\nfunction x_y_w_h() {\n return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n}\n\n/*\\\n * Snap.rad\n [ method ]\n **\n * Transform angle to radians\n - deg (number) angle in degrees\n = (number) angle in radians\n\\*/\nSnap.rad = rad;\n/*\\\n * Snap.deg\n [ method ]\n **\n * Transform angle to degrees\n - rad (number) angle in radians\n = (number) angle in degrees\n\\*/\nSnap.deg = deg;\n/*\\\n * Snap.sin\n [ method ]\n **\n * Equivalent to `Math.sin()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) sin\n\\*/\nSnap.sin = function (angle) {\n return math.sin(Snap.rad(angle));\n};\n/*\\\n * Snap.tan\n [ method ]\n **\n * Equivalent to `Math.tan()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) tan\n\\*/\nSnap.tan = function (angle) {\n return math.tan(Snap.rad(angle));\n};\n/*\\\n * Snap.cos\n [ method ]\n **\n * Equivalent to `Math.cos()` only works with degrees, not radians.\n - angle (number) angle in degrees\n = (number) cos\n\\*/\nSnap.cos = function (angle) {\n return math.cos(Snap.rad(angle));\n};\n/*\\\n * Snap.asin\n [ method ]\n **\n * Equivalent to `Math.asin()` only works with degrees, not radians.\n - num (number) value\n = (number) asin in degrees\n\\*/\nSnap.asin = function (num) {\n return Snap.deg(math.asin(num));\n};\n/*\\\n * Snap.acos\n [ method ]\n **\n * Equivalent to `Math.acos()` only works with degrees, not radians.\n - num (number) value\n = (number) acos in degrees\n\\*/\nSnap.acos = function (num) {\n return Snap.deg(math.acos(num));\n};\n/*\\\n * Snap.atan\n [ method ]\n **\n * Equivalent to `Math.atan()` only works with degrees, not radians.\n - num (number) value\n = (number) atan in degrees\n\\*/\nSnap.atan = function (num) {\n return Snap.deg(math.atan(num));\n};\n/*\\\n * Snap.atan2\n [ method ]\n **\n * Equivalent to `Math.atan2()` only works with degrees, not radians.\n - num (number) value\n = (number) atan2 in degrees\n\\*/\nSnap.atan2 = function (num) {\n return Snap.deg(math.atan2(num));\n};\n/*\\\n * Snap.angle\n [ method ]\n **\n * Returns an angle between two or three points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n - x3 (number) #optional x coord of third point\n - y3 (number) #optional y coord of third point\n = (number) angle in degrees\n\\*/\nSnap.angle = angle;\n/*\\\n * Snap.len\n [ method ]\n **\n * Returns distance between two points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n = (number) distance\n\\*/\nSnap.len = function (x1, y1, x2, y2) {\n return Math.sqrt(Snap.len2(x1, y1, x2, y2));\n};\n/*\\\n * Snap.len2\n [ method ]\n **\n * Returns squared distance between two points\n - x1 (number) x coord of first point\n - y1 (number) y coord of first point\n - x2 (number) x coord of second point\n - y2 (number) y coord of second point\n = (number) distance\n\\*/\nSnap.len2 = function (x1, y1, x2, y2) {\n return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n};\n/*\\\n * Snap.closestPoint\n [ method ]\n **\n * Returns closest point to a given one on a given path.\n - path (Element) path element\n - x (number) x coord of a point\n - y (number) y coord of a point\n = (object) in format\n {\n x (number) x coord of the point on the path\n y (number) y coord of the point on the path\n length (number) length of the path to the point\n distance (number) distance from the given point to the path\n }\n\\*/\n// Copied from http://bl.ocks.org/mbostock/8027637\nSnap.closestPoint = function (path, x, y) {\n function distance2(p) {\n var dx = p.x - x,\n dy = p.y - y;\n return dx * dx + dy * dy;\n }\n var pathNode = path.node,\n pathLength = pathNode.getTotalLength(),\n precision = pathLength / pathNode.pathSegList.numberOfItems * .125,\n best,\n bestLength,\n bestDistance = Infinity;\n\n // linear scan for coarse approximation\n for (var scan, scanLength = 0, scanDistance; scanLength <= pathLength; scanLength += precision) {\n if ((scanDistance = distance2(scan = pathNode.getPointAtLength(scanLength))) < bestDistance) {\n best = scan;\n bestLength = scanLength;\n bestDistance = scanDistance;\n }\n }\n\n // binary search for precise estimate\n precision *= .5;\n while (precision > .5) {\n var before,\n after,\n beforeLength,\n afterLength,\n beforeDistance,\n afterDistance;\n if ((beforeLength = bestLength - precision) >= 0 && (beforeDistance = distance2(before = pathNode.getPointAtLength(beforeLength))) < bestDistance) {\n best = before;\n bestLength = beforeLength;\n bestDistance = beforeDistance;\n } else if ((afterLength = bestLength + precision) <= pathLength && (afterDistance = distance2(after = pathNode.getPointAtLength(afterLength))) < bestDistance) {\n best = after;\n bestLength = afterLength;\n bestDistance = afterDistance;\n } else {\n precision *= .5;\n }\n }\n\n best = {\n x: best.x,\n y: best.y,\n length: bestLength,\n distance: Math.sqrt(bestDistance)\n };\n return best;\n}\n/*\\\n * Snap.is\n [ method ]\n **\n * Handy replacement for the `typeof` operator\n - o (…) any object or primitive\n - type (string) name of the type, e.g., `string`, `function`, `number`, etc.\n = (boolean) `true` if given value is of given type\n\\*/\nSnap.is = is;\n/*\\\n * Snap.snapTo\n [ method ]\n **\n * Snaps given value to given grid\n - values (array|number) given array of values or step of the grid\n - value (number) value to adjust\n - tolerance (number) #optional maximum distance to the target value that would trigger the snap. Default is `10`.\n = (number) adjusted value\n\\*/\nSnap.snapTo = function (values, value, tolerance) {\n tolerance = is(tolerance, \"finite\") ? tolerance : 10;\n if (is(values, \"array\")) {\n var i = values.length;\n while (i--) if (abs(values[i] - value) <= tolerance) {\n return values[i];\n }\n } else {\n values = +values;\n var rem = value % values;\n if (rem < tolerance) {\n return value - rem;\n }\n if (rem > values - tolerance) {\n return value - rem + values;\n }\n }\n return value;\n};\n// Colour\n/*\\\n * Snap.getRGB\n [ method ]\n **\n * Parses color string as RGB object\n - color (string) color string in one of the following formats:\n # \n # Color name (red, green, cornflowerblue, etc)\n # #••• — shortened HTML color: (#000, #fc0, etc.)\n # #•••••• — full length HTML color: (#000000, #bd2300)\n # rgb(•••, •••, •••) — red, green and blue channels values: (rgb(200, 100, 0))\n # rgba(•••, •••, •••, •••) — also with opacity\n # rgb(•••%, •••%, •••%) — same as above, but in %: (rgb(100%, 175%, 0%))\n # rgba(•••%, •••%, •••%, •••%) — also with opacity\n # hsb(•••, •••, •••) — hue, saturation and brightness values: (hsb(0.5, 0.25, 1))\n # hsba(•••, •••, •••, •••) — also with opacity\n # hsb(•••%, •••%, •••%) — same as above, but in %\n # hsba(•••%, •••%, •••%, •••%) — also with opacity\n # hsl(•••, •••, •••) — hue, saturation and luminosity values: (hsb(0.5, 0.25, 0.5))\n # hsla(•••, •••, •••, •••) — also with opacity\n # hsl(•••%, •••%, •••%) — same as above, but in %\n # hsla(•••%, •••%, •••%, •••%) — also with opacity\n # \n * Note that `%` can be used any time: `rgb(20%, 255, 50%)`.\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••,\n o error (boolean) true if string can't be parsed\n o }\n\\*/\nSnap.getRGB = cacher(function (colour) {\n if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n }\n if (colour == \"none\") {\n return {r: -1, g: -1, b: -1, hex: \"none\", toString: rgbtoString};\n }\n !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n if (!colour) {\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n }\n var res,\n red,\n green,\n blue,\n opacity,\n t,\n values,\n rgb = colour.match(colourRegExp);\n if (rgb) {\n if (rgb[2]) {\n blue = toInt(rgb[2].substring(5), 16);\n green = toInt(rgb[2].substring(3, 5), 16);\n red = toInt(rgb[2].substring(1, 3), 16);\n }\n if (rgb[3]) {\n blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n green = toInt((t = rgb[3].charAt(2)) + t, 16);\n red = toInt((t = rgb[3].charAt(1)) + t, 16);\n }\n if (rgb[4]) {\n values = rgb[4].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red *= 2.55);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green *= 2.55);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue *= 2.55);\n rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n }\n if (rgb[5]) {\n values = rgb[5].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red /= 100);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green /= 100);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue /= 100);\n (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n return Snap.hsb2rgb(red, green, blue, opacity);\n }\n if (rgb[6]) {\n values = rgb[6].split(commaSpaces);\n red = toFloat(values[0]);\n values[0].slice(-1) == \"%\" && (red /= 100);\n green = toFloat(values[1]);\n values[1].slice(-1) == \"%\" && (green /= 100);\n blue = toFloat(values[2]);\n values[2].slice(-1) == \"%\" && (blue /= 100);\n (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n return Snap.hsl2rgb(red, green, blue, opacity);\n }\n red = mmin(math.round(red), 255);\n green = mmin(math.round(green), 255);\n blue = mmin(math.round(blue), 255);\n opacity = mmin(mmax(opacity, 0), 1);\n rgb = {r: red, g: green, b: blue, toString: rgbtoString};\n rgb.hex = \"#\" + (16777216 | blue | green << 8 | red << 16).toString(16).slice(1);\n rgb.opacity = is(opacity, \"finite\") ? opacity : 1;\n return rgb;\n }\n return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: rgbtoString};\n}, Snap);\n/*\\\n * Snap.hsb\n [ method ]\n **\n * Converts HSB values to a hex representation of the color\n - h (number) hue\n - s (number) saturation\n - b (number) value or brightness\n = (string) hex representation of the color\n\\*/\nSnap.hsb = cacher(function (h, s, b) {\n return Snap.hsb2rgb(h, s, b).hex;\n});\n/*\\\n * Snap.hsl\n [ method ]\n **\n * Converts HSL values to a hex representation of the color\n - h (number) hue\n - s (number) saturation\n - l (number) luminosity\n = (string) hex representation of the color\n\\*/\nSnap.hsl = cacher(function (h, s, l) {\n return Snap.hsl2rgb(h, s, l).hex;\n});\n/*\\\n * Snap.rgb\n [ method ]\n **\n * Converts RGB values to a hex representation of the color\n - r (number) red\n - g (number) green\n - b (number) blue\n = (string) hex representation of the color\n\\*/\nSnap.rgb = cacher(function (r, g, b, o) {\n if (is(o, \"finite\")) {\n var round = math.round;\n return \"rgba(\" + [round(r), round(g), round(b), +o.toFixed(2)] + \")\";\n }\n return \"#\" + (16777216 | b | g << 8 | r << 16).toString(16).slice(1);\n});\nvar toHex = function (color) {\n var i = glob.doc.getElementsByTagName(\"head\")[0] || glob.doc.getElementsByTagName(\"svg\")[0],\n red = \"rgb(255, 0, 0)\";\n toHex = cacher(function (color) {\n if (color.toLowerCase() == \"red\") {\n return red;\n }\n i.style.color = red;\n i.style.color = color;\n var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n return out == red ? null : out;\n });\n return toHex(color);\n},\nhsbtoString = function () {\n return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n},\nhsltoString = function () {\n return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n},\nrgbtoString = function () {\n return this.opacity == 1 || this.opacity == null ?\n this.hex :\n \"rgba(\" + [this.r, this.g, this.b, this.opacity] + \")\";\n},\nprepareRGB = function (r, g, b) {\n if (g == null && is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n b = r.b;\n g = r.g;\n r = r.r;\n }\n if (g == null && is(r, string)) {\n var clr = Snap.getRGB(r);\n r = clr.r;\n g = clr.g;\n b = clr.b;\n }\n if (r > 1 || g > 1 || b > 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n }\n\n return [r, g, b];\n},\npackageRGB = function (r, g, b, o) {\n r = math.round(r * 255);\n g = math.round(g * 255);\n b = math.round(b * 255);\n var rgb = {\n r: r,\n g: g,\n b: b,\n opacity: is(o, \"finite\") ? o : 1,\n hex: Snap.rgb(r, g, b),\n toString: rgbtoString\n };\n is(o, \"finite\") && (rgb.opacity = o);\n return rgb;\n};\n/*\\\n * Snap.color\n [ method ]\n **\n * Parses the color string and returns an object featuring the color's component values\n - clr (string) color string in one of the supported formats (see @Snap.getRGB)\n = (object) Combined RGB/HSB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••,\n o error (boolean) `true` if string can't be parsed,\n o h (number) hue,\n o s (number) saturation,\n o v (number) value (brightness),\n o l (number) lightness\n o }\n\\*/\nSnap.color = function (clr) {\n var rgb;\n if (is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n rgb = Snap.hsb2rgb(clr);\n clr.r = rgb.r;\n clr.g = rgb.g;\n clr.b = rgb.b;\n clr.opacity = 1;\n clr.hex = rgb.hex;\n } else if (is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n rgb = Snap.hsl2rgb(clr);\n clr.r = rgb.r;\n clr.g = rgb.g;\n clr.b = rgb.b;\n clr.opacity = 1;\n clr.hex = rgb.hex;\n } else {\n if (is(clr, \"string\")) {\n clr = Snap.getRGB(clr);\n }\n if (is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr && !(\"error\" in clr)) {\n rgb = Snap.rgb2hsl(clr);\n clr.h = rgb.h;\n clr.s = rgb.s;\n clr.l = rgb.l;\n rgb = Snap.rgb2hsb(clr);\n clr.v = rgb.b;\n } else {\n clr = {hex: \"none\"};\n clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n clr.error = 1;\n }\n }\n clr.toString = rgbtoString;\n return clr;\n};\n/*\\\n * Snap.hsb2rgb\n [ method ]\n **\n * Converts HSB values to an RGB object\n - h (number) hue\n - s (number) saturation\n - v (number) value or brightness\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••\n o }\n\\*/\nSnap.hsb2rgb = function (h, s, v, o) {\n if (is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n v = h.b;\n s = h.s;\n o = h.o;\n h = h.h;\n }\n h *= 360;\n var R, G, B, X, C;\n h = h % 360 / 60;\n C = v * s;\n X = C * (1 - abs(h % 2 - 1));\n R = G = B = v - C;\n\n h = ~~h;\n R += [C, X, 0, 0, X, C][h];\n G += [X, C, C, X, 0, 0][h];\n B += [0, 0, X, C, C, X][h];\n return packageRGB(R, G, B, o);\n};\n/*\\\n * Snap.hsl2rgb\n [ method ]\n **\n * Converts HSL values to an RGB object\n - h (number) hue\n - s (number) saturation\n - l (number) luminosity\n = (object) RGB object in the following format:\n o {\n o r (number) red,\n o g (number) green,\n o b (number) blue,\n o hex (string) color in HTML/CSS format: #••••••\n o }\n\\*/\nSnap.hsl2rgb = function (h, s, l, o) {\n if (is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n l = h.l;\n s = h.s;\n h = h.h;\n }\n if (h > 1 || s > 1 || l > 1) {\n h /= 360;\n s /= 100;\n l /= 100;\n }\n h *= 360;\n var R, G, B, X, C;\n h = h % 360 / 60;\n C = 2 * s * (l < .5 ? l : 1 - l);\n X = C * (1 - abs(h % 2 - 1));\n R = G = B = l - C / 2;\n\n h = ~~h;\n R += [C, X, 0, 0, X, C][h];\n G += [X, C, C, X, 0, 0][h];\n B += [0, 0, X, C, C, X][h];\n return packageRGB(R, G, B, o);\n};\n/*\\\n * Snap.rgb2hsb\n [ method ]\n **\n * Converts RGB values to an HSB object\n - r (number) red\n - g (number) green\n - b (number) blue\n = (object) HSB object in the following format:\n o {\n o h (number) hue,\n o s (number) saturation,\n o b (number) brightness\n o }\n\\*/\nSnap.rgb2hsb = function (r, g, b) {\n b = prepareRGB(r, g, b);\n r = b[0];\n g = b[1];\n b = b[2];\n\n var H, S, V, C;\n V = mmax(r, g, b);\n C = V - mmin(r, g, b);\n H = C == 0 ? null :\n V == r ? (g - b) / C :\n V == g ? (b - r) / C + 2 :\n (r - g) / C + 4;\n H = (H + 360) % 6 * 60 / 360;\n S = C == 0 ? 0 : C / V;\n return {h: H, s: S, b: V, toString: hsbtoString};\n};\n/*\\\n * Snap.rgb2hsl\n [ method ]\n **\n * Converts RGB values to an HSL object\n - r (number) red\n - g (number) green\n - b (number) blue\n = (object) HSL object in the following format:\n o {\n o h (number) hue,\n o s (number) saturation,\n o l (number) luminosity\n o }\n\\*/\nSnap.rgb2hsl = function (r, g, b) {\n b = prepareRGB(r, g, b);\n r = b[0];\n g = b[1];\n b = b[2];\n\n var H, S, L, M, m, C;\n M = mmax(r, g, b);\n m = mmin(r, g, b);\n C = M - m;\n H = C == 0 ? null :\n M == r ? (g - b) / C :\n M == g ? (b - r) / C + 2 :\n (r - g) / C + 4;\n H = (H + 360) % 6 * 60 / 360;\n L = (M + m) / 2;\n S = C == 0 ? 0 :\n L < .5 ? C / (2 * L) :\n C / (2 - 2 * L);\n return {h: H, s: S, l: L, toString: hsltoString};\n};\n\n// Transformations\n/*\\\n * Snap.parsePathString\n [ method ]\n **\n * Utility method\n **\n * Parses given path string into an array of arrays of path segments\n - pathString (string|array) path string or array of segments (in the last case it is returned straight away)\n = (array) array of segments\n\\*/\nSnap.parsePathString = function (pathString) {\n if (!pathString) {\n return null;\n }\n var pth = Snap.path(pathString);\n if (pth.arr) {\n return Snap.path.clone(pth.arr);\n }\n\n var paramCounts = {a: 7, c: 6, o: 2, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, u: 3, z: 0},\n data = [];\n if (is(pathString, \"array\") && is(pathString[0], \"array\")) { // rough assumption\n data = Snap.path.clone(pathString);\n }\n if (!data.length) {\n Str(pathString).replace(pathCommand, function (a, b, c) {\n var params = [],\n name = b.toLowerCase();\n c.replace(pathValues, function (a, b) {\n b && params.push(+b);\n });\n if (name == \"m\" && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = \"l\";\n b = b == \"m\" ? \"l\" : \"L\";\n }\n if (name == \"o\" && params.length == 1) {\n data.push([b, params[0]]);\n }\n if (name == \"r\") {\n data.push([b].concat(params));\n } else while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n });\n }\n data.toString = Snap.path.toString;\n pth.arr = Snap.path.clone(data);\n return data;\n};\n/*\\\n * Snap.parseTransformString\n [ method ]\n **\n * Utility method\n **\n * Parses given transform string into an array of transformations\n - TString (string|array) transform string or array of transformations (in the last case it is returned straight away)\n = (array) array of transformations\n\\*/\nvar parseTransformString = Snap.parseTransformString = function (TString) {\n if (!TString) {\n return null;\n }\n var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n data = [];\n if (is(TString, \"array\") && is(TString[0], \"array\")) { // rough assumption\n data = Snap.path.clone(TString);\n }\n if (!data.length) {\n Str(TString).replace(tCommand, function (a, b, c) {\n var params = [],\n name = b.toLowerCase();\n c.replace(pathValues, function (a, b) {\n b && params.push(+b);\n });\n data.push([b].concat(params));\n });\n }\n data.toString = Snap.path.toString;\n return data;\n};\nfunction svgTransform2string(tstr) {\n var res = [];\n tstr = tstr.replace(/(?:^|\\s)(\\w+)\\(([^)]+)\\)/g, function (all, name, params) {\n params = params.split(/\\s*,\\s*|\\s+/);\n if (name == \"rotate\" && params.length == 1) {\n params.push(0, 0);\n }\n if (name == \"scale\") {\n if (params.length > 2) {\n params = params.slice(0, 2);\n } else if (params.length == 2) {\n params.push(0, 0);\n }\n if (params.length == 1) {\n params.push(params[0], 0, 0);\n }\n }\n if (name == \"skewX\") {\n res.push([\"m\", 1, 0, math.tan(rad(params[0])), 1, 0, 0]);\n } else if (name == \"skewY\") {\n res.push([\"m\", 1, math.tan(rad(params[0])), 0, 1, 0, 0]);\n } else {\n res.push([name.charAt(0)].concat(params));\n }\n return all;\n });\n return res;\n}\nSnap._.svgTransform2string = svgTransform2string;\nSnap._.rgTransform = /^[a-z][\\s]*-?\\.?\\d/i;\nfunction transform2matrix(tstr, bbox) {\n var tdata = parseTransformString(tstr),\n m = new Snap.Matrix;\n if (tdata) {\n for (var i = 0, ii = tdata.length; i < ii; i++) {\n var t = tdata[i],\n tlen = t.length,\n command = Str(t[0]).toLowerCase(),\n absolute = t[0] != command,\n inver = absolute ? m.invert() : 0,\n x1,\n y1,\n x2,\n y2,\n bb;\n if (command == \"t\" && tlen == 2){\n m.translate(t[1], 0);\n } else if (command == \"t\" && tlen == 3) {\n if (absolute) {\n x1 = inver.x(0, 0);\n y1 = inver.y(0, 0);\n x2 = inver.x(t[1], t[2]);\n y2 = inver.y(t[1], t[2]);\n m.translate(x2 - x1, y2 - y1);\n } else {\n m.translate(t[1], t[2]);\n }\n } else if (command == \"r\") {\n if (tlen == 2) {\n bb = bb || bbox;\n m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n } else if (tlen == 4) {\n if (absolute) {\n x2 = inver.x(t[2], t[3]);\n y2 = inver.y(t[2], t[3]);\n m.rotate(t[1], x2, y2);\n } else {\n m.rotate(t[1], t[2], t[3]);\n }\n }\n } else if (command == \"s\") {\n if (tlen == 2 || tlen == 3) {\n bb = bb || bbox;\n m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n } else if (tlen == 4) {\n if (absolute) {\n x2 = inver.x(t[2], t[3]);\n y2 = inver.y(t[2], t[3]);\n m.scale(t[1], t[1], x2, y2);\n } else {\n m.scale(t[1], t[1], t[2], t[3]);\n }\n } else if (tlen == 5) {\n if (absolute) {\n x2 = inver.x(t[3], t[4]);\n y2 = inver.y(t[3], t[4]);\n m.scale(t[1], t[2], x2, y2);\n } else {\n m.scale(t[1], t[2], t[3], t[4]);\n }\n }\n } else if (command == \"m\" && tlen == 7) {\n m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n }\n }\n }\n return m;\n}\nSnap._.transform2matrix = transform2matrix;\nSnap._unit2px = unit2px;\nvar contains = glob.doc.contains || glob.doc.compareDocumentPosition ?\n function (a, b) {\n var adown = a.nodeType == 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a == bup || !!(bup && bup.nodeType == 1 && (\n adown.contains ?\n adown.contains(bup) :\n a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n ));\n } :\n function (a, b) {\n if (b) {\n while (b) {\n b = b.parentNode;\n if (b == a) {\n return true;\n }\n }\n }\n return false;\n };\nfunction getSomeDefs(el) {\n var p = el.node.ownerSVGElement && wrap(el.node.ownerSVGElement) ||\n el.node.parentNode && wrap(el.node.parentNode) ||\n Snap.select(\"svg\") ||\n Snap(0, 0),\n pdefs = p.select(\"defs\"),\n defs = pdefs == null ? false : pdefs.node;\n if (!defs) {\n defs = make(\"defs\", p.node).node;\n }\n return defs;\n}\nfunction getSomeSVG(el) {\n return el.node.ownerSVGElement && wrap(el.node.ownerSVGElement) || Snap.select(\"svg\");\n}\nSnap._.getSomeDefs = getSomeDefs;\nSnap._.getSomeSVG = getSomeSVG;\nfunction unit2px(el, name, value) {\n var svg = getSomeSVG(el).node,\n out = {},\n mgr = svg.querySelector(\".svg---mgr\");\n if (!mgr) {\n mgr = $(\"rect\");\n $(mgr, {x: -9e9, y: -9e9, width: 10, height: 10, \"class\": \"svg---mgr\", fill: \"none\"});\n svg.appendChild(mgr);\n }\n function getW(val) {\n if (val == null) {\n return E;\n }\n if (val == +val) {\n return val;\n }\n $(mgr, {width: val});\n try {\n return mgr.getBBox().width;\n } catch (e) {\n return 0;\n }\n }\n function getH(val) {\n if (val == null) {\n return E;\n }\n if (val == +val) {\n return val;\n }\n $(mgr, {height: val});\n try {\n return mgr.getBBox().height;\n } catch (e) {\n return 0;\n }\n }\n function set(nam, f) {\n if (name == null) {\n out[nam] = f(el.attr(nam) || 0);\n } else if (nam == name) {\n out = f(value == null ? el.attr(nam) || 0 : value);\n }\n }\n switch (el.type) {\n case \"rect\":\n set(\"rx\", getW);\n set(\"ry\", getH);\n case \"image\":\n set(\"width\", getW);\n set(\"height\", getH);\n case \"text\":\n set(\"x\", getW);\n set(\"y\", getH);\n break;\n case \"circle\":\n set(\"cx\", getW);\n set(\"cy\", getH);\n set(\"r\", getW);\n break;\n case \"ellipse\":\n set(\"cx\", getW);\n set(\"cy\", getH);\n set(\"rx\", getW);\n set(\"ry\", getH);\n break;\n case \"line\":\n set(\"x1\", getW);\n set(\"x2\", getW);\n set(\"y1\", getH);\n set(\"y2\", getH);\n break;\n case \"marker\":\n set(\"refX\", getW);\n set(\"markerWidth\", getW);\n set(\"refY\", getH);\n set(\"markerHeight\", getH);\n break;\n case \"radialGradient\":\n set(\"fx\", getW);\n set(\"fy\", getH);\n break;\n case \"tspan\":\n set(\"dx\", getW);\n set(\"dy\", getH);\n break;\n default:\n set(name, getW);\n }\n svg.removeChild(mgr);\n return out;\n}\n/*\\\n * Snap.select\n [ method ]\n **\n * Wraps a DOM element specified by CSS selector as @Element\n - query (string) CSS selector of the element\n = (Element) the current element\n\\*/\nSnap.select = function (query) {\n query = Str(query).replace(/([^\\\\]):/g, \"$1\\\\:\");\n return wrap(glob.doc.querySelector(query));\n};\n/*\\\n * Snap.selectAll\n [ method ]\n **\n * Wraps DOM elements specified by CSS selector as set or array of @Element\n - query (string) CSS selector of the element\n = (Element) the current element\n\\*/\nSnap.selectAll = function (query) {\n var nodelist = glob.doc.querySelectorAll(query),\n set = (Snap.set || Array)();\n for (var i = 0; i < nodelist.length; i++) {\n set.push(wrap(nodelist[i]));\n }\n return set;\n};\n\nfunction add2group(list) {\n if (!is(list, \"array\")) {\n list = Array.prototype.slice.call(arguments, 0);\n }\n var i = 0,\n j = 0,\n node = this.node;\n while (this[i]) delete this[i++];\n for (i = 0; i < list.length; i++) {\n if (list[i].type == \"set\") {\n list[i].forEach(function (el) {\n node.appendChild(el.node);\n });\n } else {\n node.appendChild(list[i].node);\n }\n }\n var children = node.childNodes;\n for (i = 0; i < children.length; i++) {\n this[j++] = wrap(children[i]);\n }\n return this;\n}\n// Hub garbage collector every 10s\nsetInterval(function () {\n for (var key in hub) if (hub[has](key)) {\n var el = hub[key],\n node = el.node;\n if (el.type != \"svg\" && !node.ownerSVGElement || el.type == \"svg\" && (!node.parentNode || \"ownerSVGElement\" in node.parentNode && !node.ownerSVGElement)) {\n delete hub[key];\n }\n }\n}, 1e4);\nfunction Element(el) {\n if (el.snap in hub) {\n return hub[el.snap];\n }\n var svg;\n try {\n svg = el.ownerSVGElement;\n } catch(e) {}\n /*\\\n * Element.node\n [ property (object) ]\n **\n * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\n > Usage\n | // draw a circle at coordinate 10,10 with radius of 10\n | var c = paper.circle(10, 10, 10);\n | c.node.onclick = function () {\n | c.attr(\"fill\", \"red\");\n | };\n \\*/\n this.node = el;\n if (svg) {\n this.paper = new Paper(svg);\n }\n /*\\\n * Element.type\n [ property (string) ]\n **\n * SVG tag name of the given element.\n \\*/\n this.type = el.tagName || el.nodeName;\n var id = this.id = ID(this);\n this.anims = {};\n this._ = {\n transform: []\n };\n el.snap = id;\n hub[id] = this;\n if (this.type == \"g\") {\n this.add = add2group;\n }\n if (this.type in {g: 1, mask: 1, pattern: 1, symbol: 1}) {\n for (var method in Paper.prototype) if (Paper.prototype[has](method)) {\n this[method] = Paper.prototype[method];\n }\n }\n}\n /*\\\n * Element.attr\n [ method ]\n **\n * Gets or sets given attributes of the element.\n **\n - params (object) contains key-value pairs of attributes you want to set\n * or\n - param (string) name of the attribute\n = (Element) the current element\n * or\n = (string) value of attribute\n > Usage\n | el.attr({\n | fill: \"#fc0\",\n | stroke: \"#000\",\n | strokeWidth: 2, // CamelCase...\n | \"fill-opacity\": 0.5, // or dash-separated names\n | width: \"*=2\" // prefixed values\n | });\n | console.log(el.attr(\"fill\")); // #fc0\n * Prefixed values in format `\"+=10\"` supported. All four operations\n * (`+`, `-`, `*` and `/`) could be used. Optionally you can use units for `+`\n * and `-`: `\"+=2em\"`.\n \\*/\n Element.prototype.attr = function (params, value) {\n var el = this,\n node = el.node;\n if (!params) {\n if (node.nodeType != 1) {\n return {\n text: node.nodeValue\n };\n }\n var attr = node.attributes,\n out = {};\n for (var i = 0, ii = attr.length; i < ii; i++) {\n out[attr[i].nodeName] = attr[i].nodeValue;\n }\n return out;\n }\n if (is(params, \"string\")) {\n if (arguments.length > 1) {\n var json = {};\n json[params] = value;\n params = json;\n } else {\n return eve(\"snap.util.getattr.\" + params, el).firstDefined();\n }\n }\n for (var att in params) {\n if (params[has](att)) {\n eve(\"snap.util.attr.\" + att, el, params[att]);\n }\n }\n return el;\n };\n/*\\\n * Snap.parse\n [ method ]\n **\n * Parses SVG fragment and converts it into a @Fragment\n **\n - svg (string) SVG string\n = (Fragment) the @Fragment\n\\*/\nSnap.parse = function (svg) {\n var f = glob.doc.createDocumentFragment(),\n full = true,\n div = glob.doc.createElement(\"div\");\n svg = Str(svg);\n if (!svg.match(/^\\s*<\\s*svg(?:\\s|>)/)) {\n svg = \"\" + svg + \"\";\n full = false;\n }\n div.innerHTML = svg;\n svg = div.getElementsByTagName(\"svg\")[0];\n if (svg) {\n if (full) {\n f = svg;\n } else {\n while (svg.firstChild) {\n f.appendChild(svg.firstChild);\n }\n }\n }\n return new Fragment(f);\n};\nfunction Fragment(frag) {\n this.node = frag;\n}\n/*\\\n * Snap.fragment\n [ method ]\n **\n * Creates a DOM fragment from a given list of elements or strings\n **\n - varargs (…) SVG string\n = (Fragment) the @Fragment\n\\*/\nSnap.fragment = function () {\n var args = Array.prototype.slice.call(arguments, 0),\n f = glob.doc.createDocumentFragment();\n for (var i = 0, ii = args.length; i < ii; i++) {\n var item = args[i];\n if (item.node && item.node.nodeType) {\n f.appendChild(item.node);\n }\n if (item.nodeType) {\n f.appendChild(item);\n }\n if (typeof item == \"string\") {\n f.appendChild(Snap.parse(item).node);\n }\n }\n return new Fragment(f);\n};\n\nfunction make(name, parent) {\n var res = $(name);\n parent.appendChild(res);\n var el = wrap(res);\n return el;\n}\nfunction Paper(w, h) {\n var res,\n desc,\n defs,\n proto = Paper.prototype;\n if (w && w.tagName && w.tagName.toLowerCase() == \"svg\") {\n if (w.snap in hub) {\n return hub[w.snap];\n }\n var doc = w.ownerDocument;\n res = new Element(w);\n desc = w.getElementsByTagName(\"desc\")[0];\n defs = w.getElementsByTagName(\"defs\")[0];\n if (!desc) {\n desc = $(\"desc\");\n desc.appendChild(doc.createTextNode(\"Created with Snap\"));\n res.node.appendChild(desc);\n }\n if (!defs) {\n defs = $(\"defs\");\n res.node.appendChild(defs);\n }\n res.defs = defs;\n for (var key in proto) if (proto[has](key)) {\n res[key] = proto[key];\n }\n res.paper = res.root = res;\n } else {\n res = make(\"svg\", glob.doc.body);\n $(res.node, {\n height: h,\n version: 1.1,\n width: w,\n xmlns: xmlns\n });\n }\n return res;\n}\nfunction wrap(dom) {\n if (!dom) {\n return dom;\n }\n if (dom instanceof Element || dom instanceof Fragment) {\n return dom;\n }\n if (dom.tagName && dom.tagName.toLowerCase() == \"svg\") {\n return new Paper(dom);\n }\n if (dom.tagName && dom.tagName.toLowerCase() == \"object\" && dom.type == \"image/svg+xml\") {\n return new Paper(dom.contentDocument.getElementsByTagName(\"svg\")[0]);\n }\n return new Element(dom);\n}\n\nSnap._.make = make;\nSnap._.wrap = wrap;\n/*\\\n * Paper.el\n [ method ]\n **\n * Creates an element on paper with a given name and no attributes\n **\n - name (string) tag name\n - attr (object) attributes\n = (Element) the current element\n > Usage\n | var c = paper.circle(10, 10, 10); // is the same as...\n | var c = paper.el(\"circle\").attr({\n | cx: 10,\n | cy: 10,\n | r: 10\n | });\n | // and the same as\n | var c = paper.el(\"circle\", {\n | cx: 10,\n | cy: 10,\n | r: 10\n | });\n\\*/\nPaper.prototype.el = function (name, attr) {\n var el = make(name, this.node);\n attr && el.attr(attr);\n return el;\n};\n/*\\\n * Element.children\n [ method ]\n **\n * Returns array of all the children of the element.\n = (array) array of Elements\n\\*/\nElement.prototype.children = function () {\n var out = [],\n ch = this.node.childNodes;\n for (var i = 0, ii = ch.length; i < ii; i++) {\n out[i] = Snap(ch[i]);\n }\n return out;\n};\nfunction jsonFiller(root, o) {\n for (var i = 0, ii = root.length; i < ii; i++) {\n var item = {\n type: root[i].type,\n attr: root[i].attr()\n },\n children = root[i].children();\n o.push(item);\n if (children.length) {\n jsonFiller(children, item.childNodes = []);\n }\n }\n}\n/*\\\n * Element.toJSON\n [ method ]\n **\n * Returns object representation of the given element and all its children.\n = (object) in format\n o {\n o type (string) this.type,\n o attr (object) attributes map,\n o childNodes (array) optional array of children in the same format\n o }\n\\*/\nElement.prototype.toJSON = function () {\n var out = [];\n jsonFiller([this], out);\n return out[0];\n};\n// default\neve.on(\"snap.util.getattr\", function () {\n var att = eve.nt();\n att = att.substring(att.lastIndexOf(\".\") + 1);\n var css = att.replace(/[A-Z]/g, function (letter) {\n return \"-\" + letter.toLowerCase();\n });\n if (cssAttr[has](css)) {\n return this.node.ownerDocument.defaultView.getComputedStyle(this.node, null).getPropertyValue(css);\n } else {\n return $(this.node, att);\n }\n});\nvar cssAttr = {\n \"alignment-baseline\": 0,\n \"baseline-shift\": 0,\n \"clip\": 0,\n \"clip-path\": 0,\n \"clip-rule\": 0,\n \"color\": 0,\n \"color-interpolation\": 0,\n \"color-interpolation-filters\": 0,\n \"color-profile\": 0,\n \"color-rendering\": 0,\n \"cursor\": 0,\n \"direction\": 0,\n \"display\": 0,\n \"dominant-baseline\": 0,\n \"enable-background\": 0,\n \"fill\": 0,\n \"fill-opacity\": 0,\n \"fill-rule\": 0,\n \"filter\": 0,\n \"flood-color\": 0,\n \"flood-opacity\": 0,\n \"font\": 0,\n \"font-family\": 0,\n \"font-size\": 0,\n \"font-size-adjust\": 0,\n \"font-stretch\": 0,\n \"font-style\": 0,\n \"font-variant\": 0,\n \"font-weight\": 0,\n \"glyph-orientation-horizontal\": 0,\n \"glyph-orientation-vertical\": 0,\n \"image-rendering\": 0,\n \"kerning\": 0,\n \"letter-spacing\": 0,\n \"lighting-color\": 0,\n \"marker\": 0,\n \"marker-end\": 0,\n \"marker-mid\": 0,\n \"marker-start\": 0,\n \"mask\": 0,\n \"opacity\": 0,\n \"overflow\": 0,\n \"pointer-events\": 0,\n \"shape-rendering\": 0,\n \"stop-color\": 0,\n \"stop-opacity\": 0,\n \"stroke\": 0,\n \"stroke-dasharray\": 0,\n \"stroke-dashoffset\": 0,\n \"stroke-linecap\": 0,\n \"stroke-linejoin\": 0,\n \"stroke-miterlimit\": 0,\n \"stroke-opacity\": 0,\n \"stroke-width\": 0,\n \"text-anchor\": 0,\n \"text-decoration\": 0,\n \"text-rendering\": 0,\n \"unicode-bidi\": 0,\n \"visibility\": 0,\n \"word-spacing\": 0,\n \"writing-mode\": 0\n};\n\neve.on(\"snap.util.attr\", function (value) {\n var att = eve.nt(),\n attr = {};\n att = att.substring(att.lastIndexOf(\".\") + 1);\n attr[att] = value;\n var style = att.replace(/-(\\w)/gi, function (all, letter) {\n return letter.toUpperCase();\n }),\n css = att.replace(/[A-Z]/g, function (letter) {\n return \"-\" + letter.toLowerCase();\n });\n if (cssAttr[has](css)) {\n this.node.style[style] = value == null ? E : value;\n } else {\n $(this.node, attr);\n }\n});\n(function (proto) {}(Paper.prototype));\n\n// simple ajax\n/*\\\n * Snap.ajax\n [ method ]\n **\n * Simple implementation of Ajax\n **\n - url (string) URL\n - postData (object|string) data for post request\n - callback (function) callback\n - scope (object) #optional scope of callback\n * or\n - url (string) URL\n - callback (function) callback\n - scope (object) #optional scope of callback\n = (XMLHttpRequest) the XMLHttpRequest object, just in case\n\\*/\nSnap.ajax = function (url, postData, callback, scope){\n var req = new XMLHttpRequest,\n id = ID();\n if (req) {\n if (is(postData, \"function\")) {\n scope = callback;\n callback = postData;\n postData = null;\n } else if (is(postData, \"object\")) {\n var pd = [];\n for (var key in postData) if (postData.hasOwnProperty(key)) {\n pd.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(postData[key]));\n }\n postData = pd.join(\"&\");\n }\n req.open(postData ? \"POST\" : \"GET\", url, true);\n if (postData) {\n req.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n req.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n if (callback) {\n eve.once(\"snap.ajax.\" + id + \".0\", callback);\n eve.once(\"snap.ajax.\" + id + \".200\", callback);\n eve.once(\"snap.ajax.\" + id + \".304\", callback);\n }\n req.onreadystatechange = function() {\n if (req.readyState != 4) return;\n eve(\"snap.ajax.\" + id + \".\" + req.status, scope, req);\n };\n if (req.readyState == 4) {\n return req;\n }\n req.send(postData);\n return req;\n }\n};\n/*\\\n * Snap.load\n [ method ]\n **\n * Loads external SVG file as a @Fragment (see @Snap.ajax for more advanced AJAX)\n **\n - url (string) URL\n - callback (function) callback\n - scope (object) #optional scope of callback\n\\*/\nSnap.load = function (url, callback, scope) {\n Snap.ajax(url, function (req) {\n var f = Snap.parse(req.responseText);\n scope ? callback.call(scope, f) : callback(f);\n });\n};\nvar getOffset = function (elem) {\n var box = elem.getBoundingClientRect(),\n doc = elem.ownerDocument,\n body = doc.body,\n docElem = doc.documentElement,\n clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n top = box.top + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n return {\n y: top,\n x: left\n };\n};\n/*\\\n * Snap.getElementByPoint\n [ method ]\n **\n * Returns you topmost element under given point.\n **\n = (object) Snap element object\n - x (number) x coordinate from the top left corner of the window\n - y (number) y coordinate from the top left corner of the window\n > Usage\n | Snap.getElementByPoint(mouseX, mouseY).attr({stroke: \"#f00\"});\n\\*/\nSnap.getElementByPoint = function (x, y) {\n var paper = this,\n svg = paper.canvas,\n target = glob.doc.elementFromPoint(x, y);\n if (glob.win.opera && target.tagName == \"svg\") {\n var so = getOffset(target),\n sr = target.createSVGRect();\n sr.x = x - so.x;\n sr.y = y - so.y;\n sr.width = sr.height = 1;\n var hits = target.getIntersectionList(sr, null);\n if (hits.length) {\n target = hits[hits.length - 1];\n }\n }\n if (!target) {\n return null;\n }\n return wrap(target);\n};\n/*\\\n * Snap.plugin\n [ method ]\n **\n * Let you write plugins. You pass in a function with five arguments, like this:\n | Snap.plugin(function (Snap, Element, Paper, global, Fragment) {\n | Snap.newmethod = function () {};\n | Element.prototype.newmethod = function () {};\n | Paper.prototype.newmethod = function () {};\n | });\n * Inside the function you have access to all main objects (and their\n * prototypes). This allow you to extend anything you want.\n **\n - f (function) your plugin body\n\\*/\nSnap.plugin = function (f) {\n f(Snap, Element, Paper, glob, Fragment);\n};\nglob.win.Snap = Snap;\nreturn Snap;\n}(window || this));\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var elproto = Element.prototype,\n is = Snap.is,\n Str = String,\n unit2px = Snap._unit2px,\n $ = Snap._.$,\n make = Snap._.make,\n getSomeDefs = Snap._.getSomeDefs,\n has = \"hasOwnProperty\",\n wrap = Snap._.wrap;\n /*\\\n * Element.getBBox\n [ method ]\n **\n * Returns the bounding box descriptor for the given element\n **\n = (object) bounding box descriptor:\n o {\n o cx: (number) x of the center,\n o cy: (number) x of the center,\n o h: (number) height,\n o height: (number) height,\n o path: (string) path command for the box,\n o r0: (number) radius of a circle that fully encloses the box,\n o r1: (number) radius of the smallest circle that can be enclosed,\n o r2: (number) radius of the largest circle that can be enclosed,\n o vb: (string) box as a viewbox command,\n o w: (number) width,\n o width: (number) width,\n o x2: (number) x of the right side,\n o x: (number) x of the left side,\n o y2: (number) y of the bottom edge,\n o y: (number) y of the top edge\n o }\n \\*/\n elproto.getBBox = function (isWithoutTransform) {\n if (this.type == \"tspan\") {\n return Snap._.box(this.node.getClientRects().item(0));\n }\n if (!Snap.Matrix || !Snap.path) {\n return this.node.getBBox();\n }\n var el = this,\n m = new Snap.Matrix;\n if (el.removed) {\n return Snap._.box();\n }\n while (el.type == \"use\") {\n if (!isWithoutTransform) {\n m = m.add(el.transform().localMatrix.translate(el.attr(\"x\") || 0, el.attr(\"y\") || 0));\n }\n if (el.original) {\n el = el.original;\n } else {\n var href = el.attr(\"xlink:href\");\n el = el.original = el.node.ownerDocument.getElementById(href.substring(href.indexOf(\"#\") + 1));\n }\n }\n var _ = el._,\n pathfinder = Snap.path.get[el.type] || Snap.path.get.deflt;\n try {\n if (isWithoutTransform) {\n _.bboxwt = pathfinder ? Snap.path.getBBox(el.realPath = pathfinder(el)) : Snap._.box(el.node.getBBox());\n return Snap._.box(_.bboxwt);\n } else {\n el.realPath = pathfinder(el);\n el.matrix = el.transform().localMatrix;\n _.bbox = Snap.path.getBBox(Snap.path.map(el.realPath, m.add(el.matrix)));\n return Snap._.box(_.bbox);\n }\n } catch (e) {\n // Firefox doesn’t give you bbox of hidden element\n return Snap._.box();\n }\n };\n var propString = function () {\n return this.string;\n };\n function extractTransform(el, tstr) {\n if (tstr == null) {\n var doReturn = true;\n if (el.type == \"linearGradient\" || el.type == \"radialGradient\") {\n tstr = el.node.getAttribute(\"gradientTransform\");\n } else if (el.type == \"pattern\") {\n tstr = el.node.getAttribute(\"patternTransform\");\n } else {\n tstr = el.node.getAttribute(\"transform\");\n }\n if (!tstr) {\n return new Snap.Matrix;\n }\n tstr = Snap._.svgTransform2string(tstr);\n } else {\n if (!Snap._.rgTransform.test(tstr)) {\n tstr = Snap._.svgTransform2string(tstr);\n } else {\n tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || \"\");\n }\n if (is(tstr, \"array\")) {\n tstr = Snap.path ? Snap.path.toString.call(tstr) : Str(tstr);\n }\n el._.transform = tstr;\n }\n var m = Snap._.transform2matrix(tstr, el.getBBox(1));\n if (doReturn) {\n return m;\n } else {\n el.matrix = m;\n }\n }\n /*\\\n * Element.transform\n [ method ]\n **\n * Gets or sets transformation of the element\n **\n - tstr (string) transform string in Snap or SVG format\n = (Element) the current element\n * or\n = (object) transformation descriptor:\n o {\n o string (string) transform string,\n o globalMatrix (Matrix) matrix of all transformations applied to element or its parents,\n o localMatrix (Matrix) matrix of transformations applied only to the element,\n o diffMatrix (Matrix) matrix of difference between global and local transformations,\n o global (string) global transformation as string,\n o local (string) local transformation as string,\n o toString (function) returns `string` property\n o }\n \\*/\n elproto.transform = function (tstr) {\n var _ = this._;\n if (tstr == null) {\n var papa = this,\n global = new Snap.Matrix(this.node.getCTM()),\n local = extractTransform(this),\n ms = [local],\n m = new Snap.Matrix,\n i,\n localString = local.toTransformString(),\n string = Str(local) == Str(this.matrix) ?\n Str(_.transform) : localString;\n while (papa.type != \"svg\" && (papa = papa.parent())) {\n ms.push(extractTransform(papa));\n }\n i = ms.length;\n while (i--) {\n m.add(ms[i]);\n }\n return {\n string: string,\n globalMatrix: global,\n totalMatrix: m,\n localMatrix: local,\n diffMatrix: global.clone().add(local.invert()),\n global: global.toTransformString(),\n total: m.toTransformString(),\n local: localString,\n toString: propString\n };\n }\n if (tstr instanceof Snap.Matrix) {\n this.matrix = tstr;\n this._.transform = tstr.toTransformString();\n } else {\n extractTransform(this, tstr);\n }\n\n if (this.node) {\n if (this.type == \"linearGradient\" || this.type == \"radialGradient\") {\n $(this.node, {gradientTransform: this.matrix});\n } else if (this.type == \"pattern\") {\n $(this.node, {patternTransform: this.matrix});\n } else {\n $(this.node, {transform: this.matrix});\n }\n }\n\n return this;\n };\n /*\\\n * Element.parent\n [ method ]\n **\n * Returns the element's parent\n **\n = (Element) the parent element\n \\*/\n elproto.parent = function () {\n return wrap(this.node.parentNode);\n };\n /*\\\n * Element.append\n [ method ]\n **\n * Appends the given element to current one\n **\n - el (Element|Set) element to append\n = (Element) the parent element\n \\*/\n /*\\\n * Element.add\n [ method ]\n **\n * See @Element.append\n \\*/\n elproto.append = elproto.add = function (el) {\n if (el) {\n if (el.type == \"set\") {\n var it = this;\n el.forEach(function (el) {\n it.add(el);\n });\n return this;\n }\n el = wrap(el);\n this.node.appendChild(el.node);\n el.paper = this.paper;\n }\n return this;\n };\n /*\\\n * Element.appendTo\n [ method ]\n **\n * Appends the current element to the given one\n **\n - el (Element) parent element to append to\n = (Element) the child element\n \\*/\n elproto.appendTo = function (el) {\n if (el) {\n el = wrap(el);\n el.append(this);\n }\n return this;\n };\n /*\\\n * Element.prepend\n [ method ]\n **\n * Prepends the given element to the current one\n **\n - el (Element) element to prepend\n = (Element) the parent element\n \\*/\n elproto.prepend = function (el) {\n if (el) {\n if (el.type == \"set\") {\n var it = this,\n first;\n el.forEach(function (el) {\n if (first) {\n first.after(el);\n } else {\n it.prepend(el);\n }\n first = el;\n });\n return this;\n }\n el = wrap(el);\n var parent = el.parent();\n this.node.insertBefore(el.node, this.node.firstChild);\n this.add && this.add();\n el.paper = this.paper;\n this.parent() && this.parent().add();\n parent && parent.add();\n }\n return this;\n };\n /*\\\n * Element.prependTo\n [ method ]\n **\n * Prepends the current element to the given one\n **\n - el (Element) parent element to prepend to\n = (Element) the child element\n \\*/\n elproto.prependTo = function (el) {\n el = wrap(el);\n el.prepend(this);\n return this;\n };\n /*\\\n * Element.before\n [ method ]\n **\n * Inserts given element before the current one\n **\n - el (Element) element to insert\n = (Element) the parent element\n \\*/\n elproto.before = function (el) {\n if (el.type == \"set\") {\n var it = this;\n el.forEach(function (el) {\n var parent = el.parent();\n it.node.parentNode.insertBefore(el.node, it.node);\n parent && parent.add();\n });\n this.parent().add();\n return this;\n }\n el = wrap(el);\n var parent = el.parent();\n this.node.parentNode.insertBefore(el.node, this.node);\n this.parent() && this.parent().add();\n parent && parent.add();\n el.paper = this.paper;\n return this;\n };\n /*\\\n * Element.after\n [ method ]\n **\n * Inserts given element after the current one\n **\n - el (Element) element to insert\n = (Element) the parent element\n \\*/\n elproto.after = function (el) {\n el = wrap(el);\n var parent = el.parent();\n if (this.node.nextSibling) {\n this.node.parentNode.insertBefore(el.node, this.node.nextSibling);\n } else {\n this.node.parentNode.appendChild(el.node);\n }\n this.parent() && this.parent().add();\n parent && parent.add();\n el.paper = this.paper;\n return this;\n };\n /*\\\n * Element.insertBefore\n [ method ]\n **\n * Inserts the element after the given one\n **\n - el (Element) element next to whom insert to\n = (Element) the parent element\n \\*/\n elproto.insertBefore = function (el) {\n el = wrap(el);\n var parent = this.parent();\n el.node.parentNode.insertBefore(this.node, el.node);\n this.paper = el.paper;\n parent && parent.add();\n el.parent() && el.parent().add();\n return this;\n };\n /*\\\n * Element.insertAfter\n [ method ]\n **\n * Inserts the element after the given one\n **\n - el (Element) element next to whom insert to\n = (Element) the parent element\n \\*/\n elproto.insertAfter = function (el) {\n el = wrap(el);\n var parent = this.parent();\n el.node.parentNode.insertBefore(this.node, el.node.nextSibling);\n this.paper = el.paper;\n parent && parent.add();\n el.parent() && el.parent().add();\n return this;\n };\n /*\\\n * Element.remove\n [ method ]\n **\n * Removes element from the DOM\n = (Element) the detached element\n \\*/\n elproto.remove = function () {\n var parent = this.parent();\n this.node.parentNode && this.node.parentNode.removeChild(this.node);\n delete this.paper;\n this.removed = true;\n parent && parent.add();\n return this;\n };\n /*\\\n * Element.select\n [ method ]\n **\n * Gathers the nested @Element matching the given set of CSS selectors\n **\n - query (string) CSS selector\n = (Element) result of query selection\n \\*/\n elproto.select = function (query) {\n return wrap(this.node.querySelector(query));\n };\n /*\\\n * Element.selectAll\n [ method ]\n **\n * Gathers nested @Element objects matching the given set of CSS selectors\n **\n - query (string) CSS selector\n = (Set|array) result of query selection\n \\*/\n elproto.selectAll = function (query) {\n var nodelist = this.node.querySelectorAll(query),\n set = (Snap.set || Array)();\n for (var i = 0; i < nodelist.length; i++) {\n set.push(wrap(nodelist[i]));\n }\n return set;\n };\n /*\\\n * Element.asPX\n [ method ]\n **\n * Returns given attribute of the element as a `px` value (not %, em, etc.)\n **\n - attr (string) attribute name\n - value (string) #optional attribute value\n = (Element) result of query selection\n \\*/\n elproto.asPX = function (attr, value) {\n if (value == null) {\n value = this.attr(attr);\n }\n return +unit2px(this, attr, value);\n };\n // SIERRA Element.use(): I suggest adding a note about how to access the original element the returned instantiates. It's a part of SVG with which ordinary web developers may be least familiar.\n /*\\\n * Element.use\n [ method ]\n **\n * Creates a `` element linked to the current element\n **\n = (Element) the `` element\n \\*/\n elproto.use = function () {\n var use,\n id = this.node.id;\n if (!id) {\n id = this.id;\n $(this.node, {\n id: id\n });\n }\n if (this.type == \"linearGradient\" || this.type == \"radialGradient\" ||\n this.type == \"pattern\") {\n use = make(this.type, this.node.parentNode);\n } else {\n use = make(\"use\", this.node.parentNode);\n }\n $(use.node, {\n \"xlink:href\": \"#\" + id\n });\n use.original = this;\n return use;\n };\n function fixids(el) {\n var els = el.selectAll(\"*\"),\n it,\n url = /^\\s*url\\((\"|'|)(.*)\\1\\)\\s*$/,\n ids = [],\n uses = {};\n function urltest(it, name) {\n var val = $(it.node, name);\n val = val && val.match(url);\n val = val && val[2];\n if (val && val.charAt() == \"#\") {\n val = val.substring(1);\n } else {\n return;\n }\n if (val) {\n uses[val] = (uses[val] || []).concat(function (id) {\n var attr = {};\n attr[name] = Snap.url(id);\n $(it.node, attr);\n });\n }\n }\n function linktest(it) {\n var val = $(it.node, \"xlink:href\");\n if (val && val.charAt() == \"#\") {\n val = val.substring(1);\n } else {\n return;\n }\n if (val) {\n uses[val] = (uses[val] || []).concat(function (id) {\n it.attr(\"xlink:href\", \"#\" + id);\n });\n }\n }\n for (var i = 0, ii = els.length; i < ii; i++) {\n it = els[i];\n urltest(it, \"fill\");\n urltest(it, \"stroke\");\n urltest(it, \"filter\");\n urltest(it, \"mask\");\n urltest(it, \"clip-path\");\n linktest(it);\n var oldid = $(it.node, \"id\");\n if (oldid) {\n $(it.node, {id: it.id});\n ids.push({\n old: oldid,\n id: it.id\n });\n }\n }\n for (i = 0, ii = ids.length; i < ii; i++) {\n var fs = uses[ids[i].old];\n if (fs) {\n for (var j = 0, jj = fs.length; j < jj; j++) {\n fs[j](ids[i].id);\n }\n }\n }\n }\n /*\\\n * Element.clone\n [ method ]\n **\n * Creates a clone of the element and inserts it after the element\n **\n = (Element) the clone\n \\*/\n elproto.clone = function () {\n var clone = wrap(this.node.cloneNode(true));\n if ($(clone.node, \"id\")) {\n $(clone.node, {id: clone.id});\n }\n fixids(clone);\n clone.insertAfter(this);\n return clone;\n };\n /*\\\n * Element.toDefs\n [ method ]\n **\n * Moves element to the shared `` area\n **\n = (Element) the element\n \\*/\n elproto.toDefs = function () {\n var defs = getSomeDefs(this);\n defs.appendChild(this.node);\n return this;\n };\n /*\\\n * Element.toPattern\n [ method ]\n **\n * Creates a `` element from the current element\n **\n * To create a pattern you have to specify the pattern rect:\n - x (string|number)\n - y (string|number)\n - width (string|number)\n - height (string|number)\n = (Element) the `` element\n * You can use pattern later on as an argument for `fill` attribute:\n | var p = paper.path(\"M10-5-10,15M15,0,0,15M0-5-20,15\").attr({\n | fill: \"none\",\n | stroke: \"#bada55\",\n | strokeWidth: 5\n | }).pattern(0, 0, 10, 10),\n | c = paper.circle(200, 200, 100);\n | c.attr({\n | fill: p\n | });\n \\*/\n elproto.pattern = elproto.toPattern = function (x, y, width, height) {\n var p = make(\"pattern\", getSomeDefs(this));\n if (x == null) {\n x = this.getBBox();\n }\n if (is(x, \"object\") && \"x\" in x) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n $(p.node, {\n x: x,\n y: y,\n width: width,\n height: height,\n patternUnits: \"userSpaceOnUse\",\n id: p.id,\n viewBox: [x, y, width, height].join(\" \")\n });\n p.node.appendChild(this.node);\n return p;\n };\n// SIERRA Element.marker(): clarify what a reference point is. E.g., helps you offset the object from its edge such as when centering it over a path.\n// SIERRA Element.marker(): I suggest the method should accept default reference point values. Perhaps centered with (refX = width/2) and (refY = height/2)? Also, couldn't it assume the element's current _width_ and _height_? And please specify what _x_ and _y_ mean: offsets? If so, from where? Couldn't they also be assigned default values?\n /*\\\n * Element.marker\n [ method ]\n **\n * Creates a `` element from the current element\n **\n * To create a marker you have to specify the bounding rect and reference point:\n - x (number)\n - y (number)\n - width (number)\n - height (number)\n - refX (number)\n - refY (number)\n = (Element) the `` element\n * You can specify the marker later as an argument for `marker-start`, `marker-end`, `marker-mid`, and `marker` attributes. The `marker` attribute places the marker at every point along the path, and `marker-mid` places them at every point except the start and end.\n \\*/\n // TODO add usage for markers\n elproto.marker = function (x, y, width, height, refX, refY) {\n var p = make(\"marker\", getSomeDefs(this));\n if (x == null) {\n x = this.getBBox();\n }\n if (is(x, \"object\") && \"x\" in x) {\n y = x.y;\n width = x.width;\n height = x.height;\n refX = x.refX || x.cx;\n refY = x.refY || x.cy;\n x = x.x;\n }\n $(p.node, {\n viewBox: [x, y, width, height].join(\" \"),\n markerWidth: width,\n markerHeight: height,\n orient: \"auto\",\n refX: refX || 0,\n refY: refY || 0,\n id: p.id\n });\n p.node.appendChild(this.node);\n return p;\n };\n var eldata = {};\n /*\\\n * Element.data\n [ method ]\n **\n * Adds or retrieves given value associated with given key. (Don’t confuse\n * with `data-` attributes)\n *\n * See also @Element.removeData\n - key (string) key to store data\n - value (any) #optional value to store\n = (object) @Element\n * or, if value is not specified:\n = (any) value\n > Usage\n | for (var i = 0, i < 5, i++) {\n | paper.circle(10 + 15 * i, 10, 10)\n | .attr({fill: \"#000\"})\n | .data(\"i\", i)\n | .click(function () {\n | alert(this.data(\"i\"));\n | });\n | }\n \\*/\n elproto.data = function (key, value) {\n var data = eldata[this.id] = eldata[this.id] || {};\n if (arguments.length == 0){\n eve(\"snap.data.get.\" + this.id, this, data, null);\n return data;\n }\n if (arguments.length == 1) {\n if (Snap.is(key, \"object\")) {\n for (var i in key) if (key[has](i)) {\n this.data(i, key[i]);\n }\n return this;\n }\n eve(\"snap.data.get.\" + this.id, this, data[key], key);\n return data[key];\n }\n data[key] = value;\n eve(\"snap.data.set.\" + this.id, this, value, key);\n return this;\n };\n /*\\\n * Element.removeData\n [ method ]\n **\n * Removes value associated with an element by given key.\n * If key is not provided, removes all the data of the element.\n - key (string) #optional key\n = (object) @Element\n \\*/\n elproto.removeData = function (key) {\n if (key == null) {\n eldata[this.id] = {};\n } else {\n eldata[this.id] && delete eldata[this.id][key];\n }\n return this;\n };\n /*\\\n * Element.outerSVG\n [ method ]\n **\n * Returns SVG code for the element, equivalent to HTML's `outerHTML`.\n *\n * See also @Element.innerSVG\n = (string) SVG code for the element\n \\*/\n /*\\\n * Element.toString\n [ method ]\n **\n * See @Element.outerSVG\n \\*/\n elproto.outerSVG = elproto.toString = toString(1);\n /*\\\n * Element.innerSVG\n [ method ]\n **\n * Returns SVG code for the element's contents, equivalent to HTML's `innerHTML`\n = (string) SVG code for the element\n \\*/\n elproto.innerSVG = toString();\n function toString(type) {\n return function () {\n var res = type ? \"<\" + this.type : \"\",\n attr = this.node.attributes,\n chld = this.node.childNodes;\n if (type) {\n for (var i = 0, ii = attr.length; i < ii; i++) {\n res += \" \" + attr[i].name + '=\"' +\n attr[i].value.replace(/\"/g, '\\\\\"') + '\"';\n }\n }\n if (chld.length) {\n type && (res += \">\");\n for (i = 0, ii = chld.length; i < ii; i++) {\n if (chld[i].nodeType == 3) {\n res += chld[i].nodeValue;\n } else if (chld[i].nodeType == 1) {\n res += wrap(chld[i]).toString();\n }\n }\n type && (res += \"\" + this.type + \">\");\n } else {\n type && (res += \"/>\");\n }\n return res;\n };\n }\n elproto.toDataURL = function () {\n if (window && window.btoa) {\n var bb = this.getBBox(),\n svg = Snap.format('{contents}', {\n x: +bb.x.toFixed(3),\n y: +bb.y.toFixed(3),\n width: +bb.width.toFixed(3),\n height: +bb.height.toFixed(3),\n contents: this.outerSVG()\n });\n return \"data:image/svg+xml;base64,\" + btoa(unescape(encodeURIComponent(svg)));\n }\n };\n /*\\\n * Fragment.select\n [ method ]\n **\n * See @Element.select\n \\*/\n Fragment.prototype.select = elproto.select;\n /*\\\n * Fragment.selectAll\n [ method ]\n **\n * See @Element.selectAll\n \\*/\n Fragment.prototype.selectAll = elproto.selectAll;\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var objectToString = Object.prototype.toString,\n Str = String,\n math = Math,\n E = \"\";\n function Matrix(a, b, c, d, e, f) {\n if (b == null && objectToString.call(a) == \"[object SVGMatrix]\") {\n this.a = a.a;\n this.b = a.b;\n this.c = a.c;\n this.d = a.d;\n this.e = a.e;\n this.f = a.f;\n return;\n }\n if (a != null) {\n this.a = +a;\n this.b = +b;\n this.c = +c;\n this.d = +d;\n this.e = +e;\n this.f = +f;\n } else {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n }\n }\n (function (matrixproto) {\n /*\\\n * Matrix.add\n [ method ]\n **\n * Adds the given matrix to existing one\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - matrix (object) @Matrix\n \\*/\n matrixproto.add = function (a, b, c, d, e, f) {\n if (a && a instanceof Matrix) {\n return this.add(a.a, a.b, a.c, a.d, a.e, a.f);\n }\n var aNew = a * this.a + b * this.c,\n bNew = a * this.b + b * this.d;\n this.e += e * this.a + f * this.c;\n this.f += e * this.b + f * this.d;\n this.c = c * this.a + d * this.c;\n this.d = c * this.b + d * this.d;\n\n this.a = aNew;\n this.b = bNew;\n return this;\n };\n /*\\\n * Matrix.multLeft\n [ method ]\n **\n * Multiplies a passed affine transform to the left: M * this.\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - matrix (object) @Matrix\n \\*/\n Matrix.prototype.multLeft = function (a, b, c, d, e, f) {\n if (a && a instanceof Matrix) {\n return this.multLeft(a.a, a.b, a.c, a.d, a.e, a.f);\n }\n var aNew = a * this.a + c * this.b,\n cNew = a * this.c + c * this.d,\n eNew = a * this.e + c * this.f + e;\n this.b = b * this.a + d * this.b;\n this.d = b * this.c + d * this.d;\n this.f = b * this.e + d * this.f + f;\n\n this.a = aNew;\n this.c = cNew;\n this.e = eNew;\n return this;\n };\n /*\\\n * Matrix.invert\n [ method ]\n **\n * Returns an inverted version of the matrix\n = (object) @Matrix\n \\*/\n matrixproto.invert = function () {\n var me = this,\n x = me.a * me.d - me.b * me.c;\n return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\n };\n /*\\\n * Matrix.clone\n [ method ]\n **\n * Returns a copy of the matrix\n = (object) @Matrix\n \\*/\n matrixproto.clone = function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n /*\\\n * Matrix.translate\n [ method ]\n **\n * Translate the matrix\n - x (number) horizontal offset distance\n - y (number) vertical offset distance\n \\*/\n matrixproto.translate = function (x, y) {\n this.e += x * this.a + y * this.c;\n this.f += x * this.b + y * this.d;\n return this;\n };\n /*\\\n * Matrix.scale\n [ method ]\n **\n * Scales the matrix\n - x (number) amount to be scaled, with `1` resulting in no change\n - y (number) #optional amount to scale along the vertical axis. (Otherwise `x` applies to both axes.)\n - cx (number) #optional horizontal origin point from which to scale\n - cy (number) #optional vertical origin point from which to scale\n * Default cx, cy is the middle point of the element.\n \\*/\n matrixproto.scale = function (x, y, cx, cy) {\n y == null && (y = x);\n (cx || cy) && this.translate(cx, cy);\n this.a *= x;\n this.b *= x;\n this.c *= y;\n this.d *= y;\n (cx || cy) && this.translate(-cx, -cy);\n return this;\n };\n /*\\\n * Matrix.rotate\n [ method ]\n **\n * Rotates the matrix\n - a (number) angle of rotation, in degrees\n - x (number) horizontal origin point from which to rotate\n - y (number) vertical origin point from which to rotate\n \\*/\n matrixproto.rotate = function (a, x, y) {\n a = Snap.rad(a);\n x = x || 0;\n y = y || 0;\n var cos = +math.cos(a).toFixed(9),\n sin = +math.sin(a).toFixed(9);\n this.add(cos, sin, -sin, cos, x, y);\n return this.add(1, 0, 0, 1, -x, -y);\n };\n /*\\\n * Matrix.skewX\n [ method ]\n **\n * Skews the matrix along the x-axis\n - x (number) Angle to skew along the x-axis (in degrees).\n \\*/\n matrixproto.skewX = function (x) {\n return this.skew(x, 0);\n };\n /*\\\n * Matrix.skewY\n [ method ]\n **\n * Skews the matrix along the y-axis\n - y (number) Angle to skew along the y-axis (in degrees).\n \\*/\n matrixproto.skewY = function (y) {\n return this.skew(0, y);\n };\n /*\\\n * Matrix.skew\n [ method ]\n **\n * Skews the matrix\n - y (number) Angle to skew along the y-axis (in degrees).\n - x (number) Angle to skew along the x-axis (in degrees).\n \\*/\n matrixproto.skew = function (x, y) {\n x = x || 0;\n y = y || 0;\n x = Snap.rad(x);\n y = Snap.rad(y);\n var c = math.tan(x).toFixed(9);\n var b = math.tan(y).toFixed(9);\n return this.add(1, b, c, 1, 0, 0);\n };\n /*\\\n * Matrix.x\n [ method ]\n **\n * Returns x coordinate for given point after transformation described by the matrix. See also @Matrix.y\n - x (number)\n - y (number)\n = (number) x\n \\*/\n matrixproto.x = function (x, y) {\n return x * this.a + y * this.c + this.e;\n };\n /*\\\n * Matrix.y\n [ method ]\n **\n * Returns y coordinate for given point after transformation described by the matrix. See also @Matrix.x\n - x (number)\n - y (number)\n = (number) y\n \\*/\n matrixproto.y = function (x, y) {\n return x * this.b + y * this.d + this.f;\n };\n matrixproto.get = function (i) {\n return +this[Str.fromCharCode(97 + i)].toFixed(4);\n };\n matrixproto.toString = function () {\n return \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\";\n };\n matrixproto.offset = function () {\n return [this.e.toFixed(4), this.f.toFixed(4)];\n };\n function norm(a) {\n return a[0] * a[0] + a[1] * a[1];\n }\n function normalize(a) {\n var mag = math.sqrt(norm(a));\n a[0] && (a[0] /= mag);\n a[1] && (a[1] /= mag);\n }\n /*\\\n * Matrix.determinant\n [ method ]\n **\n * Finds determinant of the given matrix.\n = (number) determinant\n \\*/\n matrixproto.determinant = function () {\n return this.a * this.d - this.b * this.c;\n };\n /*\\\n * Matrix.split\n [ method ]\n **\n * Splits matrix into primitive transformations\n = (object) in format:\n o dx (number) translation by x\n o dy (number) translation by y\n o scalex (number) scale by x\n o scaley (number) scale by y\n o shear (number) shear\n o rotate (number) rotation in deg\n o isSimple (boolean) could it be represented via simple transformations\n \\*/\n matrixproto.split = function () {\n var out = {};\n // translation\n out.dx = this.e;\n out.dy = this.f;\n\n // scale and shear\n var row = [[this.a, this.b], [this.c, this.d]];\n out.scalex = math.sqrt(norm(row[0]));\n normalize(row[0]);\n\n out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n out.scaley = math.sqrt(norm(row[1]));\n normalize(row[1]);\n out.shear /= out.scaley;\n\n if (this.determinant() < 0) {\n out.scalex = -out.scalex;\n }\n\n // rotation\n var sin = row[0][1],\n cos = row[1][1];\n if (cos < 0) {\n out.rotate = Snap.deg(math.acos(cos));\n if (sin < 0) {\n out.rotate = 360 - out.rotate;\n }\n } else {\n out.rotate = Snap.deg(math.asin(sin));\n }\n\n out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n return out;\n };\n /*\\\n * Matrix.toTransformString\n [ method ]\n **\n * Returns transform string that represents given matrix\n = (string) transform string\n \\*/\n matrixproto.toTransformString = function (shorter) {\n var s = shorter || this.split();\n if (!+s.shear.toFixed(9)) {\n s.scalex = +s.scalex.toFixed(4);\n s.scaley = +s.scaley.toFixed(4);\n s.rotate = +s.rotate.toFixed(4);\n return (s.dx || s.dy ? \"t\" + [+s.dx.toFixed(4), +s.dy.toFixed(4)] : E) +\n (s.rotate ? \"r\" + [+s.rotate.toFixed(4), 0, 0] : E) +\n (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E);\n } else {\n return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n }\n };\n })(Matrix.prototype);\n /*\\\n * Snap.Matrix\n [ method ]\n **\n * Matrix constructor, extend on your own risk.\n * To create matrices use @Snap.matrix.\n \\*/\n Snap.Matrix = Matrix;\n /*\\\n * Snap.matrix\n [ method ]\n **\n * Utility method\n **\n * Returns a matrix based on the given parameters\n - a (number)\n - b (number)\n - c (number)\n - d (number)\n - e (number)\n - f (number)\n * or\n - svgMatrix (SVGMatrix)\n = (object) @Matrix\n \\*/\n Snap.matrix = function (a, b, c, d, e, f) {\n return new Matrix(a, b, c, d, e, f);\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var has = \"hasOwnProperty\",\n make = Snap._.make,\n wrap = Snap._.wrap,\n is = Snap.is,\n getSomeDefs = Snap._.getSomeDefs,\n reURLValue = /^url\\((['\"]?)([^)]+)\\1\\)$/,\n $ = Snap._.$,\n URL = Snap.url,\n Str = String,\n separator = Snap._.separator,\n E = \"\";\n /*\\\n * Snap.deurl\n [ method ]\n **\n * Unwraps path from `\"url()\"`.\n - value (string) url path\n = (string) unwrapped path\n \\*/\n Snap.deurl = function (value) {\n var res = String(value).match(reURLValue);\n return res ? res[2] : value;\n }\n // Attributes event handlers\n eve.on(\"snap.util.attr.mask\", function (value) {\n if (value instanceof Element || value instanceof Fragment) {\n eve.stop();\n if (value instanceof Fragment && value.node.childNodes.length == 1) {\n value = value.node.firstChild;\n getSomeDefs(this).appendChild(value);\n value = wrap(value);\n }\n if (value.type == \"mask\") {\n var mask = value;\n } else {\n mask = make(\"mask\", getSomeDefs(this));\n mask.node.appendChild(value.node);\n }\n !mask.node.id && $(mask.node, {\n id: mask.id\n });\n $(this.node, {\n mask: URL(mask.id)\n });\n }\n });\n (function (clipIt) {\n eve.on(\"snap.util.attr.clip\", clipIt);\n eve.on(\"snap.util.attr.clip-path\", clipIt);\n eve.on(\"snap.util.attr.clipPath\", clipIt);\n }(function (value) {\n if (value instanceof Element || value instanceof Fragment) {\n eve.stop();\n var clip,\n node = value.node;\n while (node) {\n if (node.nodeName === \"clipPath\") {\n clip = new Element(node);\n break;\n }\n if (node.nodeName === \"svg\") {\n clip = undefined;\n break;\n }\n node = node.parentNode;\n }\n if (!clip) {\n clip = make(\"clipPath\", getSomeDefs(this));\n clip.node.appendChild(value.node);\n !clip.node.id && $(clip.node, {\n id: clip.id\n });\n }\n $(this.node, {\n \"clip-path\": URL(clip.node.id || clip.id)\n });\n }\n }));\n function fillStroke(name) {\n return function (value) {\n eve.stop();\n if (value instanceof Fragment && value.node.childNodes.length == 1 &&\n (value.node.firstChild.tagName == \"radialGradient\" ||\n value.node.firstChild.tagName == \"linearGradient\" ||\n value.node.firstChild.tagName == \"pattern\")) {\n value = value.node.firstChild;\n getSomeDefs(this).appendChild(value);\n value = wrap(value);\n }\n if (value instanceof Element) {\n if (value.type == \"radialGradient\" || value.type == \"linearGradient\"\n || value.type == \"pattern\") {\n if (!value.node.id) {\n $(value.node, {\n id: value.id\n });\n }\n var fill = URL(value.node.id);\n } else {\n fill = value.attr(name);\n }\n } else {\n fill = Snap.color(value);\n if (fill.error) {\n var grad = Snap(getSomeDefs(this).ownerSVGElement).gradient(value);\n if (grad) {\n if (!grad.node.id) {\n $(grad.node, {\n id: grad.id\n });\n }\n fill = URL(grad.node.id);\n } else {\n fill = value;\n }\n } else {\n fill = Str(fill);\n }\n }\n var attrs = {};\n attrs[name] = fill;\n $(this.node, attrs);\n this.node.style[name] = E;\n };\n }\n eve.on(\"snap.util.attr.fill\", fillStroke(\"fill\"));\n eve.on(\"snap.util.attr.stroke\", fillStroke(\"stroke\"));\n var gradrg = /^([lr])(?:\\(([^)]*)\\))?(.*)$/i;\n eve.on(\"snap.util.grad.parse\", function parseGrad(string) {\n string = Str(string);\n var tokens = string.match(gradrg);\n if (!tokens) {\n return null;\n }\n var type = tokens[1],\n params = tokens[2],\n stops = tokens[3];\n params = params.split(/\\s*,\\s*/).map(function (el) {\n return +el == el ? +el : el;\n });\n if (params.length == 1 && params[0] == 0) {\n params = [];\n }\n stops = stops.split(\"-\");\n stops = stops.map(function (el) {\n el = el.split(\":\");\n var out = {\n color: el[0]\n };\n if (el[1]) {\n out.offset = parseFloat(el[1]);\n }\n return out;\n });\n var len = stops.length,\n start = 0,\n j = 0;\n function seed(i, end) {\n var step = (end - start) / (i - j);\n for (var k = j; k < i; k++) {\n stops[k].offset = +(+start + step * (k - j)).toFixed(2);\n }\n j = i;\n start = end;\n }\n len--;\n for (var i = 0; i < len; i++) if (\"offset\" in stops[i]) {\n seed(i, stops[i].offset);\n }\n stops[len].offset = stops[len].offset || 100;\n seed(len, stops[len].offset);\n return {\n type: type,\n params: params,\n stops: stops\n };\n });\n\n eve.on(\"snap.util.attr.d\", function (value) {\n eve.stop();\n if (is(value, \"array\") && is(value[0], \"array\")) {\n value = Snap.path.toString.call(value);\n }\n value = Str(value);\n if (value.match(/[ruo]/i)) {\n value = Snap.path.toAbsolute(value);\n }\n $(this.node, {d: value});\n })(-1);\n eve.on(\"snap.util.attr.#text\", function (value) {\n eve.stop();\n value = Str(value);\n var txt = glob.doc.createTextNode(value);\n while (this.node.firstChild) {\n this.node.removeChild(this.node.firstChild);\n }\n this.node.appendChild(txt);\n })(-1);\n eve.on(\"snap.util.attr.path\", function (value) {\n eve.stop();\n this.attr({d: value});\n })(-1);\n eve.on(\"snap.util.attr.class\", function (value) {\n eve.stop();\n this.node.className.baseVal = value;\n })(-1);\n eve.on(\"snap.util.attr.viewBox\", function (value) {\n var vb;\n if (is(value, \"object\") && \"x\" in value) {\n vb = [value.x, value.y, value.width, value.height].join(\" \");\n } else if (is(value, \"array\")) {\n vb = value.join(\" \");\n } else {\n vb = value;\n }\n $(this.node, {\n viewBox: vb\n });\n eve.stop();\n })(-1);\n eve.on(\"snap.util.attr.transform\", function (value) {\n this.transform(value);\n eve.stop();\n })(-1);\n eve.on(\"snap.util.attr.r\", function (value) {\n if (this.type == \"rect\") {\n eve.stop();\n $(this.node, {\n rx: value,\n ry: value\n });\n }\n })(-1);\n eve.on(\"snap.util.attr.textpath\", function (value) {\n eve.stop();\n if (this.type == \"text\") {\n var id, tp, node;\n if (!value && this.textPath) {\n tp = this.textPath;\n while (tp.node.firstChild) {\n this.node.appendChild(tp.node.firstChild);\n }\n tp.remove();\n delete this.textPath;\n return;\n }\n if (is(value, \"string\")) {\n var defs = getSomeDefs(this),\n path = wrap(defs.parentNode).path(value);\n defs.appendChild(path.node);\n id = path.id;\n path.attr({id: id});\n } else {\n value = wrap(value);\n if (value instanceof Element) {\n id = value.attr(\"id\");\n if (!id) {\n id = value.id;\n value.attr({id: id});\n }\n }\n }\n if (id) {\n tp = this.textPath;\n node = this.node;\n if (tp) {\n tp.attr({\"xlink:href\": \"#\" + id});\n } else {\n tp = $(\"textPath\", {\n \"xlink:href\": \"#\" + id\n });\n while (node.firstChild) {\n tp.appendChild(node.firstChild);\n }\n node.appendChild(tp);\n this.textPath = wrap(tp);\n }\n }\n }\n })(-1);\n eve.on(\"snap.util.attr.text\", function (value) {\n if (this.type == \"text\") {\n var i = 0,\n node = this.node,\n tuner = function (chunk) {\n var out = $(\"tspan\");\n if (is(chunk, \"array\")) {\n for (var i = 0; i < chunk.length; i++) {\n out.appendChild(tuner(chunk[i]));\n }\n } else {\n out.appendChild(glob.doc.createTextNode(chunk));\n }\n out.normalize && out.normalize();\n return out;\n };\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n var tuned = tuner(value);\n while (tuned.firstChild) {\n node.appendChild(tuned.firstChild);\n }\n }\n eve.stop();\n })(-1);\n function setFontSize(value) {\n eve.stop();\n if (value == +value) {\n value += \"px\";\n }\n this.node.style.fontSize = value;\n }\n eve.on(\"snap.util.attr.fontSize\", setFontSize)(-1);\n eve.on(\"snap.util.attr.font-size\", setFontSize)(-1);\n\n\n eve.on(\"snap.util.getattr.transform\", function () {\n eve.stop();\n return this.transform();\n })(-1);\n eve.on(\"snap.util.getattr.textpath\", function () {\n eve.stop();\n return this.textPath;\n })(-1);\n // Markers\n (function () {\n function getter(end) {\n return function () {\n eve.stop();\n var style = glob.doc.defaultView.getComputedStyle(this.node, null).getPropertyValue(\"marker-\" + end);\n if (style == \"none\") {\n return style;\n } else {\n return Snap(glob.doc.getElementById(style.match(reURLValue)[1]));\n }\n };\n }\n function setter(end) {\n return function (value) {\n eve.stop();\n var name = \"marker\" + end.charAt(0).toUpperCase() + end.substring(1);\n if (value == \"\" || !value) {\n this.node.style[name] = \"none\";\n return;\n }\n if (value.type == \"marker\") {\n var id = value.node.id;\n if (!id) {\n $(value.node, {id: value.id});\n }\n this.node.style[name] = URL(id);\n return;\n }\n };\n }\n eve.on(\"snap.util.getattr.marker-end\", getter(\"end\"))(-1);\n eve.on(\"snap.util.getattr.markerEnd\", getter(\"end\"))(-1);\n eve.on(\"snap.util.getattr.marker-start\", getter(\"start\"))(-1);\n eve.on(\"snap.util.getattr.markerStart\", getter(\"start\"))(-1);\n eve.on(\"snap.util.getattr.marker-mid\", getter(\"mid\"))(-1);\n eve.on(\"snap.util.getattr.markerMid\", getter(\"mid\"))(-1);\n eve.on(\"snap.util.attr.marker-end\", setter(\"end\"))(-1);\n eve.on(\"snap.util.attr.markerEnd\", setter(\"end\"))(-1);\n eve.on(\"snap.util.attr.marker-start\", setter(\"start\"))(-1);\n eve.on(\"snap.util.attr.markerStart\", setter(\"start\"))(-1);\n eve.on(\"snap.util.attr.marker-mid\", setter(\"mid\"))(-1);\n eve.on(\"snap.util.attr.markerMid\", setter(\"mid\"))(-1);\n }());\n eve.on(\"snap.util.getattr.r\", function () {\n if (this.type == \"rect\" && $(this.node, \"rx\") == $(this.node, \"ry\")) {\n eve.stop();\n return $(this.node, \"rx\");\n }\n })(-1);\n function textExtract(node) {\n var out = [];\n var children = node.childNodes;\n for (var i = 0, ii = children.length; i < ii; i++) {\n var chi = children[i];\n if (chi.nodeType == 3) {\n out.push(chi.nodeValue);\n }\n if (chi.tagName == \"tspan\") {\n if (chi.childNodes.length == 1 && chi.firstChild.nodeType == 3) {\n out.push(chi.firstChild.nodeValue);\n } else {\n out.push(textExtract(chi));\n }\n }\n }\n return out;\n }\n eve.on(\"snap.util.getattr.text\", function () {\n if (this.type == \"text\" || this.type == \"tspan\") {\n eve.stop();\n var out = textExtract(this.node);\n return out.length == 1 ? out[0] : out;\n }\n })(-1);\n eve.on(\"snap.util.getattr.#text\", function () {\n return this.node.textContent;\n })(-1);\n eve.on(\"snap.util.getattr.fill\", function (internal) {\n if (internal) {\n return;\n }\n eve.stop();\n var value = eve(\"snap.util.getattr.fill\", this, true).firstDefined();\n return Snap(Snap.deurl(value)) || value;\n })(-1);\n eve.on(\"snap.util.getattr.stroke\", function (internal) {\n if (internal) {\n return;\n }\n eve.stop();\n var value = eve(\"snap.util.getattr.stroke\", this, true).firstDefined();\n return Snap(Snap.deurl(value)) || value;\n })(-1);\n eve.on(\"snap.util.getattr.viewBox\", function () {\n eve.stop();\n var vb = $(this.node, \"viewBox\");\n if (vb) {\n vb = vb.split(separator);\n return Snap._.box(+vb[0], +vb[1], +vb[2], +vb[3]);\n } else {\n return;\n }\n })(-1);\n eve.on(\"snap.util.getattr.points\", function () {\n var p = $(this.node, \"points\");\n eve.stop();\n if (p) {\n return p.split(separator);\n } else {\n return;\n }\n })(-1);\n eve.on(\"snap.util.getattr.path\", function () {\n var p = $(this.node, \"d\");\n eve.stop();\n return p;\n })(-1);\n eve.on(\"snap.util.getattr.class\", function () {\n return this.node.className.baseVal;\n })(-1);\n function getFontSize() {\n eve.stop();\n return this.node.style.fontSize;\n }\n eve.on(\"snap.util.getattr.fontSize\", getFontSize)(-1);\n eve.on(\"snap.util.getattr.font-size\", getFontSize)(-1);\n});\n\n// Copyright (c) 2014 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var rgNotSpace = /\\S+/g,\n rgBadSpace = /[\\t\\r\\n\\f]/g,\n rgTrim = /(^\\s+|\\s+$)/g,\n Str = String,\n elproto = Element.prototype;\n /*\\\n * Element.addClass\n [ method ]\n **\n * Adds given class name or list of class names to the element.\n - value (string) class name or space separated list of class names\n **\n = (Element) original element.\n \\*/\n elproto.addClass = function (value) {\n var classes = Str(value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n\n if (classes.length) {\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (!~pos) {\n curClasses.push(clazz);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n }\n return this;\n };\n /*\\\n * Element.removeClass\n [ method ]\n **\n * Removes given class name or list of class names from the element.\n - value (string) class name or space separated list of class names\n **\n = (Element) original element.\n \\*/\n elproto.removeClass = function (value) {\n var classes = Str(value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n if (curClasses.length) {\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (~pos) {\n curClasses.splice(pos, 1);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n }\n return this;\n };\n /*\\\n * Element.hasClass\n [ method ]\n **\n * Checks if the element has a given class name in the list of class names applied to it.\n - value (string) class name\n **\n = (boolean) `true` if the element has given class\n \\*/\n elproto.hasClass = function (value) {\n var elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [];\n return !!~curClasses.indexOf(value);\n };\n /*\\\n * Element.toggleClass\n [ method ]\n **\n * Add or remove one or more classes from the element, depending on either\n * the class’s presence or the value of the `flag` argument.\n - value (string) class name or space separated list of class names\n - flag (boolean) value to determine whether the class should be added or removed\n **\n = (Element) original element.\n \\*/\n elproto.toggleClass = function (value, flag) {\n if (flag != null) {\n if (flag) {\n return this.addClass(value);\n } else {\n return this.removeClass(value);\n }\n }\n var classes = (value || \"\").match(rgNotSpace) || [],\n elem = this.node,\n className = elem.className.baseVal,\n curClasses = className.match(rgNotSpace) || [],\n j,\n pos,\n clazz,\n finalValue;\n j = 0;\n while (clazz = classes[j++]) {\n pos = curClasses.indexOf(clazz);\n if (~pos) {\n curClasses.splice(pos, 1);\n } else {\n curClasses.push(clazz);\n }\n }\n\n finalValue = curClasses.join(\" \");\n if (className != finalValue) {\n elem.className.baseVal = finalValue;\n }\n return this;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var operators = {\n \"+\": function (x, y) {\n return x + y;\n },\n \"-\": function (x, y) {\n return x - y;\n },\n \"/\": function (x, y) {\n return x / y;\n },\n \"*\": function (x, y) {\n return x * y;\n }\n },\n Str = String,\n reUnit = /[a-z]+$/i,\n reAddon = /^\\s*([+\\-\\/*])\\s*=\\s*([\\d.eE+\\-]+)\\s*([^\\d\\s]+)?\\s*$/;\n function getNumber(val) {\n return val;\n }\n function getUnit(unit) {\n return function (val) {\n return +val.toFixed(3) + unit;\n };\n }\n eve.on(\"snap.util.attr\", function (val) {\n var plus = Str(val).match(reAddon);\n if (plus) {\n var evnt = eve.nt(),\n name = evnt.substring(evnt.lastIndexOf(\".\") + 1),\n a = this.attr(name),\n atr = {};\n eve.stop();\n var unit = plus[3] || \"\",\n aUnit = a.match(reUnit),\n op = operators[plus[1]];\n if (aUnit && aUnit == unit) {\n val = op(parseFloat(a), +plus[2]);\n } else {\n a = this.asPX(name);\n val = op(this.asPX(name), this.asPX(name, plus[2] + unit));\n }\n if (isNaN(a) || isNaN(val)) {\n return;\n }\n atr[name] = val;\n this.attr(atr);\n }\n })(-10);\n eve.on(\"snap.util.equal\", function (name, b) {\n var A, B, a = Str(this.attr(name) || \"\"),\n el = this,\n bplus = Str(b).match(reAddon);\n if (bplus) {\n eve.stop();\n var unit = bplus[3] || \"\",\n aUnit = a.match(reUnit),\n op = operators[bplus[1]];\n if (aUnit && aUnit == unit) {\n return {\n from: parseFloat(a),\n to: op(parseFloat(a), +bplus[2]),\n f: getUnit(aUnit)\n };\n } else {\n a = this.asPX(name);\n return {\n from: a,\n to: op(a, this.asPX(name, bplus[2] + unit)),\n f: getNumber\n };\n }\n }\n })(-10);\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var proto = Paper.prototype,\n is = Snap.is;\n /*\\\n * Paper.rect\n [ method ]\n *\n * Draws a rectangle\n **\n - x (number) x coordinate of the top left corner\n - y (number) y coordinate of the top left corner\n - width (number) width\n - height (number) height\n - rx (number) #optional horizontal radius for rounded corners, default is 0\n - ry (number) #optional vertical radius for rounded corners, default is rx or 0\n = (object) the `rect` element\n **\n > Usage\n | // regular rectangle\n | var c = paper.rect(10, 10, 50, 50);\n | // rectangle with rounded corners\n | var c = paper.rect(40, 40, 50, 50, 10);\n \\*/\n proto.rect = function (x, y, w, h, rx, ry) {\n var attr;\n if (ry == null) {\n ry = rx;\n }\n if (is(x, \"object\") && x == \"[object Object]\") {\n attr = x;\n } else if (x != null) {\n attr = {\n x: x,\n y: y,\n width: w,\n height: h\n };\n if (rx != null) {\n attr.rx = rx;\n attr.ry = ry;\n }\n }\n return this.el(\"rect\", attr);\n };\n /*\\\n * Paper.circle\n [ method ]\n **\n * Draws a circle\n **\n - x (number) x coordinate of the centre\n - y (number) y coordinate of the centre\n - r (number) radius\n = (object) the `circle` element\n **\n > Usage\n | var c = paper.circle(50, 50, 40);\n \\*/\n proto.circle = function (cx, cy, r) {\n var attr;\n if (is(cx, \"object\") && cx == \"[object Object]\") {\n attr = cx;\n } else if (cx != null) {\n attr = {\n cx: cx,\n cy: cy,\n r: r\n };\n }\n return this.el(\"circle\", attr);\n };\n\n var preload = (function () {\n function onerror() {\n this.parentNode.removeChild(this);\n }\n return function (src, f) {\n var img = glob.doc.createElement(\"img\"),\n body = glob.doc.body;\n img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n img.onload = function () {\n f.call(img);\n img.onload = img.onerror = null;\n body.removeChild(img);\n };\n img.onerror = onerror;\n body.appendChild(img);\n img.src = src;\n };\n }());\n\n /*\\\n * Paper.image\n [ method ]\n **\n * Places an image on the surface\n **\n - src (string) URI of the source image\n - x (number) x offset position\n - y (number) y offset position\n - width (number) width of the image\n - height (number) height of the image\n = (object) the `image` element\n * or\n = (object) Snap element object with type `image`\n **\n > Usage\n | var c = paper.image(\"apple.png\", 10, 10, 80, 80);\n \\*/\n proto.image = function (src, x, y, width, height) {\n var el = this.el(\"image\");\n if (is(src, \"object\") && \"src\" in src) {\n el.attr(src);\n } else if (src != null) {\n var set = {\n \"xlink:href\": src,\n preserveAspectRatio: \"none\"\n };\n if (x != null && y != null) {\n set.x = x;\n set.y = y;\n }\n if (width != null && height != null) {\n set.width = width;\n set.height = height;\n } else {\n preload(src, function () {\n Snap._.$(el.node, {\n width: this.offsetWidth,\n height: this.offsetHeight\n });\n });\n }\n Snap._.$(el.node, set);\n }\n return el;\n };\n /*\\\n * Paper.ellipse\n [ method ]\n **\n * Draws an ellipse\n **\n - x (number) x coordinate of the centre\n - y (number) y coordinate of the centre\n - rx (number) horizontal radius\n - ry (number) vertical radius\n = (object) the `ellipse` element\n **\n > Usage\n | var c = paper.ellipse(50, 50, 40, 20);\n \\*/\n proto.ellipse = function (cx, cy, rx, ry) {\n var attr;\n if (is(cx, \"object\") && cx == \"[object Object]\") {\n attr = cx;\n } else if (cx != null) {\n attr ={\n cx: cx,\n cy: cy,\n rx: rx,\n ry: ry\n };\n }\n return this.el(\"ellipse\", attr);\n };\n // SIERRA Paper.path(): Unclear from the link what a Catmull-Rom curveto is, and why it would make life any easier.\n /*\\\n * Paper.path\n [ method ]\n **\n * Creates a `` element using the given string as the path's definition\n - pathString (string) #optional path string in SVG format\n * Path string consists of one-letter commands, followed by comma seprarated arguments in numerical form. Example:\n | \"M10,20L30,40\"\n * This example features two commands: `M`, with arguments `(10, 20)` and `L` with arguments `(30, 40)`. Uppercase letter commands express coordinates in absolute terms, while lowercase commands express them in relative terms from the most recently declared coordinates.\n *\n # Here is short list of commands available, for more details see SVG path string format or article about path strings at MDN.\n # CommandNameParameters\n # Mmoveto(x y)+\n # Zclosepath(none)\n # Llineto(x y)+\n # Hhorizontal linetox+\n # Vvertical linetoy+\n # Ccurveto(x1 y1 x2 y2 x y)+\n # Ssmooth curveto(x2 y2 x y)+\n # Qquadratic Bézier curveto(x1 y1 x y)+\n # Tsmooth quadratic Bézier curveto(x y)+\n # Aelliptical arc(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+\n # RCatmull-Rom curveto*x1 y1 (x y)+\n * * _Catmull-Rom curveto_ is a not standard SVG command and added to make life easier.\n * Note: there is a special case when a path consists of only three commands: `M10,10R…z`. In this case the path connects back to its starting point.\n > Usage\n | var c = paper.path(\"M10 10L90 90\");\n | // draw a diagonal line:\n | // move to 10,10, line to 90,90\n \\*/\n proto.path = function (d) {\n var attr;\n if (is(d, \"object\") && !is(d, \"array\")) {\n attr = d;\n } else if (d) {\n attr = {d: d};\n }\n return this.el(\"path\", attr);\n };\n /*\\\n * Paper.g\n [ method ]\n **\n * Creates a group element\n **\n - varargs (…) #optional elements to nest within the group\n = (object) the `g` element\n **\n > Usage\n | var c1 = paper.circle(),\n | c2 = paper.rect(),\n | g = paper.g(c2, c1); // note that the order of elements is different\n * or\n | var c1 = paper.circle(),\n | c2 = paper.rect(),\n | g = paper.g();\n | g.add(c2, c1);\n \\*/\n /*\\\n * Paper.group\n [ method ]\n **\n * See @Paper.g\n \\*/\n proto.group = proto.g = function (first) {\n var attr,\n el = this.el(\"g\");\n if (arguments.length == 1 && first && !first.type) {\n el.attr(first);\n } else if (arguments.length) {\n el.add(Array.prototype.slice.call(arguments, 0));\n }\n return el;\n };\n /*\\\n * Paper.svg\n [ method ]\n **\n * Creates a nested SVG element.\n - x (number) @optional X of the element\n - y (number) @optional Y of the element\n - width (number) @optional width of the element\n - height (number) @optional height of the element\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n **\n = (object) the `svg` element\n **\n \\*/\n proto.svg = function (x, y, width, height, vbx, vby, vbw, vbh) {\n var attrs = {};\n if (is(x, \"object\") && y == null) {\n attrs = x;\n } else {\n if (x != null) {\n attrs.x = x;\n }\n if (y != null) {\n attrs.y = y;\n }\n if (width != null) {\n attrs.width = width;\n }\n if (height != null) {\n attrs.height = height;\n }\n if (vbx != null && vby != null && vbw != null && vbh != null) {\n attrs.viewBox = [vbx, vby, vbw, vbh];\n }\n }\n return this.el(\"svg\", attrs);\n };\n /*\\\n * Paper.mask\n [ method ]\n **\n * Equivalent in behaviour to @Paper.g, except it’s a mask.\n **\n = (object) the `mask` element\n **\n \\*/\n proto.mask = function (first) {\n var attr,\n el = this.el(\"mask\");\n if (arguments.length == 1 && first && !first.type) {\n el.attr(first);\n } else if (arguments.length) {\n el.add(Array.prototype.slice.call(arguments, 0));\n }\n return el;\n };\n /*\\\n * Paper.ptrn\n [ method ]\n **\n * Equivalent in behaviour to @Paper.g, except it’s a pattern.\n - x (number) @optional X of the element\n - y (number) @optional Y of the element\n - width (number) @optional width of the element\n - height (number) @optional height of the element\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n **\n = (object) the `pattern` element\n **\n \\*/\n proto.ptrn = function (x, y, width, height, vx, vy, vw, vh) {\n if (is(x, \"object\")) {\n var attr = x;\n } else {\n attr = {patternUnits: \"userSpaceOnUse\"};\n if (x) {\n attr.x = x;\n }\n if (y) {\n attr.y = y;\n }\n if (width != null) {\n attr.width = width;\n }\n if (height != null) {\n attr.height = height;\n }\n if (vx != null && vy != null && vw != null && vh != null) {\n attr.viewBox = [vx, vy, vw, vh];\n } else {\n attr.viewBox = [x || 0, y || 0, width || 0, height || 0];\n }\n }\n return this.el(\"pattern\", attr);\n };\n /*\\\n * Paper.use\n [ method ]\n **\n * Creates a element.\n - id (string) @optional id of element to link\n * or\n - id (Element) @optional element to link\n **\n = (object) the `use` element\n **\n \\*/\n proto.use = function (id) {\n if (id != null) {\n if (id instanceof Element) {\n if (!id.attr(\"id\")) {\n id.attr({id: Snap._.id(id)});\n }\n id = id.attr(\"id\");\n }\n if (String(id).charAt() == \"#\") {\n id = id.substring(1);\n }\n return this.el(\"use\", {\"xlink:href\": \"#\" + id});\n } else {\n return Element.prototype.use.call(this);\n }\n };\n /*\\\n * Paper.symbol\n [ method ]\n **\n * Creates a element.\n - vbx (number) @optional viewbox X\n - vby (number) @optional viewbox Y\n - vbw (number) @optional viewbox width\n - vbh (number) @optional viewbox height\n = (object) the `symbol` element\n **\n \\*/\n proto.symbol = function (vx, vy, vw, vh) {\n var attr = {};\n if (vx != null && vy != null && vw != null && vh != null) {\n attr.viewBox = [vx, vy, vw, vh];\n }\n\n return this.el(\"symbol\", attr);\n };\n /*\\\n * Paper.text\n [ method ]\n **\n * Draws a text string\n **\n - x (number) x coordinate position\n - y (number) y coordinate position\n - text (string|array) The text string to draw or array of strings to nest within separate `` elements\n = (object) the `text` element\n **\n > Usage\n | var t1 = paper.text(50, 50, \"Snap\");\n | var t2 = paper.text(50, 50, [\"S\",\"n\",\"a\",\"p\"]);\n | // Text path usage\n | t1.attr({textpath: \"M10,10L100,100\"});\n | // or\n | var pth = paper.path(\"M10,10L100,100\");\n | t1.attr({textpath: pth});\n \\*/\n proto.text = function (x, y, text) {\n var attr = {};\n if (is(x, \"object\")) {\n attr = x;\n } else if (x != null) {\n attr = {\n x: x,\n y: y,\n text: text || \"\"\n };\n }\n return this.el(\"text\", attr);\n };\n /*\\\n * Paper.line\n [ method ]\n **\n * Draws a line\n **\n - x1 (number) x coordinate position of the start\n - y1 (number) y coordinate position of the start\n - x2 (number) x coordinate position of the end\n - y2 (number) y coordinate position of the end\n = (object) the `line` element\n **\n > Usage\n | var t1 = paper.line(50, 50, 100, 100);\n \\*/\n proto.line = function (x1, y1, x2, y2) {\n var attr = {};\n if (is(x1, \"object\")) {\n attr = x1;\n } else if (x1 != null) {\n attr = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n }\n return this.el(\"line\", attr);\n };\n /*\\\n * Paper.polyline\n [ method ]\n **\n * Draws a polyline\n **\n - points (array) array of points\n * or\n - varargs (…) points\n = (object) the `polyline` element\n **\n > Usage\n | var p1 = paper.polyline([10, 10, 100, 100]);\n | var p2 = paper.polyline(10, 10, 100, 100);\n \\*/\n proto.polyline = function (points) {\n if (arguments.length > 1) {\n points = Array.prototype.slice.call(arguments, 0);\n }\n var attr = {};\n if (is(points, \"object\") && !is(points, \"array\")) {\n attr = points;\n } else if (points != null) {\n attr = {points: points};\n }\n return this.el(\"polyline\", attr);\n };\n /*\\\n * Paper.polygon\n [ method ]\n **\n * Draws a polygon. See @Paper.polyline\n \\*/\n proto.polygon = function (points) {\n if (arguments.length > 1) {\n points = Array.prototype.slice.call(arguments, 0);\n }\n var attr = {};\n if (is(points, \"object\") && !is(points, \"array\")) {\n attr = points;\n } else if (points != null) {\n attr = {points: points};\n }\n return this.el(\"polygon\", attr);\n };\n // gradients\n (function () {\n var $ = Snap._.$;\n // gradients' helpers\n /*\\\n * Element.stops\n [ method ]\n **\n * Only for gradients!\n * Returns array of gradient stops elements.\n = (array) the stops array.\n \\*/\n function Gstops() {\n return this.selectAll(\"stop\");\n }\n /*\\\n * Element.addStop\n [ method ]\n **\n * Only for gradients!\n * Adds another stop to the gradient.\n - color (string) stops color\n - offset (number) stops offset 0..100\n = (object) gradient element\n \\*/\n function GaddStop(color, offset) {\n var stop = $(\"stop\"),\n attr = {\n offset: +offset + \"%\"\n };\n color = Snap.color(color);\n attr[\"stop-color\"] = color.hex;\n if (color.opacity < 1) {\n attr[\"stop-opacity\"] = color.opacity;\n }\n $(stop, attr);\n var stops = this.stops(),\n inserted;\n for (var i = 0; i < stops.length; i++) {\n var stopOffset = parseFloat(stops[i].attr(\"offset\"));\n if (stopOffset > offset) {\n this.node.insertBefore(stop, stops[i].node);\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this.node.appendChild(stop);\n }\n return this;\n }\n function GgetBBox() {\n if (this.type == \"linearGradient\") {\n var x1 = $(this.node, \"x1\") || 0,\n x2 = $(this.node, \"x2\") || 1,\n y1 = $(this.node, \"y1\") || 0,\n y2 = $(this.node, \"y2\") || 0;\n return Snap._.box(x1, y1, math.abs(x2 - x1), math.abs(y2 - y1));\n } else {\n var cx = this.node.cx || .5,\n cy = this.node.cy || .5,\n r = this.node.r || 0;\n return Snap._.box(cx - r, cy - r, r * 2, r * 2);\n }\n }\n /*\\\n * Element.setStops\n [ method ]\n **\n * Only for gradients!\n * Updates stops of the gradient based on passed gradient descriptor. See @Ppaer.gradient\n - str (string) gradient descriptor part after `()`.\n = (object) gradient element\n | var g = paper.gradient(\"l(0, 0, 1, 1)#000-#f00-#fff\");\n | g.setStops(\"#fff-#000-#f00-#fc0\");\n \\*/\n function GsetStops(str) {\n var grad = str,\n stops = this.stops();\n if (typeof str == \"string\") {\n grad = eve(\"snap.util.grad.parse\", null, \"l(0,0,0,1)\" + str).firstDefined().stops;\n }\n if (!Snap.is(grad, \"array\")) {\n return;\n }\n for (var i = 0; i < stops.length; i++) {\n if (grad[i]) {\n var color = Snap.color(grad[i].color),\n attr = {\"offset\": grad[i].offset + \"%\"};\n attr[\"stop-color\"] = color.hex;\n if (color.opacity < 1) {\n attr[\"stop-opacity\"] = color.opacity;\n }\n stops[i].attr(attr);\n } else {\n stops[i].remove();\n }\n }\n for (i = stops.length; i < grad.length; i++) {\n this.addStop(grad[i].color, grad[i].offset);\n }\n return this;\n }\n function gradient(defs, str) {\n var grad = eve(\"snap.util.grad.parse\", null, str).firstDefined(),\n el;\n if (!grad) {\n return null;\n }\n grad.params.unshift(defs);\n if (grad.type.toLowerCase() == \"l\") {\n el = gradientLinear.apply(0, grad.params);\n } else {\n el = gradientRadial.apply(0, grad.params);\n }\n if (grad.type != grad.type.toLowerCase()) {\n $(el.node, {\n gradientUnits: \"userSpaceOnUse\"\n });\n }\n var stops = grad.stops,\n len = stops.length;\n for (var i = 0; i < len; i++) {\n var stop = stops[i];\n el.addStop(stop.color, stop.offset);\n }\n return el;\n }\n function gradientLinear(defs, x1, y1, x2, y2) {\n var el = Snap._.make(\"linearGradient\", defs);\n el.stops = Gstops;\n el.addStop = GaddStop;\n el.getBBox = GgetBBox;\n el.setStops = GsetStops;\n if (x1 != null) {\n $(el.node, {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n }\n return el;\n }\n function gradientRadial(defs, cx, cy, r, fx, fy) {\n var el = Snap._.make(\"radialGradient\", defs);\n el.stops = Gstops;\n el.addStop = GaddStop;\n el.getBBox = GgetBBox;\n if (cx != null) {\n $(el.node, {\n cx: cx,\n cy: cy,\n r: r\n });\n }\n if (fx != null && fy != null) {\n $(el.node, {\n fx: fx,\n fy: fy\n });\n }\n return el;\n }\n /*\\\n * Paper.gradient\n [ method ]\n **\n * Creates a gradient element\n **\n - gradient (string) gradient descriptor\n > Gradient Descriptor\n * The gradient descriptor is an expression formatted as\n * follows: `()`. The `` can be\n * either linear or radial. The uppercase `L` or `R` letters\n * indicate absolute coordinates offset from the SVG surface.\n * Lowercase `l` or `r` letters indicate coordinates\n * calculated relative to the element to which the gradient is\n * applied. Coordinates specify a linear gradient vector as\n * `x1`, `y1`, `x2`, `y2`, or a radial gradient as `cx`, `cy`,\n * `r` and optional `fx`, `fy` specifying a focal point away\n * from the center of the circle. Specify `` as a list\n * of dash-separated CSS color values. Each color may be\n * followed by a custom offset value, separated with a colon\n * character.\n > Examples\n * Linear gradient, relative from top-left corner to bottom-right\n * corner, from black through red to white:\n | var g = paper.gradient(\"l(0, 0, 1, 1)#000-#f00-#fff\");\n * Linear gradient, absolute from (0, 0) to (100, 100), from black\n * through red at 25% to white:\n | var g = paper.gradient(\"L(0, 0, 100, 100)#000-#f00:25-#fff\");\n * Radial gradient, relative from the center of the element with radius\n * half the width, from black to white:\n | var g = paper.gradient(\"r(0.5, 0.5, 0.5)#000-#fff\");\n * To apply the gradient:\n | paper.circle(50, 50, 40).attr({\n | fill: g\n | });\n = (object) the `gradient` element\n \\*/\n proto.gradient = function (str) {\n return gradient(this.defs, str);\n };\n proto.gradientLinear = function (x1, y1, x2, y2) {\n return gradientLinear(this.defs, x1, y1, x2, y2);\n };\n proto.gradientRadial = function (cx, cy, r, fx, fy) {\n return gradientRadial(this.defs, cx, cy, r, fx, fy);\n };\n /*\\\n * Paper.toString\n [ method ]\n **\n * Returns SVG code for the @Paper\n = (string) SVG code for the @Paper\n \\*/\n proto.toString = function () {\n var doc = this.node.ownerDocument,\n f = doc.createDocumentFragment(),\n d = doc.createElement(\"div\"),\n svg = this.node.cloneNode(true),\n res;\n f.appendChild(d);\n d.appendChild(svg);\n Snap._.$(svg, {xmlns: \"http://www.w3.org/2000/svg\"});\n res = d.innerHTML;\n f.removeChild(f.firstChild);\n return res;\n };\n /*\\\n * Paper.toDataURL\n [ method ]\n **\n * Returns SVG code for the @Paper as Data URI string.\n = (string) Data URI string\n \\*/\n proto.toDataURL = function () {\n if (window && window.btoa) {\n return \"data:image/svg+xml;base64,\" + btoa(unescape(encodeURIComponent(this)));\n }\n };\n /*\\\n * Paper.clear\n [ method ]\n **\n * Removes all child nodes of the paper, except .\n \\*/\n proto.clear = function () {\n var node = this.node.firstChild,\n next;\n while (node) {\n next = node.nextSibling;\n if (node.tagName != \"defs\") {\n node.parentNode.removeChild(node);\n } else {\n proto.clear.call({node: node});\n }\n node = next;\n }\n };\n }());\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n is = Snap.is,\n clone = Snap._.clone,\n has = \"hasOwnProperty\",\n p2s = /,?([a-z]),?/gi,\n toFloat = parseFloat,\n math = Math,\n PI = math.PI,\n mmin = math.min,\n mmax = math.max,\n pow = math.pow,\n abs = math.abs;\n function paths(ps) {\n var p = paths.ps = paths.ps || {};\n if (p[ps]) {\n p[ps].sleep = 100;\n } else {\n p[ps] = {\n sleep: 100\n };\n }\n setTimeout(function () {\n for (var key in p) if (p[has](key) && key != ps) {\n p[key].sleep--;\n !p[key].sleep && delete p[key];\n }\n });\n return p[ps];\n }\n function box(x, y, width, height) {\n if (x == null) {\n x = y = width = height = 0;\n }\n if (y == null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: math.min(width, height) / 2,\n r2: math.max(width, height) / 2,\n r0: math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(\" \")\n };\n }\n function toString() {\n return this.join(\",\").replace(p2s, \"$1\");\n }\n function pathClone(pathArray) {\n var res = clone(pathArray);\n res.toString = toString;\n return res;\n }\n function getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n if (length == null) {\n return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n } else {\n return findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y,\n getTotLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n }\n }\n function getLengthFactory(istotal, subpath) {\n function O(val) {\n return +(+val).toFixed(3);\n }\n return Snap._.cacher(function (path, length, onlystart) {\n if (path instanceof Element) {\n path = path.attr(\"d\");\n }\n path = path2curve(path);\n var x, y, p, l, sp = \"\", subpaths = {}, point,\n len = 0;\n for (var i = 0, ii = path.length; i < ii; i++) {\n p = path[i];\n if (p[0] == \"M\") {\n x = +p[1];\n y = +p[2];\n } else {\n l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n if (len + l > length) {\n if (subpath && !subpaths.start) {\n point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n sp += [\n \"C\" + O(point.start.x),\n O(point.start.y),\n O(point.m.x),\n O(point.m.y),\n O(point.x),\n O(point.y)\n ];\n if (onlystart) {return sp;}\n subpaths.start = sp;\n sp = [\n \"M\" + O(point.x),\n O(point.y) + \"C\" + O(point.n.x),\n O(point.n.y),\n O(point.end.x),\n O(point.end.y),\n O(p[5]),\n O(p[6])\n ].join();\n len += l;\n x = +p[5];\n y = +p[6];\n continue;\n }\n if (!istotal && !subpath) {\n point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n return point;\n }\n }\n len += l;\n x = +p[5];\n y = +p[6];\n }\n sp += p.shift() + p;\n }\n subpaths.end = sp;\n point = istotal ? len : subpath ? subpaths : findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n return point;\n }, null, Snap._.clone);\n }\n var getTotalLength = getLengthFactory(1),\n getPointAtLength = getLengthFactory(),\n getSubpathsAtLength = getLengthFactory(0, 1);\n function findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t,\n t13 = pow(t1, 3),\n t12 = pow(t1, 2),\n t2 = t * t,\n t3 = t2 * t,\n x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n ax = t1 * p1x + t * c1x,\n ay = t1 * p1y + t * c1y,\n cx = t1 * c2x + t * p2x,\n cy = t1 * c2y + t * p2y,\n alpha = 90 - math.atan2(mx - nx, my - ny) * 180 / PI;\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {x: mx, y: my},\n n: {x: nx, y: ny},\n start: {x: ax, y: ay},\n end: {x: cx, y: cy},\n alpha: alpha\n };\n }\n function bezierBBox(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!Snap.is(p1x, \"array\")) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(\n bbox.min.x,\n bbox.min.y,\n bbox.max.x - bbox.min.x,\n bbox.max.y - bbox.min.y\n );\n }\n function isPointInsideBBox(bbox, x, y) {\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n }\n function isBBoxIntersect(bbox1, bbox2) {\n bbox1 = box(bbox1);\n bbox2 = box(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y)\n || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2)\n || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y)\n || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2)\n || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2)\n || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x\n || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y\n || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n }\n function base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n }\n function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z == null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2,\n n = 12,\n Tvalues = [-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],\n Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2,\n xbase = base3(ct, x1, x2, x3, x4),\n ybase = base3(ct, y1, y2, y3, y4),\n comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * math.sqrt(comb);\n }\n return z2 * sum;\n }\n function getTotLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n return;\n }\n var t = 1,\n step = t / 2,\n t2 = t - step,\n l,\n e = .01;\n l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n while (abs(l - ll) > e) {\n step /= 2;\n t2 += (l < ll ? 1 : -1) * step;\n l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n }\n return t2;\n }\n function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n if (\n mmax(x1, x2) < mmin(x3, x4) ||\n mmin(x1, x2) > mmax(x3, x4) ||\n mmax(y1, y2) < mmin(y3, y4) ||\n mmin(y1, y2) > mmax(y3, y4)\n ) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n if (!denominator) {\n return;\n }\n var px = nx / denominator,\n py = ny / denominator,\n px2 = +px.toFixed(2),\n py2 = +py.toFixed(2);\n if (\n px2 < +mmin(x1, x2).toFixed(2) ||\n px2 > +mmax(x1, x2).toFixed(2) ||\n px2 < +mmin(x3, x4).toFixed(2) ||\n px2 > +mmax(x3, x4).toFixed(2) ||\n py2 < +mmin(y1, y2).toFixed(2) ||\n py2 > +mmax(y1, y2).toFixed(2) ||\n py2 < +mmin(y3, y4).toFixed(2) ||\n py2 > +mmax(y3, y4).toFixed(2)\n ) {\n return;\n }\n return {x: px, y: py};\n }\n function inter(bez1, bez2) {\n return interHelper(bez1, bez2);\n }\n function interCount(bez1, bez2) {\n return interHelper(bez1, bez2, 1);\n }\n function interHelper(bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1),\n bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1),\n l2 = bezlen.apply(0, bez2),\n n1 = ~~(l1 / 8),\n n2 = ~~(l2 / 8),\n dots1 = [],\n dots2 = [],\n xy = {},\n res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var p = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({x: p.x, y: p.y, t: i / n1});\n }\n for (i = 0; i < n2 + 1; i++) {\n p = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({x: p.x, y: p.y, t: i / n2});\n }\n for (i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i],\n di1 = dots1[i + 1],\n dj = dots2[j],\n dj1 = dots2[j + 1],\n ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n res++;\n } else {\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2\n });\n }\n }\n }\n }\n }\n return res;\n }\n function pathIntersection(path1, path2) {\n return interPathHelper(path1, path2);\n }\n function pathIntersectionNumber(path1, path2) {\n return interPathHelper(path1, path2, 1);\n }\n function interPathHelper(path1, path2, justCount) {\n path1 = path2curve(path1);\n path2 = path2curve(path2);\n var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] == \"M\") {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n } else {\n if (pi[0] == \"C\") {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n } else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] == \"M\") {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n } else {\n if (pj[0] == \"C\") {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n } else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n res += intr;\n } else {\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n }\n function isPointInsidePath(path, x, y) {\n var bbox = pathBBox(path);\n return isPointInsideBBox(bbox, x, y) &&\n interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n }\n function pathBBox(path) {\n var pth = paths(path);\n if (pth.bbox) {\n return clone(pth.bbox);\n }\n if (!path) {\n return box();\n }\n path = path2curve(path);\n var x = 0,\n y = 0,\n X = [],\n Y = [],\n p;\n for (var i = 0, ii = path.length; i < ii; i++) {\n p = path[i];\n if (p[0] == \"M\") {\n x = p[1];\n y = p[2];\n X.push(x);\n Y.push(y);\n } else {\n var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n X = X.concat(dim.min.x, dim.max.x);\n Y = Y.concat(dim.min.y, dim.max.y);\n x = p[5];\n y = p[6];\n }\n }\n var xmin = mmin.apply(0, X),\n ymin = mmin.apply(0, Y),\n xmax = mmax.apply(0, X),\n ymax = mmax.apply(0, Y),\n bb = box(xmin, ymin, xmax - xmin, ymax - ymin);\n pth.bbox = clone(bb);\n return bb;\n }\n function rectPath(x, y, w, h, r) {\n if (r) {\n return [\n [\"M\", +x + +r, y],\n [\"l\", w - r * 2, 0],\n [\"a\", r, r, 0, 0, 1, r, r],\n [\"l\", 0, h - r * 2],\n [\"a\", r, r, 0, 0, 1, -r, r],\n [\"l\", r * 2 - w, 0],\n [\"a\", r, r, 0, 0, 1, -r, -r],\n [\"l\", 0, r * 2 - h],\n [\"a\", r, r, 0, 0, 1, r, -r],\n [\"z\"]\n ];\n }\n var res = [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n res.toString = toString;\n return res;\n }\n function ellipsePath(x, y, rx, ry, a) {\n if (a == null && ry == null) {\n ry = rx;\n }\n x = +x;\n y = +y;\n rx = +rx;\n ry = +ry;\n if (a != null) {\n var rad = Math.PI / 180,\n x1 = x + rx * Math.cos(-ry * rad),\n x2 = x + rx * Math.cos(-a * rad),\n y1 = y + rx * Math.sin(-ry * rad),\n y2 = y + rx * Math.sin(-a * rad),\n res = [[\"M\", x1, y1], [\"A\", rx, rx, 0, +(a - ry > 180), 0, x2, y2]];\n } else {\n res = [\n [\"M\", x, y],\n [\"m\", 0, -ry],\n [\"a\", rx, ry, 0, 1, 1, 0, 2 * ry],\n [\"a\", rx, ry, 0, 1, 1, 0, -2 * ry],\n [\"z\"]\n ];\n }\n res.toString = toString;\n return res;\n }\n var unit2px = Snap._unit2px,\n getPath = {\n path: function (el) {\n return el.attr(\"path\");\n },\n circle: function (el) {\n var attr = unit2px(el);\n return ellipsePath(attr.cx, attr.cy, attr.r);\n },\n ellipse: function (el) {\n var attr = unit2px(el);\n return ellipsePath(attr.cx || 0, attr.cy || 0, attr.rx, attr.ry);\n },\n rect: function (el) {\n var attr = unit2px(el);\n return rectPath(attr.x || 0, attr.y || 0, attr.width, attr.height, attr.rx, attr.ry);\n },\n image: function (el) {\n var attr = unit2px(el);\n return rectPath(attr.x || 0, attr.y || 0, attr.width, attr.height);\n },\n line: function (el) {\n return \"M\" + [el.attr(\"x1\") || 0, el.attr(\"y1\") || 0, el.attr(\"x2\"), el.attr(\"y2\")];\n },\n polyline: function (el) {\n return \"M\" + el.attr(\"points\");\n },\n polygon: function (el) {\n return \"M\" + el.attr(\"points\") + \"z\";\n },\n deflt: function (el) {\n var bbox = el.node.getBBox();\n return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n }\n };\n function pathToRelative(pathArray) {\n var pth = paths(pathArray),\n lowerCase = String.prototype.toLowerCase;\n if (pth.rel) {\n return pathClone(pth.rel);\n }\n if (!Snap.is(pathArray, \"array\") || !Snap.is(pathArray && pathArray[0], \"array\")) {\n pathArray = Snap.parsePathString(pathArray);\n }\n var res = [],\n x = 0,\n y = 0,\n mx = 0,\n my = 0,\n start = 0;\n if (pathArray[0][0] == \"M\") {\n x = pathArray[0][1];\n y = pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res.push([\"M\", x, y]);\n }\n for (var i = start, ii = pathArray.length; i < ii; i++) {\n var r = res[i] = [],\n pa = pathArray[i];\n if (pa[0] != lowerCase.call(pa[0])) {\n r[0] = lowerCase.call(pa[0]);\n switch (r[0]) {\n case \"a\":\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +(pa[6] - x).toFixed(3);\n r[7] = +(pa[7] - y).toFixed(3);\n break;\n case \"v\":\n r[1] = +(pa[1] - y).toFixed(3);\n break;\n case \"m\":\n mx = pa[1];\n my = pa[2];\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +(pa[j] - (j % 2 ? x : y)).toFixed(3);\n }\n }\n } else {\n r = res[i] = [];\n if (pa[0] == \"m\") {\n mx = pa[1] + x;\n my = pa[2] + y;\n }\n for (var k = 0, kk = pa.length; k < kk; k++) {\n res[i][k] = pa[k];\n }\n }\n var len = res[i].length;\n switch (res[i][0]) {\n case \"z\":\n x = mx;\n y = my;\n break;\n case \"h\":\n x += +res[i][len - 1];\n break;\n case \"v\":\n y += +res[i][len - 1];\n break;\n default:\n x += +res[i][len - 2];\n y += +res[i][len - 1];\n }\n }\n res.toString = toString;\n pth.rel = pathClone(res);\n return res;\n }\n function pathToAbsolute(pathArray) {\n var pth = paths(pathArray);\n if (pth.abs) {\n return pathClone(pth.abs);\n }\n if (!is(pathArray, \"array\") || !is(pathArray && pathArray[0], \"array\")) { // rough assumption\n pathArray = Snap.parsePathString(pathArray);\n }\n if (!pathArray || !pathArray.length) {\n return [[\"M\", 0, 0]];\n }\n var res = [],\n x = 0,\n y = 0,\n mx = 0,\n my = 0,\n start = 0,\n pa0;\n if (pathArray[0][0] == \"M\") {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = [\"M\", x, y];\n }\n var crz = pathArray.length == 3 &&\n pathArray[0][0] == \"M\" &&\n pathArray[1][0].toUpperCase() == \"R\" &&\n pathArray[2][0].toUpperCase() == \"Z\";\n for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n res.push(r = []);\n pa = pathArray[i];\n pa0 = pa[0];\n if (pa0 != pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n switch (r[0]) {\n case \"A\":\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case \"V\":\n r[1] = +pa[1] + y;\n break;\n case \"H\":\n r[1] = +pa[1] + x;\n break;\n case \"R\":\n var dots = [x, y].concat(pa.slice(1));\n for (var j = 2, jj = dots.length; j < jj; j++) {\n dots[j] = +dots[j] + x;\n dots[++j] = +dots[j] + y;\n }\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n break;\n case \"O\":\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n break;\n case \"U\":\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = [\"U\"].concat(res[res.length - 1].slice(-2));\n break;\n case \"M\":\n mx = +pa[1] + x;\n my = +pa[2] + y;\n default:\n for (j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + (j % 2 ? x : y);\n }\n }\n } else if (pa0 == \"R\") {\n dots = [x, y].concat(pa.slice(1));\n res.pop();\n res = res.concat(catmullRom2bezier(dots, crz));\n r = [\"R\"].concat(pa.slice(-2));\n } else if (pa0 == \"O\") {\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n } else if (pa0 == \"U\") {\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = [\"U\"].concat(res[res.length - 1].slice(-2));\n } else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n if (pa0 != \"O\") {\n switch (r[0]) {\n case \"Z\":\n x = +mx;\n y = +my;\n break;\n case \"H\":\n x = r[1];\n break;\n case \"V\":\n y = r[1];\n break;\n case \"M\":\n mx = r[r.length - 2];\n my = r[r.length - 1];\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n }\n res.toString = toString;\n pth.abs = pathClone(res);\n return res;\n }\n function l2c(x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n }\n function q2c(x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3,\n _23 = 2 / 3;\n return [\n _13 * x1 + _23 * ax,\n _13 * y1 + _23 * ay,\n _13 * x2 + _23 * ax,\n _13 * y2 + _23 * ay,\n x2,\n y2\n ];\n }\n function a2c(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n var _120 = PI * 120 / 180,\n rad = PI / 180 * (+angle || 0),\n res = [],\n xy,\n rotate = Snap._.cacher(function (x, y, rad) {\n var X = x * math.cos(rad) - y * math.sin(rad),\n Y = x * math.sin(rad) + y * math.cos(rad);\n return {x: X, y: Y};\n });\n if (!rx || !ry) {\n return [x1, y1, x2, y2, x2, y2];\n }\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n var cos = math.cos(PI / 180 * angle),\n sin = math.sin(PI / 180 * angle),\n x = (x1 - x2) / 2,\n y = (y1 - y2) / 2;\n var h = x * x / (rx * rx) + y * y / (ry * ry);\n if (h > 1) {\n h = math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx,\n ry2 = ry * ry,\n k = (large_arc_flag == sweep_flag ? -1 : 1) *\n math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n cx = k * rx * y / ry + (x1 + x2) / 2,\n cy = k * -ry * x / rx + (y1 + y2) / 2,\n f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n f1 = x1 < cx ? PI - f1 : f1;\n f2 = x2 < cx ? PI - f2 : f2;\n f1 < 0 && (f1 = PI * 2 + f1);\n f2 < 0 && (f2 = PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - PI * 2;\n }\n } else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (abs(df) > _120) {\n var f2old = f2,\n x2old = x2,\n y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * math.cos(f2);\n y2 = cy + ry * math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = math.cos(f1),\n s1 = math.sin(f1),\n c2 = math.cos(f2),\n s2 = math.sin(f2),\n t = math.tan(df / 4),\n hx = 4 / 3 * rx * t,\n hy = 4 / 3 * ry * t,\n m1 = [x1, y1],\n m2 = [x1 + hx * s1, y1 - hy * c1],\n m3 = [x2 + hx * s2, y2 - hy * c2],\n m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n } else {\n res = [m2, m3, m4].concat(res).join().split(\",\");\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n }\n }\n function findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n return {\n x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n };\n }\n\n // Returns bounding box of cubic bezier curve.\n // Source: http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n // Original version: NISHIO Hirokazu\n // Modifications: https://github.com/timo22345\n function curveDim(x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n for (var i = 0; i < 2; ++i) {\n if (i == 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length,\n jlen = j,\n mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n\n return {\n min: {x: mmin.apply(0, bounds[0]), y: mmin.apply(0, bounds[1])},\n max: {x: mmax.apply(0, bounds[0]), y: mmax.apply(0, bounds[1])}\n };\n }\n\n function path2curve(path, path2) {\n var pth = !path2 && paths(path);\n if (!path2 && pth.curve) {\n return pathClone(pth.curve);\n }\n var p = pathToAbsolute(path),\n p2 = path2 && pathToAbsolute(path2),\n attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n processPath = function (path, d, pcom) {\n var nx, ny;\n if (!path) {\n return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n }\n !(path[0] in {T: 1, Q: 1}) && (d.qx = d.qy = null);\n switch (path[0]) {\n case \"M\":\n d.X = path[1];\n d.Y = path[2];\n break;\n case \"A\":\n path = [\"C\"].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case \"S\":\n if (pcom == \"C\" || pcom == \"S\") { // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else { // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = [\"C\", nx, ny].concat(path.slice(1));\n break;\n case \"T\":\n if (pcom == \"Q\" || pcom == \"T\") { // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n }\n else { // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = [\"C\"].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case \"Q\":\n d.qx = path[1];\n d.qy = path[2];\n path = [\"C\"].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case \"L\":\n path = [\"C\"].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case \"H\":\n path = [\"C\"].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case \"V\":\n path = [\"C\"].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case \"Z\":\n path = [\"C\"].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n }\n return path;\n },\n fixArc = function (pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = \"A\"; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = \"A\"); // the same as above\n pp.splice(i++, 0, [\"C\"].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = mmax(p.length, p2 && p2.length || 0);\n }\n },\n fixM = function (path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = mmax(p.length, p2 && p2.length || 0);\n }\n },\n pcoms1 = [], // path commands of original path p\n pcoms2 = [], // path commands of original path p2\n pfirst = \"\", // temporary holder for original path command\n pcom = \"\"; // holder for previous path command of original path\n for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n p[i] && (pfirst = p[i][0]); // save current path command\n\n if (pfirst != \"C\") // C is not saved yet, because it may be result of conversion\n {\n pcoms1[i] = pfirst; // Save current path command\n i && ( pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n if (pcoms1[i] != \"A\" && pfirst == \"C\") pcoms1[i] = \"C\"; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n if (p2) { // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst != \"C\") {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n\n if (pcoms2[i] != \"A\" && pfirst == \"C\") {\n pcoms2[i] = \"C\";\n }\n\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i],\n seg2 = p2 && p2[i],\n seglen = seg.length,\n seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n if (!p2) {\n pth.curve = pathClone(p);\n }\n return p2 ? [p, p2] : p;\n }\n function mapPath(path, matrix) {\n if (!matrix) {\n return path;\n }\n var x, y, i, j, ii, jj, pathi;\n path = path2curve(path);\n for (i = 0, ii = path.length; i < ii; i++) {\n pathi = path[i];\n for (j = 1, jj = pathi.length; j < jj; j += 2) {\n x = matrix.x(pathi[j], pathi[j + 1]);\n y = matrix.y(pathi[j], pathi[j + 1]);\n pathi[j] = x;\n pathi[j + 1] = y;\n }\n }\n return path;\n }\n\n // http://schepers.cc/getting-to-the-point\n function catmullRom2bezier(crp, z) {\n var d = [];\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {x: +crp[i - 2], y: +crp[i - 1]},\n {x: +crp[i], y: +crp[i + 1]},\n {x: +crp[i + 2], y: +crp[i + 3]},\n {x: +crp[i + 4], y: +crp[i + 5]}\n ];\n if (z) {\n if (!i) {\n p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n } else if (iLen - 4 == i) {\n p[3] = {x: +crp[0], y: +crp[1]};\n } else if (iLen - 2 == i) {\n p[2] = {x: +crp[0], y: +crp[1]};\n p[3] = {x: +crp[2], y: +crp[3]};\n }\n } else {\n if (iLen - 4 == i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {x: +crp[i], y: +crp[i + 1]};\n }\n }\n d.push([\"C\",\n (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n (p[1].x + 6 * p[2].x - p[3].x) / 6,\n (p[1].y + 6*p[2].y - p[3].y) / 6,\n p[2].x,\n p[2].y\n ]);\n }\n\n return d;\n }\n\n // export\n Snap.path = paths;\n\n /*\\\n * Snap.path.getTotalLength\n [ method ]\n **\n * Returns the length of the given path in pixels\n **\n - path (string) SVG path string\n **\n = (number) length\n \\*/\n Snap.path.getTotalLength = getTotalLength;\n /*\\\n * Snap.path.getPointAtLength\n [ method ]\n **\n * Returns the coordinates of the point located at the given length along the given path\n **\n - path (string) SVG path string\n - length (number) length, in pixels, from the start of the path, excluding non-rendering jumps\n **\n = (object) representation of the point:\n o {\n o x: (number) x coordinate,\n o y: (number) y coordinate,\n o alpha: (number) angle of derivative\n o }\n \\*/\n Snap.path.getPointAtLength = getPointAtLength;\n /*\\\n * Snap.path.getSubpath\n [ method ]\n **\n * Returns the subpath of a given path between given start and end lengths\n **\n - path (string) SVG path string\n - from (number) length, in pixels, from the start of the path to the start of the segment\n - to (number) length, in pixels, from the start of the path to the end of the segment\n **\n = (string) path string definition for the segment\n \\*/\n Snap.path.getSubpath = function (path, from, to) {\n if (this.getTotalLength(path) - to < 1e-6) {\n return getSubpathsAtLength(path, from).end;\n }\n var a = getSubpathsAtLength(path, to, 1);\n return from ? getSubpathsAtLength(a, from).end : a;\n };\n /*\\\n * Element.getTotalLength\n [ method ]\n **\n * Returns the length of the path in pixels (only works for `path` elements)\n = (number) length\n \\*/\n elproto.getTotalLength = function () {\n if (this.node.getTotalLength) {\n return this.node.getTotalLength();\n }\n };\n // SIERRA Element.getPointAtLength()/Element.getTotalLength(): If a is broken into different segments, is the jump distance to the new coordinates set by the _M_ or _m_ commands calculated as part of the path's total length?\n /*\\\n * Element.getPointAtLength\n [ method ]\n **\n * Returns coordinates of the point located at the given length on the given path (only works for `path` elements)\n **\n - length (number) length, in pixels, from the start of the path, excluding non-rendering jumps\n **\n = (object) representation of the point:\n o {\n o x: (number) x coordinate,\n o y: (number) y coordinate,\n o alpha: (number) angle of derivative\n o }\n \\*/\n elproto.getPointAtLength = function (length) {\n return getPointAtLength(this.attr(\"d\"), length);\n };\n // SIERRA Element.getSubpath(): Similar to the problem for Element.getPointAtLength(). Unclear how this would work for a segmented path. Overall, the concept of _subpath_ and what I'm calling a _segment_ (series of non-_M_ or _Z_ commands) is unclear.\n /*\\\n * Element.getSubpath\n [ method ]\n **\n * Returns subpath of a given element from given start and end lengths (only works for `path` elements)\n **\n - from (number) length, in pixels, from the start of the path to the start of the segment\n - to (number) length, in pixels, from the start of the path to the end of the segment\n **\n = (string) path string definition for the segment\n \\*/\n elproto.getSubpath = function (from, to) {\n return Snap.path.getSubpath(this.attr(\"d\"), from, to);\n };\n Snap._.box = box;\n /*\\\n * Snap.path.findDotsAtSegment\n [ method ]\n **\n * Utility method\n **\n * Finds dot coordinates on the given cubic beziér curve at the given t\n - p1x (number) x of the first point of the curve\n - p1y (number) y of the first point of the curve\n - c1x (number) x of the first anchor of the curve\n - c1y (number) y of the first anchor of the curve\n - c2x (number) x of the second anchor of the curve\n - c2y (number) y of the second anchor of the curve\n - p2x (number) x of the second point of the curve\n - p2y (number) y of the second point of the curve\n - t (number) position on the curve (0..1)\n = (object) point information in format:\n o {\n o x: (number) x coordinate of the point,\n o y: (number) y coordinate of the point,\n o m: {\n o x: (number) x coordinate of the left anchor,\n o y: (number) y coordinate of the left anchor\n o },\n o n: {\n o x: (number) x coordinate of the right anchor,\n o y: (number) y coordinate of the right anchor\n o },\n o start: {\n o x: (number) x coordinate of the start of the curve,\n o y: (number) y coordinate of the start of the curve\n o },\n o end: {\n o x: (number) x coordinate of the end of the curve,\n o y: (number) y coordinate of the end of the curve\n o },\n o alpha: (number) angle of the curve derivative at the point\n o }\n \\*/\n Snap.path.findDotsAtSegment = findDotsAtSegment;\n /*\\\n * Snap.path.bezierBBox\n [ method ]\n **\n * Utility method\n **\n * Returns the bounding box of a given cubic beziér curve\n - p1x (number) x of the first point of the curve\n - p1y (number) y of the first point of the curve\n - c1x (number) x of the first anchor of the curve\n - c1y (number) y of the first anchor of the curve\n - c2x (number) x of the second anchor of the curve\n - c2y (number) y of the second anchor of the curve\n - p2x (number) x of the second point of the curve\n - p2y (number) y of the second point of the curve\n * or\n - bez (array) array of six points for beziér curve\n = (object) bounding box\n o {\n o x: (number) x coordinate of the left top point of the box,\n o y: (number) y coordinate of the left top point of the box,\n o x2: (number) x coordinate of the right bottom point of the box,\n o y2: (number) y coordinate of the right bottom point of the box,\n o width: (number) width of the box,\n o height: (number) height of the box\n o }\n \\*/\n Snap.path.bezierBBox = bezierBBox;\n /*\\\n * Snap.path.isPointInsideBBox\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if given point is inside bounding box\n - bbox (string) bounding box\n - x (string) x coordinate of the point\n - y (string) y coordinate of the point\n = (boolean) `true` if point is inside\n \\*/\n Snap.path.isPointInsideBBox = isPointInsideBBox;\n Snap.closest = function (x, y, X, Y) {\n var r = 100,\n b = box(x - r / 2, y - r / 2, r, r),\n inside = [],\n getter = X[0].hasOwnProperty(\"x\") ? function (i) {\n return {\n x: X[i].x,\n y: X[i].y\n };\n } : function (i) {\n return {\n x: X[i],\n y: Y[i]\n };\n },\n found = 0;\n while (r <= 1e6 && !found) {\n for (var i = 0, ii = X.length; i < ii; i++) {\n var xy = getter(i);\n if (isPointInsideBBox(b, xy.x, xy.y)) {\n found++;\n inside.push(xy);\n break;\n }\n }\n if (!found) {\n r *= 2;\n b = box(x - r / 2, y - r / 2, r, r)\n }\n }\n if (r == 1e6) {\n return;\n }\n var len = Infinity,\n res;\n for (i = 0, ii = inside.length; i < ii; i++) {\n var l = Snap.len(x, y, inside[i].x, inside[i].y);\n if (len > l) {\n len = l;\n inside[i].len = l;\n res = inside[i];\n }\n }\n return res;\n };\n /*\\\n * Snap.path.isBBoxIntersect\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if two bounding boxes intersect\n - bbox1 (string) first bounding box\n - bbox2 (string) second bounding box\n = (boolean) `true` if bounding boxes intersect\n \\*/\n Snap.path.isBBoxIntersect = isBBoxIntersect;\n /*\\\n * Snap.path.intersection\n [ method ]\n **\n * Utility method\n **\n * Finds intersections of two paths\n - path1 (string) path string\n - path2 (string) path string\n = (array) dots of intersection\n o [\n o {\n o x: (number) x coordinate of the point,\n o y: (number) y coordinate of the point,\n o t1: (number) t value for segment of path1,\n o t2: (number) t value for segment of path2,\n o segment1: (number) order number for segment of path1,\n o segment2: (number) order number for segment of path2,\n o bez1: (array) eight coordinates representing beziér curve for the segment of path1,\n o bez2: (array) eight coordinates representing beziér curve for the segment of path2\n o }\n o ]\n \\*/\n Snap.path.intersection = pathIntersection;\n Snap.path.intersectionNumber = pathIntersectionNumber;\n /*\\\n * Snap.path.isPointInside\n [ method ]\n **\n * Utility method\n **\n * Returns `true` if given point is inside a given closed path.\n *\n * Note: fill mode doesn’t affect the result of this method.\n - path (string) path string\n - x (number) x of the point\n - y (number) y of the point\n = (boolean) `true` if point is inside the path\n \\*/\n Snap.path.isPointInside = isPointInsidePath;\n /*\\\n * Snap.path.getBBox\n [ method ]\n **\n * Utility method\n **\n * Returns the bounding box of a given path\n - path (string) path string\n = (object) bounding box\n o {\n o x: (number) x coordinate of the left top point of the box,\n o y: (number) y coordinate of the left top point of the box,\n o x2: (number) x coordinate of the right bottom point of the box,\n o y2: (number) y coordinate of the right bottom point of the box,\n o width: (number) width of the box,\n o height: (number) height of the box\n o }\n \\*/\n Snap.path.getBBox = pathBBox;\n Snap.path.get = getPath;\n /*\\\n * Snap.path.toRelative\n [ method ]\n **\n * Utility method\n **\n * Converts path coordinates into relative values\n - path (string) path string\n = (array) path string\n \\*/\n Snap.path.toRelative = pathToRelative;\n /*\\\n * Snap.path.toAbsolute\n [ method ]\n **\n * Utility method\n **\n * Converts path coordinates into absolute values\n - path (string) path string\n = (array) path string\n \\*/\n Snap.path.toAbsolute = pathToAbsolute;\n /*\\\n * Snap.path.toCubic\n [ method ]\n **\n * Utility method\n **\n * Converts path to a new path where all segments are cubic beziér curves\n - pathString (string|array) path string or array of segments\n = (array) array of segments\n \\*/\n Snap.path.toCubic = path2curve;\n /*\\\n * Snap.path.map\n [ method ]\n **\n * Transform the path string with the given matrix\n - path (string) path string\n - matrix (object) see @Matrix\n = (string) transformed path string\n \\*/\n Snap.path.map = mapPath;\n Snap.path.toString = toString;\n Snap.path.clone = pathClone;\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var mmax = Math.max,\n mmin = Math.min;\n\n // Set\n var Set = function (items) {\n this.items = [];\n\tthis.bindings = {};\n this.length = 0;\n this.type = \"set\";\n if (items) {\n for (var i = 0, ii = items.length; i < ii; i++) {\n if (items[i]) {\n this[this.items.length] = this.items[this.items.length] = items[i];\n this.length++;\n }\n }\n }\n },\n setproto = Set.prototype;\n /*\\\n * Set.push\n [ method ]\n **\n * Adds each argument to the current set\n = (object) original element\n \\*/\n setproto.push = function () {\n var item,\n len;\n for (var i = 0, ii = arguments.length; i < ii; i++) {\n item = arguments[i];\n if (item) {\n len = this.items.length;\n this[len] = this.items[len] = item;\n this.length++;\n }\n }\n return this;\n };\n /*\\\n * Set.pop\n [ method ]\n **\n * Removes last element and returns it\n = (object) element\n \\*/\n setproto.pop = function () {\n this.length && delete this[this.length--];\n return this.items.pop();\n };\n /*\\\n * Set.forEach\n [ method ]\n **\n * Executes given function for each element in the set\n *\n * If the function returns `false`, the loop stops running.\n **\n - callback (function) function to run\n - thisArg (object) context object for the callback\n = (object) Set object\n \\*/\n setproto.forEach = function (callback, thisArg) {\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n if (callback.call(thisArg, this.items[i], i) === false) {\n return this;\n }\n }\n return this;\n };\n /*\\\n * Set.animate\n [ method ]\n **\n * Animates each element in set in sync.\n *\n **\n - attrs (object) key-value pairs of destination attributes\n - duration (number) duration of the animation in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function that executes when the animation ends\n * or\n - animation (array) array of animation parameter for each element in set in format `[attrs, duration, easing, callback]`\n > Usage\n | // animate all elements in set to radius 10\n | set.animate({r: 10}, 500, mina.easein);\n | // or\n | // animate first element to radius 10, but second to radius 20 and in different time\n | set.animate([{r: 10}, 500, mina.easein], [{r: 20}, 1500, mina.easein]);\n = (Element) the current element\n \\*/\n setproto.animate = function (attrs, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n if (attrs instanceof Snap._.Animation) {\n callback = attrs.callback;\n easing = attrs.easing;\n ms = easing.dur;\n attrs = attrs.attr;\n }\n var args = arguments;\n if (Snap.is(attrs, \"array\") && Snap.is(args[args.length - 1], \"array\")) {\n var each = true;\n }\n var begin,\n handler = function () {\n if (begin) {\n this.b = begin;\n } else {\n begin = this.b;\n }\n },\n cb = 0,\n set = this,\n callbacker = callback && function () {\n if (++cb == set.length) {\n callback.call(this);\n }\n };\n return this.forEach(function (el, i) {\n eve.once(\"snap.animcreated.\" + el.id, handler);\n if (each) {\n args[i] && el.animate.apply(el, args[i]);\n } else {\n el.animate(attrs, ms, easing, callbacker);\n }\n });\n };\n /*\\\n * Set.remove\n [ method ]\n **\n * Removes all children of the set.\n *\n = (object) Set object\n \\*/\n setproto.remove = function () {\n while (this.length) {\n this.pop().remove();\n }\n return this;\n };\n /*\\\n * Set.bind\n [ method ]\n **\n * Specifies how to handle a specific attribute when applied\n * to a set.\n *\n **\n - attr (string) attribute name\n - callback (function) function to run\n * or\n - attr (string) attribute name\n - element (Element) specific element in the set to apply the attribute to\n * or\n - attr (string) attribute name\n - element (Element) specific element in the set to apply the attribute to\n - eattr (string) attribute on the element to bind the attribute to\n = (object) Set object\n \\*/\n setproto.bind = function (attr, a, b) {\n var data = {};\n if (typeof a == \"function\") {\n this.bindings[attr] = a;\n } else {\n var aname = b || attr;\n this.bindings[attr] = function (v) {\n data[aname] = v;\n a.attr(data);\n };\n }\n return this;\n };\n /*\\\n * Set.attr\n [ method ]\n **\n * Equivalent of @Element.attr.\n = (object) Set object\n \\*/\n setproto.attr = function (value) {\n var unbound = {};\n for (var k in value) {\n if (this.bindings[k]) {\n this.bindings[k](value[k]);\n } else {\n unbound[k] = value[k];\n }\n }\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n this.items[i].attr(unbound);\n }\n return this;\n };\n /*\\\n * Set.clear\n [ method ]\n **\n * Removes all elements from the set\n \\*/\n setproto.clear = function () {\n while (this.length) {\n this.pop();\n }\n };\n /*\\\n * Set.splice\n [ method ]\n **\n * Removes range of elements from the set\n **\n - index (number) position of the deletion\n - count (number) number of element to remove\n - insertion… (object) #optional elements to insert\n = (object) set elements that were deleted\n \\*/\n setproto.splice = function (index, count, insertion) {\n index = index < 0 ? mmax(this.length + index, 0) : index;\n count = mmax(0, mmin(this.length - index, count));\n var tail = [],\n todel = [],\n args = [],\n i;\n for (i = 2; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n for (i = 0; i < count; i++) {\n todel.push(this[index + i]);\n }\n for (; i < this.length - index; i++) {\n tail.push(this[index + i]);\n }\n var arglen = args.length;\n for (i = 0; i < arglen + tail.length; i++) {\n this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n }\n i = this.items.length = this.length -= count - arglen;\n while (this[i]) {\n delete this[i++];\n }\n return new Set(todel);\n };\n /*\\\n * Set.exclude\n [ method ]\n **\n * Removes given element from the set\n **\n - element (object) element to remove\n = (boolean) `true` if object was found and removed from the set\n \\*/\n setproto.exclude = function (el) {\n for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n this.splice(i, 1);\n return true;\n }\n return false;\n };\n /*\\\n * Set.insertAfter\n [ method ]\n **\n * Inserts set elements after given element.\n **\n - element (object) set will be inserted after this element\n = (object) Set object\n \\*/\n setproto.insertAfter = function (el) {\n var i = this.items.length;\n while (i--) {\n this.items[i].insertAfter(el);\n }\n return this;\n };\n /*\\\n * Set.getBBox\n [ method ]\n **\n * Union of all bboxes of the set. See @Element.getBBox.\n = (object) bounding box descriptor. See @Element.getBBox.\n \\*/\n setproto.getBBox = function () {\n var x = [],\n y = [],\n x2 = [],\n y2 = [];\n for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n var box = this.items[i].getBBox();\n x.push(box.x);\n y.push(box.y);\n x2.push(box.x + box.width);\n y2.push(box.y + box.height);\n }\n x = mmin.apply(0, x);\n y = mmin.apply(0, y);\n x2 = mmax.apply(0, x2);\n y2 = mmax.apply(0, y2);\n return {\n x: x,\n y: y,\n x2: x2,\n y2: y2,\n width: x2 - x,\n height: y2 - y,\n cx: x + (x2 - x) / 2,\n cy: y + (y2 - y) / 2\n };\n };\n /*\\\n * Set.insertAfter\n [ method ]\n **\n * Creates a clone of the set.\n **\n = (object) New Set object\n \\*/\n setproto.clone = function (s) {\n s = new Set;\n for (var i = 0, ii = this.items.length; i < ii; i++) {\n s.push(this.items[i].clone());\n }\n return s;\n };\n setproto.toString = function () {\n return \"Snap\\u2018s set\";\n };\n setproto.type = \"set\";\n // export\n /*\\\n * Snap.Set\n [ property ]\n **\n * Set constructor.\n \\*/\n Snap.Set = Set;\n /*\\\n * Snap.set\n [ method ]\n **\n * Creates a set and fills it with list of arguments.\n **\n = (object) New Set object\n | var r = paper.rect(0, 0, 10, 10),\n | s1 = Snap.set(), // empty set\n | s2 = Snap.set(r, paper.circle(100, 100, 20)); // prefilled set\n \\*/\n Snap.set = function () {\n var set = new Set;\n if (arguments.length) {\n set.push.apply(set, Array.prototype.slice.call(arguments, 0));\n }\n return set;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var names = {},\n reUnit = /[%a-z]+$/i,\n Str = String;\n names.stroke = names.fill = \"colour\";\n function getEmpty(item) {\n var l = item[0];\n switch (l.toLowerCase()) {\n case \"t\": return [l, 0, 0];\n case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n case \"r\": if (item.length == 4) {\n return [l, 0, item[2], item[3]];\n } else {\n return [l, 0];\n }\n case \"s\": if (item.length == 5) {\n return [l, 1, 1, item[3], item[4]];\n } else if (item.length == 3) {\n return [l, 1, 1];\n } else {\n return [l, 1];\n }\n }\n }\n function equaliseTransform(t1, t2, getBBox) {\n t1 = t1 || new Snap.Matrix;\n t2 = t2 || new Snap.Matrix;\n t1 = Snap.parseTransformString(t1.toTransformString()) || [];\n t2 = Snap.parseTransformString(t2.toTransformString()) || [];\n var maxlength = Math.max(t1.length, t2.length),\n from = [],\n to = [],\n i = 0, j, jj,\n tt1, tt2;\n for (; i < maxlength; i++) {\n tt1 = t1[i] || getEmpty(t2[i]);\n tt2 = t2[i] || getEmpty(tt1);\n if (tt1[0] != tt2[0] ||\n tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3]) ||\n tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4])\n ) {\n t1 = Snap._.transform2matrix(t1, getBBox());\n t2 = Snap._.transform2matrix(t2, getBBox());\n from = [[\"m\", t1.a, t1.b, t1.c, t1.d, t1.e, t1.f]];\n to = [[\"m\", t2.a, t2.b, t2.c, t2.d, t2.e, t2.f]];\n break;\n }\n from[i] = [];\n to[i] = [];\n for (j = 0, jj = Math.max(tt1.length, tt2.length); j < jj; j++) {\n j in tt1 && (from[i][j] = tt1[j]);\n j in tt2 && (to[i][j] = tt2[j]);\n }\n }\n return {\n from: path2array(from),\n to: path2array(to),\n f: getPath(from)\n };\n }\n function getNumber(val) {\n return val;\n }\n function getUnit(unit) {\n return function (val) {\n return +val.toFixed(3) + unit;\n };\n }\n function getViewBox(val) {\n return val.join(\" \");\n }\n function getColour(clr) {\n return Snap.rgb(clr[0], clr[1], clr[2], clr[3]);\n }\n function getPath(path) {\n var k = 0, i, ii, j, jj, out, a, b = [];\n for (i = 0, ii = path.length; i < ii; i++) {\n out = \"[\";\n a = ['\"' + path[i][0] + '\"'];\n for (j = 1, jj = path[i].length; j < jj; j++) {\n a[j] = \"val[\" + k++ + \"]\";\n }\n out += a + \"]\";\n b[i] = out;\n }\n return Function(\"val\", \"return Snap.path.toString.call([\" + b + \"])\");\n }\n function path2array(path) {\n var out = [];\n for (var i = 0, ii = path.length; i < ii; i++) {\n for (var j = 1, jj = path[i].length; j < jj; j++) {\n out.push(path[i][j]);\n }\n }\n return out;\n }\n function isNumeric(obj) {\n return isFinite(obj);\n }\n function arrayEqual(arr1, arr2) {\n if (!Snap.is(arr1, \"array\") || !Snap.is(arr2, \"array\")) {\n return false;\n }\n return arr1.toString() == arr2.toString();\n }\n Element.prototype.equal = function (name, b) {\n return eve(\"snap.util.equal\", this, name, b).firstDefined();\n };\n eve.on(\"snap.util.equal\", function (name, b) {\n var A, B, a = Str(this.attr(name) || \"\"),\n el = this;\n if (names[name] == \"colour\") {\n A = Snap.color(a);\n B = Snap.color(b);\n return {\n from: [A.r, A.g, A.b, A.opacity],\n to: [B.r, B.g, B.b, B.opacity],\n f: getColour\n };\n }\n if (name == \"viewBox\") {\n A = this.attr(name).vb.split(\" \").map(Number);\n B = b.split(\" \").map(Number);\n return {\n from: A,\n to: B,\n f: getViewBox\n };\n }\n if (name == \"transform\" || name == \"gradientTransform\" || name == \"patternTransform\") {\n if (typeof b == \"string\") {\n b = Str(b).replace(/\\.{3}|\\u2026/g, a);\n }\n a = this.matrix;\n if (!Snap._.rgTransform.test(b)) {\n b = Snap._.transform2matrix(Snap._.svgTransform2string(b), this.getBBox());\n } else {\n b = Snap._.transform2matrix(b, this.getBBox());\n }\n return equaliseTransform(a, b, function () {\n return el.getBBox(1);\n });\n }\n if (name == \"d\" || name == \"path\") {\n A = Snap.path.toCubic(a, b);\n return {\n from: path2array(A[0]),\n to: path2array(A[1]),\n f: getPath(A[0])\n };\n }\n if (name == \"points\") {\n A = Str(a).split(Snap._.separator);\n B = Str(b).split(Snap._.separator);\n return {\n from: A,\n to: B,\n f: function (val) { return val; }\n };\n }\n if (isNumeric(a) && isNumeric(b)) {\n return {\n from: parseFloat(a),\n to: parseFloat(b),\n f: getNumber\n };\n }\n var aUnit = a.match(reUnit),\n bUnit = Str(b).match(reUnit);\n if (aUnit && arrayEqual(aUnit, bUnit)) {\n return {\n from: parseFloat(a),\n to: parseFloat(b),\n f: getUnit(aUnit)\n };\n } else {\n return {\n from: this.asPX(name),\n to: this.asPX(name, b),\n f: getNumber\n };\n }\n });\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n has = \"hasOwnProperty\",\n supportsTouch = \"createTouch\" in glob.doc,\n events = [\n \"click\", \"dblclick\", \"mousedown\", \"mousemove\", \"mouseout\",\n \"mouseover\", \"mouseup\", \"touchstart\", \"touchmove\", \"touchend\",\n \"touchcancel\"\n ],\n touchMap = {\n mousedown: \"touchstart\",\n mousemove: \"touchmove\",\n mouseup: \"touchend\"\n },\n getScroll = function (xy, el) {\n var name = xy == \"y\" ? \"scrollTop\" : \"scrollLeft\",\n doc = el && el.node ? el.node.ownerDocument : glob.doc;\n return doc[name in doc.documentElement ? \"documentElement\" : \"body\"][name];\n },\n preventDefault = function () {\n this.returnValue = false;\n },\n preventTouch = function () {\n return this.originalEvent.preventDefault();\n },\n stopPropagation = function () {\n this.cancelBubble = true;\n },\n stopTouch = function () {\n return this.originalEvent.stopPropagation();\n },\n addEvent = function (obj, type, fn, element) {\n var realName = supportsTouch && touchMap[type] ? touchMap[type] : type,\n f = function (e) {\n var scrollY = getScroll(\"y\", element),\n scrollX = getScroll(\"x\", element);\n if (supportsTouch && touchMap[has](type)) {\n for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n if (e.targetTouches[i].target == obj || obj.contains(e.targetTouches[i].target)) {\n var olde = e;\n e = e.targetTouches[i];\n e.originalEvent = olde;\n e.preventDefault = preventTouch;\n e.stopPropagation = stopTouch;\n break;\n }\n }\n }\n var x = e.clientX + scrollX,\n y = e.clientY + scrollY;\n return fn.call(element, e, x, y);\n };\n\n if (type !== realName) {\n obj.addEventListener(type, f, false);\n }\n\n obj.addEventListener(realName, f, false);\n\n return function () {\n if (type !== realName) {\n obj.removeEventListener(type, f, false);\n }\n\n obj.removeEventListener(realName, f, false);\n return true;\n };\n },\n drag = [],\n dragMove = function (e) {\n var x = e.clientX,\n y = e.clientY,\n scrollY = getScroll(\"y\"),\n scrollX = getScroll(\"x\"),\n dragi,\n j = drag.length;\n while (j--) {\n dragi = drag[j];\n if (supportsTouch) {\n var i = e.touches && e.touches.length,\n touch;\n while (i--) {\n touch = e.touches[i];\n if (touch.identifier == dragi.el._drag.id || dragi.el.node.contains(touch.target)) {\n x = touch.clientX;\n y = touch.clientY;\n (e.originalEvent ? e.originalEvent : e).preventDefault();\n break;\n }\n }\n } else {\n e.preventDefault();\n }\n var node = dragi.el.node,\n o,\n next = node.nextSibling,\n parent = node.parentNode,\n display = node.style.display;\n // glob.win.opera && parent.removeChild(node);\n // node.style.display = \"none\";\n // o = dragi.el.paper.getElementByPoint(x, y);\n // node.style.display = display;\n // glob.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n // o && eve(\"snap.drag.over.\" + dragi.el.id, dragi.el, o);\n x += scrollX;\n y += scrollY;\n eve(\"snap.drag.move.\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\n }\n },\n dragUp = function (e) {\n Snap.unmousemove(dragMove).unmouseup(dragUp);\n var i = drag.length,\n dragi;\n while (i--) {\n dragi = drag[i];\n dragi.el._drag = {};\n eve(\"snap.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n eve.off(\"snap.drag.*.\" + dragi.el.id);\n }\n drag = [];\n };\n /*\\\n * Element.click\n [ method ]\n **\n * Adds a click event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unclick\n [ method ]\n **\n * Removes a click event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.dblclick\n [ method ]\n **\n * Adds a double click event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.undblclick\n [ method ]\n **\n * Removes a double click event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mousedown\n [ method ]\n **\n * Adds a mousedown event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmousedown\n [ method ]\n **\n * Removes a mousedown event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mousemove\n [ method ]\n **\n * Adds a mousemove event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmousemove\n [ method ]\n **\n * Removes a mousemove event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseout\n [ method ]\n **\n * Adds a mouseout event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseout\n [ method ]\n **\n * Removes a mouseout event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseover\n [ method ]\n **\n * Adds a mouseover event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseover\n [ method ]\n **\n * Removes a mouseover event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.mouseup\n [ method ]\n **\n * Adds a mouseup event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.unmouseup\n [ method ]\n **\n * Removes a mouseup event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchstart\n [ method ]\n **\n * Adds a touchstart event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchstart\n [ method ]\n **\n * Removes a touchstart event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchmove\n [ method ]\n **\n * Adds a touchmove event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchmove\n [ method ]\n **\n * Removes a touchmove event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchend\n [ method ]\n **\n * Adds a touchend event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchend\n [ method ]\n **\n * Removes a touchend event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n \n /*\\\n * Element.touchcancel\n [ method ]\n **\n * Adds a touchcancel event handler to the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n /*\\\n * Element.untouchcancel\n [ method ]\n **\n * Removes a touchcancel event handler from the element\n - handler (function) handler for the event\n = (object) @Element\n \\*/\n for (var i = events.length; i--;) {\n (function (eventName) {\n Snap[eventName] = elproto[eventName] = function (fn, scope) {\n if (Snap.is(fn, \"function\")) {\n this.events = this.events || [];\n this.events.push({\n name: eventName,\n f: fn,\n unbind: addEvent(this.node || document, eventName, fn, scope || this)\n });\n } else {\n for (var i = 0, ii = this.events.length; i < ii; i++) if (this.events[i].name == eventName) {\n try {\n this.events[i].f.call(this);\n } catch (e) {}\n }\n }\n return this;\n };\n Snap[\"un\" + eventName] =\n elproto[\"un\" + eventName] = function (fn) {\n var events = this.events || [],\n l = events.length;\n while (l--) if (events[l].name == eventName &&\n (events[l].f == fn || !fn)) {\n events[l].unbind();\n events.splice(l, 1);\n !events.length && delete this.events;\n return this;\n }\n return this;\n };\n })(events[i]);\n }\n /*\\\n * Element.hover\n [ method ]\n **\n * Adds hover event handlers to the element\n - f_in (function) handler for hover in\n - f_out (function) handler for hover out\n - icontext (object) #optional context for hover in handler\n - ocontext (object) #optional context for hover out handler\n = (object) @Element\n \\*/\n elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n };\n /*\\\n * Element.unhover\n [ method ]\n **\n * Removes hover event handlers from the element\n - f_in (function) handler for hover in\n - f_out (function) handler for hover out\n = (object) @Element\n \\*/\n elproto.unhover = function (f_in, f_out) {\n return this.unmouseover(f_in).unmouseout(f_out);\n };\n var draggable = [];\n // SIERRA unclear what _context_ refers to for starting, ending, moving the drag gesture.\n // SIERRA Element.drag(): _x position of the mouse_: Where are the x/y values offset from?\n // SIERRA Element.drag(): much of this member's doc appears to be duplicated for some reason.\n // SIERRA Unclear about this sentence: _Additionally following drag events will be triggered: drag.start. on start, drag.end. on end and drag.move. on every move._ Is there a global _drag_ object to which you can assign handlers keyed by an element's ID?\n /*\\\n * Element.drag\n [ method ]\n **\n * Adds event handlers for an element's drag gesture\n **\n - onmove (function) handler for moving\n - onstart (function) handler for drag start\n - onend (function) handler for drag end\n - mcontext (object) #optional context for moving handler\n - scontext (object) #optional context for drag start handler\n - econtext (object) #optional context for drag end handler\n * Additionaly following `drag` events are triggered: `drag.start.` on start, \n * `drag.end.` on end and `drag.move.` on every move. When element is dragged over another element \n * `drag.over.` fires as well.\n *\n * Start event and start handler are called in specified context or in context of the element with following parameters:\n o x (number) x position of the mouse\n o y (number) y position of the mouse\n o event (object) DOM event object\n * Move event and move handler are called in specified context or in context of the element with following parameters:\n o dx (number) shift by x from the start point\n o dy (number) shift by y from the start point\n o x (number) x position of the mouse\n o y (number) y position of the mouse\n o event (object) DOM event object\n * End event and end handler are called in specified context or in context of the element with following parameters:\n o event (object) DOM event object\n = (object) @Element\n \\*/\n elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n var el = this;\n if (!arguments.length) {\n var origTransform;\n return el.drag(function (dx, dy) {\n this.attr({\n transform: origTransform + (origTransform ? \"T\" : \"t\") + [dx, dy]\n });\n }, function () {\n origTransform = this.transform().local;\n });\n }\n function start(e, x, y) {\n (e.originalEvent || e).preventDefault();\n el._drag.x = x;\n el._drag.y = y;\n el._drag.id = e.identifier;\n !drag.length && Snap.mousemove(dragMove).mouseup(dragUp);\n drag.push({el: el, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n onstart && eve.on(\"snap.drag.start.\" + el.id, onstart);\n onmove && eve.on(\"snap.drag.move.\" + el.id, onmove);\n onend && eve.on(\"snap.drag.end.\" + el.id, onend);\n eve(\"snap.drag.start.\" + el.id, start_scope || move_scope || el, x, y, e);\n }\n function init(e, x, y) {\n eve(\"snap.draginit.\" + el.id, el, e, x, y);\n }\n eve.on(\"snap.draginit.\" + el.id, start);\n el._drag = {};\n draggable.push({el: el, start: start, init: init});\n el.mousedown(init);\n return el;\n };\n /*\n * Element.onDragOver\n [ method ]\n **\n * Shortcut to assign event handler for `drag.over.` event, where `id` is the element's `id` (see @Element.id)\n - f (function) handler for event, first argument would be the element you are dragging over\n \\*/\n // elproto.onDragOver = function (f) {\n // f ? eve.on(\"snap.drag.over.\" + this.id, f) : eve.unbind(\"snap.drag.over.\" + this.id);\n // };\n /*\\\n * Element.undrag\n [ method ]\n **\n * Removes all drag event handlers from the given element\n \\*/\n elproto.undrag = function () {\n var i = draggable.length;\n while (i--) if (draggable[i].el == this) {\n this.unmousedown(draggable[i].init);\n draggable.splice(i, 1);\n eve.unbind(\"snap.drag.*.\" + this.id);\n eve.unbind(\"snap.draginit.\" + this.id);\n }\n !draggable.length && Snap.unmousemove(dragMove).unmouseup(dragUp);\n return this;\n };\n});\n\n// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n var elproto = Element.prototype,\n pproto = Paper.prototype,\n rgurl = /^\\s*url\\((.+)\\)/,\n Str = String,\n $ = Snap._.$;\n Snap.filter = {};\n /*\\\n * Paper.filter\n [ method ]\n **\n * Creates a `` element\n **\n - filstr (string) SVG fragment of filter provided as a string\n = (object) @Element\n * Note: It is recommended to use filters embedded into the page inside an empty SVG element.\n > Usage\n | var f = paper.filter(''),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n pproto.filter = function (filstr) {\n var paper = this;\n if (paper.type != \"svg\") {\n paper = paper.paper;\n }\n var f = Snap.parse(Str(filstr)),\n id = Snap._.id(),\n width = paper.node.offsetWidth,\n height = paper.node.offsetHeight,\n filter = $(\"filter\");\n $(filter, {\n id: id,\n filterUnits: \"userSpaceOnUse\"\n });\n filter.appendChild(f.node);\n paper.defs.appendChild(filter);\n return new Element(filter);\n };\n\n eve.on(\"snap.util.getattr.filter\", function () {\n eve.stop();\n var p = $(this.node, \"filter\");\n if (p) {\n var match = Str(p).match(rgurl);\n return match && Snap.select(match[1]);\n }\n });\n eve.on(\"snap.util.attr.filter\", function (value) {\n if (value instanceof Element && value.type == \"filter\") {\n eve.stop();\n var id = value.node.id;\n if (!id) {\n $(value.node, {id: value.id});\n id = value.id;\n }\n $(this.node, {\n filter: Snap.url(id)\n });\n }\n if (!value || value == \"none\") {\n eve.stop();\n this.node.removeAttribute(\"filter\");\n }\n });\n /*\\\n * Snap.filter.blur\n [ method ]\n **\n * Returns an SVG markup string for the blur filter\n **\n - x (number) amount of horizontal blur, in pixels\n - y (number) #optional amount of vertical blur, in pixels\n = (string) filter representation\n > Usage\n | var f = paper.filter(Snap.filter.blur(5, 10)),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n Snap.filter.blur = function (x, y) {\n if (x == null) {\n x = 2;\n }\n var def = y == null ? x : [x, y];\n return Snap.format('\\', {\n def: def\n });\n };\n Snap.filter.blur.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.shadow\n [ method ]\n **\n * Returns an SVG markup string for the shadow filter\n **\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - blur (number) #optional amount of blur\n - color (string) #optional color of the shadow\n - opacity (number) #optional `0..1` opacity of the shadow\n * or\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - color (string) #optional color of the shadow\n - opacity (number) #optional `0..1` opacity of the shadow\n * which makes blur default to `4`. Or\n - dx (number) #optional horizontal shift of the shadow, in pixels\n - dy (number) #optional vertical shift of the shadow, in pixels\n - opacity (number) #optional `0..1` opacity of the shadow\n = (string) filter representation\n > Usage\n | var f = paper.filter(Snap.filter.shadow(0, 2, .3)),\n | c = paper.circle(10, 10, 10).attr({\n | filter: f\n | });\n \\*/\n Snap.filter.shadow = function (dx, dy, blur, color, opacity) {\n if (opacity == null) {\n if (color == null) {\n opacity = blur;\n blur = 4;\n color = \"#000\";\n } else {\n opacity = color;\n color = blur;\n blur = 4;\n }\n }\n if (blur == null) {\n blur = 4;\n }\n if (opacity == null) {\n opacity = 1;\n }\n if (dx == null) {\n dx = 0;\n dy = 2;\n }\n if (dy == null) {\n dy = dx;\n }\n color = Snap.color(color);\n return Snap.format('', {\n color: color,\n dx: dx,\n dy: dy,\n blur: blur,\n opacity: opacity\n });\n };\n Snap.filter.shadow.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.grayscale\n [ method ]\n **\n * Returns an SVG markup string for the grayscale filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.grayscale = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n a: 0.2126 + 0.7874 * (1 - amount),\n b: 0.7152 - 0.7152 * (1 - amount),\n c: 0.0722 - 0.0722 * (1 - amount),\n d: 0.2126 - 0.2126 * (1 - amount),\n e: 0.7152 + 0.2848 * (1 - amount),\n f: 0.0722 - 0.0722 * (1 - amount),\n g: 0.2126 - 0.2126 * (1 - amount),\n h: 0.0722 + 0.9278 * (1 - amount)\n });\n };\n Snap.filter.grayscale.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.sepia\n [ method ]\n **\n * Returns an SVG markup string for the sepia filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.sepia = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n a: 0.393 + 0.607 * (1 - amount),\n b: 0.769 - 0.769 * (1 - amount),\n c: 0.189 - 0.189 * (1 - amount),\n d: 0.349 - 0.349 * (1 - amount),\n e: 0.686 + 0.314 * (1 - amount),\n f: 0.168 - 0.168 * (1 - amount),\n g: 0.272 - 0.272 * (1 - amount),\n h: 0.534 - 0.534 * (1 - amount),\n i: 0.131 + 0.869 * (1 - amount)\n });\n };\n Snap.filter.sepia.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.saturate\n [ method ]\n **\n * Returns an SVG markup string for the saturate filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.saturate = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: 1 - amount\n });\n };\n Snap.filter.saturate.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.hueRotate\n [ method ]\n **\n * Returns an SVG markup string for the hue-rotate filter\n **\n - angle (number) angle of rotation\n = (string) filter representation\n \\*/\n Snap.filter.hueRotate = function (angle) {\n angle = angle || 0;\n return Snap.format('', {\n angle: angle\n });\n };\n Snap.filter.hueRotate.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.invert\n [ method ]\n **\n * Returns an SVG markup string for the invert filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.invert = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n// \n return Snap.format('', {\n amount: amount,\n amount2: 1 - amount\n });\n };\n Snap.filter.invert.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.brightness\n [ method ]\n **\n * Returns an SVG markup string for the brightness filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.brightness = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: amount\n });\n };\n Snap.filter.brightness.toString = function () {\n return this();\n };\n /*\\\n * Snap.filter.contrast\n [ method ]\n **\n * Returns an SVG markup string for the contrast filter\n **\n - amount (number) amount of filter (`0..1`)\n = (string) filter representation\n \\*/\n Snap.filter.contrast = function (amount) {\n if (amount == null) {\n amount = 1;\n }\n return Snap.format('', {\n amount: amount,\n amount2: .5 - amount / 2\n });\n };\n Snap.filter.contrast.toString = function () {\n return this();\n };\n});\n\n// Copyright (c) 2014 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var box = Snap._.box,\n is = Snap.is,\n firstLetter = /^[^a-z]*([tbmlrc])/i,\n toString = function () {\n return \"T\" + this.dx + \",\" + this.dy;\n };\n /*\\\n * Element.getAlign\n [ method ]\n **\n * Returns shift needed to align the element relatively to given element.\n * If no elements specified, parent `` container will be used.\n - el (object) @optional alignment element\n - way (string) one of six values: `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"left\"`, `\"center\"`, `\"right\"`\n = (object|string) Object in format `{dx: , dy: }` also has a string representation as a transformation string\n > Usage\n | el.transform(el.getAlign(el2, \"top\"));\n * or\n | var dy = el.getAlign(el2, \"top\").dy;\n \\*/\n Element.prototype.getAlign = function (el, way) {\n if (way == null && is(el, \"string\")) {\n way = el;\n el = null;\n }\n el = el || this.paper;\n var bx = el.getBBox ? el.getBBox() : box(el),\n bb = this.getBBox(),\n out = {};\n way = way && way.match(firstLetter);\n way = way ? way[1].toLowerCase() : \"c\";\n switch (way) {\n case \"t\":\n out.dx = 0;\n out.dy = bx.y - bb.y;\n break;\n case \"b\":\n out.dx = 0;\n out.dy = bx.y2 - bb.y2;\n break;\n case \"m\":\n out.dx = 0;\n out.dy = bx.cy - bb.cy;\n break;\n case \"l\":\n out.dx = bx.x - bb.x;\n out.dy = 0;\n break;\n case \"r\":\n out.dx = bx.x2 - bb.x2;\n out.dy = 0;\n break;\n default:\n out.dx = bx.cx - bb.cx;\n out.dy = 0;\n break;\n }\n out.toString = toString;\n return out;\n };\n /*\\\n * Element.align\n [ method ]\n **\n * Aligns the element relatively to given one via transformation.\n * If no elements specified, parent `` container will be used.\n - el (object) @optional alignment element\n - way (string) one of six values: `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"left\"`, `\"center\"`, `\"right\"`\n = (object) this element\n > Usage\n | el.align(el2, \"top\");\n * or\n | el.align(\"middle\");\n \\*/\n Element.prototype.align = function (el, way) {\n return this.transform(\"...\" + this.getAlign(el, way));\n };\n});\n\n// Copyright (c) 2016 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob, Fragment) {\n var elproto = Element.prototype,\n is = Snap.is,\n Str = String,\n has = \"hasOwnProperty\";\n function slice(from, to, f) {\n return function (arr) {\n var res = arr.slice(from, to);\n if (res.length == 1) {\n res = res[0];\n }\n return f ? f(res) : res;\n };\n }\n var Animation = function (attr, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n this.attr = attr;\n this.dur = ms;\n easing && (this.easing = easing);\n callback && (this.callback = callback);\n };\n Snap._.Animation = Animation;\n /*\\\n * Snap.animation\n [ method ]\n **\n * Creates an animation object\n **\n - attr (object) attributes of final destination\n - duration (number) duration of the animation, in milliseconds\n - easing (function) #optional one of easing functions of @mina or custom one\n - callback (function) #optional callback function that fires when animation ends\n = (object) animation object\n \\*/\n Snap.animation = function (attr, ms, easing, callback) {\n return new Animation(attr, ms, easing, callback);\n };\n /*\\\n * Element.inAnim\n [ method ]\n **\n * Returns a set of animations that may be able to manipulate the current element\n **\n = (object) in format:\n o {\n o anim (object) animation object,\n o mina (object) @mina object,\n o curStatus (number) 0..1 — status of the animation: 0 — just started, 1 — just finished,\n o status (function) gets or sets the status of the animation,\n o stop (function) stops the animation\n o }\n \\*/\n elproto.inAnim = function () {\n var el = this,\n res = [];\n for (var id in el.anims) if (el.anims[has](id)) {\n (function (a) {\n res.push({\n anim: new Animation(a._attrs, a.dur, a.easing, a._callback),\n mina: a,\n curStatus: a.status(),\n status: function (val) {\n return a.status(val);\n },\n stop: function () {\n a.stop();\n }\n });\n }(el.anims[id]));\n }\n return res;\n };\n /*\\\n * Snap.animate\n [ method ]\n **\n * Runs generic animation of one number into another with a caring function\n **\n - from (number|array) number or array of numbers\n - to (number|array) number or array of numbers\n - setter (function) caring function that accepts one number argument\n - duration (number) duration, in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function to execute when animation ends\n = (object) animation object in @mina format\n o {\n o id (string) animation id, consider it read-only,\n o duration (function) gets or sets the duration of the animation,\n o easing (function) easing,\n o speed (function) gets or sets the speed of the animation,\n o status (function) gets or sets the status of the animation,\n o stop (function) stops the animation\n o }\n | var rect = Snap().rect(0, 0, 10, 10);\n | Snap.animate(0, 10, function (val) {\n | rect.attr({\n | x: val\n | });\n | }, 1000);\n | // in given context is equivalent to\n | rect.animate({x: 10}, 1000);\n \\*/\n Snap.animate = function (from, to, setter, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n var now = mina.time(),\n anim = mina(from, to, now, now + ms, mina.time, setter, easing);\n callback && eve.once(\"mina.finish.\" + anim.id, callback);\n return anim;\n };\n /*\\\n * Element.stop\n [ method ]\n **\n * Stops all the animations for the current element\n **\n = (Element) the current element\n \\*/\n elproto.stop = function () {\n var anims = this.inAnim();\n for (var i = 0, ii = anims.length; i < ii; i++) {\n anims[i].stop();\n }\n return this;\n };\n /*\\\n * Element.animate\n [ method ]\n **\n * Animates the given attributes of the element\n **\n - attrs (object) key-value pairs of destination attributes\n - duration (number) duration of the animation in milliseconds\n - easing (function) #optional easing function from @mina or custom\n - callback (function) #optional callback function that executes when the animation ends\n = (Element) the current element\n \\*/\n elproto.animate = function (attrs, ms, easing, callback) {\n if (typeof easing == \"function\" && !easing.length) {\n callback = easing;\n easing = mina.linear;\n }\n if (attrs instanceof Animation) {\n callback = attrs.callback;\n easing = attrs.easing;\n ms = attrs.dur;\n attrs = attrs.attr;\n }\n var fkeys = [], tkeys = [], keys = {}, from, to, f, eq,\n el = this;\n for (var key in attrs) if (attrs[has](key)) {\n if (el.equal) {\n eq = el.equal(key, Str(attrs[key]));\n from = eq.from;\n to = eq.to;\n f = eq.f;\n } else {\n from = +el.attr(key);\n to = +attrs[key];\n }\n var len = is(from, \"array\") ? from.length : 1;\n keys[key] = slice(fkeys.length, fkeys.length + len, f);\n fkeys = fkeys.concat(from);\n tkeys = tkeys.concat(to);\n }\n var now = mina.time(),\n anim = mina(fkeys, tkeys, now, now + ms, mina.time, function (val) {\n var attr = {};\n for (var key in keys) if (keys[has](key)) {\n attr[key] = keys[key](val);\n }\n el.attr(attr);\n }, easing);\n el.anims[anim.id] = anim;\n anim._attrs = attrs;\n anim._callback = callback;\n eve(\"snap.animcreated.\" + el.id, anim);\n eve.once(\"mina.finish.\" + anim.id, function () {\n eve.off(\"mina.*.\" + anim.id);\n delete el.anims[anim.id];\n callback && callback.call(el);\n });\n eve.once(\"mina.stop.\" + anim.id, function () {\n eve.off(\"mina.*.\" + anim.id);\n delete el.anims[anim.id];\n });\n return el;\n };\n});\n\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nSnap.plugin(function (Snap, Element, Paper, glob) {\n // Colours are from https://www.materialui.co\n var red = \"#ffebee#ffcdd2#ef9a9a#e57373#ef5350#f44336#e53935#d32f2f#c62828#b71c1c#ff8a80#ff5252#ff1744#d50000\",\n pink = \"#FCE4EC#F8BBD0#F48FB1#F06292#EC407A#E91E63#D81B60#C2185B#AD1457#880E4F#FF80AB#FF4081#F50057#C51162\",\n purple = \"#F3E5F5#E1BEE7#CE93D8#BA68C8#AB47BC#9C27B0#8E24AA#7B1FA2#6A1B9A#4A148C#EA80FC#E040FB#D500F9#AA00FF\",\n deeppurple = \"#EDE7F6#D1C4E9#B39DDB#9575CD#7E57C2#673AB7#5E35B1#512DA8#4527A0#311B92#B388FF#7C4DFF#651FFF#6200EA\",\n indigo = \"#E8EAF6#C5CAE9#9FA8DA#7986CB#5C6BC0#3F51B5#3949AB#303F9F#283593#1A237E#8C9EFF#536DFE#3D5AFE#304FFE\",\n blue = \"#E3F2FD#BBDEFB#90CAF9#64B5F6#64B5F6#2196F3#1E88E5#1976D2#1565C0#0D47A1#82B1FF#448AFF#2979FF#2962FF\",\n lightblue = \"#E1F5FE#B3E5FC#81D4FA#4FC3F7#29B6F6#03A9F4#039BE5#0288D1#0277BD#01579B#80D8FF#40C4FF#00B0FF#0091EA\",\n cyan = \"#E0F7FA#B2EBF2#80DEEA#4DD0E1#26C6DA#00BCD4#00ACC1#0097A7#00838F#006064#84FFFF#18FFFF#00E5FF#00B8D4\",\n teal = \"#E0F2F1#B2DFDB#80CBC4#4DB6AC#26A69A#009688#00897B#00796B#00695C#004D40#A7FFEB#64FFDA#1DE9B6#00BFA5\",\n green = \"#E8F5E9#C8E6C9#A5D6A7#81C784#66BB6A#4CAF50#43A047#388E3C#2E7D32#1B5E20#B9F6CA#69F0AE#00E676#00C853\",\n lightgreen = \"#F1F8E9#DCEDC8#C5E1A5#AED581#9CCC65#8BC34A#7CB342#689F38#558B2F#33691E#CCFF90#B2FF59#76FF03#64DD17\",\n lime = \"#F9FBE7#F0F4C3#E6EE9C#DCE775#D4E157#CDDC39#C0CA33#AFB42B#9E9D24#827717#F4FF81#EEFF41#C6FF00#AEEA00\",\n yellow = \"#FFFDE7#FFF9C4#FFF59D#FFF176#FFEE58#FFEB3B#FDD835#FBC02D#F9A825#F57F17#FFFF8D#FFFF00#FFEA00#FFD600\",\n amber = \"#FFF8E1#FFECB3#FFE082#FFD54F#FFCA28#FFC107#FFB300#FFA000#FF8F00#FF6F00#FFE57F#FFD740#FFC400#FFAB00\",\n orange = \"#FFF3E0#FFE0B2#FFCC80#FFB74D#FFA726#FF9800#FB8C00#F57C00#EF6C00#E65100#FFD180#FFAB40#FF9100#FF6D00\",\n deeporange = \"#FBE9E7#FFCCBC#FFAB91#FF8A65#FF7043#FF5722#F4511E#E64A19#D84315#BF360C#FF9E80#FF6E40#FF3D00#DD2C00\",\n brown = \"#EFEBE9#D7CCC8#BCAAA4#A1887F#8D6E63#795548#6D4C41#5D4037#4E342E#3E2723\",\n grey = \"#FAFAFA#F5F5F5#EEEEEE#E0E0E0#BDBDBD#9E9E9E#757575#616161#424242#212121\",\n bluegrey = \"#ECEFF1#CFD8DC#B0BEC5#90A4AE#78909C#607D8B#546E7A#455A64#37474F#263238\";\n /*\\\n * Snap.mui\n [ property ]\n **\n * Contain Material UI colours.\n | Snap().rect(0, 0, 10, 10).attr({fill: Snap.mui.deeppurple, stroke: Snap.mui.amber[600]});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.mui = {};\n /*\\\n * Snap.flat\n [ property ]\n **\n * Contain Flat UI colours.\n | Snap().rect(0, 0, 10, 10).attr({fill: Snap.flat.carrot, stroke: Snap.flat.wetasphalt});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.flat = {};\n function saveColor(colors) {\n colors = colors.split(/(?=#)/);\n var color = new String(colors[5]);\n color[50] = colors[0];\n color[100] = colors[1];\n color[200] = colors[2];\n color[300] = colors[3];\n color[400] = colors[4];\n color[500] = colors[5];\n color[600] = colors[6];\n color[700] = colors[7];\n color[800] = colors[8];\n color[900] = colors[9];\n if (colors[10]) {\n color.A100 = colors[10];\n color.A200 = colors[11];\n color.A400 = colors[12];\n color.A700 = colors[13];\n }\n return color;\n }\n Snap.mui.red = saveColor(red);\n Snap.mui.pink = saveColor(pink);\n Snap.mui.purple = saveColor(purple);\n Snap.mui.deeppurple = saveColor(deeppurple);\n Snap.mui.indigo = saveColor(indigo);\n Snap.mui.blue = saveColor(blue);\n Snap.mui.lightblue = saveColor(lightblue);\n Snap.mui.cyan = saveColor(cyan);\n Snap.mui.teal = saveColor(teal);\n Snap.mui.green = saveColor(green);\n Snap.mui.lightgreen = saveColor(lightgreen);\n Snap.mui.lime = saveColor(lime);\n Snap.mui.yellow = saveColor(yellow);\n Snap.mui.amber = saveColor(amber);\n Snap.mui.orange = saveColor(orange);\n Snap.mui.deeporange = saveColor(deeporange);\n Snap.mui.brown = saveColor(brown);\n Snap.mui.grey = saveColor(grey);\n Snap.mui.bluegrey = saveColor(bluegrey);\n Snap.flat.turquoise = \"#1abc9c\";\n Snap.flat.greensea = \"#16a085\";\n Snap.flat.sunflower = \"#f1c40f\";\n Snap.flat.orange = \"#f39c12\";\n Snap.flat.emerland = \"#2ecc71\";\n Snap.flat.nephritis = \"#27ae60\";\n Snap.flat.carrot = \"#e67e22\";\n Snap.flat.pumpkin = \"#d35400\";\n Snap.flat.peterriver = \"#3498db\";\n Snap.flat.belizehole = \"#2980b9\";\n Snap.flat.alizarin = \"#e74c3c\";\n Snap.flat.pomegranate = \"#c0392b\";\n Snap.flat.amethyst = \"#9b59b6\";\n Snap.flat.wisteria = \"#8e44ad\";\n Snap.flat.clouds = \"#ecf0f1\";\n Snap.flat.silver = \"#bdc3c7\";\n Snap.flat.wetasphalt = \"#34495e\";\n Snap.flat.midnightblue = \"#2c3e50\";\n Snap.flat.concrete = \"#95a5a6\";\n Snap.flat.asbestos = \"#7f8c8d\";\n /*\\\n * Snap.importMUIColors\n [ method ]\n **\n * Imports Material UI colours into global object.\n | Snap.importMUIColors();\n | Snap().rect(0, 0, 10, 10).attr({fill: deeppurple, stroke: amber[600]});\n # For colour reference: https://www.materialui.co.\n \\*/\n Snap.importMUIColors = function () {\n for (var color in Snap.mui) {\n if (Snap.mui.hasOwnProperty(color)) {\n window[color] = Snap.mui[color];\n }\n }\n };\n});\n\nmodule.exports = Snap\n","var map = {\n\t\"./1-capNtrim-high.webp\": 7685,\n\t\"./1-capNtrim-low.webp\": 1713,\n\t\"./2-capNtrim-high.webp\": 9532,\n\t\"./2-capNtrim-low.webp\": 1734,\n\t\"./3-capNtrim-high.webp\": 8115,\n\t\"./3-capNtrim-low.webp\": 8895,\n\t\"./4-capNtrim-high.webp\": 9434,\n\t\"./4-capNtrim-low.webp\": 6148,\n\t\"./5-capNtrim-high.webp\": 721,\n\t\"./5-capNtrim-low.webp\": 725,\n\t\"./6-capNtrim-high.webp\": 7992,\n\t\"./6-capNtrim-low.webp\": 1658,\n\t\"./7-capNtrim-high.webp\": 7295,\n\t\"./7-capNtrim-low.webp\": 4723\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 88;","var map = {\n\t\"./1-chainLink-high.webp\": 3632,\n\t\"./1-chainLink-low.webp\": 3026,\n\t\"./10-chainLink-high.webp\": 1710,\n\t\"./10-chainLink-low.webp\": 3536,\n\t\"./11-chainLink-high.webp\": 6615,\n\t\"./11-chainLink-low.webp\": 155,\n\t\"./12-chainLink-high.webp\": 1904,\n\t\"./12-chainLink-low.webp\": 946,\n\t\"./13-chainLink-high.webp\": 9097,\n\t\"./13-chainLink-low.webp\": 2461,\n\t\"./14-chainLink-high.webp\": 9138,\n\t\"./14-chainLink-low.webp\": 4972,\n\t\"./15-chainLink-high.webp\": 443,\n\t\"./15-chainLink-low.webp\": 6551,\n\t\"./16-chainLink-high.webp\": 3364,\n\t\"./16-chainLink-low.webp\": 3742,\n\t\"./17-chainLink-high.webp\": 7085,\n\t\"./17-chainLink-low.webp\": 1289,\n\t\"./18-chainLink-high.webp\": 1062,\n\t\"./18-chainLink-low.webp\": 712,\n\t\"./19-chainLink-high.webp\": 5423,\n\t\"./19-chainLink-low.webp\": 6483,\n\t\"./2-chainLink-high.webp\": 7447,\n\t\"./2-chainLink-low.webp\": 1291,\n\t\"./20-chainLink-high.webp\": 3327,\n\t\"./20-chainLink-low.webp\": 8419,\n\t\"./21-chainLink-high.webp\": 8390,\n\t\"./21-chainLink-low.webp\": 7112,\n\t\"./22-chainLink-high.webp\": 1969,\n\t\"./22-chainLink-low.webp\": 6005,\n\t\"./23-chainLink-high.webp\": 6360,\n\t\"./23-chainLink-low.webp\": 1914,\n\t\"./24-chainLink-high.webp\": 2659,\n\t\"./24-chainLink-low.webp\": 8127,\n\t\"./3-chainLink-high.webp\": 9822,\n\t\"./3-chainLink-low.webp\": 3328,\n\t\"./4-chainLink-high.webp\": 557,\n\t\"./4-chainLink-low.webp\": 5657,\n\t\"./5-chainLink-high.webp\": 1940,\n\t\"./5-chainLink-low.webp\": 4814,\n\t\"./6-chainLink-high.webp\": 3675,\n\t\"./6-chainLink-low.webp\": 1767,\n\t\"./7-chainLink-high.webp\": 8386,\n\t\"./7-chainLink-low.webp\": 268,\n\t\"./8-chainLink-high.webp\": 4417,\n\t\"./8-chainLink-low.webp\": 3797,\n\t\"./9-chainLink-high.webp\": 9096,\n\t\"./9-chainLink-low.webp\": 3466\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7590;","var map = {\n\t\"./1-craftsman-high.webp\": 7077,\n\t\"./1-craftsman-low.webp\": 2737,\n\t\"./10-craftsman-high.webp\": 5025,\n\t\"./10-craftsman-low.webp\": 7189,\n\t\"./11-craftsman-high.webp\": 1836,\n\t\"./11-craftsman-low.webp\": 262,\n\t\"./12-craftsman-high.webp\": 8867,\n\t\"./12-craftsman-low.webp\": 5855,\n\t\"./13-craftsman-high.webp\": 7478,\n\t\"./13-craftsman-low.webp\": 9688,\n\t\"./14-craftsman-high.webp\": 6549,\n\t\"./14-craftsman-low.webp\": 881,\n\t\"./15-craftsman-high.webp\": 9792,\n\t\"./15-craftsman-low.webp\": 4434,\n\t\"./16-craftsman-high.webp\": 839,\n\t\"./16-craftsman-low.webp\": 8331,\n\t\"./17-craftsman-high.webp\": 6602,\n\t\"./17-craftsman-low.webp\": 8228,\n\t\"./18-craftsman-high.webp\": 9,\n\t\"./18-craftsman-low.webp\": 669,\n\t\"./19-craftsman-high.webp\": 500,\n\t\"./19-craftsman-low.webp\": 9886,\n\t\"./2-craftsman-high.webp\": 4122,\n\t\"./2-craftsman-low.webp\": 6724,\n\t\"./20-craftsman-high.webp\": 1656,\n\t\"./20-craftsman-low.webp\": 8490,\n\t\"./21-craftsman-high.webp\": 3837,\n\t\"./21-craftsman-low.webp\": 2361,\n\t\"./3-craftsman-high.webp\": 9383,\n\t\"./3-craftsman-low.webp\": 6203,\n\t\"./4-craftsman-high.webp\": 9980,\n\t\"./4-craftsman-low.webp\": 8678,\n\t\"./5-craftsman-high.webp\": 5121,\n\t\"./5-craftsman-low.webp\": 7525,\n\t\"./6-craftsman-high.webp\": 6134,\n\t\"./6-craftsman-low.webp\": 1768,\n\t\"./7-craftsman-high.webp\": 7424,\n\t\"./7-craftsman-low.webp\": 895,\n\t\"./8-craftsman-high.webp\": 4504,\n\t\"./8-craftsman-low.webp\": 7242,\n\t\"./9-craftsman-high.webp\": 8397,\n\t\"./9-craftsman-low.webp\": 345\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9377;","var map = {\n\t\"./1-custom-high.webp\": 2400,\n\t\"./1-custom-low.webp\": 5890,\n\t\"./10-custom-high.webp\": 538,\n\t\"./10-custom-low.webp\": 1636,\n\t\"./11-custom-high.webp\": 2761,\n\t\"./11-custom-low.webp\": 333,\n\t\"./2-custom-high.webp\": 5809,\n\t\"./2-custom-low.webp\": 8559,\n\t\"./3-custom-high.webp\": 8642,\n\t\"./3-custom-low.webp\": 8828,\n\t\"./4-custom-high.webp\": 1403,\n\t\"./4-custom-low.webp\": 7815,\n\t\"./5-custom-high.webp\": 1508,\n\t\"./5-custom-low.webp\": 8142,\n\t\"./6-custom-high.webp\": 1333,\n\t\"./6-custom-low.webp\": 6449,\n\t\"./7-custom-high.webp\": 9302,\n\t\"./7-custom-low.webp\": 4376,\n\t\"./8-custom-high.webp\": 1839,\n\t\"./8-custom-low.webp\": 563,\n\t\"./9-custom-high.webp\": 9416,\n\t\"./9-custom-low.webp\": 8186\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 566;","var map = {\n\t\"./1-hogwire-high.webp\": 5592,\n\t\"./1-hogwire-low.webp\": 9578,\n\t\"./2-hogwire-high.webp\": 8519,\n\t\"./2-hogwire-low.webp\": 3755,\n\t\"./3-hogwire-high.webp\": 290,\n\t\"./3-hogwire-low.webp\": 7644,\n\t\"./4-hogwire-high.webp\": 4633,\n\t\"./4-hogwire-low.webp\": 1885,\n\t\"./5-hogwire-high.webp\": 2292,\n\t\"./5-hogwire-low.webp\": 1438,\n\t\"./6-hogwire-high.webp\": 2403,\n\t\"./6-hogwire-low.webp\": 575,\n\t\"./7-hogwire-high.webp\": 9854,\n\t\"./7-hogwire-low.webp\": 8496,\n\t\"./8-hogwire-high.webp\": 341,\n\t\"./8-hogwire-low.webp\": 9025\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3712;","var map = {\n\t\"./1-horizontal-high.webp\": 9658,\n\t\"./1-horizontal-low.webp\": 3588,\n\t\"./10-horizontal-high.webp\": 6498,\n\t\"./10-horizontal-low.webp\": 556,\n\t\"./11-horizontal-high.webp\": 4093,\n\t\"./11-horizontal-low.webp\": 537,\n\t\"./12-horizontal-high.webp\": 4188,\n\t\"./12-horizontal-low.webp\": 518,\n\t\"./13-horizontal-high.webp\": 8695,\n\t\"./13-horizontal-low.webp\": 8987,\n\t\"./14-horizontal-high.webp\": 7374,\n\t\"./14-horizontal-low.webp\": 6208,\n\t\"./15-horizontal-high.webp\": 7657,\n\t\"./15-horizontal-low.webp\": 6717,\n\t\"./2-horizontal-high.webp\": 5743,\n\t\"./2-horizontal-low.webp\": 4755,\n\t\"./3-horizontal-high.webp\": 7876,\n\t\"./3-horizontal-low.webp\": 5454,\n\t\"./4-horizontal-high.webp\": 1809,\n\t\"./4-horizontal-low.webp\": 6741,\n\t\"./5-horizontal-high.webp\": 6950,\n\t\"./5-horizontal-low.webp\": 7912,\n\t\"./6-horizontal-high.webp\": 9739,\n\t\"./6-horizontal-low.webp\": 7335,\n\t\"./7-horizontal-high.webp\": 7936,\n\t\"./7-horizontal-low.webp\": 3346,\n\t\"./8-horizontal-high.webp\": 6925,\n\t\"./8-horizontal-low.webp\": 7305,\n\t\"./9-horizontal-high.webp\": 9282,\n\t\"./9-horizontal-low.webp\": 3980\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2365;","var map = {\n\t\"./1-ornamental-high.webp\": 1384,\n\t\"./1-ornamental-low.webp\": 6474,\n\t\"./10-ornamental-high.webp\": 2058,\n\t\"./10-ornamental-low.webp\": 4532,\n\t\"./11-ornamental-high.webp\": 781,\n\t\"./11-ornamental-low.webp\": 9817,\n\t\"./12-ornamental-high.webp\": 8608,\n\t\"./12-ornamental-low.webp\": 8594,\n\t\"./13-ornamental-high.webp\": 2579,\n\t\"./13-ornamental-low.webp\": 127,\n\t\"./14-ornamental-high.webp\": 7966,\n\t\"./14-ornamental-low.webp\": 9040,\n\t\"./15-ornamental-high.webp\": 7185,\n\t\"./15-ornamental-low.webp\": 6597,\n\t\"./16-ornamental-high.webp\": 9380,\n\t\"./16-ornamental-low.webp\": 8814,\n\t\"./17-ornamental-high.webp\": 247,\n\t\"./17-ornamental-low.webp\": 5803,\n\t\"./18-ornamental-high.webp\": 6178,\n\t\"./18-ornamental-low.webp\": 5916,\n\t\"./19-ornamental-high.webp\": 8437,\n\t\"./19-ornamental-low.webp\": 6945,\n\t\"./2-ornamental-high.webp\": 1397,\n\t\"./2-ornamental-low.webp\": 2385,\n\t\"./20-ornamental-high.webp\": 613,\n\t\"./20-ornamental-low.webp\": 417,\n\t\"./3-ornamental-high.webp\": 3378,\n\t\"./3-ornamental-low.webp\": 6220,\n\t\"./4-ornamental-high.webp\": 991,\n\t\"./4-ornamental-low.webp\": 3555,\n\t\"./5-ornamental-high.webp\": 9548,\n\t\"./5-ornamental-low.webp\": 8038,\n\t\"./6-ornamental-high.webp\": 2985,\n\t\"./6-ornamental-low.webp\": 6173,\n\t\"./7-ornamental-high.webp\": 4934,\n\t\"./7-ornamental-low.webp\": 6008,\n\t\"./8-ornamental-high.webp\": 5699,\n\t\"./8-ornamental-low.webp\": 9615,\n\t\"./9-ornamental-high.webp\": 800,\n\t\"./9-ornamental-low.webp\": 2466\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5632;","var map = {\n\t\"./becky-review-high.webp\": 6429,\n\t\"./becky-review-low.webp\": 4985,\n\t\"./erica-review-high.webp\": 2309,\n\t\"./erica-review-low.webp\": 5441,\n\t\"./karin-review-high.webp\": 5606,\n\t\"./karin-review-low.webp\": 728,\n\t\"./kelly-review-high.webp\": 5748,\n\t\"./kelly-review-low.webp\": 6430,\n\t\"./nathan-review-high.webp\": 8743,\n\t\"./nathan-review-low.webp\": 5227\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7919;","var map = {\n\t\"./1-standard-high.webp\": 5664,\n\t\"./1-standard-low.webp\": 2274,\n\t\"./10-standard-high.webp\": 934,\n\t\"./10-standard-low.webp\": 1960,\n\t\"./11-standard-high.webp\": 8509,\n\t\"./11-standard-low.webp\": 4761,\n\t\"./2-standard-high.webp\": 5485,\n\t\"./2-standard-low.webp\": 3209,\n\t\"./3-standard-high.webp\": 2198,\n\t\"./3-standard-low.webp\": 5112,\n\t\"./4-standard-high.webp\": 603,\n\t\"./4-standard-low.webp\": 3399,\n\t\"./5-standard-high.webp\": 5700,\n\t\"./5-standard-low.webp\": 3902,\n\t\"./6-standard-high.webp\": 7729,\n\t\"./6-standard-low.webp\": 7797,\n\t\"./7-standard-high.webp\": 2570,\n\t\"./7-standard-low.webp\": 4948,\n\t\"./8-standard-high.webp\": 6703,\n\t\"./8-standard-low.webp\": 355,\n\t\"./9-standard-high.webp\": 3528,\n\t\"./9-standard-low.webp\": 1274\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 8744;","var map = {\n\t\"./1-vinyl-high.webp\": 4980,\n\t\"./1-vinyl-low.webp\": 6798,\n\t\"./10-vinyl-high.webp\": 7884,\n\t\"./10-vinyl-low.webp\": 246,\n\t\"./2-vinyl-high.webp\": 1343,\n\t\"./2-vinyl-low.webp\": 3587,\n\t\"./3-vinyl-high.webp\": 8470,\n\t\"./3-vinyl-low.webp\": 7080,\n\t\"./4-vinyl-high.webp\": 7241,\n\t\"./4-vinyl-low.webp\": 1293,\n\t\"./5-vinyl-high.webp\": 1944,\n\t\"./5-vinyl-low.webp\": 2474,\n\t\"./6-vinyl-high.webp\": 3635,\n\t\"./6-vinyl-low.webp\": 1535,\n\t\"./7-vinyl-high.webp\": 1770,\n\t\"./7-vinyl-low.webp\": 2548,\n\t\"./8-vinyl-high.webp\": 1069,\n\t\"./8-vinyl-low.webp\": 3609,\n\t\"./9-vinyl-high.webp\": 5692,\n\t\"./9-vinyl-low.webp\": 6550\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1203;","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"f45e20f0\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"nates-fence-and-gate:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknates_fence_and_gate\"] = self[\"webpackChunknates_fence_and_gate\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\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\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 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 ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n signal: AbortSignal;\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n opts: AgnosticPatchRoutesOnNavigationFunctionArgs\n) => void | Promise;\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: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(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/v6/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 return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\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(\n branches[i],\n decoded,\n allowPartial\n );\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 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 allowPartial = false\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 let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\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/v6/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/v6/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\nexport function 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/v6/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 === pathMatches.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 *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\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 class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\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\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\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\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"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 DataStrategyResult,\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 AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\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 matchRoutesImpl,\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 * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): 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 v7_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 dataStrategy?: DataStrategyFunction;\n patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\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 dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n 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 viewTransitionOpts?: ViewTransitionOpts;\n 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 flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n 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 * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\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 * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\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.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\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 v7_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 initialMatchesIsFOW = false;\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\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 // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\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 (!initialMatches.some((m) => m.route.loader)) {\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 // 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\n .slice(0, idx + 1)\n .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\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: Set = new Set();\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 // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\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 unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\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 (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\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 let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\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, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => 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 // Remove any lingering deleted fetchers that have already been removed\n // from state.fetchers\n deletedFetchers.forEach((key) => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n deletedFetchersKeys.push(key);\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 viewTransitionOpts: opts.viewTransitionOpts,\n 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 } else {\n // We already called deleteFetcher() on these, can remove them from this\n // Set now that we've handed the keys off to the data layer\n deletedFetchersKeys.forEach((key) => deletedFetchers.delete(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 // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\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 }\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.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.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 {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\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 =\n opts?.initialHydration &&\n state.matches &&\n state.matches.length > 0 &&\n !initialMatchesIsFOW\n ? // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches\n : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\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 hydration 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 fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = 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 {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\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: updatedMatches || 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 isFogOfWar: boolean,\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 if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error: discoverResult.error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\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 state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\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, true, {\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 to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\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 isFogOfWar: boolean,\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 // 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 let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\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.v7_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 (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\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,\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\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);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\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 fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\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 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 // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): 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 return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\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 return new Map(state.fetchers);\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 abortFetcher(key);\n\n let flushSync = (opts && opts.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 let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\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 let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\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 fogOfWar.active,\n flushSync,\n preventScrollReset,\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 isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.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 true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\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 let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\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, false, {\n fetcherSubmission: submission,\n preventScrollReset,\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.v7_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 abortFetcher(staleKey);\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,\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);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\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 fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\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 isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: 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 let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\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, false, {\n preventScrollReset,\n });\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 isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n preventScrollReset?: boolean;\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 || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : 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 these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\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 these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\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 state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\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 matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\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.add(key);\n }\n abortFetcher(key);\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 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 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\n // If we opted into the flag we can clear this now since we're calling\n // deleteFetcher() at the end of updateState() and we've already handed the\n // deleted fetcher keys off to the data layer.\n // If not, we're eagerly calling deleteFetcher() and we need to keep this\n // Set populated until the next updateState call, and we'll clear\n // `deletedFetchers` then\n if (future.v7_fetcherPersist) {\n deletedFetchers.delete(key);\n }\n\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n if (!future.v7_fetcherPersist) {\n deleteFetcher(key);\n }\n } else {\n activeFetchers.set(key, count);\n }\n\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\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 handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\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 checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n if (!patchRoutesOnNavigationImpl) {\n return { type: \"success\", matches };\n }\n\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n signal,\n path: pathname,\n matches: partialMatches,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties\n );\n },\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\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 patchRoutes,\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 dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n 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 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 dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n 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 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 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 dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n 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 `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(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 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 dataStrategy\n );\n result = results[actionMatch.route.id];\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 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 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 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 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 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 dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(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 match.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 dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\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 // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\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 at/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 includeBoundary = false\n) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n initialHydration: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\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 boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\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 (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\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 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 hydration (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 initialHydration ||\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.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\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 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 shouldLoadRouteOnHydration(\n route: AgnosticDataRouteObject,\n loaderData: RouteData | null | undefined,\n errors: RouteData | null | undefined\n) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\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\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n let childrenToPatch: AgnosticDataRouteObject[];\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(\n (newRoute) =>\n !childrenToPatch.some((existingRoute) =>\n isSameRoute(newRoute, existingRoute)\n )\n );\n\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n\n childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n newRoute: AgnosticRouteObject,\n existingRoute: AgnosticRouteObject\n): boolean {\n // Most optimal check is by id\n if (\n \"id\" in newRoute &&\n \"id\" in existingRoute &&\n newRoute.id === existingRoute.id\n ) {\n return true;\n }\n\n // Second is by pathing differences\n if (\n !(\n newRoute.index === existingRoute.index &&\n newRoute.path === existingRoute.path &&\n newRoute.caseSensitive === existingRoute.caseSensitive\n )\n ) {\n return false;\n }\n\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if (\n (!newRoute.children || newRoute.children.length === 0) &&\n (!existingRoute.children || existingRoute.children.length === 0)\n ) {\n return true;\n }\n\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children!.every((aChild, i) =>\n existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\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\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\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\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: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\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 loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\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 = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\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 loadRoutePromise,\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 loadRoutePromise;\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 // DataStrategyResults 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 convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\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 if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n // Convert thrown data() to ErrorResponse instances\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n ),\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\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 if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\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 results: Record,\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 matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[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 results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\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 revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\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 message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n message?: string;\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: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\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 isPromise
red
green
cornflowerblue
#000
#fc0
#000000
#bd2300
rgb(200, 100, 0)
rgb(100%, 175%, 0%)
hsb(0.5, 0.25, 1)
hsb(0.5, 0.25, 0.5)
Here is short list of commands available, for more details see SVG path string format or article about path strings at MDN.