{"version":3,"file":"static/js/main.cbd056c7.js","mappings":"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","sources":["assets/svg/avatar.svg","assets/svg/lisapropFavicon.svg","assets/svg/menu.svg","assets/svg/menuBlack.svg","assets/svg/menuCloseBlack.svg","components/FormatDate.ts","assets/svg/down.svg","components/Navbar.tsx","../node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../node_modules/motion-utils/dist/es/memo.mjs","../node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../node_modules/motion-dom/dist/es/animation/controls/BaseGroup.mjs","../node_modules/motion-dom/dist/es/animation/controls/Group.mjs","../node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/attach-timeline.mjs","../node_modules/motion-dom/dist/es/utils/is-bezier-definition.mjs","../node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../node_modules/motion-utils/dist/es/progress.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/easing.mjs","../node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../node_modules/motion-dom/dist/es/gestures/hover.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../node_modules/motion-dom/dist/es/gestures/press/index.mjs","../node_modules/motion-utils/dist/es/time-conversion.mjs","../node_modules/motion-utils/dist/es/noop.mjs","../node_modules/framer-motion/dist/es/render/html/utils/keys-transform.mjs","../node_modules/framer-motion/dist/es/render/html/utils/keys-position.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../node_modules/framer-motion/dist/es/utils/resolve-value.mjs","../node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","../node_modules/framer-motion/dist/es/frameloop/order.mjs","../node_modules/framer-motion/dist/es/stats/buffer.mjs","../node_modules/framer-motion/dist/es/frameloop/batcher.mjs","../node_modules/framer-motion/dist/es/frameloop/render-step.mjs","../node_modules/framer-motion/dist/es/frameloop/frame.mjs","../node_modules/framer-motion/dist/es/frameloop/sync-time.mjs","../node_modules/framer-motion/dist/es/utils/array.mjs","../node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","../node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","../node_modules/framer-motion/dist/es/value/index.mjs","../node_modules/framer-motion/dist/es/render/utils/setters.mjs","../node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","../node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","../node_modules/framer-motion/dist/es/easing/back.mjs","../node_modules/framer-motion/dist/es/easing/anticipate.mjs","../node_modules/framer-motion/dist/es/easing/circ.mjs","../node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","../node_modules/framer-motion/dist/es/utils/clamp.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","../node_modules/framer-motion/dist/es/value/types/utils/sanitize.mjs","../node_modules/framer-motion/dist/es/value/types/utils/float-regex.mjs","../node_modules/framer-motion/dist/es/value/types/utils/single-color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/color/utils.mjs","../node_modules/framer-motion/dist/es/value/types/utils/is-nullish.mjs","../node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","../node_modules/framer-motion/dist/es/value/types/color/hex.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","../node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","../node_modules/framer-motion/dist/es/value/types/color/index.mjs","../node_modules/framer-motion/dist/es/value/types/utils/color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/complex/index.mjs","../node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number-browser.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/transform.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","../node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","../node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.mjs","../node_modules/motion-utils/dist/es/errors.mjs","../node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/can-animate.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.mjs","../node_modules/framer-motion/dist/es/stats/animation-count.mjs","../node_modules/framer-motion/dist/es/utils/mix/number.mjs","../node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","../node_modules/framer-motion/dist/es/utils/mix/immediate.mjs","../node_modules/framer-motion/dist/es/utils/mix/color.mjs","../node_modules/framer-motion/dist/es/utils/pipe.mjs","../node_modules/framer-motion/dist/es/utils/mix/visibility.mjs","../node_modules/framer-motion/dist/es/utils/mix/complex.mjs","../node_modules/framer-motion/dist/es/utils/mix/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/defaults.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","../node_modules/framer-motion/dist/es/easing/ease.mjs","../node_modules/framer-motion/dist/es/easing/utils/map.mjs","../node_modules/framer-motion/dist/es/utils/interpolate.mjs","../node_modules/framer-motion/dist/es/utils/offsets/default.mjs","../node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","../node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","../node_modules/framer-motion/dist/es/utils/offsets/time.mjs","../node_modules/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs","../node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs","../node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","../node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs","../node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../node_modules/framer-motion/dist/es/motion/features/animations.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../node_modules/framer-motion/dist/es/events/event-info.mjs","../node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../node_modules/framer-motion/dist/es/utils/distance.mjs","../node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs","../node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/projection/node/state.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../node_modules/framer-motion/dist/es/frameloop/microtask.mjs","../node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../node_modules/framer-motion/dist/es/utils/delay.mjs","../node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","../node_modules/framer-motion/dist/es/animation/animate/single-value.mjs","../node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../node_modules/framer-motion/dist/es/motion/features/drag.mjs","../node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../node_modules/framer-motion/dist/es/gestures/hover.mjs","../node_modules/framer-motion/dist/es/gestures/press.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../node_modules/framer-motion/dist/es/gestures/focus.mjs","../node_modules/framer-motion/dist/es/motion/features/layout.mjs","../node_modules/framer-motion/dist/es/context/LazyContext.mjs","../node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../node_modules/framer-motion/dist/es/utils/is-browser.mjs","../node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../node_modules/framer-motion/dist/es/motion/index.mjs","../node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/html/use-props.mjs","../node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../node_modules/framer-motion/dist/es/utils/use-constant.mjs","../node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/html/config-motion.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/measure.mjs","../node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","../node_modules/framer-motion/dist/es/render/components/create-factory.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","../node_modules/framer-motion/dist/es/render/store.mjs","../node_modules/framer-motion/dist/es/render/VisualElement.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../node_modules/framer-motion/dist/es/render/components/motion/create.mjs","../node_modules/react-intersection-observer/src/observe.ts","../node_modules/react-intersection-observer/src/InView.tsx","components/ScrollAnimation.tsx","../node_modules/react-intersection-observer/src/useInView.tsx","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","configurations/AxiosConfig.ts","context/AuthContext.tsx","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../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-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../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","../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/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","components/Footer.tsx","components/layouts/GrandLayout.tsx","components/sidebar/SidebarButton.tsx","assets/svg/overviewWhite.svg","assets/svg/projectsBlack.svg","assets/svg/offersBlack.svg","assets/svg/settingBlack.svg","assets/svg/overviewBlack.svg","assets/svg/projectsWhite.svg","assets/svg/offersWhite.svg","assets/svg/settingWhite.svg","assets/svg/profileUser.svg","assets/svg/profileUserWhite.svg","assets/svg/listedProjects.svg","assets/svg/trackedProjects.svg","assets/svg/monitoredProjects.svg","assets/svg/listedProjectsWhite.svg","assets/svg/trackedProjectsWhite.svg","assets/svg/monitoredProjectsWhite.svg","components/sidebar/SidebarItems.tsx","assets/svg/logout.svg","components/sidebar/Sidebar.tsx","components/Header.tsx","components/ActiveUserNavbar.tsx","components/sidebar/AdminSidebar.tsx","components/layouts/DashboardLayout.tsx","context/PrivateRoute.tsx","components/VisitorNavbar.tsx","components/layouts/VisitorLayout.tsx","context/VisitorRouter.tsx","context/AdminRouter.tsx","Routers.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"sourcesContent":["function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgAvatar(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: \"800px\",\n width: \"800px\",\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n viewBox: \"0 0 512 512\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"circle\", {\n style: {\n fill: \"#D1E5F5\"\n },\n cx: 256,\n cy: 120.889,\n r: 120.889\n }), /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#D1E5F5\"\n },\n d: \"M412.444,512c31.418,0,56.889-25.471,56.889-56.889c0-117.82-95.514-213.333-213.333-213.333 S42.667,337.291,42.667,455.111c0,31.418,25.471,56.889,56.889,56.889H412.444z\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"polygon\", {\n style: {\n fill: \"#B4D8F1\"\n },\n points: \"255.999,241.778 255.999,241.778 256,241.778 \"\n }), /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#B4D8F1\"\n },\n d: \"M376.889,120.889C376.889,54.124,322.765,0,256,0h-0.001v241.778H256 C322.765,241.778,376.889,187.654,376.889,120.889z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#B4D8F1\"\n },\n d: \"M256,241.778L256,241.778L255.999,512h156.446c31.418,0,56.889-25.471,56.889-56.889 C469.333,337.291,373.82,241.778,256,241.778z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgAvatar);\nexport default __webpack_public_path__ + \"static/media/avatar.97e2cb20b5f51cde9b44b314aa7db6a1.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _rect2, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgLisapropFavicon(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 601,\n height: 601,\n viewBox: \"0 0 601 601\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.5,\n y: 0.5,\n width: 600,\n height: 600,\n rx: 30,\n fill: \"#03045E\"\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 100.5,\n y: 100.5,\n width: 400,\n height: 400,\n fill: \"url(#pattern0_3661_1462)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0_3661_1462\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_3661_1462\",\n transform: \"scale(0.000474158)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_3661_1462\",\n width: 2109,\n height: 2109,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLisapropFavicon);\nexport default __webpack_public_path__ + \"static/media/lisapropFavicon.55789148230390dacb0d49042c11670a.svg\";\nexport { ForwardRef as ReactComponent };","var _line, _line2, _line3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgMenu(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 15,\n viewBox: \"0 0 21 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.907104,\n y1: 0.798828,\n x2: 20.5106,\n y2: 0.798828,\n stroke: \"#FFFCFC\"\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n x1: 7.44165,\n y1: 7.33337,\n x2: 20.5106,\n y2: 7.33337,\n stroke: \"#FFFCFC\"\n })), _line3 || (_line3 = /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.907104,\n y1: 13.8678,\n x2: 20.5106,\n y2: 13.8678,\n stroke: \"#FFFCFC\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMenu);\nexport default __webpack_public_path__ + \"static/media/menu.53ee3c5b869421f9f2a80a60875b767e.svg\";\nexport { ForwardRef as ReactComponent };","var _line, _line2, _line3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgMenuBlack(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 15,\n viewBox: \"0 0 21 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.907104,\n y1: 0.798828,\n x2: 20.5106,\n y2: 0.798828,\n stroke: \"#000000\"\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n x1: 7.44165,\n y1: 7.33337,\n x2: 20.5106,\n y2: 7.33337,\n stroke: \"#000000\"\n })), _line3 || (_line3 = /*#__PURE__*/React.createElement(\"line\", {\n x1: 0.907104,\n y1: 13.8678,\n x2: 20.5106,\n y2: 13.8678,\n stroke: \"#000000\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMenuBlack);\nexport default __webpack_public_path__ + \"static/media/menuBlack.f813492c39ab909f48c3d1631bd55b27.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgMenuCloseBlack(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 15,\n viewBox: \"0 0 16 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.86558 7.4917L15.4917 14.1274L14.6274 14.9917L7.9917 8.36558L1.35598 14.9917L0.491699 14.1274L7.11782 7.4917L0.491699 0.855976L1.35598 -0.00830078L7.9917 6.61782L14.6274 -0.00830078L15.4917 0.855976L8.86558 7.4917Z\",\n fill: \"#03045E\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMenuCloseBlack);\nexport default __webpack_public_path__ + \"static/media/menuCloseBlack.e56abfcd27ff5fbfdcb2ed6b8d98d0ab.svg\";\nexport { ForwardRef as ReactComponent };","export const formatDate = (dateString: Date) => {\n const date: Date = new Date(dateString);\n const day: string = String(date.getDate()).padStart(2, \"0\");\n const month: string = String(date.getMonth() + 1).padStart(2, \"0\");\n const year: number = date.getFullYear();\n const formattedDate: string = `${year}-${month}-${day}`;\n\n return formattedDate;\n};\n\nexport const parseFormattedDate = (formattedDate: string): Date => {\n const [year, month, day] = formattedDate.split(\"-\")?.map(Number);\n return new Date(year, month - 1, day);\n};\n// export const formatDate = (dateString: Date) => {\n// const date: Date = new Date(dateString);\n// const day: number = date.getDate();\n// const month: number = date.getMonth();\n// const year: number = date.getFullYear();\n// const formattedDate: string = `${year}-${month + 1}-${day}`;\n\n// return formattedDate;\n// };\n\nexport const formatDateInput = (dateString: Date) => {\n const date: Date = new Date(dateString);\n const day: number = date.getDate();\n const months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n const month: number = date.getMonth();\n const year: number = date.getFullYear();\n const formattedDate: string = `${day}/${month + 1}/${year}`;\n\n return formattedDate;\n};\n\nexport const formatDateInputHyphen = (dateString: Date) => {\n const date: Date = new Date(dateString);\n const day: number = date.getDate();\n const months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n const month: number = date.getMonth();\n const year: number = date.getFullYear();\n const formattedDate: string = `${year}-${month + 1}-${day}`;\n\n return formattedDate;\n};\n\nexport const formatDateInput2 = (dateString: Date) => {\n const date: Date = new Date(dateString);\n const options: Intl.DateTimeFormatOptions = {\n weekday: \"long\",\n day: \"2-digit\",\n month: \"long\",\n year: \"numeric\",\n };\n const formattedDate: string = date.toLocaleDateString(\"en-US\", options);\n\n return formattedDate;\n};\n\nexport const isAbove18 = (dateOfBirth: Date) => {\n const today = new Date();\n const birthDate = new Date(dateOfBirth);\n let age = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n if (\n monthDiff < 0 ||\n (monthDiff === 0 && today.getDate() < birthDate.getDate())\n ) {\n age--;\n }\n\n return age >= 18;\n};\n\nexport const formatDateScheduledTime = (dateString: string) => {\n const date = new Date(dateString);\n\n const months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n\n const getOrdinalSuffix = (day: number) => {\n if (day > 3 && day < 21) return \"th\";\n switch (day % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n };\n\n const year = date.getFullYear();\n const month = months[date.getMonth()];\n const day = date.getDate();\n const dayWithSuffix = `${day}${getOrdinalSuffix(day)}`;\n\n return `${year} ${dayWithSuffix} ${month}`;\n};\nexport const getDateDifference = (date1: any, date2: any) => {\n const startDate: any = new Date(date1);\n const endDate: any = new Date(date2);\n\n const timeDifference = endDate - startDate;\n\n const millisecondsInDay = 1000 * 60 * 60 * 24;\n let daysDifference = Math.floor(timeDifference / millisecondsInDay);\n\n // Adjust for same-day condition\n if (daysDifference === 0) {\n return \"1 day\";\n }\n\n if (daysDifference < 7) {\n return `${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"}`;\n }\n\n const weeksDifference = Math.floor(daysDifference / 7);\n daysDifference %= 7; // Remaining days after weeks\n\n if (weeksDifference < 4) {\n return `${weeksDifference} week${weeksDifference > 1 ? \"s\" : \"\"}${\n daysDifference > 0\n ? ` ${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"}`\n : \"\"\n }`;\n }\n\n const startYear = startDate.getFullYear();\n const endYear = endDate.getFullYear();\n const startMonth = startDate.getMonth();\n const endMonth = endDate.getMonth();\n\n let monthsDifference = (endYear - startYear) * 12 + (endMonth - startMonth);\n if (endDate.getDate() < startDate.getDate()) {\n monthsDifference--;\n }\n\n if (monthsDifference < 12) {\n return `${monthsDifference} month${monthsDifference > 1 ? \"s\" : \"\"}${\n daysDifference > 0\n ? ` ${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"}`\n : \"\"\n }`;\n }\n\n let yearsDifference = endYear - startYear;\n if (\n endMonth < startMonth ||\n (endMonth === startMonth && endDate.getDate() < startDate.getDate())\n ) {\n yearsDifference--;\n }\n\n monthsDifference %= 12; // Remaining months after years\n\n return `${yearsDifference} year${yearsDifference > 1 ? \"s\" : \"\"}${\n monthsDifference > 0\n ? ` ${monthsDifference} month${monthsDifference > 1 ? \"s\" : \"\"}`\n : \"\"\n }${\n daysDifference > 0\n ? ` ${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"}`\n : \"\"\n }`;\n};\n\nexport const formatTableDate = (dateString: string) => {\n // Create a Date object from the string\n const date = new Date(dateString);\n\n // Get month name (using zero-based indexing, so adjust by 1)\n const month = date.toLocaleString(\"default\", { month: \"long\" }).slice(0, 3);\n\n // Get day\n const day = date.getDate().toString().padStart(2, \"0\"); // Pad with leading zero if needed\n\n // Get year\n const year = date.getFullYear();\n\n // Format the date string\n return `${day} ${month} ${year}`;\n};\n\nexport const formatDateDob = (dateString: string) => {\n const date = new Date(dateString);\n const day = String(date.getDate()).padStart(2, \"0\");\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // months are zero-indexed\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n};\n\nexport const formatFileSize = (sizeInBytes: number) => {\n if (sizeInBytes < 1024) {\n return `${sizeInBytes} bytes`;\n } else if (sizeInBytes < 1024 * 1024) {\n return `${(sizeInBytes / 1024).toFixed(2)} KB`;\n } else if (sizeInBytes < 1024 * 1024 * 1024) {\n return `${(sizeInBytes / (1024 * 1024)).toFixed(2)} MB`;\n } else {\n return `${(sizeInBytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n }\n};\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\nimport * as React from \"react\";\nfunction SvgDown(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.1663 8.3335L12.7103 9.80264C11.549 10.9742 10.9684 11.5601 10.2608 11.6503C10.0874 11.6724 9.91195 11.6724 9.73856 11.6503C9.0309 11.5601 8.4503 10.9742 7.2891 9.80264L5.83301 8.3335\",\n stroke: \"#333333\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDown);\nexport default __webpack_public_path__ + \"static/media/down.9b9c1c066e21fd87392b1aaeb414e34a.svg\";\nexport { ForwardRef as ReactComponent };","import { useState, useRef, useEffect } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport avatar from \"assets/svg/avatar.svg\";\nimport down from \"assets/svg/down.svg\";\nimport menu from \"assets/svg/menu.svg\";\nimport menuCloseBlack from \"assets/svg/menuCloseBlack.svg\";\nimport menuBlack from \"assets/svg/menuBlack.svg\";\nimport lisapropLogo from \"assets/png/LisapropLogo.png\";\nimport { formatDateInput2 } from \"components/FormatDate\";\nimport { useAuth } from \"context/AuthContext\";\n\nconst Navbar = () => {\n const { user } = useAuth();\n const navigate = useNavigate();\n const location = useLocation();\n const navRef = useRef(null);\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n const theStoredToken = localStorage.getItem(\"accessToken\");\n const dropdownRef = useRef(null);\n const [showProfileDropdown, setShowProfileDropdown] = useState(false);\n\n useEffect(() => {\n const handleOutsideClick = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setShowProfileDropdown(false);\n }\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setShowProfileDropdown(false);\n }\n };\n\n document.addEventListener(\"click\", handleOutsideClick);\n document.addEventListener(\"keydown\", handleEscapeKey);\n return () => {\n document.removeEventListener(\"click\", handleOutsideClick);\n document.removeEventListener(\"keydown\", handleEscapeKey);\n };\n }, []);\n\n const navbarLinks = [\n { name: \"Home\", nav: \"/\" },\n { name: \"About\", nav: \"/about-us\" },\n { name: \"Solutions\", nav: \"/solutions\" },\n { name: \"Contact Us\", nav: \"/contact-us\" },\n ];\n\n return (\n <>\n {!showMobileMenu && (\n \n {\n navigate(\"/\");\n setShowMobileMenu(false);\n }}\n className=\" cursor-pointer \"\n >\n \n \n\n
\n \n
\n
\n \n {!theStoredToken ? (\n <>\n \n navigate(\"/sign-up\")}\n >\n Get Started\n \n \n ) : (\n <>\n
\n

\n {user?.firstName}\n

\n

\n {user?.role === \"owner\"\n ? \"Property Owner\"\n : user?.role === \"developer\"\n ? \"Property Developer\"\n : user?.role === \"admin\"\n ? \"Admin\"\n : \"\"}\n

\n
\n navigate(\"/dashboard\")}\n >\n \n \n setShowProfileDropdown(!showProfileDropdown)}\n >\n \n \n \n )}\n
\n \n\n {!showMobileMenu || location.pathname !== \"/\" ? (\n setShowMobileMenu(true)}\n className=\"md:hidden flex \"\n >\n \"menu\"\n \n ) : !showMobileMenu || location.pathname !== \"/\" ? (\n setShowMobileMenu(true)}\n className=\"md:hidden flex \"\n >\n \"menu\"\n \n ) : null}\n {showProfileDropdown && (\n
\n {\n navigate(\"/profile\");\n setShowProfileDropdown(false);\n }}\n className=\"py-1 text-[14px] w-full text-start hover:bg-[#EFEFEF] rounded-[4px] px-3 cursor-pointer \"\n >\n Profile\n \n {\n localStorage.clear();\n navigate(\"/\");\n setShowProfileDropdown(false);\n }}\n className=\"py-1 text-[14px] text-red-500 w-full text-start hover:bg-[#EFEFEF] rounded-[4px] px-3 cursor-pointer \"\n >\n Log out\n \n
\n )}\n \n )}\n\n {showMobileMenu && (\n \n
\n \n setShowMobileMenu(false)}\n className=\"md:hidden flex border-[1px] border-[#03045E] rounded-full p-2 \"\n >\n \"menu\"\n \n
\n\n
\n \n {!theStoredToken && (\n
\n {\n navigate(\"/login\");\n setShowMobileMenu(false);\n }}\n className=\" text-primary \"\n >\n Login\n \n
\n {\n navigate(\"/sign-up\");\n setShowMobileMenu(false);\n }}\n className=\"w-[40%] h-[45px] bg-primary rounded-[4px] border-[1px] text-white transition-all duration-500 ease-in-out \"\n >\n Get Started\n \n
\n
\n )}\n {theStoredToken && (\n
\n {\n navigate(\"/dashboard\");\n setShowMobileMenu(false);\n }}\n className=\"w-[40%] h-[45px] bg-primary rounded-[4px] border-[1px] text-white transition-all duration-500 ease-in-out \"\n >\n Profile\n \n
\n )}\n
\n \n )}\n \n );\n};\n\nexport default Navbar;\n","import { warnOnce } from '../../utils/warn-once.mjs';\n\nfunction createDOMMotionComponentProxy(componentFactory) {\n if (typeof Proxy === \"undefined\") {\n return componentFactory;\n }\n /**\n * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n * Rather than generating them anew every render.\n */\n const componentCache = new Map();\n const deprecatedFactoryFunction = (...args) => {\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(false, \"motion() is deprecated. Use motion.create() instead.\");\n }\n return componentFactory(...args);\n };\n return new Proxy(deprecatedFactoryFunction, {\n /**\n * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n * The prop name is passed through as `key` and we can use that to generate a `motion`\n * DOM component with that name.\n */\n get: (_target, key) => {\n if (key === \"create\")\n return componentFactory;\n /**\n * If this element doesn't exist in the component cache, create it and cache.\n */\n if (!componentCache.has(key)) {\n componentCache.set(key, componentFactory(key));\n }\n return componentCache.get(key);\n },\n });\n}\n\nexport { createDOMMotionComponentProxy };\n","function isAnimationControls(v) {\n return (v !== null &&\n typeof v === \"object\" &&\n typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n","function getValueState(visualElement) {\n const state = [{}, {}];\n visualElement === null || visualElement === void 0 ? void 0 : visualElement.values.forEach((value, key) => {\n state[0][key] = value.get();\n state[1][key] = value.getVelocity();\n });\n return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n /**\n * If the variant definition is a variant label, or\n * the function returned a variant label, resolve.\n */\n if (typeof definition === \"string\") {\n definition = props.variants && props.variants[definition];\n }\n /**\n * At this point we've resolved both functions and variant labels,\n * but the resolved variant label might itself have been a function.\n * If so, resolve. This can only have returned a valid target object.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n return definition;\n}\n\nexport { resolveVariantFromProps };\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\nexport { memo };\n","import { memo } from 'motion-utils';\n\nconst supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);\n\nexport { supportsScrollTimeline };\n","import { supportsScrollTimeline } from '../../utils/supports/scroll-timeline.mjs';\n\nclass BaseGroupPlaybackControls {\n constructor(animations) {\n // Bound to accomodate common `return animation.stop` pattern\n this.stop = () => this.runAll(\"stop\");\n this.animations = animations.filter(Boolean);\n }\n get finished() {\n // Support for new finished Promise and legacy thennable API\n return Promise.all(this.animations.map((animation) => \"finished\" in animation ? animation.finished : animation));\n }\n /**\n * TODO: Filter out cancelled or stopped animations before returning\n */\n getAll(propName) {\n return this.animations[0][propName];\n }\n setAll(propName, newValue) {\n for (let i = 0; i < this.animations.length; i++) {\n this.animations[i][propName] = newValue;\n }\n }\n attachTimeline(timeline, fallback) {\n const subscriptions = this.animations.map((animation) => {\n if (supportsScrollTimeline() && animation.attachTimeline) {\n return animation.attachTimeline(timeline);\n }\n else if (typeof fallback === \"function\") {\n return fallback(animation);\n }\n });\n return () => {\n subscriptions.forEach((cancel, i) => {\n cancel && cancel();\n this.animations[i].stop();\n });\n };\n }\n get time() {\n return this.getAll(\"time\");\n }\n set time(time) {\n this.setAll(\"time\", time);\n }\n get speed() {\n return this.getAll(\"speed\");\n }\n set speed(speed) {\n this.setAll(\"speed\", speed);\n }\n get startTime() {\n return this.getAll(\"startTime\");\n }\n get duration() {\n let max = 0;\n for (let i = 0; i < this.animations.length; i++) {\n max = Math.max(max, this.animations[i].duration);\n }\n return max;\n }\n runAll(methodName) {\n this.animations.forEach((controls) => controls[methodName]());\n }\n flatten() {\n this.runAll(\"flatten\");\n }\n play() {\n this.runAll(\"play\");\n }\n pause() {\n this.runAll(\"pause\");\n }\n cancel() {\n this.runAll(\"cancel\");\n }\n complete() {\n this.runAll(\"complete\");\n }\n}\n\nexport { BaseGroupPlaybackControls };\n","import { BaseGroupPlaybackControls } from './BaseGroup.mjs';\n\n/**\n * TODO: This is a temporary class to support the legacy\n * thennable API\n */\nclass GroupPlaybackControls extends BaseGroupPlaybackControls {\n then(onResolve, onReject) {\n return Promise.all(this.animations).then(onResolve).catch(onReject);\n }\n}\n\nexport { GroupPlaybackControls };\n","function getValueTransition(transition, key) {\n return transition\n ? transition[key] ||\n transition[\"default\"] ||\n transition\n : undefined;\n}\n\nexport { getValueTransition };\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n let duration = 0;\n const timeStep = 50;\n let state = generator.next(duration);\n while (!state.done && duration < maxGeneratorDuration) {\n duration += timeStep;\n state = generator.next(duration);\n }\n return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n","function isGenerator(type) {\n return typeof type === \"function\";\n}\n\nexport { isGenerator };\n","function attachTimeline(animation, timeline) {\n animation.timeline = timeline;\n animation.onfinish = null;\n}\n\nexport { attachTimeline };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {\n linearEasing: undefined,\n};\n\nexport { supportsFlags };\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n const memoized = memo(callback);\n return () => { var _a; return (_a = supportsFlags[supportsFlag]) !== null && _a !== void 0 ? _a : memoized(); };\n}\n\nexport { memoSupports };\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n try {\n document\n .createElement(\"div\")\n .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n","/*\n Progress within given range\n\n Given a lower limit and an upper limit, we return the progress\n (expressed as a number 0-1) represented by the given value, and\n limit that progress to within 0-1.\n\n @param [number]: Lower limit\n @param [number]: Upper limit\n @param [number]: Value to find progress within given range\n @return [number]: Progress of value within range as expressed 0-1\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","import { progress } from 'motion-utils';\n\nconst generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n let points = \"\";\n const numPoints = Math.max(Math.round(duration / resolution), 2);\n for (let i = 0; i < numPoints; i++) {\n points += easing(progress(0, numPoints - 1, i)) + \", \";\n }\n return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n","import { isBezierDefinition } from '../../../utils/is-bezier-definition.mjs';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from './linear.mjs';\n\nfunction isWaapiSupportedEasing(easing) {\n return Boolean((typeof easing === \"function\" && supportsLinearEasing()) ||\n !easing ||\n (typeof easing === \"string\" &&\n (easing in supportedWaapiEasing || supportsLinearEasing())) ||\n isBezierDefinition(easing) ||\n (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing, duration) {\n if (!easing) {\n return undefined;\n }\n else if (typeof easing === \"function\" && supportsLinearEasing()) {\n return generateLinearEasing(easing, duration);\n }\n else if (isBezierDefinition(easing)) {\n return cubicBezierAsString(easing);\n }\n else if (Array.isArray(easing)) {\n return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n supportedWaapiEasing.easeOut);\n }\n else {\n return supportedWaapiEasing[easing];\n }\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","const isDragging = {\n x: false,\n y: false,\n};\nfunction isDragActive() {\n return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n const elements = resolveElements(elementOrSelector);\n const gestureAbortController = new AbortController();\n const eventOptions = {\n passive: true,\n ...options,\n signal: gestureAbortController.signal,\n };\n const cancel = () => gestureAbortController.abort();\n return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n var _a;\n if (elementOrSelector instanceof Element) {\n return [elementOrSelector];\n }\n else if (typeof elementOrSelector === \"string\") {\n let root = document;\n if (scope) {\n // TODO: Refactor to utils package\n // invariant(\n // Boolean(scope.current),\n // \"Scope provided, but no element detected.\"\n // )\n root = scope.current;\n }\n const elements = (_a = selectorCache === null || selectorCache === void 0 ? void 0 : selectorCache[elementOrSelector]) !== null && _a !== void 0 ? _a : root.querySelectorAll(elementOrSelector);\n return elements ? Array.from(elements) : [];\n }\n return Array.from(elementOrSelector);\n}\n\nexport { resolveElements };\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\nfunction isValidHover(event) {\n return !(event.pointerType === \"touch\" || isDragActive());\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n const onPointerEnter = (enterEvent) => {\n if (!isValidHover(enterEvent))\n return;\n const { target } = enterEvent;\n const onHoverEnd = onHoverStart(target, enterEvent);\n if (typeof onHoverEnd !== \"function\" || !target)\n return;\n const onPointerLeave = (leaveEvent) => {\n if (!isValidHover(leaveEvent))\n return;\n onHoverEnd(leaveEvent);\n target.removeEventListener(\"pointerleave\", onPointerLeave);\n };\n target.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n };\n elements.forEach((element) => {\n element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n });\n return cancel;\n}\n\nexport { hover };\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n if (!child) {\n return false;\n }\n else if (parent === child) {\n return true;\n }\n else {\n return isNodeOrChild(parent, child.parentElement);\n }\n};\n\nexport { isNodeOrChild };\n","const isPrimaryPointer = (event) => {\n if (event.pointerType === \"mouse\") {\n return typeof event.button !== \"number\" || event.button <= 0;\n }\n else {\n /**\n * isPrimary is true for all mice buttons, whereas every touch point\n * is regarded as its own input. So subsequent concurrent touch points\n * will be false.\n *\n * Specifically match against false here as incomplete versions of\n * PointerEvents in very old browser might have it set as undefined.\n */\n return event.isPrimary !== false;\n }\n};\n\nexport { isPrimaryPointer };\n","const focusableElements = new Set([\n \"BUTTON\",\n \"INPUT\",\n \"SELECT\",\n \"TEXTAREA\",\n \"A\",\n]);\nfunction isElementKeyboardAccessible(element) {\n return (focusableElements.has(element.tagName) ||\n element.tabIndex !== -1);\n}\n\nexport { isElementKeyboardAccessible };\n","const isPressing = new WeakSet();\n\nexport { isPressing };\n","import { isPressing } from './state.mjs';\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback) {\n return (event) => {\n if (event.key !== \"Enter\")\n return;\n callback(event);\n };\n}\nfunction firePointerEvent(target, type) {\n target.dispatchEvent(new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true }));\n}\nconst enableKeyboardPress = (focusEvent, eventOptions) => {\n const element = focusEvent.currentTarget;\n if (!element)\n return;\n const handleKeydown = filterEvents(() => {\n if (isPressing.has(element))\n return;\n firePointerEvent(element, \"down\");\n const handleKeyup = filterEvents(() => {\n firePointerEvent(element, \"up\");\n });\n const handleBlur = () => firePointerEvent(element, \"cancel\");\n element.addEventListener(\"keyup\", handleKeyup, eventOptions);\n element.addEventListener(\"blur\", handleBlur, eventOptions);\n });\n element.addEventListener(\"keydown\", handleKeydown, eventOptions);\n /**\n * Add an event listener that fires on blur to remove the keydown events.\n */\n element.addEventListener(\"blur\", () => element.removeEventListener(\"keydown\", handleKeydown), eventOptions);\n};\n\nexport { enableKeyboardPress };\n","import { isDragActive } from '../drag/state/is-active.mjs';\nimport { isNodeOrChild } from '../utils/is-node-or-child.mjs';\nimport { isPrimaryPointer } from '../utils/is-primary-pointer.mjs';\nimport { setupGesture } from '../utils/setup.mjs';\nimport { isElementKeyboardAccessible } from './utils/is-keyboard-accessible.mjs';\nimport { enableKeyboardPress } from './utils/keyboard.mjs';\nimport { isPressing } from './utils/state.mjs';\n\n/**\n * Filter out events that are not primary pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction isValidPressEvent(event) {\n return isPrimaryPointer(event) && !isDragActive();\n}\n/**\n * Create a press gesture.\n *\n * Press is different to `\"pointerdown\"`, `\"pointerup\"` in that it\n * automatically filters out secondary pointer events like right\n * click and multitouch.\n *\n * It also adds accessibility support for keyboards, where\n * an element with a press gesture will receive focus and\n * trigger on Enter `\"keydown\"` and `\"keyup\"` events.\n *\n * This is different to a browser's `\"click\"` event, which does\n * respond to keyboards but only for the `\"click\"` itself, rather\n * than the press start and end/cancel. The element also needs\n * to be focusable for this to work, whereas a press gesture will\n * make an element focusable by default.\n *\n * @public\n */\nfunction press(elementOrSelector, onPressStart, options = {}) {\n const [elements, eventOptions, cancelEvents] = setupGesture(elementOrSelector, options);\n const startPress = (startEvent) => {\n const element = startEvent.currentTarget;\n if (!isValidPressEvent(startEvent) || isPressing.has(element))\n return;\n isPressing.add(element);\n const onPressEnd = onPressStart(element, startEvent);\n const onPointerEnd = (endEvent, success) => {\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerCancel);\n if (!isValidPressEvent(endEvent) || !isPressing.has(element)) {\n return;\n }\n isPressing.delete(element);\n if (typeof onPressEnd === \"function\") {\n onPressEnd(endEvent, { success });\n }\n };\n const onPointerUp = (upEvent) => {\n onPointerEnd(upEvent, options.useGlobalTarget ||\n isNodeOrChild(element, upEvent.target));\n };\n const onPointerCancel = (cancelEvent) => {\n onPointerEnd(cancelEvent, false);\n };\n window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n window.addEventListener(\"pointercancel\", onPointerCancel, eventOptions);\n };\n elements.forEach((element) => {\n if (!isElementKeyboardAccessible(element) &&\n element.getAttribute(\"tabindex\") === null) {\n element.tabIndex = 0;\n }\n const target = options.useGlobalTarget ? window : element;\n target.addEventListener(\"pointerdown\", startPress, eventOptions);\n element.addEventListener(\"focus\", (event) => enableKeyboardPress(event, eventOptions), eventOptions);\n });\n return cancelEvents;\n}\n\nexport { press };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n \"transformPerspective\",\n \"x\",\n \"y\",\n \"z\",\n \"translateX\",\n \"translateY\",\n \"translateZ\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skew\",\n \"skewX\",\n \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n */\nconst transformProps = new Set(transformPropOrder);\n\nexport { transformPropOrder, transformProps };\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n","const isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';\n\nconst isCustomValue = (v) => {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nexport { isCustomValue, resolveFinalValueInKeyframes };\n","const MotionGlobalConfig = {\n skipAnimations: false,\n useManualTiming: false,\n};\n\nexport { MotionGlobalConfig };\n","const stepsOrder = [\n \"read\", // Read\n \"resolveKeyframes\", // Write/Read/Write/Read\n \"update\", // Compute\n \"preRender\", // Compute\n \"render\", // Write\n \"postRender\", // Compute\n];\n\nexport { stepsOrder };\n","const statsBuffer = {\n value: null,\n addProjectionMetrics: null,\n};\n\nexport { statsBuffer };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { stepsOrder } from './order.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n const flagRunNextFrame = () => (runNextFrame = true);\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(flagRunNextFrame, allowKeepAlive ? key : undefined);\n return acc;\n }, {});\n const { read, resolveKeyframes, update, preRender, render, postRender } = steps;\n const processBatch = () => {\n const timestamp = MotionGlobalConfig.useManualTiming\n ? state.timestamp\n : performance.now();\n runNextFrame = false;\n if (!MotionGlobalConfig.useManualTiming) {\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n }\n state.timestamp = timestamp;\n state.isProcessing = true;\n // Unrolled render loop for better per-frame performance\n read.process(state);\n resolveKeyframes.process(state);\n update.process(state);\n preRender.process(state);\n render.process(state);\n postRender.process(state);\n state.isProcessing = false;\n if (runNextFrame && allowKeepAlive) {\n useDefaultElapsed = false;\n scheduleNextBatch(processBatch);\n }\n };\n const wake = () => {\n runNextFrame = true;\n useDefaultElapsed = true;\n if (!state.isProcessing) {\n scheduleNextBatch(processBatch);\n }\n };\n const schedule = stepsOrder.reduce((acc, key) => {\n const step = steps[key];\n acc[key] = (process, keepAlive = false, immediate = false) => {\n if (!runNextFrame)\n wake();\n return step.schedule(process, keepAlive, immediate);\n };\n return acc;\n }, {});\n const cancel = (process) => {\n for (let i = 0; i < stepsOrder.length; i++) {\n steps[stepsOrder[i]].cancel(process);\n }\n };\n return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher };\n","import { statsBuffer } from '../stats/buffer.mjs';\n\nfunction createRenderStep(runNextFrame, stepName) {\n /**\n * We create and reuse two queues, one to queue jobs for the current frame\n * and one for the next. We reuse to avoid triggering GC after x frames.\n */\n let thisFrame = new Set();\n let nextFrame = new Set();\n /**\n * Track whether we're currently processing jobs in this step. This way\n * we can decide whether to schedule new jobs for this frame or next.\n */\n let isProcessing = false;\n let flushNextFrame = false;\n /**\n * A set of processes which were marked keepAlive when scheduled.\n */\n const toKeepAlive = new WeakSet();\n let latestFrameData = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n let numCalls = 0;\n function triggerCallback(callback) {\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n numCalls++;\n callback(latestFrameData);\n }\n const step = {\n /**\n * Schedule a process to run on the next frame.\n */\n schedule: (callback, keepAlive = false, immediate = false) => {\n const addToCurrentFrame = immediate && isProcessing;\n const queue = addToCurrentFrame ? thisFrame : nextFrame;\n if (keepAlive)\n toKeepAlive.add(callback);\n if (!queue.has(callback))\n queue.add(callback);\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.delete(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (frameData) => {\n latestFrameData = frameData;\n /**\n * If we're already processing we've probably been triggered by a flushSync\n * inside an existing process. Instead of executing, mark flushNextFrame\n * as true and ensure we flush the following frame at the end of this one.\n */\n if (isProcessing) {\n flushNextFrame = true;\n return;\n }\n isProcessing = true;\n [thisFrame, nextFrame] = [nextFrame, thisFrame];\n // Execute this frame\n thisFrame.forEach(triggerCallback);\n /**\n * If we're recording stats then\n */\n if (stepName && statsBuffer.value) {\n statsBuffer.value.frameloop[stepName].push(numCalls);\n }\n numCalls = 0;\n // Clear the frame so no callbacks remain. This is to avoid\n // memory leaks should this render step not run for a while.\n thisFrame.clear();\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n now: () => {\n if (now === undefined) {\n time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n ? frameData.timestamp\n : performance.now());\n }\n return now;\n },\n set: (newTime) => {\n now = newTime;\n queueMicrotask(clearTime);\n },\n};\n\nexport { time };\n","function addUniqueItem(arr, item) {\n if (arr.indexOf(item) === -1)\n arr.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n if (index > -1)\n arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n if (startIndex >= 0 && startIndex < arr.length) {\n const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n const [item] = arr.splice(fromIndex, 1);\n arr.splice(endIndex, 0, item);\n }\n return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n constructor() {\n this.subscriptions = [];\n }\n add(handler) {\n addUniqueItem(this.subscriptions, handler);\n return () => removeItem(this.subscriptions, handler);\n }\n notify(a, b, c) {\n const numSubscriptions = this.subscriptions.length;\n if (!numSubscriptions)\n return;\n if (numSubscriptions === 1) {\n /**\n * If there's only a single handler we can just call it without invoking a loop.\n */\n this.subscriptions[0](a, b, c);\n }\n else {\n for (let i = 0; i < numSubscriptions; i++) {\n /**\n * Check whether the handler exists before firing as it's possible\n * the subscriptions were modified during this loop running.\n */\n const handler = this.subscriptions[i];\n handler && handler(a, b, c);\n }\n }\n }\n getSize() {\n return this.subscriptions.length;\n }\n clear() {\n this.subscriptions.length = 0;\n }\n}\n\nexport { SubscriptionManager };\n","/*\n Convert velocity into velocity per second\n\n @param [number]: Unit per frame\n @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n","import { time } from '../frameloop/sync-time.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n /**\n * @param init - The initiating value\n * @param config - Optional configuration options\n *\n * - `transformer`: A function to transform incoming values with.\n *\n * @internal\n */\n constructor(init, options = {}) {\n /**\n * This will be replaced by the build step with the latest version number.\n * When MotionValues are provided to motion components, warn if versions are mixed.\n */\n this.version = \"12.4.2\";\n /**\n * Tracks whether this value can output a velocity. Currently this is only true\n * if the value is numerical, but we might be able to widen the scope here and support\n * other value types.\n *\n * @internal\n */\n this.canTrackVelocity = null;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v, render = true) => {\n const currentTime = time.now();\n /**\n * If we're updating the value during another frame or eventloop\n * than the previous frame, then the we set the previous frame value\n * to current.\n */\n if (this.updatedAt !== currentTime) {\n this.setPrevFrameValue();\n }\n this.prev = this.current;\n this.setCurrent(v);\n // Update update subscribers\n if (this.current !== this.prev && this.events.change) {\n this.events.change.notify(this.current);\n }\n // Update render subscribers\n if (render && this.events.renderRequest) {\n this.events.renderRequest.notify(this.current);\n }\n };\n this.hasAnimated = false;\n this.setCurrent(init);\n this.owner = options.owner;\n }\n setCurrent(current) {\n this.current = current;\n this.updatedAt = time.now();\n if (this.canTrackVelocity === null && current !== undefined) {\n this.canTrackVelocity = isFloat(this.current);\n }\n }\n setPrevFrameValue(prevFrameValue = this.current) {\n this.prevFrameValue = prevFrameValue;\n this.prevUpdatedAt = this.updatedAt;\n }\n /**\n * Adds a function that will be notified when the `MotionValue` is updated.\n *\n * It returns a function that, when called, will cancel the subscription.\n *\n * When calling `onChange` inside a React component, it should be wrapped with the\n * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n * from the `useEffect` function to ensure you don't add duplicate subscribers..\n *\n * ```jsx\n * export const MyComponent = () => {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.on(\"change\", updateOpacity)\n * const unsubscribeY = y.on(\"change\", updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @param subscriber - A function that receives the latest value.\n * @returns A function that, when called, will cancel this subscription.\n *\n * @deprecated\n */\n onChange(subscription) {\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n }\n return this.on(\"change\", subscription);\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n const unsubscribe = this.events[eventName].add(callback);\n if (eventName === \"change\") {\n return () => {\n unsubscribe();\n /**\n * If we have no more change listeners by the start\n * of the next frame, stop active animations.\n */\n frame.read(() => {\n if (!this.events.change.getSize()) {\n this.stop();\n }\n });\n };\n }\n return unsubscribe;\n }\n clearListeners() {\n for (const eventManagers in this.events) {\n this.events[eventManagers].clear();\n }\n }\n /**\n * Attaches a passive effect to the `MotionValue`.\n *\n * @internal\n */\n attach(passiveEffect, stopPassiveEffect) {\n this.passiveEffect = passiveEffect;\n this.stopPassiveEffect = stopPassiveEffect;\n }\n /**\n * Sets the state of the `MotionValue`.\n *\n * @remarks\n *\n * ```jsx\n * const x = useMotionValue(0)\n * x.set(10)\n * ```\n *\n * @param latest - Latest value to set.\n * @param render - Whether to notify render subscribers. Defaults to `true`\n *\n * @public\n */\n set(v, render = true) {\n if (!render || !this.passiveEffect) {\n this.updateAndNotify(v, render);\n }\n else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n }\n setWithVelocity(prev, current, delta) {\n this.set(current);\n this.prev = undefined;\n this.prevFrameValue = prev;\n this.prevUpdatedAt = this.updatedAt - delta;\n }\n /**\n * Set the state of the `MotionValue`, stopping any active animations,\n * effects, and resets velocity to `0`.\n */\n jump(v, endAnimation = true) {\n this.updateAndNotify(v);\n this.prev = v;\n this.prevUpdatedAt = this.prevFrameValue = undefined;\n endAnimation && this.stop();\n if (this.stopPassiveEffect)\n this.stopPassiveEffect();\n }\n /**\n * Returns the latest state of `MotionValue`\n *\n * @returns - The latest state of `MotionValue`\n *\n * @public\n */\n get() {\n if (collectMotionValues.current) {\n collectMotionValues.current.push(this);\n }\n return this.current;\n }\n /**\n * @public\n */\n getPrevious() {\n return this.prev;\n }\n /**\n * Returns the latest velocity of `MotionValue`\n *\n * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n *\n * @public\n */\n getVelocity() {\n const currentTime = time.now();\n if (!this.canTrackVelocity ||\n this.prevFrameValue === undefined ||\n currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n return 0;\n }\n const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n // Casts because of parseFloat's poor typing\n return velocityPerSecond(parseFloat(this.current) -\n parseFloat(this.prevFrameValue), delta);\n }\n /**\n * Registers a new animation to control this `MotionValue`. Only one\n * animation can drive a `MotionValue` at one time.\n *\n * ```jsx\n * value.start()\n * ```\n *\n * @param animation - A function that starts the provided animation\n *\n * @internal\n */\n start(startAnimation) {\n this.stop();\n return new Promise((resolve) => {\n this.hasAnimated = true;\n this.animation = startAnimation(resolve);\n if (this.events.animationStart) {\n this.events.animationStart.notify();\n }\n }).then(() => {\n if (this.events.animationComplete) {\n this.events.animationComplete.notify();\n }\n this.clearAnimation();\n });\n }\n /**\n * Stop the currently active animation.\n *\n * @public\n */\n stop() {\n if (this.animation) {\n this.animation.stop();\n if (this.events.animationCancel) {\n this.events.animationCancel.notify();\n }\n }\n this.clearAnimation();\n }\n /**\n * Returns `true` if this value is currently animating.\n *\n * @public\n */\n isAnimating() {\n return !!this.animation;\n }\n clearAnimation() {\n delete this.animation;\n }\n /**\n * Destroy and clean up subscribers to this `MotionValue`.\n *\n * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n * created a `MotionValue` via the `motionValue` function.\n *\n * @public\n */\n destroy() {\n this.clearListeners();\n this.stop();\n if (this.stopPassiveEffect) {\n this.stopPassiveEffect();\n }\n }\n}\nfunction motionValue(init, options) {\n return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n","import { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n if (visualElement.hasValue(key)) {\n visualElement.getValue(key).set(value);\n }\n else {\n visualElement.addValue(key, motionValue(value));\n }\n}\nfunction setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\n\nexport { setTarget };\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n","import { isWillChangeMotionValue } from './is.mjs';\n\nfunction addValueToWillChange(visualElement, key) {\n const willChange = visualElement.getValue(\"willChange\");\n /**\n * It could be that a user has set willChange to a regular MotionValue,\n * in which case we can't add the value to it.\n */\n if (isWillChangeMotionValue(willChange)) {\n return willChange.add(key);\n }\n}\n\nexport { addValueToWillChange };\n","import { isMotionValue } from '../utils/is-motion-value.mjs';\n\nfunction isWillChangeMotionValue(value) {\n return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n return visualElement.props[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n","const instantAnimationState = {\n current: false,\n};\n\nexport { instantAnimationState };\n","import { noop } from 'motion-utils';\n\n/*\n Bezier function generator\n This has been modified from Gaëtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticiably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noop;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n","const clamp = (min, max, v) => {\n if (v > max)\n return max;\n if (v < min)\n return min;\n return v;\n};\n\nexport { clamp };\n","import { clamp } from '../../../utils/clamp.mjs';\n\nconst number = {\n test: (v) => typeof v === \"number\",\n parse: parseFloat,\n transform: (v) => v,\n};\nconst alpha = {\n ...number,\n transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n ...number,\n default: 1,\n};\n\nexport { alpha, number, scale };\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n return Boolean((typeof v === \"string\" &&\n singleColorRegex.test(v) &&\n v.startsWith(type)) ||\n (testProp &&\n !isNullish(v) &&\n Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (typeof v !== \"string\")\n return v;\n const [a, b, c, alpha] = v.match(floatRegex);\n return {\n [aName]: parseFloat(a),\n [bName]: parseFloat(b),\n [cName]: parseFloat(c),\n alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n };\n};\n\nexport { isColorString, splitColor };\n","function isNullish(v) {\n return v == null;\n}\n\nexport { isNullish };\n","import { clamp } from '../../../utils/clamp.mjs';\nimport { alpha, number } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n ...number,\n transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n rgbUnit.transform(red) +\n \", \" +\n rgbUnit.transform(green) +\n \", \" +\n rgbUnit.transform(blue) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\",\n};\n\nexport { rgbUnit, rgba };\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n let r = \"\";\n let g = \"\";\n let b = \"\";\n let a = \"\";\n // If we have 6 characters, ie #FF0000\n if (v.length > 5) {\n r = v.substring(1, 3);\n g = v.substring(3, 5);\n b = v.substring(5, 7);\n a = v.substring(7, 9);\n // Or we have 3 characters, ie #F00\n }\n else {\n r = v.substring(1, 2);\n g = v.substring(2, 3);\n b = v.substring(3, 4);\n a = v.substring(4, 5);\n r += r;\n g += g;\n b += b;\n a += a;\n }\n return {\n red: parseInt(r, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: a ? parseInt(a, 16) / 255 : 1,\n };\n}\nconst hex = {\n test: /*@__PURE__*/ isColorString(\"#\"),\n parse: parseHex,\n transform: rgba.transform,\n};\n\nexport { hex };\n","const createUnitType = (unit) => ({\n test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = {\n ...percent,\n parse: (v) => percent.parse(v) / 100,\n transform: (v) => percent.transform(v * 100),\n};\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n return (\"hsla(\" +\n Math.round(hue) +\n \", \" +\n percent.transform(sanitize(saturation)) +\n \", \" +\n percent.transform(sanitize(lightness)) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\");\n },\n};\n\nexport { hsla };\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n parse: (v) => {\n if (rgba.test(v)) {\n return rgba.parse(v);\n }\n else if (hsla.test(v)) {\n return hsla.parse(v);\n }\n else {\n return hex.parse(v);\n }\n },\n transform: (v) => {\n return typeof v === \"string\"\n ? v\n : v.hasOwnProperty(\"red\")\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n};\n\nexport { color };\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\nfunction test(v) {\n var _a, _b;\n return (isNaN(v) &&\n typeof v === \"string\" &&\n (((_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) || 0) +\n (((_b = v.match(colorRegex)) === null || _b === void 0 ? void 0 : _b.length) || 0) >\n 0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const values = [];\n const indexes = {\n color: [],\n number: [],\n var: [],\n };\n const types = [];\n let i = 0;\n const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n if (color.test(parsedValue)) {\n indexes.color.push(i);\n types.push(COLOR_TOKEN);\n values.push(color.parse(parsedValue));\n }\n else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n indexes.var.push(i);\n types.push(VAR_TOKEN);\n values.push(parsedValue);\n }\n else {\n indexes.number.push(i);\n types.push(NUMBER_TOKEN);\n values.push(parseFloat(parsedValue));\n }\n ++i;\n return SPLIT_TOKEN;\n });\n const split = tokenised.split(SPLIT_TOKEN);\n return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n const { split, types } = analyseComplexValue(source);\n const numSections = split.length;\n return (v) => {\n let output = \"\";\n for (let i = 0; i < numSections; i++) {\n output += split[i];\n if (v[i] !== undefined) {\n const type = types[i];\n if (type === NUMBER_TOKEN) {\n output += sanitize(v[i]);\n }\n else if (type === COLOR_TOKEN) {\n output += color.transform(v[i]);\n }\n else {\n output += v[i];\n }\n }\n }\n return output;\n };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n const parsed = parseComplexValue(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n const [name, value] = v.slice(0, -1).split(\"(\");\n if (name === \"drop-shadow\")\n return v;\n const [number] = value.match(floatRegex) || [];\n if (!number)\n return v;\n const unit = value.replace(number, \"\");\n let defaultValue = maxDefaults.has(name) ? 1 : 0;\n if (number !== value)\n defaultValue *= 100;\n return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n ...complex,\n getAnimatableNone: (v) => {\n const functions = v.match(functionRegex);\n return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n },\n};\n\nexport { filter };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst browserNumberValueTypes = {\n // Border props\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n radius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n // Positioning props\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Misc\n backgroundPositionX: px,\n backgroundPositionY: px,\n};\n\nexport { browserNumberValueTypes };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { degrees, px, progressPercentage } from '../../../value/types/numbers/units.mjs';\n\nconst transformValueTypes = {\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n transformPerspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n};\n\nexport { transformValueTypes };\n","import { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n ...number,\n transform: Math.round,\n};\n\nexport { int };\n","import { alpha } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\nimport { browserNumberValueTypes } from './number-browser.mjs';\nimport { transformValueTypes } from './transform.mjs';\nimport { int } from './type-int.mjs';\n\nconst numberValueTypes = {\n ...browserNumberValueTypes,\n ...transformValueTypes,\n zIndex: int,\n size: px,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n ...numberValueTypes,\n // Color props\n color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n // Border props\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n filter,\n WebkitFilter: filter,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n","import { complex } from '../../../value/types/complex/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { getDefaultValueType } from './defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (defaultValueType !== filter)\n defaultValueType = complex;\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n return defaultValueType.getAnimatableNone\n ? defaultValueType.getAnimatableNone(value)\n : undefined;\n}\n\nexport { getAnimatableNone };\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../dom/value-types/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n let i = 0;\n let animatableTemplate = undefined;\n while (i < unresolvedKeyframes.length && !animatableTemplate) {\n const keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\" &&\n !invalidTemplates.has(keyframe) &&\n analyseComplexValue(keyframe).values.length) {\n animatableTemplate = unresolvedKeyframes[i];\n }\n i++;\n }\n if (animatableTemplate && name) {\n for (const noneIndex of noneKeyframeIndexes) {\n unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n }\n }\n}\n\nexport { makeNoneKeyframesAnimatable };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\nimport { transformPropOrder } from '../../html/utils/keys-transform.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n if (transform === \"none\" || !transform)\n return 0;\n const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/u);\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n }\n else {\n const matrix = transform.match(/^matrix\\((.+)\\)$/u);\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n }\n else {\n return 0;\n }\n }\n};\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n const removedTransforms = [];\n nonTranslationalTransformKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n });\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\n top: (_bbox, { top }) => parseFloat(top),\n left: (_bbox, { left }) => parseFloat(left),\n bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n // Transform\n x: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n","import { removeNonTranslationalTransform } from '../dom/utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nfunction measureAllKeyframes() {\n if (anyNeedsMeasurement) {\n const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n const transformsToRestore = new Map();\n /**\n * Write pass\n * If we're measuring elements we want to remove bounding box-changing transforms.\n */\n elementsToMeasure.forEach((element) => {\n const removedTransforms = removeNonTranslationalTransform(element);\n if (!removedTransforms.length)\n return;\n transformsToRestore.set(element, removedTransforms);\n element.render();\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n // Write\n elementsToMeasure.forEach((element) => {\n element.render();\n const restore = transformsToRestore.get(element);\n if (restore) {\n restore.forEach(([key, value]) => {\n var _a;\n (_a = element.getValue(key)) === null || _a === void 0 ? void 0 : _a.set(value);\n });\n }\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n // Write\n resolversToMeasure.forEach((resolver) => {\n if (resolver.suspendedScrollY !== undefined) {\n window.scrollTo(0, resolver.suspendedScrollY);\n }\n });\n }\n anyNeedsMeasurement = false;\n isScheduled = false;\n toResolve.forEach((resolver) => resolver.complete());\n toResolve.clear();\n}\nfunction readAllKeyframes() {\n toResolve.forEach((resolver) => {\n resolver.readKeyframes();\n if (resolver.needsMeasurement) {\n anyNeedsMeasurement = true;\n }\n });\n}\nfunction flushKeyframeResolvers() {\n readAllKeyframes();\n measureAllKeyframes();\n}\nclass KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n /**\n * Track whether this resolver has completed. Once complete, it never\n * needs to attempt keyframe resolution again.\n */\n this.isComplete = false;\n /**\n * Track whether this resolver is async. If it is, it'll be added to the\n * resolver queue and flushed in the next frame. Resolvers that aren't going\n * to trigger read/write thrashing don't need to be async.\n */\n this.isAsync = false;\n /**\n * Track whether this resolver needs to perform a measurement\n * to resolve its keyframes.\n */\n this.needsMeasurement = false;\n /**\n * Track whether this resolver is currently scheduled to resolve\n * to allow it to be cancelled and resumed externally.\n */\n this.isScheduled = false;\n this.unresolvedKeyframes = [...unresolvedKeyframes];\n this.onComplete = onComplete;\n this.name = name;\n this.motionValue = motionValue;\n this.element = element;\n this.isAsync = isAsync;\n }\n scheduleResolve() {\n this.isScheduled = true;\n if (this.isAsync) {\n toResolve.add(this);\n if (!isScheduled) {\n isScheduled = true;\n frame.read(readAllKeyframes);\n frame.resolveKeyframes(measureAllKeyframes);\n }\n }\n else {\n this.readKeyframes();\n this.complete();\n }\n }\n readKeyframes() {\n const { unresolvedKeyframes, name, element, motionValue } = this;\n /**\n * If a keyframe is null, we hydrate it either by reading it from\n * the instance, or propagating from previous keyframes.\n */\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n if (unresolvedKeyframes[i] === null) {\n /**\n * If the first keyframe is null, we need to find its value by sampling the element\n */\n if (i === 0) {\n const currentValue = motionValue === null || motionValue === void 0 ? void 0 : motionValue.get();\n const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (currentValue !== undefined) {\n unresolvedKeyframes[0] = currentValue;\n }\n else if (element && name) {\n const valueAsRead = element.readValue(name, finalKeyframe);\n if (valueAsRead !== undefined && valueAsRead !== null) {\n unresolvedKeyframes[0] = valueAsRead;\n }\n }\n if (unresolvedKeyframes[0] === undefined) {\n unresolvedKeyframes[0] = finalKeyframe;\n }\n if (motionValue && currentValue === undefined) {\n motionValue.set(unresolvedKeyframes[0]);\n }\n }\n else {\n unresolvedKeyframes[i] = unresolvedKeyframes[i - 1];\n }\n }\n }\n }\n setFinalKeyframe() { }\n measureInitialState() { }\n renderEndStyles() { }\n measureEndState() { }\n complete() {\n this.isComplete = true;\n this.onComplete(this.unresolvedKeyframes, this.finalKeyframe);\n toResolve.delete(this);\n }\n cancel() {\n if (!this.isComplete) {\n this.isScheduled = false;\n toResolve.delete(this);\n }\n }\n resume() {\n if (!this.isComplete)\n this.scheduleResolve();\n }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n","import { noop } from './noop.mjs';\n\nlet warning = noop;\nlet invariant = noop;\nif (process.env.NODE_ENV !== \"production\") {\n warning = (check, message) => {\n if (!check && typeof console !== \"undefined\") {\n console.warn(message);\n }\n };\n invariant = (check, message) => {\n if (!check) {\n throw new Error(message);\n }\n };\n}\n\nexport { invariant, warning };\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n const startsWithToken = startsAsVariableToken(value);\n if (!startsWithToken)\n return false;\n // Ensure any comments are stripped from the value as this can harm performance of the regex.\n return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n\nexport { isCSSVariableName, isCSSVariableToken };\n","import { invariant } from 'motion-utils';\nimport { isNumericalString } from '../../../utils/is-numerical-string.mjs';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token1, token2, fallback] = match;\n return [`--${token1 !== null && token1 !== void 0 ? token1 : token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`);\n const [token, fallback] = parseCSSVariable(current);\n // No CSS variable detected\n if (!token)\n return;\n // Attempt to read this CSS variable off the element\n const resolved = window.getComputedStyle(element).getPropertyValue(token);\n if (resolved) {\n const trimmed = resolved.trim();\n return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n }\n return isCSSVariableToken(fallback)\n ? getVariableValue(fallback, element, depth + 1)\n : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';\nimport { testValueType } from './test.mjs';\nimport { auto } from './type-auto.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\nexport { auto };\n","import { isNone } from '../../animation/utils/is-none.mjs';\nimport { positionalKeys } from '../html/utils/keys-position.mjs';\nimport { makeNoneKeyframesAnimatable } from '../html/utils/make-none-animatable.mjs';\nimport { KeyframeResolver } from '../utils/KeyframesResolver.mjs';\nimport { getVariableValue } from './utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken } from './utils/is-css-variable.mjs';\nimport { isNumOrPxType, positionalValues } from './utils/unit-conversion.mjs';\nimport { findDimensionValueType } from './value-types/dimensions.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n }\n readKeyframes() {\n const { unresolvedKeyframes, element, name } = this;\n if (!element || !element.current)\n return;\n super.readKeyframes();\n /**\n * If any keyframe is a CSS variable, we need to find its value by sampling the element\n */\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n let keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\") {\n keyframe = keyframe.trim();\n if (isCSSVariableToken(keyframe)) {\n const resolved = getVariableValue(keyframe, element.current);\n if (resolved !== undefined) {\n unresolvedKeyframes[i] = resolved;\n }\n if (i === unresolvedKeyframes.length - 1) {\n this.finalKeyframe = keyframe;\n }\n }\n }\n }\n /**\n * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n * have a far bigger performance impact.\n */\n this.resolveNoneKeyframes();\n /**\n * Check to see if unit type has changed. If so schedule jobs that will\n * temporarily set styles to the destination keyframes.\n * Skip if we have more than two keyframes or this isn't a positional value.\n * TODO: We can throw if there are multiple keyframes and the value type changes.\n */\n if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n return;\n }\n const [origin, target] = unresolvedKeyframes;\n const originType = findDimensionValueType(origin);\n const targetType = findDimensionValueType(target);\n /**\n * Either we don't recognise these value types or we can animate between them.\n */\n if (originType === targetType)\n return;\n /**\n * If both values are numbers or pixels, we can animate between them by\n * converting them to numbers.\n */\n if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n const value = unresolvedKeyframes[i];\n if (typeof value === \"string\") {\n unresolvedKeyframes[i] = parseFloat(value);\n }\n }\n }\n else {\n /**\n * Else, the only way to resolve this is by measuring the element.\n */\n this.needsMeasurement = true;\n }\n }\n resolveNoneKeyframes() {\n const { unresolvedKeyframes, name } = this;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n if (isNone(unresolvedKeyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n }\n if (noneKeyframeIndexes.length) {\n makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n }\n }\n measureInitialState() {\n const { element, unresolvedKeyframes, name } = this;\n if (!element || !element.current)\n return;\n if (name === \"height\") {\n this.suspendedScrollY = window.pageYOffset;\n }\n this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n unresolvedKeyframes[0] = this.measuredOrigin;\n // Set final key frame to measure after next render\n const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (measureKeyframe !== undefined) {\n element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n }\n }\n measureEndState() {\n var _a;\n const { element, name, unresolvedKeyframes } = this;\n if (!element || !element.current)\n return;\n const value = element.getValue(name);\n value && value.jump(this.measuredOrigin, false);\n const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n this.finalKeyframe = finalKeyframe;\n }\n // If we removed transform values, reapply them before the next render\n if ((_a = this.removedTransforms) === null || _a === void 0 ? void 0 : _a.length) {\n this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n element\n .getValue(unsetTransformName)\n .set(unsetTransformValue);\n });\n }\n this.resolveNoneKeyframes();\n }\n}\n\nexport { DOMKeyframesResolver };\n","import { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\n\nfunction isNone(value) {\n if (typeof value === \"number\") {\n return value === 0;\n }\n else if (value !== null) {\n return value === \"none\" || value === \"0\" || isZeroValueString(value);\n }\n else {\n return true;\n }\n}\n\nexport { isNone };\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (name === \"zIndex\")\n return false;\n // If it's a number or a keyframes array, we can animate it. We might at some point\n // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n // but for now lets leave it like this for performance reasons\n if (typeof value === \"number\" || Array.isArray(value))\n return true;\n if (typeof value === \"string\" && // It's animatable if we have a string\n (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n return false;\n};\n\nexport { isAnimatable };\n","import { isGenerator } from 'motion-dom';\nimport { warning } from 'motion-utils';\nimport { isAnimatable } from '../../utils/is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n const current = keyframes[0];\n if (keyframes.length === 1)\n return true;\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] !== current)\n return true;\n }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n /**\n * Check if we're able to animate between the start and end keyframes,\n * and throw a warning if we're attempting to animate between one that's\n * animatable and another that isn't.\n */\n const originKeyframe = keyframes[0];\n if (originKeyframe === null)\n return false;\n /**\n * These aren't traditionally animatable but we do support them.\n * In future we could look into making this more generic or replacing\n * this function with mix() === mixImmediate\n */\n if (name === \"display\" || name === \"visibility\")\n return true;\n const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(originKeyframe, name);\n const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n // Always skip if any of these are true\n if (!isOriginAnimatable || !isTargetAnimatable) {\n return false;\n }\n return (hasKeyframesChanged(keyframes) ||\n ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe) {\n const resolvedKeyframes = keyframes.filter(isNotNull);\n const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n ? 0\n : resolvedKeyframes.length - 1;\n return !index || finalKeyframe === undefined\n ? resolvedKeyframes[index]\n : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { flushKeyframeResolvers } from '../../render/utils/KeyframesResolver.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass BaseAnimation {\n constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", ...options }) {\n // Track whether the animation has been stopped. Stopped animations won't restart.\n this.isStopped = false;\n this.hasAttemptedResolve = false;\n this.createdAt = time.now();\n this.options = {\n autoplay,\n delay,\n type,\n repeat,\n repeatDelay,\n repeatType,\n ...options,\n };\n this.updateFinishedPromise();\n }\n /**\n * This method uses the createdAt and resolvedAt to calculate the\n * animation startTime. *Ideally*, we would use the createdAt time as t=0\n * as the following frame would then be the first frame of the animation in\n * progress, which would feel snappier.\n *\n * However, if there's a delay (main thread work) between the creation of\n * the animation and the first commited frame, we prefer to use resolvedAt\n * to avoid a sudden jump into the animation.\n */\n calcStartTime() {\n if (!this.resolvedAt)\n return this.createdAt;\n return this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n ? this.resolvedAt\n : this.createdAt;\n }\n /**\n * A getter for resolved data. If keyframes are not yet resolved, accessing\n * this.resolved will synchronously flush all pending keyframe resolvers.\n * This is a deoptimisation, but at its worst still batches read/writes.\n */\n get resolved() {\n if (!this._resolved && !this.hasAttemptedResolve) {\n flushKeyframeResolvers();\n }\n return this._resolved;\n }\n /**\n * A method to be called when the keyframes resolver completes. This method\n * will check if its possible to run the animation and, if not, skip it.\n * Otherwise, it will call initPlayback on the implementing class.\n */\n onKeyframesResolved(keyframes, finalKeyframe) {\n this.resolvedAt = time.now();\n this.hasAttemptedResolve = true;\n const { name, type, velocity, delay, onComplete, onUpdate, isGenerator, } = this.options;\n /**\n * If we can't animate this value with the resolved keyframes\n * then we should complete it immediately.\n */\n if (!isGenerator && !canAnimate(keyframes, name, type, velocity)) {\n // Finish immediately\n if (instantAnimationState.current || !delay) {\n onUpdate &&\n onUpdate(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n onComplete && onComplete();\n this.resolveFinishedPromise();\n return;\n }\n // Finish after a delay\n else {\n this.options.duration = 0;\n }\n }\n const resolvedAnimation = this.initPlayback(keyframes, finalKeyframe);\n if (resolvedAnimation === false)\n return;\n this._resolved = {\n keyframes,\n finalKeyframe,\n ...resolvedAnimation,\n };\n this.onPostResolved();\n }\n onPostResolved() { }\n /**\n * Allows the returned animation to be awaited or promise-chained. Currently\n * resolves when the animation finishes at all but in a future update could/should\n * reject if its cancels.\n */\n then(resolve, reject) {\n return this.currentFinishedPromise.then(resolve, reject);\n }\n flatten() {\n this.options.type = \"keyframes\";\n this.options.ease = \"linear\";\n }\n updateFinishedPromise() {\n this.currentFinishedPromise = new Promise((resolve) => {\n this.resolveFinishedPromise = resolve;\n });\n }\n}\n\nexport { BaseAnimation };\n","const activeAnimations = {\n layout: 0,\n mainThread: 0,\n waapi: 0,\n};\n\nexport { activeAnimations };\n","/*\n Value in range from progress\n\n Given a lower limit and an upper limit, we return the value within\n that range as expressed by progress (usually a number from 0 to 1)\n\n So progress = 0.5 would change\n\n from -------- to\n\n to\n\n from ---- to\n\n E.g. from = 10, to = 20, progress = 0.5 => 15\n\n @param [number]: Lower limit of range\n @param [number]: Upper limit of range\n @param [number]: The progress between lower and upper limits expressed 0-1\n @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n hue /= 360;\n saturation /= 100;\n lightness /= 100;\n let red = 0;\n let green = 0;\n let blue = 0;\n if (!saturation) {\n red = green = blue = lightness;\n }\n else {\n const q = lightness < 0.5\n ? lightness * (1 + saturation)\n : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n red = hueToRgb(p, q, hue + 1 / 3);\n green = hueToRgb(p, q, hue);\n blue = hueToRgb(p, q, hue - 1 / 3);\n }\n return {\n red: Math.round(red * 255),\n green: Math.round(green * 255),\n blue: Math.round(blue * 255),\n alpha,\n };\n}\n\nexport { hslaToRgba };\n","function mixImmediate(a, b) {\n return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n","import { mixNumber } from './number.mjs';\nimport { warning } from 'motion-utils';\nimport { hslaToRgba } from '../hsla-to-rgba.mjs';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n const fromExpo = from * from;\n const expo = v * (to * to - fromExpo) + fromExpo;\n return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n if (!Boolean(type))\n return false;\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Motion's stricter typing\n model = hslaToRgba(model);\n }\n return model;\n}\nconst mixColor = (from, to) => {\n const fromRGBA = asRGBA(from);\n const toRGBA = asRGBA(to);\n if (!fromRGBA || !toRGBA) {\n return mixImmediate(from, to);\n }\n const blended = { ...fromRGBA };\n return (v) => {\n blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param {...functions} transformers\n * @return {function}\n */\nconst combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n if (invisibleValues.has(origin)) {\n return (p) => (p <= 0 ? origin : target);\n }\n else {\n return (p) => (p >= 1 ? target : origin);\n }\n}\n\nexport { invisibleValues, mixVisibility };\n","import { mixNumber as mixNumber$1 } from './number.mjs';\nimport { mixColor } from './color.mjs';\nimport { pipe } from '../pipe.mjs';\nimport { warning } from 'motion-utils';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { isCSSVariableToken } from '../../render/dom/utils/is-css-variable.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\nfunction mixNumber(a, b) {\n return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n if (typeof a === \"number\") {\n return mixNumber;\n }\n else if (typeof a === \"string\") {\n return isCSSVariableToken(a)\n ? mixImmediate\n : color.test(a)\n ? mixColor\n : mixComplex;\n }\n else if (Array.isArray(a)) {\n return mixArray;\n }\n else if (typeof a === \"object\") {\n return color.test(a) ? mixColor : mixObject;\n }\n return mixImmediate;\n}\nfunction mixArray(a, b) {\n const output = [...a];\n const numValues = output.length;\n const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n return (p) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](p);\n }\n return output;\n };\n}\nfunction mixObject(a, b) {\n const output = { ...a, ...b };\n const blendValue = {};\n for (const key in output) {\n if (a[key] !== undefined && b[key] !== undefined) {\n blendValue[key] = getMixer(a[key])(a[key], b[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\n}\nfunction matchOrder(origin, target) {\n var _a;\n const orderedOrigin = [];\n const pointers = { color: 0, var: 0, number: 0 };\n for (let i = 0; i < target.values.length; i++) {\n const type = target.types[i];\n const originIndex = origin.indexes[type][pointers[type]];\n const originValue = (_a = origin.values[originIndex]) !== null && _a !== void 0 ? _a : 0;\n orderedOrigin[i] = originValue;\n pointers[type]++;\n }\n return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n const template = complex.createTransformer(target);\n const originStats = analyseComplexValue(origin);\n const targetStats = analyseComplexValue(target);\n const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n originStats.indexes.color.length === targetStats.indexes.color.length &&\n originStats.indexes.number.length >= targetStats.indexes.number.length;\n if (canInterpolate) {\n if ((invisibleValues.has(origin) &&\n !targetStats.values.length) ||\n (invisibleValues.has(target) &&\n !originStats.values.length)) {\n return mixVisibility(origin, target);\n }\n return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n }\n else {\n warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);\n return mixImmediate(origin, target);\n }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n if (typeof from === \"number\" &&\n typeof to === \"number\" &&\n typeof p === \"number\") {\n return mixNumber(from, to, p);\n }\n const mixer = getMixer(from);\n return mixer(from, to);\n}\n\nexport { mix };\n","import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","const springDefaults = {\n // Default spring physics\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n velocity: 0.0,\n // Default duration/bounce-based options\n duration: 800, // in ms\n bounce: 0.3,\n visualDuration: 0.3, // in seconds\n // Rest thresholds\n restSpeed: {\n granular: 0.01,\n default: 2,\n },\n restDelta: {\n granular: 0.005,\n default: 0.5,\n },\n // Limits\n minDuration: 0.01, // in seconds\n maxDuration: 10.0, // in seconds\n minDamping: 0.05,\n maxDamping: 1,\n};\n\nexport { springDefaults };\n","import { warning, secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { springDefaults } from './defaults.mjs';\n\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n if (dampingRatio < 1) {\n /**\n * Underdamped spring\n */\n envelope = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const a = exponentialDecay - velocity;\n const b = calcAngularFreq(undampedFreq, dampingRatio);\n const c = Math.exp(-delta);\n return safeMin - (a / b) * c;\n };\n derivative = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const d = delta * velocity + velocity;\n const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n const f = Math.exp(-delta);\n const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n return (factor * ((d - e) * f)) / g;\n };\n }\n else {\n /**\n * Critically-damped spring\n */\n envelope = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (undampedFreq - velocity) * duration + 1;\n return -safeMin + a * b;\n };\n derivative = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (velocity - undampedFreq) * (duration * duration);\n return a * b;\n };\n }\n const initialGuess = 5 / duration;\n const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n duration = secondsToMilliseconds(duration);\n if (isNaN(undampedFreq)) {\n return {\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n duration,\n };\n }\n else {\n const stiffness = Math.pow(undampedFreq, 2) * mass;\n return {\n stiffness,\n damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n duration,\n };\n }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n let result = initialGuess;\n for (let i = 1; i < rootIterations; i++) {\n result = result - envelope(result) / derivative(result);\n }\n return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring };\n","import { calcGeneratorDuration, maxGeneratorDuration, generateLinearEasing } from 'motion-dom';\nimport { millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { springDefaults } from './defaults.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n let springOptions = {\n velocity: springDefaults.velocity,\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n mass: springDefaults.mass,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n if (options.visualDuration) {\n const visualDuration = options.visualDuration;\n const root = (2 * Math.PI) / (visualDuration * 1.2);\n const stiffness = root * root;\n const damping = 2 *\n clamp(0.05, 1, 1 - (options.bounce || 0)) *\n Math.sqrt(stiffness);\n springOptions = {\n ...springOptions,\n mass: springDefaults.mass,\n stiffness,\n damping,\n };\n }\n else {\n const derived = findSpring(options);\n springOptions = {\n ...springOptions,\n ...derived,\n mass: springDefaults.mass,\n };\n springOptions.isResolvedFromDuration = true;\n }\n }\n return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n const options = typeof optionsOrVisualDuration !== \"object\"\n ? {\n visualDuration: optionsOrVisualDuration,\n keyframes: [0, 1],\n bounce,\n }\n : optionsOrVisualDuration;\n let { restSpeed, restDelta } = options;\n const origin = options.keyframes[0];\n const target = options.keyframes[options.keyframes.length - 1];\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = { done: false, value: origin };\n const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n ...options,\n velocity: -millisecondsToSeconds(options.velocity || 0),\n });\n const initialVelocity = velocity || 0.0;\n const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n const initialDelta = target - origin;\n const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n /**\n * If we're working on a granular scale, use smaller defaults for determining\n * when the spring is finished.\n *\n * These defaults have been selected emprically based on what strikes a good\n * ratio between feeling good and finishing as soon as changes are imperceptible.\n */\n const isGranularScale = Math.abs(initialDelta) < 5;\n restSpeed || (restSpeed = isGranularScale\n ? springDefaults.restSpeed.granular\n : springDefaults.restSpeed.default);\n restDelta || (restDelta = isGranularScale\n ? springDefaults.restDelta.granular\n : springDefaults.restDelta.default);\n let resolveSpring;\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * Math.cos(angularFreq * t)));\n };\n }\n else if (dampingRatio === 1) {\n // Critically damped spring\n resolveSpring = (t) => target -\n Math.exp(-undampedAngularFreq * t) *\n (initialDelta +\n (initialVelocity + undampedAngularFreq * initialDelta) * t);\n }\n else {\n // Overdamped spring\n const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n // When performing sinh or cosh values can hit Infinity so we cap them here\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return (target -\n (envelope *\n ((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) *\n Math.sinh(freqForT) +\n dampedAngularFreq *\n initialDelta *\n Math.cosh(freqForT))) /\n dampedAngularFreq);\n };\n }\n const generator = {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n let currentVelocity = 0.0;\n /**\n * We only need to calculate velocity for under-damped springs\n * as over- and critically-damped springs can't overshoot, so\n * checking only for displacement is enough.\n */\n if (dampingRatio < 1) {\n currentVelocity =\n t === 0\n ? secondsToMilliseconds(initialVelocity)\n : calcGeneratorVelocity(resolveSpring, t, current);\n }\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n toString: () => {\n const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n return calculatedDuration + \"ms \" + easing;\n },\n };\n return generator;\n}\n\nexport { spring };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n const origin = keyframes[0];\n const state = {\n done: false,\n value: origin,\n };\n const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n const nearestBoundary = (v) => {\n if (min === undefined)\n return max;\n if (max === undefined)\n return min;\n return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n };\n let amplitude = power * velocity;\n const ideal = origin + amplitude;\n const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n /**\n * If the target has changed we need to re-calculate the amplitude, otherwise\n * the animation will start from the wrong position.\n */\n if (target !== ideal)\n amplitude = target - origin;\n const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n const calcLatest = (t) => target + calcDelta(t);\n const applyFriction = (t) => {\n const delta = calcDelta(t);\n const latest = calcLatest(t);\n state.done = Math.abs(delta) <= restDelta;\n state.value = state.done ? target : latest;\n };\n /**\n * Ideally this would resolve for t in a stateless way, we could\n * do that by always precalculating the animation but as we know\n * this will be done anyway we can assume that spring will\n * be discovered during that.\n */\n let timeReachedBoundary;\n let spring$1;\n const checkCatchBoundary = (t) => {\n if (!isOutOfBounds(state.value))\n return;\n timeReachedBoundary = t;\n spring$1 = spring({\n keyframes: [state.value, nearestBoundary(state.value)],\n velocity: calcGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n damping: bounceDamping,\n stiffness: bounceStiffness,\n restDelta,\n restSpeed,\n });\n };\n checkCatchBoundary(0);\n return {\n calculatedDuration: null,\n next: (t) => {\n /**\n * We need to resolve the friction to figure out if we need a\n * spring but we don't want to do this twice per frame. So here\n * we flag if we updated for this frame and later if we did\n * we can skip doing it again.\n */\n let hasUpdatedFrame = false;\n if (!spring$1 && timeReachedBoundary === undefined) {\n hasUpdatedFrame = true;\n applyFriction(t);\n checkCatchBoundary(t);\n }\n /**\n * If we have a spring and the provided t is beyond the moment the friction\n * animation crossed the min/max boundary, use the spring.\n */\n if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n return spring$1.next(t - timeReachedBoundary);\n }\n else {\n !hasUpdatedFrame && applyFriction(t);\n return state;\n }\n },\n };\n}\n\nexport { inertia };\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","import { isBezierDefinition } from 'motion-dom';\nimport { invariant, noop } from 'motion-utils';\nimport { anticipate } from '../anticipate.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\n\nconst easingLookup = {\n linear: noop,\n easeIn,\n easeInOut,\n easeOut,\n circIn,\n circInOut,\n circOut,\n backIn,\n backInOut,\n backOut,\n anticipate,\n};\nconst easingDefinitionToFunction = (definition) => {\n if (isBezierDefinition(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (typeof definition === \"string\") {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n return easingLookup[definition];\n }\n return definition;\n};\n\nexport { easingDefinitionToFunction };\n","import { invariant, noop, progress } from 'motion-utils';\nimport { clamp } from './clamp.mjs';\nimport { mix } from './mix/index.mjs';\nimport { pipe } from './pipe.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || mix;\n const numMixers = output.length - 1;\n for (let i = 0; i < numMixers; i++) {\n let mixer = mixerFactory(output[i], output[i + 1]);\n if (ease) {\n const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n mixer = pipe(easingFunction, mixer);\n }\n mixers.push(mixer);\n }\n return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n * - Numbers\n * - Colors (hex, hsl, hsla, rgb, rgba)\n * - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revist this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n const inputLength = input.length;\n invariant(inputLength === output.length, \"Both input and output ranges must be the same length\");\n /**\n * If we're only provided a single input, we can just make a function\n * that returns the output.\n */\n if (inputLength === 1)\n return () => output[0];\n if (inputLength === 2 && output[0] === output[1])\n return () => output[1];\n const isZeroDeltaRange = input[0] === input[1];\n // If input runs highest -> lowest, reverse both arrays\n if (input[0] > input[inputLength - 1]) {\n input = [...input].reverse();\n output = [...output].reverse();\n }\n const mixers = createMixers(output, ease, mixer);\n const numMixers = mixers.length;\n const interpolator = (v) => {\n if (isZeroDeltaRange && v < input[0])\n return output[0];\n let i = 0;\n if (numMixers > 1) {\n for (; i < input.length - 2; i++) {\n if (v < input[i + 1])\n break;\n }\n }\n const progressInRange = progress(input[i], input[i + 1], v);\n return mixers[i](progressInRange);\n };\n return isClamp\n ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n : interpolator;\n}\n\nexport { interpolate };\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n const offset = [0];\n fillOffset(offset, arr.length - 1);\n return offset;\n}\n\nexport { defaultOffset };\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mixNumber(min, 1, offsetProgress));\n }\n}\n\nexport { fillOffset };\n","import { easeInOut } from '../../easing/ease.mjs';\nimport { isEasingArray } from '../../easing/utils/is-easing-array.mjs';\nimport { easingDefinitionToFunction } from '../../easing/utils/map.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../../utils/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n /**\n * Easing functions can be externally defined as strings. Here we convert them\n * into actual functions.\n */\n const easingFunctions = isEasingArray(ease)\n ? ease.map(easingDefinitionToFunction)\n : easingDefinitionToFunction(ease);\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = {\n done: false,\n value: keyframeValues[0],\n };\n /**\n * Create a times array based on the provided 0-1 offsets\n */\n const absoluteTimes = convertOffsetToTimes(\n // Only use the provided offsets if they're the correct length\n // TODO Maybe we should warn here if there's a length mismatch\n times && times.length === keyframeValues.length\n ? times\n : defaultOffset(keyframeValues), duration);\n const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n ease: Array.isArray(easingFunctions)\n ? easingFunctions\n : defaultEasing(keyframeValues, easingFunctions),\n });\n return {\n calculatedDuration: duration,\n next: (t) => {\n state.value = mapTimeToKeyframe(t);\n state.done = t >= duration;\n return state;\n },\n };\n}\n\nexport { defaultEasing, keyframes };\n","const isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n","function convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { time } from '../../../frameloop/sync-time.mjs';\nimport { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: () => frame.update(passTimestamp, true),\n stop: () => cancelFrame(passTimestamp),\n /**\n * If we're processing this frame we can use the\n * framelocked timestamp to keep things in sync.\n */\n now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n };\n};\n\nexport { frameloopDriver };\n","import { isGenerator, calcGeneratorDuration } from 'motion-dom';\nimport { invariant, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { KeyframeResolver } from '../../render/utils/KeyframesResolver.mjs';\nimport { activeAnimations } from '../../stats/animation-count.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { mix } from '../../utils/mix/index.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring/index.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { frameloopDriver } from './drivers/driver-frameloop.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\nconst generators = {\n decay: inertia,\n inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring,\n};\nconst percentToProgress = (percent) => percent / 100;\n/**\n * Animation that runs on the main thread. Designed to be WAAPI-spec in the subset of\n * features we expose publically. Mostly the compatibility is to ensure visual identity\n * between both WAAPI and main thread animations.\n */\nclass MainThreadAnimation extends BaseAnimation {\n constructor(options) {\n super(options);\n /**\n * The time at which the animation was paused.\n */\n this.holdTime = null;\n /**\n * The time at which the animation was cancelled.\n */\n this.cancelTime = null;\n /**\n * The current time of the animation.\n */\n this.currentTime = 0;\n /**\n * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n */\n this.playbackSpeed = 1;\n /**\n * The state of the animation to apply when the animation is resolved. This\n * allows calls to the public API to control the animation before it is resolved,\n * without us having to resolve it first.\n */\n this.pendingPlayState = \"running\";\n /**\n * The time at which the animation was started.\n */\n this.startTime = null;\n this.state = \"idle\";\n /**\n * This method is bound to the instance to fix a pattern where\n * animation.stop is returned as a reference from a useEffect.\n */\n this.stop = () => {\n this.resolver.cancel();\n this.isStopped = true;\n if (this.state === \"idle\")\n return;\n this.teardown();\n const { onStop } = this.options;\n onStop && onStop();\n };\n const { name, motionValue, element, keyframes } = this.options;\n const KeyframeResolver$1 = (element === null || element === void 0 ? void 0 : element.KeyframeResolver) || KeyframeResolver;\n const onResolved = (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe);\n this.resolver = new KeyframeResolver$1(keyframes, onResolved, name, motionValue, element);\n this.resolver.scheduleResolve();\n }\n flatten() {\n super.flatten();\n // If we've already resolved the animation, re-initialise it\n if (this._resolved) {\n Object.assign(this._resolved, this.initPlayback(this._resolved.keyframes));\n }\n }\n initPlayback(keyframes$1) {\n const { type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = this.options;\n const generatorFactory = isGenerator(type)\n ? type\n : generators[type] || keyframes;\n /**\n * If our generator doesn't support mixing numbers, we need to replace keyframes with\n * [0, 100] and then make a function that maps that to the actual keyframes.\n *\n * 100 is chosen instead of 1 as it works nicer with spring animations.\n */\n let mapPercentToKeyframes;\n let mirroredGenerator;\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(keyframes$1.length === 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`);\n }\n mapPercentToKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...this.options, keyframes: keyframes$1 });\n /**\n * If we have a mirror repeat type we need to create a second generator that outputs the\n * mirrored (not reversed) animation and later ping pong between the two generators.\n */\n if (repeatType === \"mirror\") {\n mirroredGenerator = generatorFactory({\n ...this.options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -velocity,\n });\n }\n /**\n * If duration is undefined and we have repeat options,\n * we need to calculate a duration from the generator.\n *\n * We set it to the generator itself to cache the duration.\n * Any timeline resolver will need to have already precalculated\n * the duration by this step.\n */\n if (generator.calculatedDuration === null) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n const resolvedDuration = calculatedDuration + repeatDelay;\n const totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n return {\n generator,\n mirroredGenerator,\n mapPercentToKeyframes,\n calculatedDuration,\n resolvedDuration,\n totalDuration,\n };\n }\n onPostResolved() {\n const { autoplay = true } = this.options;\n activeAnimations.mainThread++;\n this.play();\n if (this.pendingPlayState === \"paused\" || !autoplay) {\n this.pause();\n }\n else {\n this.state = this.pendingPlayState;\n }\n }\n tick(timestamp, sample = false) {\n const { resolved } = this;\n // If the animations has failed to resolve, return the final keyframe.\n if (!resolved) {\n const { keyframes } = this.options;\n return { done: true, value: keyframes[keyframes.length - 1] };\n }\n const { finalKeyframe, generator, mirroredGenerator, mapPercentToKeyframes, keyframes, calculatedDuration, totalDuration, resolvedDuration, } = resolved;\n if (this.startTime === null)\n return generator.next(0);\n const { delay, repeat, repeatType, repeatDelay, onUpdate } = this.options;\n /**\n * requestAnimationFrame timestamps can come through as lower than\n * the startTime as set by performance.now(). Here we prevent this,\n * though in the future it could be possible to make setting startTime\n * a pending operation that gets resolved here.\n */\n if (this.speed > 0) {\n this.startTime = Math.min(this.startTime, timestamp);\n }\n else if (this.speed < 0) {\n this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n }\n // Update currentTime\n if (sample) {\n this.currentTime = timestamp;\n }\n else if (this.holdTime !== null) {\n this.currentTime = this.holdTime;\n }\n else {\n // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n // example.\n this.currentTime =\n Math.round(timestamp - this.startTime) * this.speed;\n }\n // Rebase on delay\n const timeWithoutDelay = this.currentTime - delay * (this.speed >= 0 ? 1 : -1);\n const isInDelayPhase = this.speed >= 0\n ? timeWithoutDelay < 0\n : timeWithoutDelay > totalDuration;\n this.currentTime = Math.max(timeWithoutDelay, 0);\n // If this animation has finished, set the current time to the total duration.\n if (this.state === \"finished\" && this.holdTime === null) {\n this.currentTime = totalDuration;\n }\n let elapsed = this.currentTime;\n let frameGenerator = generator;\n if (repeat) {\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n iterationProgress === 1 && currentIteration--;\n currentIteration = Math.min(currentIteration, repeat + 1);\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const isOddIteration = Boolean(currentIteration % 2);\n if (isOddIteration) {\n if (repeatType === \"reverse\") {\n iterationProgress = 1 - iterationProgress;\n if (repeatDelay) {\n iterationProgress -= repeatDelay / resolvedDuration;\n }\n }\n else if (repeatType === \"mirror\") {\n frameGenerator = mirroredGenerator;\n }\n }\n elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n }\n /**\n * If we're in negative time, set state as the initial keyframe.\n * This prevents delay: x, duration: 0 animations from finishing\n * instantly.\n */\n const state = isInDelayPhase\n ? { done: false, value: keyframes[0] }\n : frameGenerator.next(elapsed);\n if (mapPercentToKeyframes) {\n state.value = mapPercentToKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done =\n this.speed >= 0\n ? this.currentTime >= totalDuration\n : this.currentTime <= 0;\n }\n const isAnimationFinished = this.holdTime === null &&\n (this.state === \"finished\" || (this.state === \"running\" && done));\n if (isAnimationFinished && finalKeyframe !== undefined) {\n state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe);\n }\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n this.finish();\n }\n return state;\n }\n get duration() {\n const { resolved } = this;\n return resolved ? millisecondsToSeconds(resolved.calculatedDuration) : 0;\n }\n get time() {\n return millisecondsToSeconds(this.currentTime);\n }\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n this.currentTime = newTime;\n if (this.holdTime !== null || this.speed === 0) {\n this.holdTime = newTime;\n }\n else if (this.driver) {\n this.startTime = this.driver.now() - newTime / this.speed;\n }\n }\n get speed() {\n return this.playbackSpeed;\n }\n set speed(newSpeed) {\n const hasChanged = this.playbackSpeed !== newSpeed;\n this.playbackSpeed = newSpeed;\n if (hasChanged) {\n this.time = millisecondsToSeconds(this.currentTime);\n }\n }\n play() {\n if (!this.resolver.isScheduled) {\n this.resolver.resume();\n }\n if (!this._resolved) {\n this.pendingPlayState = \"running\";\n return;\n }\n if (this.isStopped)\n return;\n const { driver = frameloopDriver, onPlay, startTime } = this.options;\n if (!this.driver) {\n this.driver = driver((timestamp) => this.tick(timestamp));\n }\n onPlay && onPlay();\n const now = this.driver.now();\n if (this.holdTime !== null) {\n this.startTime = now - this.holdTime;\n }\n else if (!this.startTime) {\n this.startTime = startTime !== null && startTime !== void 0 ? startTime : this.calcStartTime();\n }\n else if (this.state === \"finished\") {\n this.startTime = now;\n }\n if (this.state === \"finished\") {\n this.updateFinishedPromise();\n }\n this.cancelTime = this.startTime;\n this.holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n this.state = \"running\";\n this.driver.start();\n }\n pause() {\n var _a;\n if (!this._resolved) {\n this.pendingPlayState = \"paused\";\n return;\n }\n this.state = \"paused\";\n this.holdTime = (_a = this.currentTime) !== null && _a !== void 0 ? _a : 0;\n }\n complete() {\n if (this.state !== \"running\") {\n this.play();\n }\n this.pendingPlayState = this.state = \"finished\";\n this.holdTime = null;\n }\n finish() {\n this.teardown();\n this.state = \"finished\";\n const { onComplete } = this.options;\n onComplete && onComplete();\n }\n cancel() {\n if (this.cancelTime !== null) {\n this.tick(this.cancelTime);\n }\n this.teardown();\n this.updateFinishedPromise();\n }\n teardown() {\n this.state = \"idle\";\n this.stopDriver();\n this.resolveFinishedPromise();\n this.updateFinishedPromise();\n this.startTime = this.cancelTime = null;\n this.resolver.cancel();\n activeAnimations.mainThread--;\n }\n stopDriver() {\n if (!this.driver)\n return;\n this.driver.stop();\n this.driver = undefined;\n }\n sample(time) {\n this.startTime = 0;\n return this.tick(time, true);\n }\n}\n// Legacy interface\nfunction animateValue(options) {\n return new MainThreadAnimation(options);\n}\n\nexport { MainThreadAnimation, animateValue };\n","/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n \"opacity\",\n \"clipPath\",\n \"filter\",\n \"transform\",\n // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved\n // or until we implement support for linear() easing.\n // \"background-color\"\n]);\n\nexport { acceleratedValues };\n","import { memo } from 'motion-utils';\n\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\n\nexport { supportsWaapi };\n","import { supportsLinearEasing, attachTimeline, isGenerator, isWaapiSupportedEasing } from 'motion-dom';\nimport { millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { anticipate } from '../../easing/anticipate.mjs';\nimport { backInOut } from '../../easing/back.mjs';\nimport { circInOut } from '../../easing/circ.mjs';\nimport { DOMKeyframesResolver } from '../../render/dom/DOMKeyframesResolver.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { MainThreadAnimation } from './MainThreadAnimation.mjs';\nimport { acceleratedValues } from './utils/accelerated-values.mjs';\nimport { startWaapiAnimation } from './waapi/index.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\nimport { supportsWaapi } from './waapi/utils/supports-waapi.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxDuration = 20000;\n/**\n * Check if an animation can run natively via WAAPI or requires pregenerated keyframes.\n * WAAPI doesn't support spring or function easings so we run these as JS animation before\n * handing off.\n */\nfunction requiresPregeneratedKeyframes(options) {\n return (isGenerator(options.type) ||\n options.type === \"spring\" ||\n !isWaapiSupportedEasing(options.ease));\n}\nfunction pregenerateKeyframes(keyframes, options) {\n /**\n * Create a main-thread animation to pregenerate keyframes.\n * We sample this at regular intervals to generate keyframes that we then\n * linearly interpolate between.\n */\n const sampleAnimation = new MainThreadAnimation({\n ...options,\n keyframes,\n repeat: 0,\n delay: 0,\n isGenerator: true,\n });\n let state = { done: false, value: keyframes[0] };\n const pregeneratedKeyframes = [];\n /**\n * Bail after 20 seconds of pre-generated keyframes as it's likely\n * we're heading for an infinite loop.\n */\n let t = 0;\n while (!state.done && t < maxDuration) {\n state = sampleAnimation.sample(t);\n pregeneratedKeyframes.push(state.value);\n t += sampleDelta;\n }\n return {\n times: undefined,\n keyframes: pregeneratedKeyframes,\n duration: t - sampleDelta,\n ease: \"linear\",\n };\n}\nconst unsupportedEasingFunctions = {\n anticipate,\n backInOut,\n circInOut,\n};\nfunction isUnsupportedEase(key) {\n return key in unsupportedEasingFunctions;\n}\nclass AcceleratedAnimation extends BaseAnimation {\n constructor(options) {\n super(options);\n const { name, motionValue, element, keyframes } = this.options;\n this.resolver = new DOMKeyframesResolver(keyframes, (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe), name, motionValue, element);\n this.resolver.scheduleResolve();\n }\n initPlayback(keyframes, finalKeyframe) {\n let { duration = 300, times, ease, type, motionValue, name, startTime, } = this.options;\n /**\n * If element has since been unmounted, return false to indicate\n * the animation failed to initialised.\n */\n if (!motionValue.owner || !motionValue.owner.current) {\n return false;\n }\n /**\n * If the user has provided an easing function name that isn't supported\n * by WAAPI (like \"anticipate\"), we need to provide the corressponding\n * function. This will later get converted to a linear() easing function.\n */\n if (typeof ease === \"string\" &&\n supportsLinearEasing() &&\n isUnsupportedEase(ease)) {\n ease = unsupportedEasingFunctions[ease];\n }\n /**\n * If this animation needs pre-generated keyframes then generate.\n */\n if (requiresPregeneratedKeyframes(this.options)) {\n const { onComplete, onUpdate, motionValue, element, ...options } = this.options;\n const pregeneratedAnimation = pregenerateKeyframes(keyframes, options);\n keyframes = pregeneratedAnimation.keyframes;\n // If this is a very short animation, ensure we have\n // at least two keyframes to animate between as older browsers\n // can't animate between a single keyframe.\n if (keyframes.length === 1) {\n keyframes[1] = keyframes[0];\n }\n duration = pregeneratedAnimation.duration;\n times = pregeneratedAnimation.times;\n ease = pregeneratedAnimation.ease;\n type = \"keyframes\";\n }\n const animation = startWaapiAnimation(motionValue.owner.current, name, keyframes, { ...this.options, duration, times, ease });\n // Override the browser calculated startTime with one synchronised to other JS\n // and WAAPI animations starting this event loop.\n animation.startTime = startTime !== null && startTime !== void 0 ? startTime : this.calcStartTime();\n if (this.pendingTimeline) {\n attachTimeline(animation, this.pendingTimeline);\n this.pendingTimeline = undefined;\n }\n else {\n /**\n * Prefer the `onfinish` prop as it's more widely supported than\n * the `finished` promise.\n *\n * Here, we synchronously set the provided MotionValue to the end\n * keyframe. If we didn't, when the WAAPI animation is finished it would\n * be removed from the element which would then revert to its old styles.\n */\n animation.onfinish = () => {\n const { onComplete } = this.options;\n motionValue.set(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n onComplete && onComplete();\n this.cancel();\n this.resolveFinishedPromise();\n };\n }\n return {\n animation,\n duration,\n times,\n type,\n ease,\n keyframes: keyframes,\n };\n }\n get duration() {\n const { resolved } = this;\n if (!resolved)\n return 0;\n const { duration } = resolved;\n return millisecondsToSeconds(duration);\n }\n get time() {\n const { resolved } = this;\n if (!resolved)\n return 0;\n const { animation } = resolved;\n return millisecondsToSeconds(animation.currentTime || 0);\n }\n set time(newTime) {\n const { resolved } = this;\n if (!resolved)\n return;\n const { animation } = resolved;\n animation.currentTime = secondsToMilliseconds(newTime);\n }\n get speed() {\n const { resolved } = this;\n if (!resolved)\n return 1;\n const { animation } = resolved;\n return animation.playbackRate;\n }\n set speed(newSpeed) {\n const { resolved } = this;\n if (!resolved)\n return;\n const { animation } = resolved;\n animation.playbackRate = newSpeed;\n }\n get state() {\n const { resolved } = this;\n if (!resolved)\n return \"idle\";\n const { animation } = resolved;\n return animation.playState;\n }\n get startTime() {\n const { resolved } = this;\n if (!resolved)\n return null;\n const { animation } = resolved;\n // Coerce to number as TypeScript incorrectly types this\n // as CSSNumberish\n return animation.startTime;\n }\n /**\n * Replace the default DocumentTimeline with another AnimationTimeline.\n * Currently used for scroll animations.\n */\n attachTimeline(timeline) {\n if (!this._resolved) {\n this.pendingTimeline = timeline;\n }\n else {\n const { resolved } = this;\n if (!resolved)\n return noop;\n const { animation } = resolved;\n attachTimeline(animation, timeline);\n }\n return noop;\n }\n play() {\n if (this.isStopped)\n return;\n const { resolved } = this;\n if (!resolved)\n return;\n const { animation } = resolved;\n if (animation.playState === \"finished\") {\n this.updateFinishedPromise();\n }\n animation.play();\n }\n pause() {\n const { resolved } = this;\n if (!resolved)\n return;\n const { animation } = resolved;\n animation.pause();\n }\n stop() {\n this.resolver.cancel();\n this.isStopped = true;\n if (this.state === \"idle\")\n return;\n this.resolveFinishedPromise();\n this.updateFinishedPromise();\n const { resolved } = this;\n if (!resolved)\n return;\n const { animation, keyframes, duration, type, ease, times } = resolved;\n if (animation.playState === \"idle\" ||\n animation.playState === \"finished\") {\n return;\n }\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read commited styles back out of the DOM, we can\n * create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to calculate velocity for any subsequent animation.\n */\n if (this.time) {\n const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n const sampleAnimation = new MainThreadAnimation({\n ...options,\n keyframes,\n duration,\n type,\n ease,\n times,\n isGenerator: true,\n });\n const sampleTime = secondsToMilliseconds(this.time);\n motionValue.setWithVelocity(sampleAnimation.sample(sampleTime - sampleDelta).value, sampleAnimation.sample(sampleTime).value, sampleDelta);\n }\n const { onStop } = this.options;\n onStop && onStop();\n this.cancel();\n }\n complete() {\n const { resolved } = this;\n if (!resolved)\n return;\n resolved.animation.finish();\n }\n cancel() {\n const { resolved } = this;\n if (!resolved)\n return;\n resolved.animation.cancel();\n }\n static supports(options) {\n const { motionValue, name, repeatDelay, repeatType, damping, type } = options;\n if (!motionValue ||\n !motionValue.owner ||\n !(motionValue.owner.current instanceof HTMLElement)) {\n return false;\n }\n const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n return (supportsWaapi() &&\n name &&\n acceleratedValues.has(name) &&\n /**\n * If we're outputting values to onUpdate then we can't use WAAPI as there's\n * no way to read the value from WAAPI every frame.\n */\n !onUpdate &&\n !transformTemplate &&\n !repeatDelay &&\n repeatType !== \"mirror\" &&\n damping !== 0 &&\n type !== \"inertia\");\n }\n}\n\nexport { AcceleratedAnimation };\n","import { mapEasingToNativeEasing } from 'motion-dom';\nimport { activeAnimations } from '../../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../../stats/buffer.mjs';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeInOut\", times, } = {}) {\n const keyframeOptions = { [valueName]: keyframes };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease, duration);\n /**\n * If this is an easing array, apply to keyframes, not animation as a whole\n */\n if (Array.isArray(easing))\n keyframeOptions.easing = easing;\n if (statsBuffer.value) {\n activeAnimations.waapi++;\n }\n const animation = element.animate(keyframeOptions, {\n delay,\n duration,\n easing: !Array.isArray(easing) ? easing : \"linear\",\n fill: \"both\",\n iterations: repeat + 1,\n direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n });\n if (statsBuffer.value) {\n animation.finished.finally(() => {\n activeAnimations.waapi--;\n });\n }\n return animation;\n}\n\nexport { startWaapiAnimation };\n","import { transformProps } from '../../render/html/utils/keys-transform.mjs';\n\nconst underDampedSpring = {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n type: \"spring\",\n stiffness: 550,\n damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n restSpeed: 10,\n});\nconst keyframesTransition = {\n type: \"keyframes\",\n duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n type: \"keyframes\",\n ease: [0.25, 0.1, 0.35, 1],\n duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n if (keyframes.length > 2) {\n return keyframesTransition;\n }\n else if (transformProps.has(valueKey)) {\n return valueKey.startsWith(\"scale\")\n ? criticallyDampedSpring(keyframes[1])\n : underDampedSpring;\n }\n return ease;\n};\n\nexport { getDefaultTransition };\n","import { getValueTransition, GroupPlaybackControls } from 'motion-dom';\nimport { secondsToMilliseconds } from 'motion-utils';\nimport { frame } from '../../frameloop/frame.mjs';\nimport { MotionGlobalConfig } from '../../utils/GlobalConfig.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { AcceleratedAnimation } from '../animators/AcceleratedAnimation.mjs';\nimport { MainThreadAnimation } from '../animators/MainThreadAnimation.mjs';\nimport { getFinalKeyframe } from '../animators/waapi/utils/get-final-keyframe.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n const valueTransition = getValueTransition(transition, name) || {};\n /**\n * Most transition values are currently completely overwritten by value-specific\n * transitions. In the future it'd be nicer to blend these transitions. But for now\n * delay actually does inherit from the root transition if not value-specific.\n */\n const delay = valueTransition.delay || transition.delay || 0;\n /**\n * Elapsed isn't a public transition option but can be passed through from\n * optimized appear effects in milliseconds.\n */\n let { elapsed = 0 } = transition;\n elapsed = elapsed - secondsToMilliseconds(delay);\n let options = {\n keyframes: Array.isArray(target) ? target : [null, target],\n ease: \"easeOut\",\n velocity: value.getVelocity(),\n ...valueTransition,\n delay: -elapsed,\n onUpdate: (v) => {\n value.set(v);\n valueTransition.onUpdate && valueTransition.onUpdate(v);\n },\n onComplete: () => {\n onComplete();\n valueTransition.onComplete && valueTransition.onComplete();\n },\n name,\n motionValue: value,\n element: isHandoff ? undefined : element,\n };\n /**\n * If there's no transition defined for this value, we can generate\n * unqiue transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n options = {\n ...options,\n ...getDefaultTransition(name, options),\n };\n }\n /**\n * Both WAAPI and our internal animation functions use durations\n * as defined by milliseconds, while our external API defines them\n * as seconds.\n */\n if (options.duration) {\n options.duration = secondsToMilliseconds(options.duration);\n }\n if (options.repeatDelay) {\n options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n }\n if (options.from !== undefined) {\n options.keyframes[0] = options.from;\n }\n let shouldSkip = false;\n if (options.type === false ||\n (options.duration === 0 && !options.repeatDelay)) {\n options.duration = 0;\n if (options.delay === 0) {\n shouldSkip = true;\n }\n }\n if (instantAnimationState.current ||\n MotionGlobalConfig.skipAnimations) {\n shouldSkip = true;\n options.duration = 0;\n options.delay = 0;\n }\n /**\n * If we can or must skip creating the animation, and apply only\n * the final keyframe, do so. We also check once keyframes are resolved but\n * this early check prevents the need to create an animation at all.\n */\n if (shouldSkip && !isHandoff && value.get() !== undefined) {\n const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n if (finalKeyframe !== undefined) {\n frame.update(() => {\n options.onUpdate(finalKeyframe);\n options.onComplete();\n });\n // We still want to return some animation controls here rather\n // than returning undefined\n return new GroupPlaybackControls([]);\n }\n }\n /**\n * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n * optimised animation.\n */\n if (!isHandoff && AcceleratedAnimation.supports(options)) {\n return new AcceleratedAnimation(options);\n }\n else {\n return new MainThreadAnimation(options);\n }\n};\n\nexport { animateMotionValue };\n","/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n return !!Object.keys(transition).length;\n}\n\nexport { isTransitionDefined };\n","import { getValueTransition } from 'motion-dom';\nimport { positionalKeys } from '../../render/html/utils/keys-position.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n needsAnimating[key] = false;\n return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n var _a;\n let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = targetAndTransition;\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n for (const key in target) {\n const value = visualElement.getValue(key, (_a = visualElement.latestValues[key]) !== null && _a !== void 0 ? _a : null);\n const valueTarget = target[key];\n if (valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n ...getValueTransition(transition || {}, key),\n };\n /**\n * If this is the first time a value is being animated, check\n * to see if we're handling off from an existing animation.\n */\n let isHandoff = false;\n if (window.MotionHandoffAnimation) {\n const appearId = getOptimisedAppearId(visualElement);\n if (appearId) {\n const startTime = window.MotionHandoffAnimation(appearId, key, frame);\n if (startTime !== null) {\n valueTransition.startTime = startTime;\n isHandoff = true;\n }\n }\n }\n addValueToWillChange(visualElement, key);\n value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && positionalKeys.has(key)\n ? { type: false }\n : valueTransition, visualElement, isHandoff));\n const animation = value.animation;\n if (animation) {\n animations.push(animation);\n }\n }\n if (transitionEnd) {\n Promise.all(animations).then(() => {\n frame.update(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n });\n }\n return animations;\n}\n\nexport { animateTarget };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n var _a;\n const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n : undefined);\n let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n if (options.transitionOverride) {\n transition = options.transitionOverride;\n }\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getAnimation = resolved\n ? () => Promise.all(animateTarget(visualElement, resolved, options))\n : () => Promise.resolve();\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n ? (forwardDelay = 0) => {\n const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options);\n }\n : () => Promise.resolve();\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n const { when } = transition;\n if (when) {\n const [first, last] = when === \"beforeChildren\"\n ? [getAnimation, getChildAnimations]\n : [getChildAnimations, getAnimation];\n return first().then(() => last());\n }\n else {\n return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n }\n}\nfunction animateChildren(visualElement, variant, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n const generateStaggerDuration = staggerDirection === 1\n ? (i = 0) => i * staggerChildren\n : (i = 0) => maxStaggerDuration - i * staggerChildren;\n Array.from(visualElement.variantChildren)\n .sort(sortByTreeOrder)\n .forEach((child, i) => {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delayChildren + generateStaggerDuration(i),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n });\n return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n return a.sortNodePosition(b);\n}\n\nexport { animateVariant, sortByTreeOrder };\n","function shallowCompare(next, prev) {\n if (!Array.isArray(prev))\n return false;\n const prevLength = prev.length;\n if (prevLength !== next.length)\n return false;\n for (let i = 0; i < prevLength; i++) {\n if (prev[i] !== next[i])\n return false;\n }\n return true;\n}\n\nexport { shallowCompare };\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n","const variantPriorityOrder = [\n \"animate\",\n \"whileInView\",\n \"whileFocus\",\n \"whileHover\",\n \"whileTap\",\n \"whileDrag\",\n \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n","import { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nconst numVariantProps = variantProps.length;\nfunction getVariantContext(visualElement) {\n if (!visualElement)\n return undefined;\n if (!visualElement.isControllingVariants) {\n const context = visualElement.parent\n ? getVariantContext(visualElement.parent) || {}\n : {};\n if (visualElement.props.initial !== undefined) {\n context.initial = visualElement.props.initial;\n }\n return context;\n }\n const context = {};\n for (let i = 0; i < numVariantProps; i++) {\n const name = variantProps[i];\n const prop = visualElement.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\n}\n\nexport { getVariantContext };\n","import { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { getVariantContext } from './get-variant-context.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n let animate = animateList(visualElement);\n let state = createState();\n let isInitialRender = true;\n /**\n * This function will be used to reduce the animation definitions for\n * each active animation type into an object of resolved values for it.\n */\n const buildResolvedTypeValues = (type) => (acc, definition) => {\n var _a;\n const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n : undefined);\n if (resolved) {\n const { transition, transitionEnd, ...target } = resolved;\n acc = { ...acc, ...target, ...transitionEnd };\n }\n return acc;\n };\n /**\n * This just allows us to inject mocked animation functions\n * @internal\n */\n function setAnimateFunction(makeAnimator) {\n animate = makeAnimator(visualElement);\n }\n /**\n * When we receive new props, we need to:\n * 1. Create a list of protected keys for each type. This is a directory of\n * value keys that are currently being \"handled\" by types of a higher priority\n * so that whenever an animation is played of a given type, these values are\n * protected from being animated.\n * 2. Determine if an animation type needs animating.\n * 3. Determine if any values have been removed from a type and figure out\n * what to animate those to.\n */\n function animateChanges(changedActiveType) {\n const { props } = visualElement;\n const context = getVariantContext(visualElement.parent) || {};\n /**\n * A list of animations that we'll build into as we iterate through the animation\n * types. This will get executed at the end of the function.\n */\n const animations = [];\n /**\n * Keep track of which values have been removed. Then, as we hit lower priority\n * animation types, we can check if they contain removed values and animate to that.\n */\n const removedKeys = new Set();\n /**\n * A dictionary of all encountered keys. This is an object to let us build into and\n * copy it without iteration. Each time we hit an animation type we set its protected\n * keys - the keys its not allowed to animate - to the latest version of this object.\n */\n let encounteredKeys = {};\n /**\n * If a variant has been removed at a given index, and this component is controlling\n * variant animations, we want to ensure lower-priority variants are forced to animate.\n */\n let removedVariantIndex = Infinity;\n /**\n * Iterate through all animation types in reverse priority order. For each, we want to\n * detect which values it's handling and whether or not they've changed (and therefore\n * need to be animated). If any values have been removed, we want to detect those in\n * lower priority props and flag for animation.\n */\n for (let i = 0; i < numAnimationTypes; i++) {\n const type = reversePriorityOrder[i];\n const typeState = state[type];\n const prop = props[type] !== undefined\n ? props[type]\n : context[type];\n const propIsVariant = isVariantLabel(prop);\n /**\n * If this type has *just* changed isActive status, set activeDelta\n * to that status. Otherwise set to null.\n */\n const activeDelta = type === changedActiveType ? typeState.isActive : null;\n if (activeDelta === false)\n removedVariantIndex = i;\n /**\n * If this prop is an inherited variant, rather than been set directly on the\n * component itself, we want to make sure we allow the parent to trigger animations.\n *\n * TODO: Can probably change this to a !isControllingVariants check\n */\n let isInherited = prop === context[type] &&\n prop !== props[type] &&\n propIsVariant;\n /**\n *\n */\n if (isInherited &&\n isInitialRender &&\n visualElement.manuallyAnimateOnMount) {\n isInherited = false;\n }\n /**\n * Set all encountered keys so far as the protected keys for this type. This will\n * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n */\n typeState.protectedKeys = { ...encounteredKeys };\n // Check if we can skip analysing this prop early\n if (\n // If it isn't active and hasn't *just* been set as inactive\n (!typeState.isActive && activeDelta === null) ||\n // If we didn't and don't have any defined prop for this animation type\n (!prop && !typeState.prevProp) ||\n // Or if the prop doesn't define an animation\n isAnimationControls(prop) ||\n typeof prop === \"boolean\") {\n continue;\n }\n /**\n * As we go look through the values defined on this type, if we detect\n * a changed value or a value that was removed in a higher priority, we set\n * this to true and add this prop to the animation list.\n */\n const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n let shouldAnimateType = variantDidChange ||\n // If we're making this variant active, we want to always make it active\n (type === changedActiveType &&\n typeState.isActive &&\n !isInherited &&\n propIsVariant) ||\n // If we removed a higher-priority variant (i is in reverse order)\n (i > removedVariantIndex && propIsVariant);\n let handledRemovedValues = false;\n /**\n * As animations can be set as variant lists, variants or target objects, we\n * coerce everything to an array if it isn't one already\n */\n const definitionList = Array.isArray(prop) ? prop : [prop];\n /**\n * Build an object of all the resolved values. We'll use this in the subsequent\n * animateChanges calls to determine whether a value has changed.\n */\n let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n if (activeDelta === false)\n resolvedValues = {};\n /**\n * Now we need to loop through all the keys in the prev prop and this prop,\n * and decide:\n * 1. If the value has changed, and needs animating\n * 2. If it has been removed, and needs adding to the removedKeys set\n * 3. If it has been removed in a higher priority type and needs animating\n * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n * needs adding to the type's protectedKeys list.\n */\n const { prevResolvedValues = {} } = typeState;\n const allKeys = {\n ...prevResolvedValues,\n ...resolvedValues,\n };\n const markToAnimate = (key) => {\n shouldAnimateType = true;\n if (removedKeys.has(key)) {\n handledRemovedValues = true;\n removedKeys.delete(key);\n }\n typeState.needsAnimating[key] = true;\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = false;\n };\n for (const key in allKeys) {\n const next = resolvedValues[key];\n const prev = prevResolvedValues[key];\n // If we've already handled this we can just skip ahead\n if (encounteredKeys.hasOwnProperty(key))\n continue;\n /**\n * If the value has changed, we probably want to animate it.\n */\n let valueHasChanged = false;\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n valueHasChanged = !shallowCompare(next, prev);\n }\n else {\n valueHasChanged = next !== prev;\n }\n if (valueHasChanged) {\n if (next !== undefined && next !== null) {\n // If next is defined and doesn't equal prev, it needs animating\n markToAnimate(key);\n }\n else {\n // If it's undefined, it's been removed.\n removedKeys.add(key);\n }\n }\n else if (next !== undefined && removedKeys.has(key)) {\n /**\n * If next hasn't changed and it isn't undefined, we want to check if it's\n * been removed by a higher priority\n */\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we add it to the list of protected values\n * to ensure it doesn't get animated.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n /**\n * Update the typeState so next time animateChanges is called we can compare the\n * latest prop and resolvedValues to these.\n */\n typeState.prevProp = prop;\n typeState.prevResolvedValues = resolvedValues;\n /**\n *\n */\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if (isInitialRender && visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to skip this animation\n * unless the inherited variants haven't changed on this render.\n */\n const willAnimateViaParent = isInherited && variantDidChange;\n const needsAnimating = !willAnimateViaParent || handledRemovedValues;\n if (shouldAnimateType && needsAnimating) {\n animations.push(...definitionList.map((animation) => ({\n animation: animation,\n options: { type },\n })));\n }\n }\n /**\n * If there are some removed value that haven't been dealt with,\n * we need to create a new animation that falls back either to the value\n * defined in the style prop, or the last read value.\n */\n if (removedKeys.size) {\n const fallbackAnimation = {};\n /**\n * If the initial prop contains a transition we can use that, otherwise\n * allow the animation function to use the visual element's default.\n */\n if (typeof props.initial !== \"boolean\") {\n const initialTransition = resolveVariant(visualElement, Array.isArray(props.initial)\n ? props.initial[0]\n : props.initial);\n if (initialTransition && initialTransition.transition) {\n fallbackAnimation.transition = initialTransition.transition;\n }\n }\n removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = true;\n // @ts-expect-error - @mattgperry to figure if we should do something here\n fallbackAnimation[key] = fallbackTarget !== null && fallbackTarget !== void 0 ? fallbackTarget : null;\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n (props.initial === false || props.initial === props.animate) &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = false;\n return shouldAnimate ? animate(animations) : Promise.resolve();\n }\n /**\n * Change whether a certain animation type is active.\n */\n function setActive(type, isActive) {\n var _a;\n // If the active state hasn't changed, we can safely do nothing here\n if (state[type].isActive === isActive)\n return Promise.resolve();\n // Propagate active change to children\n (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n state[type].isActive = isActive;\n const animations = animateChanges(type);\n for (const key in state) {\n state[key].protectedKeys = {};\n }\n return animations;\n }\n return {\n animateChanges,\n setActive,\n setAnimateFunction,\n getState: () => state,\n reset: () => {\n state = createState();\n isInitialRender = true;\n },\n };\n}\nfunction checkVariantsDidChange(prev, next) {\n if (typeof next === \"string\") {\n return next !== prev;\n }\n else if (Array.isArray(next)) {\n return !shallowCompare(next, prev);\n }\n return false;\n}\nfunction createTypeState(isActive = false) {\n return {\n isActive,\n protectedKeys: {},\n needsAnimating: {},\n prevResolvedValues: {},\n };\n}\nfunction createState() {\n return {\n animate: createTypeState(true),\n whileInView: createTypeState(),\n whileHover: createTypeState(),\n whileTap: createTypeState(),\n whileDrag: createTypeState(),\n whileFocus: createTypeState(),\n exit: createTypeState(),\n };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n visualElement.notify(\"AnimationStart\", definition);\n let animation;\n if (Array.isArray(definition)) {\n const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n animation = Promise.all(animations);\n }\n else if (typeof definition === \"string\") {\n animation = animateVariant(visualElement, definition, options);\n }\n else {\n const resolvedDefinition = typeof definition === \"function\"\n ? resolveVariant(visualElement, definition, options.custom)\n : definition;\n animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n }\n return animation.then(() => {\n visualElement.notify(\"AnimationComplete\", definition);\n });\n}\n\nexport { animateVisualElement };\n","class Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\nexport { Feature };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => {\n onExitComplete(this.id);\n });\n }\n }\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {};\n if (onExitComplete) {\n onExitComplete(this.id);\n }\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n\nexport { animations };\n","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass AnimationFeature extends Feature {\n /**\n * We dynamically generate the AnimationState manager as it contains a reference\n * to the underlying animation library. We only want to load that if we load this,\n * so people can optionally code split it out using the `m` component.\n */\n constructor(node) {\n super(node);\n node.animationState || (node.animationState = createAnimationState(node));\n }\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps();\n if (isAnimationControls(animate)) {\n this.unmountControls = animate.subscribe(this.node);\n }\n }\n /**\n * Subscribe any provided AnimationControls to the component's VisualElement\n */\n mount() {\n this.updateAnimationControlsSubscription();\n }\n update() {\n const { animate } = this.node.getProps();\n const { animate: prevAnimate } = this.node.prevProps || {};\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription();\n }\n }\n unmount() {\n var _a;\n this.node.animationState.reset();\n (_a = this.unmountControls) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n}\n\nexport { AnimationFeature };\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n target.addEventListener(eventName, handler, options);\n return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n","import { isPrimaryPointer } from 'motion-dom';\n\nfunction extractEventInfo(event) {\n return {\n point: {\n x: event.pageX,\n y: event.pageY,\n },\n };\n}\nconst addPointerInfo = (handler) => {\n return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n // Multi-dimensional\n const xDelta = distance(a.x, b.x);\n const yDelta = distance(a.y, b.y);\n return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n","import { isPrimaryPointer } from 'motion-dom';\nimport { secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n constructor(event, handlers, { transformPagePoint, contextWindow, dragSnapToOrigin = false, } = {}) {\n /**\n * @internal\n */\n this.startEvent = null;\n /**\n * @internal\n */\n this.lastMoveEvent = null;\n /**\n * @internal\n */\n this.lastMoveEventInfo = null;\n /**\n * @internal\n */\n this.handlers = {};\n /**\n * @internal\n */\n this.contextWindow = window;\n this.updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const info = getPanInfo(this.lastMoveEventInfo, this.history);\n const isPanStarted = this.startEvent !== null;\n // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursoe.\n const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\n if (!isPanStarted && !isDistancePastThreshold)\n return;\n const { point } = info;\n const { timestamp } = frameData;\n this.history.push({ ...point, timestamp });\n const { onStart, onMove } = this.handlers;\n if (!isPanStarted) {\n onStart && onStart(this.lastMoveEvent, info);\n this.startEvent = this.lastMoveEvent;\n }\n onMove && onMove(this.lastMoveEvent, info);\n };\n this.handlePointerMove = (event, info) => {\n this.lastMoveEvent = event;\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n // Throttle mouse move event to once per frame\n frame.update(this.updatePoint, true);\n };\n this.handlePointerUp = (event, info) => {\n this.end();\n const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n if (this.dragSnapToOrigin)\n resumeAnimation && resumeAnimation();\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const panInfo = getPanInfo(event.type === \"pointercancel\"\n ? this.lastMoveEventInfo\n : transformPoint(info, this.transformPagePoint), this.history);\n if (this.startEvent && onEnd) {\n onEnd(event, panInfo);\n }\n onSessionEnd && onSessionEnd(event, panInfo);\n };\n // If we have more than one touch, don't start detecting this gesture\n if (!isPrimaryPointer(event))\n return;\n this.dragSnapToOrigin = dragSnapToOrigin;\n this.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\n this.contextWindow = contextWindow || window;\n const info = extractEventInfo(event);\n const initialInfo = transformPoint(info, this.transformPagePoint);\n const { point } = initialInfo;\n const { timestamp } = frameData;\n this.history = [{ ...point, timestamp }];\n const { onSessionStart } = handlers;\n onSessionStart &&\n onSessionStart(event, getPanInfo(initialInfo, this.history));\n this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n }\n updateHandlers(handlers) {\n this.handlers = handlers;\n }\n end() {\n this.removeListeners && this.removeListeners();\n cancelFrame(this.updatePoint);\n }\n}\nfunction transformPoint(info, transformPagePoint) {\n return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n return {\n point,\n delta: subtractPoint(point, lastDevicePoint(history)),\n offset: subtractPoint(point, startDevicePoint(history)),\n velocity: getVelocity(history, 0.1),\n };\n}\nfunction startDevicePoint(history) {\n return history[0];\n}\nfunction lastDevicePoint(history) {\n return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n if (history.length < 2) {\n return { x: 0, y: 0 };\n }\n let i = history.length - 1;\n let timestampedPoint = null;\n const lastPoint = lastDevicePoint(history);\n while (i >= 0) {\n timestampedPoint = history[i];\n if (lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta)) {\n break;\n }\n i--;\n }\n if (!timestampedPoint) {\n return { x: 0, y: 0 };\n }\n const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n if (time === 0) {\n return { x: 0, y: 0 };\n }\n const currentVelocity = {\n x: (lastPoint.x - timestampedPoint.x) / time,\n y: (lastPoint.y - timestampedPoint.y) / time,\n };\n if (currentVelocity.x === Infinity) {\n currentVelocity.x = 0;\n }\n if (currentVelocity.y === Infinity) {\n currentVelocity.y = 0;\n }\n return currentVelocity;\n}\n\nexport { PanSession };\n","function isRefObject(ref) {\n return (ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","import { mixNumber } from '../../utils/mix/number.mjs';\n\nconst SCALE_PRECISION = 0.0001;\nconst SCALE_MIN = 1 - SCALE_PRECISION;\nconst SCALE_MAX = 1 + SCALE_PRECISION;\nconst TRANSLATE_PRECISION = 0.01;\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\nfunction isNear(value, target, maxDistance) {\n return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n delta.origin = origin;\n delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n delta.translate =\n mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n isNaN(delta.scale)) {\n delta.scale = 1.0;\n }\n if ((delta.translate >= TRANSLATE_MIN &&\n delta.translate <= TRANSLATE_MAX) ||\n isNaN(delta.translate)) {\n delta.translate = 0.0;\n }\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent) {\n target.min = parent.min + relative.min;\n target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n calcRelativeAxis(target.x, relative.x, parent.x);\n calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n target.min = layout.min - parent.min;\n target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n calcRelativeAxisPosition(target.x, layout.x, parent.x);\n calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","import { progress } from 'motion-utils';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n if (min !== undefined && point < min) {\n // If we have a min point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(min, point, elastic.min)\n : Math.max(point, min);\n }\n else if (max !== undefined && point > max) {\n // If we have a max point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(max, point, elastic.max)\n : Math.min(point, max);\n }\n return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n return {\n min: min !== undefined ? axis.min + min : undefined,\n max: max !== undefined\n ? axis.max + max - (axis.max - axis.min)\n : undefined,\n };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n return {\n x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n let min = constraintsAxis.min - layoutAxis.min;\n let max = constraintsAxis.max - layoutAxis.max;\n // If the constraints axis is actually smaller than the layout axis then we can\n // flip the constraints\n if (constraintsAxis.max - constraintsAxis.min <\n layoutAxis.max - layoutAxis.min) {\n [min, max] = [max, min];\n }\n return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n return {\n x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n let origin = 0.5;\n const sourceLength = calcLength(source);\n const targetLength = calcLength(target);\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n }\n else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n const relativeConstraints = {};\n if (constraints.min !== undefined) {\n relativeConstraints.min = constraints.min - layout.min;\n }\n if (constraints.max !== undefined) {\n relativeConstraints.max = constraints.max - layout.min;\n }\n return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n if (dragElastic === false) {\n dragElastic = 0;\n }\n else if (dragElastic === true) {\n dragElastic = defaultElastic;\n }\n return {\n x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n };\n}\nfunction resolvePointElastic(dragElastic, label) {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n","const createAxisDelta = () => ({\n translate: 0,\n scale: 1,\n origin: 0,\n originPoint: 0,\n});\nconst createDelta = () => ({\n x: createAxisDelta(),\n y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n x: createAxis(),\n y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n","function eachAxis(callback) {\n return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n return {\n x: { min: left, max: right },\n y: { min: top, max: bottom },\n };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n if (!transformPoint)\n return point;\n const topLeft = transformPoint({ x: point.left, y: point.top });\n const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n return {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n","function isIdentityScale(scale) {\n return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n return (!isIdentityScale(scale) ||\n !isIdentityScale(scaleX) ||\n !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n return (hasScale(values) ||\n has2DTranslate(values) ||\n values.z ||\n values.rotate ||\n values.rotateX ||\n values.rotateY ||\n values.skewX ||\n values.skewY);\n}\nfunction has2DTranslate(values) {\n return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n const distanceFromOrigin = point - originPoint;\n const scaled = scale * distanceFromOrigin;\n return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n if (boxScale !== undefined) {\n point = scalePoint(point, boxScale, originPoint);\n }\n return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\nconst TREE_SCALE_SNAP_MIN = 0.999999999999;\nconst TREE_SCALE_SNAP_MAX = 1.0000000000001;\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n const treeLength = treePath.length;\n if (!treeLength)\n return;\n // Reset the treeScale\n treeScale.x = treeScale.y = 1;\n let node;\n let delta;\n for (let i = 0; i < treeLength; i++) {\n node = treePath[i];\n delta = node.projectionDelta;\n /**\n * TODO: Prefer to remove this, but currently we have motion components with\n * display: contents in Framer.\n */\n const { visualElement } = node.options;\n if (visualElement &&\n visualElement.props.style &&\n visualElement.props.style.display === \"contents\") {\n continue;\n }\n if (isSharedTransition &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(box, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (delta) {\n // Incoporate each ancestor's scale into a culmulative treeScale for this component\n treeScale.x *= delta.x.scale;\n treeScale.y *= delta.y.scale;\n // Apply each ancestor's calculated delta into this component's recorded layout box\n applyBoxDelta(box, delta);\n }\n if (isSharedTransition && hasTransform(node.latestValues)) {\n transformBox(box, node.latestValues);\n }\n }\n /**\n * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n * This will help reduce useless scales getting rendered.\n */\n if (treeScale.x < TREE_SCALE_SNAP_MAX &&\n treeScale.x > TREE_SCALE_SNAP_MIN) {\n treeScale.x = 1.0;\n }\n if (treeScale.y < TREE_SCALE_SNAP_MAX &&\n treeScale.y > TREE_SCALE_SNAP_MIN) {\n treeScale.y = 1.0;\n }\n}\nfunction translateAxis(axis, distance) {\n axis.min = axis.min + distance;\n axis.max = axis.max + distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {\n const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n // Apply the axis delta to the final axis\n applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);\n}\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n transformAxis(box.x, transform.x, transform.scaleX, transform.scale, transform.originX);\n transformAxis(box.y, transform.y, transform.scaleY, transform.scale, transform.originY);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n const viewportBox = measureViewportBox(element, transformPagePoint);\n const { scroll } = rootProjectionNode;\n if (scroll) {\n translateAxis(viewportBox.x, scroll.offset.x);\n translateAxis(viewportBox.y, scroll.offset.y);\n }\n return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n","// Fixes https://github.com/motiondivision/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n","import { invariant } from 'motion-utils';\nimport { setDragLock } from 'motion-dom';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n constructor(visualElement) {\n this.openDragLock = null;\n this.isDragging = false;\n this.currentDirection = null;\n this.originPoint = { x: 0, y: 0 };\n /**\n * The permitted boundaries of travel, in pixels.\n */\n this.constraints = false;\n this.hasMutatedConstraints = false;\n /**\n * The per-axis resolved elastic values.\n */\n this.elastic = createBox();\n this.visualElement = visualElement;\n }\n start(originEvent, { snapToCursor = false } = {}) {\n /**\n * Don't start dragging if this component is exiting\n */\n const { presenceContext } = this.visualElement;\n if (presenceContext && presenceContext.isPresent === false)\n return;\n const onSessionStart = (event) => {\n const { dragSnapToOrigin } = this.getProps();\n // Stop or pause any animations on both axis values immediately. This allows the user to throw and catch\n // the component.\n dragSnapToOrigin ? this.pauseAnimation() : this.stopAnimation();\n if (snapToCursor) {\n this.snapToCursor(extractEventInfo(event).point);\n }\n };\n const onStart = (event, info) => {\n // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n const { drag, dragPropagation, onDragStart } = this.getProps();\n if (drag && !dragPropagation) {\n if (this.openDragLock)\n this.openDragLock();\n this.openDragLock = setDragLock(drag);\n // If we don 't have the lock, don't start dragging\n if (!this.openDragLock)\n return;\n }\n this.isDragging = true;\n this.currentDirection = null;\n this.resolveConstraints();\n if (this.visualElement.projection) {\n this.visualElement.projection.isAnimationBlocked = true;\n this.visualElement.projection.target = undefined;\n }\n /**\n * Record gesture origin\n */\n eachAxis((axis) => {\n let current = this.getAxisMotionValue(axis).get() || 0;\n /**\n * If the MotionValue is a percentage value convert to px\n */\n if (percent.test(current)) {\n const { projection } = this.visualElement;\n if (projection && projection.layout) {\n const measuredAxis = projection.layout.layoutBox[axis];\n if (measuredAxis) {\n const length = calcLength(measuredAxis);\n current = length * (parseFloat(current) / 100);\n }\n }\n }\n this.originPoint[axis] = current;\n });\n // Fire onDragStart event\n if (onDragStart) {\n frame.postRender(() => onDragStart(event, info));\n }\n addValueToWillChange(this.visualElement, \"transform\");\n const { animationState } = this.visualElement;\n animationState && animationState.setActive(\"whileDrag\", true);\n };\n const onMove = (event, info) => {\n // latestPointerEvent = event\n const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openDragLock)\n return;\n const { offset } = info;\n // Attempt to detect drag direction if directionLock is true\n if (dragDirectionLock && this.currentDirection === null) {\n this.currentDirection = getCurrentDirection(offset);\n // If we've successfully set a direction, notify listener\n if (this.currentDirection !== null) {\n onDirectionLock && onDirectionLock(this.currentDirection);\n }\n return;\n }\n // Update each point with the latest position\n this.updateAxis(\"x\", info.point, offset);\n this.updateAxis(\"y\", info.point, offset);\n /**\n * Ideally we would leave the renderer to fire naturally at the end of\n * this frame but if the element is about to change layout as the result\n * of a re-render we want to ensure the browser can read the latest\n * bounding box to ensure the pointer and element don't fall out of sync.\n */\n this.visualElement.render();\n /**\n * This must fire after the render call as it might trigger a state\n * change which itself might trigger a layout update.\n */\n onDrag && onDrag(event, info);\n };\n const onSessionEnd = (event, info) => this.stop(event, info);\n const resumeAnimation = () => eachAxis((axis) => {\n var _a;\n return this.getAnimationState(axis) === \"paused\" &&\n ((_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.play());\n });\n const { dragSnapToOrigin } = this.getProps();\n this.panSession = new PanSession(originEvent, {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n resumeAnimation,\n }, {\n transformPagePoint: this.visualElement.getTransformPagePoint(),\n dragSnapToOrigin,\n contextWindow: getContextWindow(this.visualElement),\n });\n }\n stop(event, info) {\n const isDragging = this.isDragging;\n this.cancel();\n if (!isDragging)\n return;\n const { velocity } = info;\n this.startAnimation(velocity);\n const { onDragEnd } = this.getProps();\n if (onDragEnd) {\n frame.postRender(() => onDragEnd(event, info));\n }\n }\n cancel() {\n this.isDragging = false;\n const { projection, animationState } = this.visualElement;\n if (projection) {\n projection.isAnimationBlocked = false;\n }\n this.panSession && this.panSession.end();\n this.panSession = undefined;\n const { dragPropagation } = this.getProps();\n if (!dragPropagation && this.openDragLock) {\n this.openDragLock();\n this.openDragLock = null;\n }\n animationState && animationState.setActive(\"whileDrag\", false);\n }\n updateAxis(axis, _point, offset) {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n return;\n const axisValue = this.getAxisMotionValue(axis);\n let next = this.originPoint[axis] + offset[axis];\n // Apply constraints\n if (this.constraints && this.constraints[axis]) {\n next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n }\n axisValue.set(next);\n }\n resolveConstraints() {\n var _a;\n const { dragConstraints, dragElastic } = this.getProps();\n const layout = this.visualElement.projection &&\n !this.visualElement.projection.layout\n ? this.visualElement.projection.measure(false)\n : (_a = this.visualElement.projection) === null || _a === void 0 ? void 0 : _a.layout;\n const prevConstraints = this.constraints;\n if (dragConstraints && isRefObject(dragConstraints)) {\n if (!this.constraints) {\n this.constraints = this.resolveRefConstraints();\n }\n }\n else {\n if (dragConstraints && layout) {\n this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n }\n else {\n this.constraints = false;\n }\n }\n this.elastic = resolveDragElastic(dragElastic);\n /**\n * If we're outputting to external MotionValues, we want to rebase the measured constraints\n * from viewport-relative to component-relative.\n */\n if (prevConstraints !== this.constraints &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints) {\n eachAxis((axis) => {\n if (this.constraints !== false &&\n this.getAxisMotionValue(axis)) {\n this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n }\n });\n }\n }\n resolveRefConstraints() {\n const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n if (!constraints || !isRefObject(constraints))\n return false;\n const constraintsElement = constraints.current;\n invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\");\n const { projection } = this.visualElement;\n // TODO\n if (!projection || !projection.layout)\n return false;\n const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n /**\n * If there's an onMeasureDragConstraints listener we call it and\n * if different constraints are returned, set constraints to that\n */\n if (onMeasureDragConstraints) {\n const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n this.hasMutatedConstraints = !!userConstraints;\n if (userConstraints) {\n measuredConstraints = convertBoundingBoxToBox(userConstraints);\n }\n }\n return measuredConstraints;\n }\n startAnimation(velocity) {\n const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n const constraints = this.constraints || {};\n const momentumAnimations = eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) {\n return;\n }\n let transition = (constraints && constraints[axis]) || {};\n if (dragSnapToOrigin)\n transition = { min: 0, max: 0 };\n /**\n * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n * of spring animations so we should look into adding a disable spring option to `inertia`.\n * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n * using the value of `dragElastic`.\n */\n const bounceStiffness = dragElastic ? 200 : 1000000;\n const bounceDamping = dragElastic ? 40 : 10000000;\n const inertia = {\n type: \"inertia\",\n velocity: dragMomentum ? velocity[axis] : 0,\n bounceStiffness,\n bounceDamping,\n timeConstant: 750,\n restDelta: 1,\n restSpeed: 10,\n ...dragTransition,\n ...transition,\n };\n // If we're not animating on an externally-provided `MotionValue` we can use the\n // component's animation controls which will handle interactions with whileHover (etc),\n // otherwise we just have to animate the `MotionValue` itself.\n return this.startAxisValueAnimation(axis, inertia);\n });\n // Run all animations and then resolve the new drag constraints.\n return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n }\n startAxisValueAnimation(axis, transition) {\n const axisValue = this.getAxisMotionValue(axis);\n addValueToWillChange(this.visualElement, axis);\n return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement, false));\n }\n stopAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n }\n pauseAnimation() {\n eachAxis((axis) => { var _a; return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.pause(); });\n }\n getAnimationState(axis) {\n var _a;\n return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.state;\n }\n /**\n * Drag works differently depending on which props are provided.\n *\n * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n * - Otherwise, we apply the delta to the x/y motion values.\n */\n getAxisMotionValue(axis) {\n const dragKey = `_drag${axis.toUpperCase()}`;\n const props = this.visualElement.getProps();\n const externalMotionValue = props[dragKey];\n return externalMotionValue\n ? externalMotionValue\n : this.visualElement.getValue(axis, (props.initial\n ? props.initial[axis]\n : undefined) || 0);\n }\n snapToCursor(point) {\n eachAxis((axis) => {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!shouldDrag(axis, drag, this.currentDirection))\n return;\n const { projection } = this.visualElement;\n const axisValue = this.getAxisMotionValue(axis);\n if (projection && projection.layout) {\n const { min, max } = projection.layout.layoutBox[axis];\n axisValue.set(point[axis] - mixNumber(min, max, 0.5));\n }\n });\n }\n /**\n * When the viewport resizes we want to check if the measured constraints\n * have changed and, if so, reposition the element within those new constraints\n * relative to where it was before the resize.\n */\n scalePositionWithinConstraints() {\n if (!this.visualElement.current)\n return;\n const { drag, dragConstraints } = this.getProps();\n const { projection } = this.visualElement;\n if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n return;\n /**\n * Stop current animations as there can be visual glitching if we try to do\n * this mid-animation\n */\n this.stopAnimation();\n /**\n * Record the relative position of the dragged element relative to the\n * constraints box and save as a progress value.\n */\n const boxProgress = { x: 0, y: 0 };\n eachAxis((axis) => {\n const axisValue = this.getAxisMotionValue(axis);\n if (axisValue && this.constraints !== false) {\n const latest = axisValue.get();\n boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n }\n });\n /**\n * Update the layout of this element and resolve the latest drag constraints\n */\n const { transformTemplate } = this.visualElement.getProps();\n this.visualElement.current.style.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n this.resolveConstraints();\n /**\n * For each axis, calculate the current progress of the layout axis\n * within the new constraints.\n */\n eachAxis((axis) => {\n if (!shouldDrag(axis, drag, null))\n return;\n /**\n * Calculate a new transform based on the previous box progress\n */\n const axisValue = this.getAxisMotionValue(axis);\n const { min, max } = this.constraints[axis];\n axisValue.set(mixNumber(min, max, boxProgress[axis]));\n });\n }\n addListeners() {\n if (!this.visualElement.current)\n return;\n elementDragControls.set(this.visualElement, this);\n const element = this.visualElement.current;\n /**\n * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n */\n const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n const { drag, dragListener = true } = this.getProps();\n drag && dragListener && this.start(event);\n });\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps();\n if (isRefObject(dragConstraints) && dragConstraints.current) {\n this.constraints = this.resolveRefConstraints();\n }\n };\n const { projection } = this.visualElement;\n const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n if (projection && !projection.layout) {\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n }\n frame.read(measureDragConstraints);\n /**\n * Attach a window resize listener to scale the draggable target within its defined\n * constraints as the window resizes.\n */\n const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n /**\n * If the element's layout changes, calculate the delta and apply that to\n * the drag gesture's origin point.\n */\n const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n if (this.isDragging && hasLayoutChanged) {\n eachAxis((axis) => {\n const motionValue = this.getAxisMotionValue(axis);\n if (!motionValue)\n return;\n this.originPoint[axis] += delta[axis].translate;\n motionValue.set(motionValue.get() + delta[axis].translate);\n });\n this.visualElement.render();\n }\n }));\n return () => {\n stopResizeListener();\n stopPointerListener();\n stopMeasureLayoutListener();\n stopLayoutUpdateListener && stopLayoutUpdateListener();\n };\n }\n getProps() {\n const props = this.visualElement.getProps();\n const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n return {\n ...props,\n drag,\n dragDirectionLock,\n dragPropagation,\n dragConstraints,\n dragElastic,\n dragMomentum,\n };\n }\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n return ((drag === true || drag === direction) &&\n (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n let direction = null;\n if (Math.abs(offset.y) > lockThreshold) {\n direction = \"y\";\n }\n else if (Math.abs(offset.x) > lockThreshold) {\n direction = \"x\";\n }\n return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { isDragging } from './is-active.mjs';\n\nfunction setDragLock(axis) {\n if (axis === \"x\" || axis === \"y\") {\n if (isDragging[axis]) {\n return null;\n }\n else {\n isDragging[axis] = true;\n return () => {\n isDragging[axis] = false;\n };\n }\n }\n else {\n if (isDragging.x || isDragging.y) {\n return null;\n }\n else {\n isDragging.x = isDragging.y = true;\n return () => {\n isDragging.x = isDragging.y = false;\n };\n }\n }\n}\n\nexport { setDragLock };\n","import { PanSession } from './PanSession.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from 'motion-utils';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n if (handler) {\n frame.postRender(() => handler(event, info));\n }\n};\nclass PanGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removePointerDownListener = noop;\n }\n onPointerDown(pointerDownEvent) {\n this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n transformPagePoint: this.node.getTransformPagePoint(),\n contextWindow: getContextWindow(this.node),\n });\n }\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: onPan,\n onEnd: (event, info) => {\n delete this.session;\n if (onPanEnd) {\n frame.postRender(() => onPanEnd(event, info));\n }\n },\n };\n }\n mount() {\n this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n }\n update() {\n this.session && this.session.updateHandlers(this.createPanHandlers());\n }\n unmount() {\n this.removePointerDownListener();\n this.session && this.session.end();\n }\n}\n\nexport { PanGesture };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = \n/* @__PURE__ */ createContext(null);\n\nexport { PresenceContext };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n /**\n * Global flag as to whether the tree has animated since the last time\n * we resized the window\n */\n hasAnimatedSinceResize: true,\n /**\n * We set this to true once, on the first update. Any nodes added to the tree beyond that\n * update will be given a `data-projection-id` attribute.\n */\n hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n if (axis.max === axis.min)\n return 0;\n return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n correct: (latest, node) => {\n if (!node.target)\n return latest;\n /**\n * If latest is a string, if it's a percentage we can return immediately as it's\n * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n */\n if (typeof latest === \"string\") {\n if (px.test(latest)) {\n latest = parseFloat(latest);\n }\n else {\n return latest;\n }\n }\n /**\n * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n * pixel value as a percentage of each axis\n */\n const x = pixelsToPercent(latest, node.target.x);\n const y = pixelsToPercent(latest, node.target.y);\n return `${x}% ${y}%`;\n },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\n\nconst correctBoxShadow = {\n correct: (latest, { treeScale, projectionDelta }) => {\n const original = latest;\n const shadow = complex.parse(latest);\n // TODO: Doesn't support multiple shadows\n if (shadow.length > 5)\n return original;\n const template = complex.createTransformer(latest);\n const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n // Calculate the overall context scale\n const xScale = projectionDelta.x.scale * treeScale.x;\n const yScale = projectionDelta.y.scale * treeScale.y;\n shadow[0 + offset] /= xScale;\n shadow[1 + offset] /= yScale;\n /**\n * Ideally we'd correct x and y scales individually, but because blur and\n * spread apply to both we have to take a scale average and apply that instead.\n * We could potentially improve the outcome of this by incorporating the ratio between\n * the two scales.\n */\n const averageScale = mixNumber(xScale, yScale, 0.5);\n // Blur\n if (typeof shadow[2 + offset] === \"number\")\n shadow[2 + offset] /= averageScale;\n // Spread\n if (typeof shadow[3 + offset] === \"number\")\n shadow[3 + offset] /= averageScale;\n return template(shadow);\n },\n};\n\nexport { correctBoxShadow };\n","import { isCSSVariableName } from '../../render/dom/utils/is-css-variable.mjs';\n\nconst scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n for (const key in correctors) {\n scaleCorrectors[key] = correctors[key];\n if (isCSSVariableName(key)) {\n scaleCorrectors[key].isCSSVariable = true;\n }\n }\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { useContext, Component } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\nimport { microtask } from '../../../frameloop/microtask.mjs';\nimport { frame } from '../../../frameloop/frame.mjs';\n\nclass MeasureLayoutWithContext extends Component {\n /**\n * This only mounts projection nodes for components that\n * need measuring, we might want to do it for all components\n * in order to incorporate transforms\n */\n componentDidMount() {\n const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n const { projection } = visualElement;\n addScaleCorrector(defaultScaleCorrectors);\n if (projection) {\n if (layoutGroup.group)\n layoutGroup.group.add(projection);\n if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n switchLayoutGroup.register(projection);\n }\n projection.root.didUpdate();\n projection.addEventListener(\"animationComplete\", () => {\n this.safeToRemove();\n });\n projection.setOptions({\n ...projection.options,\n onExitComplete: () => this.safeToRemove(),\n });\n }\n globalProjectionState.hasEverUpdated = true;\n }\n getSnapshotBeforeUpdate(prevProps) {\n const { layoutDependency, visualElement, drag, isPresent } = this.props;\n const projection = visualElement.projection;\n if (!projection)\n return null;\n /**\n * TODO: We use this data in relegate to determine whether to\n * promote a previous element. There's no guarantee its presence data\n * will have updated by this point - if a bug like this arises it will\n * have to be that we markForRelegation and then find a new lead some other way,\n * perhaps in didUpdate\n */\n projection.isPresent = isPresent;\n if (drag ||\n prevProps.layoutDependency !== layoutDependency ||\n layoutDependency === undefined) {\n projection.willUpdate();\n }\n else {\n this.safeToRemove();\n }\n if (prevProps.isPresent !== isPresent) {\n if (isPresent) {\n projection.promote();\n }\n else if (!projection.relegate()) {\n /**\n * If there's another stack member taking over from this one,\n * it's in charge of the exit animation and therefore should\n * be in charge of the safe to remove. Otherwise we call it here.\n */\n frame.postRender(() => {\n const stack = projection.getStack();\n if (!stack || !stack.members.length) {\n this.safeToRemove();\n }\n });\n }\n }\n return null;\n }\n componentDidUpdate() {\n const { projection } = this.props.visualElement;\n if (projection) {\n projection.root.didUpdate();\n microtask.postRender(() => {\n if (!projection.currentAnimation && projection.isLead()) {\n this.safeToRemove();\n }\n });\n }\n }\n componentWillUnmount() {\n const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n const { projection } = visualElement;\n if (projection) {\n projection.scheduleCheckAfterUnmount();\n if (layoutGroup && layoutGroup.group)\n layoutGroup.group.remove(projection);\n if (promoteContext && promoteContext.deregister)\n promoteContext.deregister(projection);\n }\n }\n safeToRemove() {\n const { safeToRemove } = this.props;\n safeToRemove && safeToRemove();\n }\n render() {\n return null;\n }\n}\nfunction MeasureLayout(props) {\n const [isPresent, safeToRemove] = usePresence();\n const layoutGroup = useContext(LayoutGroupContext);\n return (jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\n borderRadius: {\n ...correctBorderRadius,\n applyTo: [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n ],\n },\n borderTopLeftRadius: correctBorderRadius,\n borderTopRightRadius: correctBorderRadius,\n borderBottomLeftRadius: correctBorderRadius,\n borderBottomRightRadius: correctBorderRadius,\n boxShadow: correctBoxShadow,\n};\n\nexport { MeasureLayout };\n","import { useContext, useId, useEffect, useCallback } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n * const [isPresent, safeToRemove] = usePresence()\n *\n * useEffect(() => {\n * !isPresent && setTimeout(safeToRemove, 1000)\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence(subscribe = true) {\n const context = useContext(PresenceContext);\n if (context === null)\n return [true, null];\n const { isPresent, onExitComplete, register } = context;\n // It's safe to call the following hooks conditionally (after an early return) because the context will always\n // either be null or non-null for the lifespan of the component.\n const id = useId();\n useEffect(() => {\n if (subscribe)\n register(id);\n }, [subscribe]);\n const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n * const isPresent = useIsPresent()\n *\n * useEffect(() => {\n * !isPresent && console.log(\"I've been removed!\")\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n constructor() {\n this.children = [];\n this.isDirty = false;\n }\n add(child) {\n addUniqueItem(this.children, child);\n this.isDirty = true;\n }\n remove(child) {\n removeItem(this.children, child);\n this.isDirty = true;\n }\n forEach(callback) {\n this.isDirty && this.children.sort(compareByDepth);\n this.isDirty = false;\n this.children.forEach(callback);\n }\n}\n\nexport { FlatTree };\n","import { secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n const start = time.now();\n const checkElapsed = ({ timestamp }) => {\n const elapsed = timestamp - start;\n if (elapsed >= timeout) {\n cancelFrame(checkElapsed);\n callback(elapsed - timeout);\n }\n };\n frame.read(checkElapsed, true);\n return () => cancelFrame(checkElapsed);\n}\nfunction delayInSeconds(callback, timeout) {\n return delay(callback, secondsToMilliseconds(timeout));\n}\n\nexport { delay, delayInSeconds };\n","import { isCustomValue } from '../../utils/resolve-value.mjs';\nimport { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n const unwrappedValue = isMotionValue(value) ? value.get() : value;\n return isCustomValue(unwrappedValue)\n ? unwrappedValue.toValue()\n : unwrappedValue;\n}\n\nexport { resolveMotionValue };\n","import { progress, noop } from 'motion-utils';\nimport { circOut } from '../../easing/circ.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n if (shouldCrossfadeOpacity) {\n target.opacity = mixNumber(0, \n // TODO Reinstate this if only child\n lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n target.opacityExit = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n }\n else if (isOnlyMember) {\n target.opacity = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n }\n /**\n * Mix border radius\n */\n for (let i = 0; i < numBorders; i++) {\n const borderLabel = `border${borders[i]}Radius`;\n let followRadius = getRadius(follow, borderLabel);\n let leadRadius = getRadius(lead, borderLabel);\n if (followRadius === undefined && leadRadius === undefined)\n continue;\n followRadius || (followRadius = 0);\n leadRadius || (leadRadius = 0);\n const canMix = followRadius === 0 ||\n leadRadius === 0 ||\n isPx(followRadius) === isPx(leadRadius);\n if (canMix) {\n target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n if (percent.test(leadRadius) || percent.test(followRadius)) {\n target[borderLabel] += \"%\";\n }\n }\n else {\n target[borderLabel] = leadRadius;\n }\n }\n /**\n * Mix rotation\n */\n if (follow.rotate || lead.rotate) {\n target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n }\n}\nfunction getRadius(values, radiusName) {\n return values[radiusName] !== undefined\n ? values[radiusName]\n : values.borderRadius;\n}\n// /**\n// * We only want to mix the background color if there's a follow element\n// * that we're not crossfading opacity between. For instance with switch\n// * AnimateSharedLayout animations, this helps the illusion of a continuous\n// * element being animated but also cuts down on the number of paints triggered\n// * for elements where opacity is doing that work for us.\n// */\n// if (\n// !hasFollowElement &&\n// latestLeadValues.backgroundColor &&\n// latestFollowValues.backgroundColor\n// ) {\n// /**\n// * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n// * We could probably create a mixer that runs at the start of the animation but\n// * the idea behind the crossfader is that it runs dynamically between two potentially\n// * changing targets (ie opacity or borderRadius may be animating independently via variants)\n// */\n// leadState.backgroundColor = followState.backgroundColor = mixColor(\n// latestFollowValues.backgroundColor as string,\n// latestLeadValues.backgroundColor as string\n// )(p)\n// }\nconst easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);\nconst easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n return (p) => {\n // Could replace ifs with clamp\n if (p < min)\n return 0;\n if (p > max)\n return 1;\n return easing(progress(min, max, p));\n };\n}\n\nexport { mixValues };\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n axis.min = originAxis.min;\n axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n copyAxisInto(box.x, originBox.x);\n copyAxisInto(box.y, originBox.y);\n}\n/**\n * Reset a delta to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisDeltaInto(delta, originDelta) {\n delta.translate = originDelta.translate;\n delta.scale = originDelta.scale;\n delta.originPoint = originDelta.originPoint;\n delta.origin = originDelta.origin;\n}\n\nexport { copyAxisDeltaInto, copyAxisInto, copyBoxInto };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n point -= translate;\n point = scalePoint(point, 1 / scale, originPoint);\n if (boxScale !== undefined) {\n point = scalePoint(point, 1 / boxScale, originPoint);\n }\n return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n if (percent.test(translate)) {\n translate = parseFloat(translate);\n const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n translate = relativeProgress - sourceAxis.min;\n }\n if (typeof translate !== \"number\")\n return;\n let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n if (axis === originAxis)\n originPoint -= translate;\n axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction axisEquals(a, b) {\n return a.min === b.min && a.max === b.max;\n}\nfunction boxEquals(a, b) {\n return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);\n}\nfunction axisEqualsRounded(a, b) {\n return (Math.round(a.min) === Math.round(b.min) &&\n Math.round(a.max) === Math.round(b.max));\n}\nfunction boxEqualsRounded(a, b) {\n return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);\n}\nfunction aspectRatio(box) {\n return calcLength(box.x) / calcLength(box.y);\n}\nfunction axisDeltaEquals(a, b) {\n return (a.translate === b.translate &&\n a.scale === b.scale &&\n a.originPoint === b.originPoint);\n}\n\nexport { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\n\nclass NodeStack {\n constructor() {\n this.members = [];\n }\n add(node) {\n addUniqueItem(this.members, node);\n node.scheduleRender();\n }\n remove(node) {\n removeItem(this.members, node);\n if (node === this.prevLead) {\n this.prevLead = undefined;\n }\n if (node === this.lead) {\n const prevLead = this.members[this.members.length - 1];\n if (prevLead) {\n this.promote(prevLead);\n }\n }\n }\n relegate(node) {\n const indexOfNode = this.members.findIndex((member) => node === member);\n if (indexOfNode === 0)\n return false;\n /**\n * Find the next projection node that is present\n */\n let prevLead;\n for (let i = indexOfNode; i >= 0; i--) {\n const member = this.members[i];\n if (member.isPresent !== false) {\n prevLead = member;\n break;\n }\n }\n if (prevLead) {\n this.promote(prevLead);\n return true;\n }\n else {\n return false;\n }\n }\n promote(node, preserveFollowOpacity) {\n const prevLead = this.lead;\n if (node === prevLead)\n return;\n this.prevLead = prevLead;\n this.lead = node;\n node.show();\n if (prevLead) {\n prevLead.instance && prevLead.scheduleRender();\n node.scheduleRender();\n node.resumeFrom = prevLead;\n if (preserveFollowOpacity) {\n node.resumeFrom.preserveOpacity = true;\n }\n if (prevLead.snapshot) {\n node.snapshot = prevLead.snapshot;\n node.snapshot.latestValues =\n prevLead.animationValues || prevLead.latestValues;\n }\n if (node.root && node.root.isUpdating) {\n node.isLayoutDirty = true;\n }\n const { crossfade } = node.options;\n if (crossfade === false) {\n prevLead.hide();\n }\n /**\n * TODO:\n * - Test border radius when previous node was deleted\n * - boxShadow mixing\n * - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n * - Shared between element A in transformed container and element B (transform stays the same or changes)\n * - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n * ---\n * - Crossfade opacity of root nodes\n * - layoutId changes after animation\n * - layoutId changes mid animation\n */\n }\n }\n exitAnimationComplete() {\n this.members.forEach((node) => {\n const { options, resumingFrom } = node;\n options.onExitComplete && options.onExitComplete();\n if (resumingFrom) {\n resumingFrom.options.onExitComplete &&\n resumingFrom.options.onExitComplete();\n }\n });\n }\n scheduleRender() {\n this.members.forEach((node) => {\n node.instance && node.scheduleRender(false);\n });\n }\n /**\n * Clear any leads that have been removed this render to prevent them from being\n * used in future animations and to prevent memory leaks\n */\n removeLeadSnapshot() {\n if (this.lead && this.lead.snapshot) {\n this.lead.snapshot = undefined;\n }\n }\n}\n\nexport { NodeStack };\n","import { getValueTransition } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { animateSingleValue } from '../../animation/animate/single-value.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\nimport { cancelFrame, frameData, frameSteps, frame } from '../../frameloop/frame.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\nimport { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto, copyAxisDeltaInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcLength, calcRelativePosition, calcRelativeBox, calcBoxDelta, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { boxEqualsRounded, isDeltaZero, axisDeltaEquals, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { globalProjectionState } from './state.mjs';\n\nconst metrics = {\n nodes: 0,\n calculatedTargetDeltas: 0,\n calculatedProjections: 0,\n};\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\nconst hiddenVisibility = { visibility: \"hidden\" };\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n const { latestValues } = visualElement;\n // Record the distorting transform and then temporarily set it to 0\n if (latestValues[key]) {\n values[key] = latestValues[key];\n visualElement.setStaticValue(key, 0);\n if (sharedAnimationValues) {\n sharedAnimationValues[key] = 0;\n }\n }\n}\nfunction cancelTreeOptimisedTransformAnimations(projectionNode) {\n projectionNode.hasCheckedOptimisedAppear = true;\n if (projectionNode.root === projectionNode)\n return;\n const { visualElement } = projectionNode.options;\n if (!visualElement)\n return;\n const appearId = getOptimisedAppearId(visualElement);\n if (window.MotionHasOptimisedAnimation(appearId, \"transform\")) {\n const { layout, layoutId } = projectionNode.options;\n window.MotionCancelOptimisedAnimation(appearId, \"transform\", frame, !(layout || layoutId));\n }\n const { parent } = projectionNode;\n if (parent && !parent.hasCheckedOptimisedAppear) {\n cancelTreeOptimisedTransformAnimations(parent);\n }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n return class ProjectionNode {\n constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {\n /**\n * A unique ID generated for every projection node.\n */\n this.id = id++;\n /**\n * An id that represents a unique session instigated by startUpdate.\n */\n this.animationId = 0;\n /**\n * A Set containing all this component's children. This is used to iterate\n * through the children.\n *\n * TODO: This could be faster to iterate as a flat array stored on the root node.\n */\n this.children = new Set();\n /**\n * Options for the node. We use this to configure what kind of layout animations\n * we should perform (if any).\n */\n this.options = {};\n /**\n * We use this to detect when its safe to shut down part of a projection tree.\n * We have to keep projecting children for scale correction and relative projection\n * until all their parents stop performing layout animations.\n */\n this.isTreeAnimating = false;\n this.isAnimationBlocked = false;\n /**\n * Flag to true if we think this layout has been changed. We can't always know this,\n * currently we set it to true every time a component renders, or if it has a layoutDependency\n * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n * and if one node is dirtied, they all are.\n */\n this.isLayoutDirty = false;\n /**\n * Flag to true if we think the projection calculations for this node needs\n * recalculating as a result of an updated transform or layout animation.\n */\n this.isProjectionDirty = false;\n /**\n * Flag to true if the layout *or* transform has changed. This then gets propagated\n * throughout the projection tree, forcing any element below to recalculate on the next frame.\n */\n this.isSharedProjectionDirty = false;\n /**\n * Flag transform dirty. This gets propagated throughout the whole tree but is only\n * respected by shared nodes.\n */\n this.isTransformDirty = false;\n /**\n * Block layout updates for instant layout transitions throughout the tree.\n */\n this.updateManuallyBlocked = false;\n this.updateBlockedByResize = false;\n /**\n * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n * call.\n */\n this.isUpdating = false;\n /**\n * If this is an SVG element we currently disable projection transforms\n */\n this.isSVG = false;\n /**\n * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n * its projection styles.\n */\n this.needsReset = false;\n /**\n * Flags whether this node should have its transform reset prior to measuring.\n */\n this.shouldResetTransform = false;\n /**\n * Store whether this node has been checked for optimised appear animations. As\n * effects fire bottom-up, and we want to look up the tree for appear animations,\n * this makes sure we only check each path once, stopping at nodes that\n * have already been checked.\n */\n this.hasCheckedOptimisedAppear = false;\n /**\n * An object representing the calculated contextual/accumulated/tree scale.\n * This will be used to scale calculcated projection transforms, as these are\n * calculated in screen-space but need to be scaled for elements to layoutly\n * make it to their calculated destinations.\n *\n * TODO: Lazy-init\n */\n this.treeScale = { x: 1, y: 1 };\n /**\n *\n */\n this.eventHandlers = new Map();\n this.hasTreeAnimated = false;\n // Note: Currently only running on root node\n this.updateScheduled = false;\n this.scheduleUpdate = () => this.update();\n this.projectionUpdateScheduled = false;\n this.checkUpdateFailed = () => {\n if (this.isUpdating) {\n this.isUpdating = false;\n this.clearAllSnapshots();\n }\n };\n /**\n * This is a multi-step process as shared nodes might be of different depths. Nodes\n * are sorted by depth order, so we need to resolve the entire tree before moving to\n * the next step.\n */\n this.updateProjection = () => {\n this.projectionUpdateScheduled = false;\n /**\n * Reset debug counts. Manually resetting rather than creating a new\n * object each frame.\n */\n if (statsBuffer.value) {\n metrics.nodes =\n metrics.calculatedTargetDeltas =\n metrics.calculatedProjections =\n 0;\n }\n this.nodes.forEach(propagateDirtyNodes);\n this.nodes.forEach(resolveTargetDelta);\n this.nodes.forEach(calcProjection);\n this.nodes.forEach(cleanDirtyNodes);\n if (statsBuffer.addProjectionMetrics) {\n statsBuffer.addProjectionMetrics(metrics);\n }\n };\n /**\n * Frame calculations\n */\n this.resolvedRelativeTargetAt = 0.0;\n this.hasProjected = false;\n this.isVisible = true;\n this.animationProgress = 0;\n /**\n * Shared layout\n */\n // TODO Only running on root node\n this.sharedNodes = new Map();\n this.latestValues = latestValues;\n this.root = parent ? parent.root || parent : this;\n this.path = parent ? [...parent.path, parent] : [];\n this.parent = parent;\n this.depth = parent ? parent.depth + 1 : 0;\n for (let i = 0; i < this.path.length; i++) {\n this.path[i].shouldResetTransform = true;\n }\n if (this.root === this)\n this.nodes = new FlatTree();\n }\n addEventListener(name, handler) {\n if (!this.eventHandlers.has(name)) {\n this.eventHandlers.set(name, new SubscriptionManager());\n }\n return this.eventHandlers.get(name).add(handler);\n }\n notifyListeners(name, ...args) {\n const subscriptionManager = this.eventHandlers.get(name);\n subscriptionManager && subscriptionManager.notify(...args);\n }\n hasListeners(name) {\n return this.eventHandlers.has(name);\n }\n /**\n * Lifecycles\n */\n mount(instance, isLayoutDirty = this.root.hasTreeAnimated) {\n if (this.instance)\n return;\n this.isSVG = isSVGElement(instance);\n this.instance = instance;\n const { layoutId, layout, visualElement } = this.options;\n if (visualElement && !visualElement.current) {\n visualElement.mount(instance);\n }\n this.root.nodes.add(this);\n this.parent && this.parent.children.add(this);\n if (isLayoutDirty && (layout || layoutId)) {\n this.isLayoutDirty = true;\n }\n if (attachResizeListener) {\n let cancelDelay;\n const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n attachResizeListener(instance, () => {\n this.root.updateBlockedByResize = true;\n cancelDelay && cancelDelay();\n cancelDelay = delay(resizeUnblockUpdate, 250);\n if (globalProjectionState.hasAnimatedSinceResize) {\n globalProjectionState.hasAnimatedSinceResize = false;\n this.nodes.forEach(finishAnimation);\n }\n });\n }\n if (layoutId) {\n this.root.registerSharedNode(layoutId, this);\n }\n // Only register the handler if it requires layout animation\n if (this.options.animate !== false &&\n visualElement &&\n (layoutId || layout)) {\n this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeLayoutChanged, layout: newLayout, }) => {\n if (this.isTreeAnimationBlocked()) {\n this.target = undefined;\n this.relativeTarget = undefined;\n return;\n }\n // TODO: Check here if an animation exists\n const layoutTransition = this.options.transition ||\n visualElement.getDefaultTransition() ||\n defaultLayoutTransition;\n const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n /**\n * The target layout of the element might stay the same,\n * but its position relative to its parent has changed.\n */\n const hasTargetChanged = !this.targetLayout ||\n !boxEqualsRounded(this.targetLayout, newLayout);\n /*\n * Note: Disabled to fix relative animations always triggering new\n * layout animations. If this causes further issues, we can try\n * a different approach to detecting relative target changes.\n */\n // || hasRelativeLayoutChanged\n /**\n * If the layout hasn't seemed to have changed, it might be that the\n * element is visually in the same place in the document but its position\n * relative to its parent has indeed changed. So here we check for that.\n */\n const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeLayoutChanged;\n if (this.options.layoutRoot ||\n this.resumeFrom ||\n hasOnlyRelativeTargetChanged ||\n (hasLayoutChanged &&\n (hasTargetChanged || !this.currentAnimation))) {\n if (this.resumeFrom) {\n this.resumingFrom = this.resumeFrom;\n this.resumingFrom.resumingFrom = undefined;\n }\n this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n const animationOptions = {\n ...getValueTransition(layoutTransition, \"layout\"),\n onPlay: onLayoutAnimationStart,\n onComplete: onLayoutAnimationComplete,\n };\n if (visualElement.shouldReduceMotion ||\n this.options.layoutRoot) {\n animationOptions.delay = 0;\n animationOptions.type = false;\n }\n this.startAnimation(animationOptions);\n }\n else {\n /**\n * If the layout hasn't changed and we have an animation that hasn't started yet,\n * finish it immediately. Otherwise it will be animating from a location\n * that was probably never commited to screen and look like a jumpy box.\n */\n if (!hasLayoutChanged) {\n finishAnimation(this);\n }\n if (this.isLead() && this.options.onExitComplete) {\n this.options.onExitComplete();\n }\n }\n this.targetLayout = newLayout;\n });\n }\n }\n unmount() {\n this.options.layoutId && this.willUpdate();\n this.root.nodes.remove(this);\n const stack = this.getStack();\n stack && stack.remove(this);\n this.parent && this.parent.children.delete(this);\n this.instance = undefined;\n cancelFrame(this.updateProjection);\n }\n // only on the root\n blockUpdate() {\n this.updateManuallyBlocked = true;\n }\n unblockUpdate() {\n this.updateManuallyBlocked = false;\n }\n isUpdateBlocked() {\n return this.updateManuallyBlocked || this.updateBlockedByResize;\n }\n isTreeAnimationBlocked() {\n return (this.isAnimationBlocked ||\n (this.parent && this.parent.isTreeAnimationBlocked()) ||\n false);\n }\n // Note: currently only running on root node\n startUpdate() {\n if (this.isUpdateBlocked())\n return;\n this.isUpdating = true;\n this.nodes && this.nodes.forEach(resetSkewAndRotation);\n this.animationId++;\n }\n getTransformTemplate() {\n const { visualElement } = this.options;\n return visualElement && visualElement.getProps().transformTemplate;\n }\n willUpdate(shouldNotifyListeners = true) {\n this.root.hasTreeAnimated = true;\n if (this.root.isUpdateBlocked()) {\n this.options.onExitComplete && this.options.onExitComplete();\n return;\n }\n /**\n * If we're running optimised appear animations then these must be\n * cancelled before measuring the DOM. This is so we can measure\n * the true layout of the element rather than the WAAPI animation\n * which will be unaffected by the resetSkewAndRotate step.\n *\n * Note: This is a DOM write. Worst case scenario is this is sandwiched\n * between other snapshot reads which will cause unnecessary style recalculations.\n * This has to happen here though, as we don't yet know which nodes will need\n * snapshots in startUpdate(), but we only want to cancel optimised animations\n * if a layout animation measurement is actually going to be affected by them.\n */\n if (window.MotionCancelOptimisedAnimation &&\n !this.hasCheckedOptimisedAppear) {\n cancelTreeOptimisedTransformAnimations(this);\n }\n !this.root.isUpdating && this.root.startUpdate();\n if (this.isLayoutDirty)\n return;\n this.isLayoutDirty = true;\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.shouldResetTransform = true;\n node.updateScroll(\"snapshot\");\n if (node.options.layoutRoot) {\n node.willUpdate(false);\n }\n }\n const { layoutId, layout } = this.options;\n if (layoutId === undefined && !layout)\n return;\n const transformTemplate = this.getTransformTemplate();\n this.prevTransformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n this.updateSnapshot();\n shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n }\n update() {\n this.updateScheduled = false;\n const updateWasBlocked = this.isUpdateBlocked();\n // When doing an instant transition, we skip the layout update,\n // but should still clean up the measurements so that the next\n // snapshot could be taken correctly.\n if (updateWasBlocked) {\n this.unblockUpdate();\n this.clearAllSnapshots();\n this.nodes.forEach(clearMeasurements);\n return;\n }\n if (!this.isUpdating) {\n this.nodes.forEach(clearIsLayoutDirty);\n }\n this.isUpdating = false;\n /**\n * Write\n */\n this.nodes.forEach(resetTransformStyle);\n /**\n * Read ==================\n */\n // Update layout measurements of updated children\n this.nodes.forEach(updateLayout);\n /**\n * Write\n */\n // Notify listeners that the layout is updated\n this.nodes.forEach(notifyLayoutUpdate);\n this.clearAllSnapshots();\n /**\n * Manually flush any pending updates. Ideally\n * we could leave this to the following requestAnimationFrame but this seems\n * to leave a flash of incorrectly styled content.\n */\n const now = time.now();\n frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n frameData.timestamp = now;\n frameData.isProcessing = true;\n frameSteps.update.process(frameData);\n frameSteps.preRender.process(frameData);\n frameSteps.render.process(frameData);\n frameData.isProcessing = false;\n }\n didUpdate() {\n if (!this.updateScheduled) {\n this.updateScheduled = true;\n microtask.read(this.scheduleUpdate);\n }\n }\n clearAllSnapshots() {\n this.nodes.forEach(clearSnapshot);\n this.sharedNodes.forEach(removeLeadSnapshots);\n }\n scheduleUpdateProjection() {\n if (!this.projectionUpdateScheduled) {\n this.projectionUpdateScheduled = true;\n frame.preRender(this.updateProjection, false, true);\n }\n }\n scheduleCheckAfterUnmount() {\n /**\n * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n * we manually call didUpdate to give a chance to the siblings to animate.\n * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n */\n frame.postRender(() => {\n if (this.isLayoutDirty) {\n this.root.didUpdate();\n }\n else {\n this.root.checkUpdateFailed();\n }\n });\n }\n /**\n * Update measurements\n */\n updateSnapshot() {\n if (this.snapshot || !this.instance)\n return;\n this.snapshot = this.measure();\n if (this.snapshot &&\n !calcLength(this.snapshot.measuredBox.x) &&\n !calcLength(this.snapshot.measuredBox.y)) {\n this.snapshot = undefined;\n }\n }\n updateLayout() {\n if (!this.instance)\n return;\n // TODO: Incorporate into a forwarded scroll offset\n this.updateScroll();\n if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n !this.isLayoutDirty) {\n return;\n }\n /**\n * When a node is mounted, it simply resumes from the prevLead's\n * snapshot instead of taking a new one, but the ancestors scroll\n * might have updated while the prevLead is unmounted. We need to\n * update the scroll again to make sure the layout we measure is\n * up to date.\n */\n if (this.resumeFrom && !this.resumeFrom.instance) {\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.updateScroll();\n }\n }\n const prevLayout = this.layout;\n this.layout = this.measure(false);\n this.layoutCorrected = createBox();\n this.isLayoutDirty = false;\n this.projectionDelta = undefined;\n this.notifyListeners(\"measure\", this.layout.layoutBox);\n const { visualElement } = this.options;\n visualElement &&\n visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n }\n updateScroll(phase = \"measure\") {\n let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n if (this.scroll &&\n this.scroll.animationId === this.root.animationId &&\n this.scroll.phase === phase) {\n needsMeasurement = false;\n }\n if (needsMeasurement) {\n const isRoot = checkIsScrollRoot(this.instance);\n this.scroll = {\n animationId: this.root.animationId,\n phase,\n isRoot,\n offset: measureScroll(this.instance),\n wasRoot: this.scroll ? this.scroll.isRoot : isRoot,\n };\n }\n }\n resetTransform() {\n if (!resetTransform)\n return;\n const isResetRequested = this.isLayoutDirty ||\n this.shouldResetTransform ||\n this.options.alwaysMeasureLayout;\n const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n const transformTemplate = this.getTransformTemplate();\n const transformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n if (isResetRequested &&\n (hasProjection ||\n hasTransform(this.latestValues) ||\n transformTemplateHasChanged)) {\n resetTransform(this.instance, transformTemplateValue);\n this.shouldResetTransform = false;\n this.scheduleRender();\n }\n }\n measure(removeTransform = true) {\n const pageBox = this.measurePageBox();\n let layoutBox = this.removeElementScroll(pageBox);\n /**\n * Measurements taken during the pre-render stage\n * still have transforms applied so we remove them\n * via calculation.\n */\n if (removeTransform) {\n layoutBox = this.removeTransform(layoutBox);\n }\n roundBox(layoutBox);\n return {\n animationId: this.root.animationId,\n measuredBox: pageBox,\n layoutBox,\n latestValues: {},\n source: this.id,\n };\n }\n measurePageBox() {\n var _a;\n const { visualElement } = this.options;\n if (!visualElement)\n return createBox();\n const box = visualElement.measureViewportBox();\n const wasInScrollRoot = ((_a = this.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot) || this.path.some(checkNodeWasScrollRoot);\n if (!wasInScrollRoot) {\n // Remove viewport scroll to give page-relative coordinates\n const { scroll } = this.root;\n if (scroll) {\n translateAxis(box.x, scroll.offset.x);\n translateAxis(box.y, scroll.offset.y);\n }\n }\n return box;\n }\n removeElementScroll(box) {\n var _a;\n const boxWithoutScroll = createBox();\n copyBoxInto(boxWithoutScroll, box);\n if ((_a = this.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot) {\n return boxWithoutScroll;\n }\n /**\n * Performance TODO: Keep a cumulative scroll offset down the tree\n * rather than loop back up the path.\n */\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n const { scroll, options } = node;\n if (node !== this.root && scroll && options.layoutScroll) {\n /**\n * If this is a new scroll root, we want to remove all previous scrolls\n * from the viewport box.\n */\n if (scroll.wasRoot) {\n copyBoxInto(boxWithoutScroll, box);\n }\n translateAxis(boxWithoutScroll.x, scroll.offset.x);\n translateAxis(boxWithoutScroll.y, scroll.offset.y);\n }\n }\n return boxWithoutScroll;\n }\n applyTransform(box, transformOnly = false) {\n const withTransforms = createBox();\n copyBoxInto(withTransforms, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!transformOnly &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(withTransforms, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (!hasTransform(node.latestValues))\n continue;\n transformBox(withTransforms, node.latestValues);\n }\n if (hasTransform(this.latestValues)) {\n transformBox(withTransforms, this.latestValues);\n }\n return withTransforms;\n }\n removeTransform(box) {\n const boxWithoutTransform = createBox();\n copyBoxInto(boxWithoutTransform, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!node.instance)\n continue;\n if (!hasTransform(node.latestValues))\n continue;\n hasScale(node.latestValues) && node.updateSnapshot();\n const sourceBox = createBox();\n const nodeBox = node.measurePageBox();\n copyBoxInto(sourceBox, nodeBox);\n removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, sourceBox);\n }\n if (hasTransform(this.latestValues)) {\n removeBoxTransforms(boxWithoutTransform, this.latestValues);\n }\n return boxWithoutTransform;\n }\n setTargetDelta(delta) {\n this.targetDelta = delta;\n this.root.scheduleUpdateProjection();\n this.isProjectionDirty = true;\n }\n setOptions(options) {\n this.options = {\n ...this.options,\n ...options,\n crossfade: options.crossfade !== undefined ? options.crossfade : true,\n };\n }\n clearMeasurements() {\n this.scroll = undefined;\n this.layout = undefined;\n this.snapshot = undefined;\n this.prevTransformTemplateValue = undefined;\n this.targetDelta = undefined;\n this.target = undefined;\n this.isLayoutDirty = false;\n }\n forceRelativeParentToResolveTarget() {\n if (!this.relativeParent)\n return;\n /**\n * If the parent target isn't up-to-date, force it to update.\n * This is an unfortunate de-optimisation as it means any updating relative\n * projection will cause all the relative parents to recalculate back\n * up the tree.\n */\n if (this.relativeParent.resolvedRelativeTargetAt !==\n frameData.timestamp) {\n this.relativeParent.resolveTargetDelta(true);\n }\n }\n resolveTargetDelta(forceRecalculation = false) {\n var _a;\n /**\n * Once the dirty status of nodes has been spread through the tree, we also\n * need to check if we have a shared node of a different depth that has itself\n * been dirtied.\n */\n const lead = this.getLead();\n this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n /**\n * We don't use transform for this step of processing so we don't\n * need to check whether any nodes have changed transform.\n */\n const canSkip = !(forceRecalculation ||\n (isShared && this.isSharedProjectionDirty) ||\n this.isProjectionDirty ||\n ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n this.attemptToResolveRelativeTarget ||\n this.root.updateBlockedByResize);\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If we have no layout, we can't perform projection, so early return\n */\n if (!this.layout || !(layout || layoutId))\n return;\n this.resolvedRelativeTargetAt = frameData.timestamp;\n /**\n * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n * a relativeParent. This will allow a component to perform scale correction\n * even if no animation has started.\n */\n if (!this.targetDelta && !this.relativeTarget) {\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n relativeParent.layout &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * If we have no relative target or no target delta our target isn't valid\n * for this frame.\n */\n if (!this.relativeTarget && !this.targetDelta)\n return;\n /**\n * Lazy-init target data structure\n */\n if (!this.target) {\n this.target = createBox();\n this.targetWithTransforms = createBox();\n }\n /**\n * If we've got a relative box for this component, resolve it into a target relative to the parent.\n */\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.relativeParent &&\n this.relativeParent.target) {\n this.forceRelativeParentToResolveTarget();\n calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target);\n /**\n * If we've only got a targetDelta, resolve it into a target\n */\n }\n else if (this.targetDelta) {\n if (Boolean(this.resumingFrom)) {\n // TODO: This is creating a new object every frame\n this.target = this.applyTransform(this.layout.layoutBox);\n }\n else {\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n applyBoxDelta(this.target, this.targetDelta);\n }\n else {\n /**\n * If no target, use own layout as target\n */\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n /**\n * If we've been told to attempt to resolve a relative target, do so.\n */\n if (this.attemptToResolveRelativeTarget) {\n this.attemptToResolveRelativeTarget = false;\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n Boolean(relativeParent.resumingFrom) ===\n Boolean(this.resumingFrom) &&\n !relativeParent.options.layoutScroll &&\n relativeParent.target &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * Increase debug counter for resolved target deltas\n */\n if (statsBuffer.value) {\n metrics.calculatedTargetDeltas++;\n }\n }\n getClosestProjectingParent() {\n if (!this.parent ||\n hasScale(this.parent.latestValues) ||\n has2DTranslate(this.parent.latestValues)) {\n return undefined;\n }\n if (this.parent.isProjecting()) {\n return this.parent;\n }\n else {\n return this.parent.getClosestProjectingParent();\n }\n }\n isProjecting() {\n return Boolean((this.relativeTarget ||\n this.targetDelta ||\n this.options.layoutRoot) &&\n this.layout);\n }\n calcProjection() {\n var _a;\n const lead = this.getLead();\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n let canSkip = true;\n /**\n * If this is a normal layout animation and neither this node nor its nearest projecting\n * is dirty then we can't skip.\n */\n if (this.isProjectionDirty || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty)) {\n canSkip = false;\n }\n /**\n * If this is a shared layout animation and this node's shared projection is dirty then\n * we can't skip.\n */\n if (isShared &&\n (this.isSharedProjectionDirty || this.isTransformDirty)) {\n canSkip = false;\n }\n /**\n * If we have resolved the target this frame we must recalculate the\n * projection to ensure it visually represents the internal calculations.\n */\n if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n canSkip = false;\n }\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If this section of the tree isn't animating we can\n * delete our target sources for the following frame.\n */\n this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n this.currentAnimation ||\n this.pendingAnimation);\n if (!this.isTreeAnimating) {\n this.targetDelta = this.relativeTarget = undefined;\n }\n if (!this.layout || !(layout || layoutId))\n return;\n /**\n * Reset the corrected box with the latest values from box, as we're then going\n * to perform mutative operations on it.\n */\n copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n /**\n * Record previous tree scales before updating.\n */\n const prevTreeScaleX = this.treeScale.x;\n const prevTreeScaleY = this.treeScale.y;\n /**\n * Apply all the parent deltas to this box to produce the corrected box. This\n * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n */\n applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n /**\n * If this layer needs to perform scale correction but doesn't have a target,\n * use the layout as the target.\n */\n if (lead.layout &&\n !lead.target &&\n (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n lead.target = lead.layout.layoutBox;\n lead.targetWithTransforms = createBox();\n }\n const { target } = lead;\n if (!target) {\n /**\n * If we don't have a target to project into, but we were previously\n * projecting, we want to remove the stored transform and schedule\n * a render to ensure the elements reflect the removed transform.\n */\n if (this.prevProjectionDelta) {\n this.createProjectionDeltas();\n this.scheduleRender();\n }\n return;\n }\n if (!this.projectionDelta || !this.prevProjectionDelta) {\n this.createProjectionDeltas();\n }\n else {\n copyAxisDeltaInto(this.prevProjectionDelta.x, this.projectionDelta.x);\n copyAxisDeltaInto(this.prevProjectionDelta.y, this.projectionDelta.y);\n }\n /**\n * Update the delta between the corrected box and the target box before user-set transforms were applied.\n * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n * for our layout reprojection, but still allow them to be scaled correctly by the user.\n * It might be that to simplify this we may want to accept that user-set scale is also corrected\n * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n * to allow people to choose whether these styles are corrected based on just the\n * layout reprojection or the final bounding box.\n */\n calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n if (this.treeScale.x !== prevTreeScaleX ||\n this.treeScale.y !== prevTreeScaleY ||\n !axisDeltaEquals(this.projectionDelta.x, this.prevProjectionDelta.x) ||\n !axisDeltaEquals(this.projectionDelta.y, this.prevProjectionDelta.y)) {\n this.hasProjected = true;\n this.scheduleRender();\n this.notifyListeners(\"projectionUpdate\", target);\n }\n /**\n * Increase debug counter for recalculated projections\n */\n if (statsBuffer.value) {\n metrics.calculatedProjections++;\n }\n }\n hide() {\n this.isVisible = false;\n // TODO: Schedule render\n }\n show() {\n this.isVisible = true;\n // TODO: Schedule render\n }\n scheduleRender(notifyAll = true) {\n var _a;\n (_a = this.options.visualElement) === null || _a === void 0 ? void 0 : _a.scheduleRender();\n if (notifyAll) {\n const stack = this.getStack();\n stack && stack.scheduleRender();\n }\n if (this.resumingFrom && !this.resumingFrom.instance) {\n this.resumingFrom = undefined;\n }\n }\n createProjectionDeltas() {\n this.prevProjectionDelta = createDelta();\n this.projectionDelta = createDelta();\n this.projectionDeltaWithTransform = createDelta();\n }\n setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n const snapshot = this.snapshot;\n const snapshotLatestValues = snapshot\n ? snapshot.latestValues\n : {};\n const mixedValues = { ...this.latestValues };\n const targetDelta = createDelta();\n if (!this.relativeParent ||\n !this.relativeParent.options.layoutRoot) {\n this.relativeTarget = this.relativeTargetOrigin = undefined;\n }\n this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n const relativeLayout = createBox();\n const snapshotSource = snapshot ? snapshot.source : undefined;\n const layoutSource = this.layout ? this.layout.source : undefined;\n const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n const stack = this.getStack();\n const isOnlyMember = !stack || stack.members.length <= 1;\n const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n !isOnlyMember &&\n this.options.crossfade === true &&\n !this.path.some(hasOpacityCrossfade));\n this.animationProgress = 0;\n let prevRelativeTarget;\n this.mixTargetDelta = (latest) => {\n const progress = latest / 1000;\n mixAxisDelta(targetDelta.x, delta.x, progress);\n mixAxisDelta(targetDelta.y, delta.y, progress);\n this.setTargetDelta(targetDelta);\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.layout &&\n this.relativeParent &&\n this.relativeParent.layout) {\n calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n /**\n * If this is an unchanged relative target we can consider the\n * projection not dirty.\n */\n if (prevRelativeTarget &&\n boxEquals(this.relativeTarget, prevRelativeTarget)) {\n this.isProjectionDirty = false;\n }\n if (!prevRelativeTarget)\n prevRelativeTarget = createBox();\n copyBoxInto(prevRelativeTarget, this.relativeTarget);\n }\n if (isSharedLayoutAnimation) {\n this.animationValues = mixedValues;\n mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n }\n this.root.scheduleUpdateProjection();\n this.scheduleRender();\n this.animationProgress = progress;\n };\n this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n }\n startAnimation(options) {\n this.notifyListeners(\"animationStart\");\n this.currentAnimation && this.currentAnimation.stop();\n if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n this.resumingFrom.currentAnimation.stop();\n }\n if (this.pendingAnimation) {\n cancelFrame(this.pendingAnimation);\n this.pendingAnimation = undefined;\n }\n /**\n * Start the animation in the next frame to have a frame with progress 0,\n * where the target is the same as when the animation started, so we can\n * calculate the relative positions correctly for instant transitions.\n */\n this.pendingAnimation = frame.update(() => {\n globalProjectionState.hasAnimatedSinceResize = true;\n activeAnimations.layout++;\n this.currentAnimation = animateSingleValue(0, animationTarget, {\n ...options,\n onUpdate: (latest) => {\n this.mixTargetDelta(latest);\n options.onUpdate && options.onUpdate(latest);\n },\n onStop: () => {\n activeAnimations.layout--;\n },\n onComplete: () => {\n activeAnimations.layout--;\n options.onComplete && options.onComplete();\n this.completeAnimation();\n },\n });\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = this.currentAnimation;\n }\n this.pendingAnimation = undefined;\n });\n }\n completeAnimation() {\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = undefined;\n this.resumingFrom.preserveOpacity = undefined;\n }\n const stack = this.getStack();\n stack && stack.exitAnimationComplete();\n this.resumingFrom =\n this.currentAnimation =\n this.animationValues =\n undefined;\n this.notifyListeners(\"animationComplete\");\n }\n finishAnimation() {\n if (this.currentAnimation) {\n this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n this.currentAnimation.stop();\n }\n this.completeAnimation();\n }\n applyTransformsToTarget() {\n const lead = this.getLead();\n let { targetWithTransforms, target, layout, latestValues } = lead;\n if (!targetWithTransforms || !target || !layout)\n return;\n /**\n * If we're only animating position, and this element isn't the lead element,\n * then instead of projecting into the lead box we instead want to calculate\n * a new target that aligns the two boxes but maintains the layout shape.\n */\n if (this !== lead &&\n this.layout &&\n layout &&\n shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n target = this.target || createBox();\n const xLength = calcLength(this.layout.layoutBox.x);\n target.x.min = lead.target.x.min;\n target.x.max = target.x.min + xLength;\n const yLength = calcLength(this.layout.layoutBox.y);\n target.y.min = lead.target.y.min;\n target.y.max = target.y.min + yLength;\n }\n copyBoxInto(targetWithTransforms, target);\n /**\n * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n * This is the final box that we will then project into by calculating a transform delta and\n * applying it to the corrected box.\n */\n transformBox(targetWithTransforms, latestValues);\n /**\n * Update the delta between the corrected box and the final target box, after\n * user-set transforms are applied to it. This will be used by the renderer to\n * create a transform style that will reproject the element from its layout layout\n * into the desired bounding box.\n */\n calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n }\n registerSharedNode(layoutId, node) {\n if (!this.sharedNodes.has(layoutId)) {\n this.sharedNodes.set(layoutId, new NodeStack());\n }\n const stack = this.sharedNodes.get(layoutId);\n stack.add(node);\n const config = node.options.initialPromotionConfig;\n node.promote({\n transition: config ? config.transition : undefined,\n preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n ? config.shouldPreserveFollowOpacity(node)\n : undefined,\n });\n }\n isLead() {\n const stack = this.getStack();\n return stack ? stack.lead === this : true;\n }\n getLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n }\n getPrevLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.prevLead : undefined;\n }\n getStack() {\n const { layoutId } = this.options;\n if (layoutId)\n return this.root.sharedNodes.get(layoutId);\n }\n promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n const stack = this.getStack();\n if (stack)\n stack.promote(this, preserveFollowOpacity);\n if (needsReset) {\n this.projectionDelta = undefined;\n this.needsReset = true;\n }\n if (transition)\n this.setOptions({ transition });\n }\n relegate() {\n const stack = this.getStack();\n if (stack) {\n return stack.relegate(this);\n }\n else {\n return false;\n }\n }\n resetSkewAndRotation() {\n const { visualElement } = this.options;\n if (!visualElement)\n return;\n // If there's no detected skew or rotation values, we can early return without a forced render.\n let hasDistortingTransform = false;\n /**\n * An unrolled check for rotation values. Most elements don't have any rotation and\n * skipping the nested loop and new object creation is 50% faster.\n */\n const { latestValues } = visualElement;\n if (latestValues.z ||\n latestValues.rotate ||\n latestValues.rotateX ||\n latestValues.rotateY ||\n latestValues.rotateZ ||\n latestValues.skewX ||\n latestValues.skewY) {\n hasDistortingTransform = true;\n }\n // If there's no distorting values, we don't need to do any more.\n if (!hasDistortingTransform)\n return;\n const resetValues = {};\n if (latestValues.z) {\n resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n }\n // Check the skew and rotate value of all axes and reset to 0\n for (let i = 0; i < transformAxes.length; i++) {\n resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n }\n // Force a render of this element to apply the transform with all skews and rotations\n // set to 0.\n visualElement.render();\n // Put back all the values we reset\n for (const key in resetValues) {\n visualElement.setStaticValue(key, resetValues[key]);\n if (this.animationValues) {\n this.animationValues[key] = resetValues[key];\n }\n }\n // Schedule a render for the next frame. This ensures we won't visually\n // see the element with the reset rotate value applied.\n visualElement.scheduleRender();\n }\n getProjectionStyles(styleProp) {\n var _a, _b;\n if (!this.instance || this.isSVG)\n return undefined;\n if (!this.isVisible) {\n return hiddenVisibility;\n }\n const styles = {\n visibility: \"\",\n };\n const transformTemplate = this.getTransformTemplate();\n if (this.needsReset) {\n this.needsReset = false;\n styles.opacity = \"\";\n styles.pointerEvents =\n resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n styles.transform = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : \"none\";\n return styles;\n }\n const lead = this.getLead();\n if (!this.projectionDelta || !this.layout || !lead.target) {\n const emptyStyles = {};\n if (this.options.layoutId) {\n emptyStyles.opacity =\n this.latestValues.opacity !== undefined\n ? this.latestValues.opacity\n : 1;\n emptyStyles.pointerEvents =\n resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n }\n if (this.hasProjected && !hasTransform(this.latestValues)) {\n emptyStyles.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n this.hasProjected = false;\n }\n return emptyStyles;\n }\n const valuesToRender = lead.animationValues || lead.latestValues;\n this.applyTransformsToTarget();\n styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n if (transformTemplate) {\n styles.transform = transformTemplate(valuesToRender, styles.transform);\n }\n const { x, y } = this.projectionDelta;\n styles.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n if (lead.animationValues) {\n /**\n * If the lead component is animating, assign this either the entering/leaving\n * opacity\n */\n styles.opacity =\n lead === this\n ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 1\n : this.preserveOpacity\n ? this.latestValues.opacity\n : valuesToRender.opacityExit;\n }\n else {\n /**\n * Or we're not animating at all, set the lead component to its layout\n * opacity and other components to hidden.\n */\n styles.opacity =\n lead === this\n ? valuesToRender.opacity !== undefined\n ? valuesToRender.opacity\n : \"\"\n : valuesToRender.opacityExit !== undefined\n ? valuesToRender.opacityExit\n : 0;\n }\n /**\n * Apply scale correction\n */\n for (const key in scaleCorrectors) {\n if (valuesToRender[key] === undefined)\n continue;\n const { correct, applyTo, isCSSVariable } = scaleCorrectors[key];\n /**\n * Only apply scale correction to the value if we have an\n * active projection transform. Otherwise these values become\n * vulnerable to distortion if the element changes size without\n * a corresponding layout animation.\n */\n const corrected = styles.transform === \"none\"\n ? valuesToRender[key]\n : correct(valuesToRender[key], lead);\n if (applyTo) {\n const num = applyTo.length;\n for (let i = 0; i < num; i++) {\n styles[applyTo[i]] = corrected;\n }\n }\n else {\n // If this is a CSS variable, set it directly on the instance.\n // Replacing this function from creating styles to setting them\n // would be a good place to remove per frame object creation\n if (isCSSVariable) {\n this.options.visualElement.renderState.vars[key] = corrected;\n }\n else {\n styles[key] = corrected;\n }\n }\n }\n /**\n * Disable pointer events on follow components. This is to ensure\n * that if a follow component covers a lead component it doesn't block\n * pointer events on the lead.\n */\n if (this.options.layoutId) {\n styles.pointerEvents =\n lead === this\n ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\"\n : \"none\";\n }\n return styles;\n }\n clearSnapshot() {\n this.resumeFrom = this.snapshot = undefined;\n }\n // Only run on root\n resetTree() {\n this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.stop(); });\n this.root.nodes.forEach(clearMeasurements);\n this.root.sharedNodes.clear();\n }\n };\n}\nfunction updateLayout(node) {\n node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n var _a;\n const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.snapshot) || node.snapshot;\n if (node.isLead() &&\n node.layout &&\n snapshot &&\n node.hasListeners(\"didUpdate\")) {\n const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n const { animationType } = node.options;\n const isShared = snapshot.source !== node.layout.source;\n // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n // animations for instance if layout=\"size\" and an element has only changed position\n if (animationType === \"size\") {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(axisSnapshot);\n axisSnapshot.min = layout[axis].min;\n axisSnapshot.max = axisSnapshot.min + length;\n });\n }\n else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(layout[axis]);\n axisSnapshot.max = axisSnapshot.min + length;\n /**\n * Ensure relative target gets resized and rerendererd\n */\n if (node.relativeTarget && !node.currentAnimation) {\n node.isProjectionDirty = true;\n node.relativeTarget[axis].max =\n node.relativeTarget[axis].min + length;\n }\n });\n }\n const layoutDelta = createDelta();\n calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n const visualDelta = createDelta();\n if (isShared) {\n calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n }\n else {\n calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n }\n const hasLayoutChanged = !isDeltaZero(layoutDelta);\n let hasRelativeLayoutChanged = false;\n if (!node.resumeFrom) {\n const relativeParent = node.getClosestProjectingParent();\n /**\n * If the relativeParent is itself resuming from a different element then\n * the relative snapshot is not relavent\n */\n if (relativeParent && !relativeParent.resumeFrom) {\n const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n if (parentSnapshot && parentLayout) {\n const relativeSnapshot = createBox();\n calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n const relativeLayout = createBox();\n calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n hasRelativeLayoutChanged = true;\n }\n if (relativeParent.options.layoutRoot) {\n node.relativeTarget = relativeLayout;\n node.relativeTargetOrigin = relativeSnapshot;\n node.relativeParent = relativeParent;\n }\n }\n }\n }\n node.notifyListeners(\"didUpdate\", {\n layout,\n snapshot,\n delta: visualDelta,\n layoutDelta,\n hasLayoutChanged,\n hasRelativeLayoutChanged,\n });\n }\n else if (node.isLead()) {\n const { onExitComplete } = node.options;\n onExitComplete && onExitComplete();\n }\n /**\n * Clearing transition\n * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n * and why we need it at all\n */\n node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n /**\n * Increase debug counter for nodes encountered this frame\n */\n if (statsBuffer.value) {\n metrics.nodes++;\n }\n if (!node.parent)\n return;\n /**\n * If this node isn't projecting, propagate isProjectionDirty. It will have\n * no performance impact but it will allow the next child that *is* projecting\n * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n * correcting.\n */\n if (!node.isProjecting()) {\n node.isProjectionDirty = node.parent.isProjectionDirty;\n }\n /**\n * Propagate isSharedProjectionDirty and isTransformDirty\n * throughout the whole tree. A future revision can take another look at\n * this but for safety we still recalcualte shared nodes.\n */\n node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n node.parent.isProjectionDirty ||\n node.parent.isSharedProjectionDirty));\n node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n node.isProjectionDirty =\n node.isSharedProjectionDirty =\n node.isTransformDirty =\n false;\n}\nfunction clearSnapshot(node) {\n node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n node.clearMeasurements();\n}\nfunction clearIsLayoutDirty(node) {\n node.isLayoutDirty = false;\n}\nfunction resetTransformStyle(node) {\n const { visualElement } = node.options;\n if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n visualElement.notify(\"BeforeLayoutMeasure\");\n }\n node.resetTransform();\n}\nfunction finishAnimation(node) {\n node.finishAnimation();\n node.targetDelta = node.relativeTarget = node.target = undefined;\n node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n output.translate = mixNumber(delta.translate, 0, p);\n output.scale = mixNumber(delta.scale, 1, p);\n output.origin = delta.origin;\n output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n output.min = mixNumber(from.min, to.min, p);\n output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n mixAxis(output.x, from.x, to.x, p);\n mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n duration: 0.45,\n ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n ? Math.round\n : noop;\nfunction roundAxis(axis) {\n // Round to the nearest .5 pixels to support subpixel layouts\n axis.min = roundPoint(axis.min);\n axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n roundAxis(box.x);\n roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n return (animationType === \"position\" ||\n (animationType === \"preserve-aspect\" &&\n !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\nfunction checkNodeWasScrollRoot(node) {\n var _a;\n return node !== node.root && ((_a = node.scroll) === null || _a === void 0 ? void 0 : _a.wasRoot);\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","function isSVGElement(element) {\n return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\nexport { isSVGElement };\n","import { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { animateMotionValue } from '../interfaces/motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n let transform = \"\";\n /**\n * The translations we use to calculate are always relative to the viewport coordinate space.\n * But when we apply scales, we also scale the coordinate space of an element and its children.\n * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n */\n const xTranslate = delta.x.translate / treeScale.x;\n const yTranslate = delta.y.translate / treeScale.y;\n const zTranslate = (latestTransform === null || latestTransform === void 0 ? void 0 : latestTransform.z) || 0;\n if (xTranslate || yTranslate || zTranslate) {\n transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n }\n /**\n * Apply scale correction for the tree transform.\n * This will apply scale to the screen-orientated axes.\n */\n if (treeScale.x !== 1 || treeScale.y !== 1) {\n transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n }\n if (latestTransform) {\n const { transformPerspective, rotate, rotateX, rotateY, skewX, skewY } = latestTransform;\n if (transformPerspective)\n transform = `perspective(${transformPerspective}px) ${transform}`;\n if (rotate)\n transform += `rotate(${rotate}deg) `;\n if (rotateX)\n transform += `rotateX(${rotateX}deg) `;\n if (rotateY)\n transform += `rotateY(${rotateY}deg) `;\n if (skewX)\n transform += `skewX(${skewX}deg) `;\n if (skewY)\n transform += `skewY(${skewY}deg) `;\n }\n /**\n * Apply scale to match the size of the element to the size we want it.\n * This will apply scale to the element-orientated axes.\n */\n const elementScaleX = delta.x.scale * treeScale.x;\n const elementScaleY = delta.y.scale * treeScale.y;\n if (elementScaleX !== 1 || elementScaleY !== 1) {\n transform += `scale(${elementScaleX}, ${elementScaleY})`;\n }\n return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n measureScroll: () => ({\n x: document.documentElement.scrollLeft || document.body.scrollLeft,\n y: document.documentElement.scrollTop || document.body.scrollTop,\n }),\n checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n measureScroll: (instance) => ({\n x: instance.scrollLeft,\n y: instance.scrollTop,\n }),\n defaultParent: () => {\n if (!rootProjectionNode.current) {\n const documentNode = new DocumentProjectionNode({});\n documentNode.mount(window);\n documentNode.setOptions({ layoutScroll: true });\n rootProjectionNode.current = documentNode;\n }\n return rootProjectionNode.current;\n },\n resetTransform: (instance, value) => {\n instance.style.transform = value !== undefined ? value : \"none\";\n },\n checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n pan: {\n Feature: PanGesture,\n },\n drag: {\n Feature: DragGesture,\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { drag };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from 'motion-utils';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n constructor(node) {\n super(node);\n this.removeGroupControls = noop;\n this.removeListeners = noop;\n this.controls = new VisualElementDragControls(node);\n }\n mount() {\n // If we've been provided a DragControls for manual control over the drag gesture,\n // subscribe this component to it on mount.\n const { dragControls } = this.node.getProps();\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls);\n }\n this.removeListeners = this.controls.addListeners() || noop;\n }\n unmount() {\n this.removeGroupControls();\n this.removeListeners();\n }\n}\n\nexport { DragGesture };\n","import { hover } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction handleHoverEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", lifecycle === \"Start\");\n }\n const eventName = (\"onHover\" + lifecycle);\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nclass HoverGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n this.unmount = hover(current, (_element, startEvent) => {\n handleHoverEvent(this.node, startEvent, \"Start\");\n return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\");\n });\n }\n unmount() { }\n}\n\nexport { HoverGesture };\n","import { press } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction handlePressEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n return;\n }\n if (node.animationState && props.whileTap) {\n node.animationState.setActive(\"whileTap\", lifecycle === \"Start\");\n }\n const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle));\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nclass PressGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n this.unmount = press(current, (_element, startEvent) => {\n handlePressEvent(this.node, startEvent, \"Start\");\n return (endEvent, { success }) => handlePressEvent(this.node, endEvent, success ? \"End\" : \"Cancel\");\n }, { useGlobalTarget: this.node.props.globalTapTarget });\n }\n unmount() { }\n}\n\nexport { PressGesture };\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n const callback = observerCallbacks.get(entry.target);\n callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n const lookupRoot = root || document;\n /**\n * If we don't have an observer lookup map for this root, create one.\n */\n if (!observers.has(lookupRoot)) {\n observers.set(lookupRoot, {});\n }\n const rootObservers = observers.get(lookupRoot);\n const key = JSON.stringify(options);\n /**\n * If we don't have an observer for this combination of root and settings,\n * create one.\n */\n if (!rootObservers[key]) {\n rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n }\n return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n const rootInteresectionObserver = initIntersectionObserver(options);\n observerCallbacks.set(element, callback);\n rootInteresectionObserver.observe(element);\n return () => {\n observerCallbacks.delete(element);\n rootInteresectionObserver.unobserve(element);\n };\n}\n\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nclass InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.unmount();\n const { viewport = {} } = this.node.getProps();\n const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n const options = {\n root: root ? root.current : undefined,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n };\n const onIntersectionUpdate = (entry) => {\n const { isIntersecting } = entry;\n /**\n * If there's been no change in the viewport state, early return.\n */\n if (this.isInView === isIntersecting)\n return;\n this.isInView = isIntersecting;\n /**\n * Handle hasEnteredView. If this is only meant to run once, and\n * element isn't visible, early return. Otherwise set hasEnteredView to true.\n */\n if (once && !isIntersecting && this.hasEnteredView) {\n return;\n }\n else if (isIntersecting) {\n this.hasEnteredView = true;\n }\n if (this.node.animationState) {\n this.node.animationState.setActive(\"whileInView\", isIntersecting);\n }\n /**\n * Use the latest committed props rather than the ones in scope\n * when this observer is created\n */\n const { onViewportEnter, onViewportLeave } = this.node.getProps();\n const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n callback && callback(entry);\n };\n return observeIntersection(this.node.current, options, onIntersectionUpdate);\n }\n mount() {\n this.startObserver();\n }\n update() {\n if (typeof IntersectionObserver === \"undefined\")\n return;\n const { props, prevProps } = this.node;\n const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n if (hasOptionsChanged) {\n this.startObserver();\n }\n }\n unmount() { }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n inView: {\n Feature: InViewFeature,\n },\n tap: {\n Feature: PressGesture,\n },\n focus: {\n Feature: FocusGesture,\n },\n hover: {\n Feature: HoverGesture,\n },\n};\n\nexport { gestureAnimations };\n","import { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\nclass FocusGesture extends Feature {\n constructor() {\n super(...arguments);\n this.isActive = false;\n }\n onFocus() {\n let isFocusVisible = false;\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current.matches(\":focus-visible\");\n }\n catch (e) {\n isFocusVisible = true;\n }\n if (!isFocusVisible || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", true);\n this.isActive = true;\n }\n onBlur() {\n if (!this.isActive || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", false);\n this.isActive = false;\n }\n mount() {\n this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n }\n unmount() { }\n}\n\nexport { FocusGesture };\n","import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n layout: {\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { layout };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst MotionContext = /* @__PURE__ */ createContext({});\n\nexport { MotionContext };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n return (isAnimationControls(props.animate) ||\n variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n","import { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction useCreateMotionContext(props) {\n const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\nexport { useCreateMotionContext };\n","import { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\n\nfunction getCurrentTreeVariants(props, context) {\n if (isControllingVariants(props)) {\n const { initial, animate } = props;\n return {\n initial: initial === false || isVariantLabel(initial)\n ? initial\n : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n };\n }\n return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n","const isBrowser = typeof window !== \"undefined\";\n\nexport { isBrowser };\n","const featureProps = {\n animation: [\n \"animate\",\n \"variants\",\n \"whileHover\",\n \"whileTap\",\n \"exit\",\n \"whileInView\",\n \"whileFocus\",\n \"whileDrag\",\n ],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n featureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n}\n\nexport { featureDefinitions };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","import { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n return useCallback((instance) => {\n if (instance) {\n visualState.onMount && visualState.onMount(instance);\n }\n if (visualElement) {\n if (instance) {\n visualElement.mount(instance);\n }\n else {\n visualElement.unmount();\n }\n }\n if (externalRef) {\n if (typeof externalRef === \"function\") {\n externalRef(instance);\n }\n else if (isRefObject(externalRef)) {\n externalRef.current = instance;\n }\n }\n }, \n /**\n * Only pass a new ref callback to React if we've received a visual element\n * factory. Otherwise we'll be mounting/remounting every time externalRef\n * or other dependencies change.\n */\n [visualElement]);\n}\n\nexport { useMotionRef };\n","import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor) {\n var _a, _b;\n const { visualElement: parent } = useContext(MotionContext);\n const lazyContext = useContext(LazyContext);\n const presenceContext = useContext(PresenceContext);\n const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n const visualElementRef = useRef(null);\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement = createVisualElement || lazyContext.renderer;\n if (!visualElementRef.current && createVisualElement) {\n visualElementRef.current = createVisualElement(Component, {\n visualState,\n parent,\n props,\n presenceContext,\n blockInitialAnimation: presenceContext\n ? presenceContext.initial === false\n : false,\n reducedMotionConfig,\n });\n }\n const visualElement = visualElementRef.current;\n /**\n * Load Motion gesture and animation features. These are rendered as renderless\n * components so each feature can optionally make use of React lifecycle methods.\n */\n const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n if (visualElement &&\n !visualElement.projection &&\n ProjectionNodeConstructor &&\n (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n }\n const isMounted = useRef(false);\n useInsertionEffect(() => {\n /**\n * Check the component has already mounted before calling\n * `update` unnecessarily. This ensures we skip the initial update.\n */\n if (visualElement && isMounted.current) {\n visualElement.update(props, presenceContext);\n }\n });\n /**\n * Cache this value as we want to know whether HandoffAppearAnimations\n * was present on initial render - it will be deleted after this.\n */\n const optimisedAppearId = props[optimizedAppearDataAttribute];\n const wantsHandoff = useRef(Boolean(optimisedAppearId) &&\n !((_a = window.MotionHandoffIsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId)) &&\n ((_b = window.MotionHasOptimisedAnimation) === null || _b === void 0 ? void 0 : _b.call(window, optimisedAppearId)));\n useIsomorphicLayoutEffect(() => {\n if (!visualElement)\n return;\n isMounted.current = true;\n window.MotionIsMounted = true;\n visualElement.updateFeatures();\n microtask.render(visualElement.render);\n /**\n * Ideally this function would always run in a useEffect.\n *\n * However, if we have optimised appear animations to handoff from,\n * it needs to happen synchronously to ensure there's no flash of\n * incorrect styles in the event of a hydration error.\n *\n * So if we detect a situtation where optimised appear animations\n * are running, we use useLayoutEffect to trigger animations.\n */\n if (wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n useEffect(() => {\n if (!visualElement)\n return;\n if (!wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n if (wantsHandoff.current) {\n // This ensures all future calls to animateChanges() in this component will run in useEffect\n queueMicrotask(() => {\n var _a;\n (_a = window.MotionHandoffMarkAsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId);\n });\n wantsHandoff.current = false;\n }\n });\n return visualElement;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = props;\n visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n ? undefined\n : getClosestProjectingNode(visualElement.parent));\n visualElement.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n visualElement,\n /**\n * TODO: Update options in an effect. This could be tricky as it'll be too late\n * to update by the time layout animations run.\n * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n * ensuring it gets called if there's no potential layout animations.\n *\n */\n animationType: typeof layout === \"string\" ? layout : \"both\",\n initialPromotionConfig,\n layoutScroll,\n layoutRoot,\n });\n}\nfunction getClosestProjectingNode(visualElement) {\n if (!visualElement)\n return undefined;\n return visualElement.options.allowProjection !== false\n ? visualElement.projection\n : getClosestProjectingNode(visualElement.parent);\n}\n\nexport { useVisualElement };\n","\"use client\";\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { warning, invariant } from 'motion-utils';\nimport { forwardRef, useContext } from 'react';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { featureDefinitions } from './features/definitions.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createRendererMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n var _a, _b;\n preloadedFeatures && loadFeatures(preloadedFeatures);\n function MotionComponent(props, externalRef) {\n /**\n * If we need to measure the element we load this functionality in a\n * separate class component in order to gain access to getSnapshotBeforeUpdate.\n */\n let MeasureLayout;\n const configAndProps = {\n ...useContext(MotionConfigContext),\n ...props,\n layoutId: useLayoutId(props),\n };\n const { isStatic } = configAndProps;\n const context = useCreateMotionContext(props);\n const visualState = useVisualState(props, isStatic);\n if (!isStatic && isBrowser) {\n useStrictMode(configAndProps, preloadedFeatures);\n const layoutProjection = getProjectionFunctionality(configAndProps);\n MeasureLayout = layoutProjection.MeasureLayout;\n /**\n * Create a VisualElement for this component. A VisualElement provides a common\n * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n * providing a way of rendering to these APIs outside of the React render loop\n * for more performant animations and interactions\n */\n context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode);\n }\n /**\n * The mount order and hierarchy is specific to ensure our element ref\n * is hydrated by the time features fire their effects.\n */\n return (jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)] }));\n }\n MotionComponent.displayName = `motion.${typeof Component === \"string\"\n ? Component\n : `create(${(_b = (_a = Component.displayName) !== null && _a !== void 0 ? _a : Component.name) !== null && _b !== void 0 ? _b : \"\"})`}`;\n const ForwardRefMotionComponent = forwardRef(MotionComponent);\n ForwardRefMotionComponent[motionComponentSymbol] = Component;\n return ForwardRefMotionComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = useContext(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n const isStrict = useContext(LazyContext).strict;\n /**\n * If we're in development mode, check to make sure we're not rendering a motion component\n * as a child of LazyMotion, as this will break the file-size benefits of using it.\n */\n if (process.env.NODE_ENV !== \"production\" &&\n preloadedFeatures &&\n isStrict) {\n const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n configAndProps.ignoreStrict\n ? warning(false, strictMessage)\n : invariant(false, strictMessage);\n }\n}\nfunction getProjectionFunctionality(props) {\n const { drag, layout } = featureDefinitions;\n if (!drag && !layout)\n return {};\n const combined = { ...drag, ...layout };\n return {\n MeasureLayout: (drag === null || drag === void 0 ? void 0 : drag.isEnabled(props)) || (layout === null || layout === void 0 ? void 0 : layout.isEnabled(props))\n ? combined.MeasureLayout\n : undefined,\n ProjectionNode: combined.ProjectionNode,\n };\n}\n\nexport { createRendererMotionComponent };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n}\n\nexport { loadFeatures };\n","import { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/keys-transform.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n return (transformProps.has(key) ||\n key.startsWith(\"origin\") ||\n ((layout || layoutId !== undefined) &&\n (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue };\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n return type && typeof value === \"number\"\n ? type.transform(value)\n : value;\n};\n\nexport { getValueAsType };\n","import { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\nimport { transformPropOrder } from './keys-transform.mjs';\n\nconst translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(latestValues, transform, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\n let transformIsDefault = true;\n /**\n * Loop over all possible transforms in order, adding the ones that\n * are present to the transform string.\n */\n for (let i = 0; i < numTransforms; i++) {\n const key = transformPropOrder[i];\n const value = latestValues[key];\n if (value === undefined)\n continue;\n let valueIsDefault = true;\n if (typeof value === \"number\") {\n valueIsDefault = value === (key.startsWith(\"scale\") ? 1 : 0);\n }\n else {\n valueIsDefault = parseFloat(value) === 0;\n }\n if (!valueIsDefault || transformTemplate) {\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (!valueIsDefault) {\n transformIsDefault = false;\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${valueAsType}) `;\n }\n if (transformTemplate) {\n transform[key] = valueAsType;\n }\n }\n }\n transformString = transformString.trim();\n // If we have a custom `transform` template, pass our transform values and\n // generated transformString to that before returning\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n }\n else if (transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\nexport { buildTransform };\n","import { isCSSVariableName } from '../../dom/utils/is-css-variable.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\nimport { buildTransform } from './build-transform.mjs';\nimport { transformProps } from './keys-transform.mjs';\n\nfunction buildHTMLStyles(state, latestValues, transformTemplate) {\n const { style, vars, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable.\n *\n * Transforms and transform origins are kept separately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n continue;\n }\n else if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n else {\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] =\n valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(latestValues, state.transform, transformTemplate);\n }\n else if (style.transform) {\n /**\n * If we have previously created a transform but currently don't have any,\n * reset transform style to none.\n */\n style.transform = \"none\";\n }\n }\n /**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n if (hasTransformOrigin) {\n const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n style.transformOrigin = `${originX} ${originY} ${originZ}`;\n }\n}\n\nexport { buildHTMLStyles };\n","const createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n\nexport { createHtmlRenderState };\n","import { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key];\n }\n }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState) {\n return useMemo(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState) {\n const styleProp = props.style || {};\n const style = {};\n /**\n * Copy non-Motion Values straight into style\n */\n copyRawValuesOnly(style, styleProp, props);\n Object.assign(style, useInitialMotionValues(props, visualState));\n return style;\n}\nfunction useHTMLProps(props, visualState) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState);\n if (props.drag && props.dragListener !== false) {\n // Disable the ghost element when a user drags\n htmlProps.draggable = false;\n // Disable text selection\n style.userSelect =\n style.WebkitUserSelect =\n style.WebkitTouchCallout =\n \"none\";\n // Disable scrolling on the draggable direction\n style.touchAction =\n props.drag === true\n ? \"none\"\n : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n }\n if (props.tabIndex === undefined &&\n (props.onTap || props.onTapStart || props.whileTap)) {\n htmlProps.tabIndex = 0;\n }\n htmlProps.style = style;\n return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"variants\",\n \"transition\",\n \"transformTemplate\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"ignoreStrict\",\n \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n return (key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n if (!isValidProp)\n return;\n // Explicitly filter our events\n shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n /**\n * We attempt to import this package but require won't be defined in esm environments, in that case\n * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n * in favour of explicit injection.\n */\n loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n const filteredProps = {};\n for (const key in props) {\n /**\n * values is considered a valid prop by Emotion, so if it's present\n * this will be rendered out to the DOM unless explicitly filtered.\n *\n * We check the type as it could be used with the `feColorMatrix`\n * element, which we support.\n */\n if (key === \"values\" && typeof props.values === \"object\")\n continue;\n if (shouldForward(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n // If trying to use native HTML drag events, forward drag listeners\n (props[\"draggable\"] &&\n key.startsWith(\"onDrag\"))) {\n filteredProps[key] =\n props[key];\n }\n }\n return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","/**\n * We keep these listed separately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n];\n\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n if (\n /**\n * If it's not a string, it's a custom React component. Currently we only support\n * HTML custom React components.\n */\n typeof Component !== \"string\" ||\n /**\n * If it contains a dash, the element is a custom HTML webcomponent.\n */\n Component.includes(\"-\")) {\n return false;\n }\n else if (\n /**\n * If it's in our list of lowercase SVG tags, it's an SVG component\n */\n lowercaseSVGElements.indexOf(Component) > -1 ||\n /**\n * If it contains a capital letter, it's an SVG component\n */\n /[A-Z]/u.test(Component)) {\n return true;\n }\n return false;\n}\n\nexport { isSVGComponent };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst dashKeys = {\n offset: \"stroke-dashoffset\",\n array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n offset: \"strokeDashoffset\",\n array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n // Normalise path length by setting SVG attribute pathLength to 1\n attrs.pathLength = 1;\n // We use dash case when setting attributes directly to the DOM node and camel case\n // when defining props on a React component.\n const keys = useDashCase ? dashKeys : camelKeys;\n // Build the dash offset\n attrs[keys.offset] = px.transform(-offset);\n // Build the dash array\n const pathLength = px.transform(length);\n const pathSpacing = px.transform(spacing);\n attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\nexport { buildSVGPath };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\"\n ? origin\n : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n return `${pxOriginX} ${pxOriginY}`;\n}\n\nexport { calcSVGTransformOrigin };\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { buildSVGPath } from './path.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate) {\n buildHTMLStyles(state, latest, transformTemplate);\n /**\n * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n * as normal HTML tags.\n */\n if (isSVGTag) {\n if (state.style.viewBox) {\n state.attrs.viewBox = state.style.viewBox;\n }\n return;\n }\n state.attrs = state.style;\n state.style = {};\n const { attrs, style, dimensions } = state;\n /**\n * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n * and copy it into style.\n */\n if (attrs.transform) {\n if (dimensions)\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n // Parse transformOrigin\n if (dimensions &&\n (originX !== undefined || originY !== undefined || style.transform)) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n }\n // Render attrX/attrY/attrScale as attributes\n if (attrX !== undefined)\n attrs.x = attrX;\n if (attrY !== undefined)\n attrs.y = attrY;\n if (attrScale !== undefined)\n attrs.scale = attrScale;\n // Build SVG path if one has been defined\n if (pathLength !== undefined) {\n buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n }\n}\n\nexport { buildSVGAttrs };\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n\nexport { createSvgRenderState };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","import { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = useMemo(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate);\n return {\n ...state.attrs,\n style: { ...state.style },\n };\n }, [visualState]);\n if (props.style) {\n const rawStyles = {};\n copyRawValuesOnly(rawStyles, props.style, props);\n visualProps.style = { ...rawStyles, ...visualProps.style };\n }\n return visualProps;\n}\n\nexport { useSVGProps };\n","import { Fragment, useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction createUseRender(forwardMotionProps = false) {\n const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n const useVisualProps = isSVGComponent(Component)\n ? useSVGProps\n : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = Component !== Fragment\n ? { ...filteredProps, ...visualProps, ref }\n : {};\n /**\n * If component has been handed a motion value as its child,\n * memoise its initial value and render that. Subsequent updates\n * will be handled by the onChange handler\n */\n const { children } = props;\n const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n return createElement(Component, {\n ...elementProps,\n children: renderedChildren,\n });\n };\n return useRender;\n}\n\nexport { createUseRender };\n","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onUpdate, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n if (onUpdate) {\n /**\n * onMount works without the VisualElement because it could be\n * called before the VisualElement payload has been hydrated.\n * (e.g. if someone is using m components )\n */\n state.onMount = (instance) => onUpdate({ props, current: instance, ...state });\n state.onUpdate = (visualElement) => onUpdate(visualElement);\n }\n return state;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n const context = useContext(MotionContext);\n const presenceContext = useContext(PresenceContext);\n const make = () => makeState(config, props, context, presenceContext);\n return isStatic ? make() : useConstant(make);\n};\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n const values = {};\n const motionValues = scrapeMotionValues(props, {});\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key]);\n }\n let { initial, animate } = props;\n const isControllingVariants$1 = isControllingVariants(props);\n const isVariantNode$1 = isVariantNode(props);\n if (context &&\n isVariantNode$1 &&\n !isControllingVariants$1 &&\n props.inherit !== false) {\n if (initial === undefined)\n initial = context.initial;\n if (animate === undefined)\n animate = context.animate;\n }\n let isInitialAnimationBlocked = presenceContext\n ? presenceContext.initial === false\n : false;\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n const variantToSet = isInitialAnimationBlocked ? animate : initial;\n if (variantToSet &&\n typeof variantToSet !== \"boolean\" &&\n !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n for (let i = 0; i < list.length; i++) {\n const resolved = resolveVariantFromProps(props, list[i]);\n if (resolved) {\n const { transitionEnd, transition, ...target } = resolved;\n for (const key in target) {\n let valueTarget = target[key];\n if (Array.isArray(valueTarget)) {\n /**\n * Take final keyframe if the initial animation is blocked because\n * we want to initialise at the end of that blocked animation.\n */\n const index = isInitialAnimationBlocked\n ? valueTarget.length - 1\n : 0;\n valueTarget = valueTarget[index];\n }\n if (valueTarget !== null) {\n values[key] = valueTarget;\n }\n }\n for (const key in transitionEnd) {\n values[key] = transitionEnd[key];\n }\n }\n }\n }\n return values;\n}\n\nexport { makeUseVisualState };\n","import { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n const ref = useRef(null);\n if (ref.current === null) {\n ref.current = init();\n }\n return ref.current;\n}\n\nexport { useConstant };\n","import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n var _a;\n const { style } = props;\n const newValues = {};\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevProps.style &&\n isMotionValue(prevProps.style[key])) ||\n isForcedMotionValue(key, props) ||\n ((_a = visualElement === null || visualElement === void 0 ? void 0 : visualElement.getValue(key)) === null || _a === void 0 ? void 0 : _a.liveStyle) !== undefined) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst htmlMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }),\n};\n\nexport { htmlMotionConfig };\n","function updateSVGDimensions(instance, renderState) {\n try {\n renderState.dimensions =\n typeof instance.getBBox === \"function\"\n ? instance.getBBox()\n : instance.getBoundingClientRect();\n }\n catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n renderState.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n}\n\nexport { updateSVGDimensions };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n // Loop over any CSS variables and assign those.\n for (const key in vars) {\n element.style.setProperty(key, vars[key]);\n }\n}\n\nexport { renderHTML };\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n \"baseFrequency\",\n \"diffuseConstant\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keySplines\",\n \"keyTimes\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerWidth\",\n \"numOctaves\",\n \"targetX\",\n \"targetY\",\n \"surfaceScale\",\n \"specularConstant\",\n \"specularExponent\",\n \"stdDeviation\",\n \"tableValues\",\n \"viewBox\",\n \"gradientTransform\",\n \"pathLength\",\n \"startOffset\",\n \"textLength\",\n \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n renderHTML(element, renderState, undefined, projection);\n for (const key in renderState.attrs) {\n element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n }\n}\n\nexport { renderSVG };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { transformPropOrder } from '../../html/utils/keys-transform.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n for (const key in props) {\n if (isMotionValue(props[key]) ||\n isMotionValue(prevProps[key])) {\n const targetKey = transformPropOrder.indexOf(key) !== -1\n ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n : key;\n newValues[targetKey] = props[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { frame } from '../../frameloop/frame.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { transformProps } from '../html/utils/keys-transform.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { updateSVGDimensions } from './utils/measure.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nconst layoutProps = [\"x\", \"y\", \"width\", \"height\", \"cx\", \"cy\", \"r\"];\nconst svgMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n onUpdate: ({ props, prevProps, current, renderState, latestValues, }) => {\n if (!current)\n return;\n let hasTransform = !!props.drag;\n if (!hasTransform) {\n for (const key in latestValues) {\n if (transformProps.has(key)) {\n hasTransform = true;\n break;\n }\n }\n }\n if (!hasTransform)\n return;\n let needsMeasure = !prevProps;\n if (prevProps) {\n /**\n * Check the layout props for changes, if any are found we need to\n * measure the element again.\n */\n for (let i = 0; i < layoutProps.length; i++) {\n const key = layoutProps[i];\n if (props[key] !==\n prevProps[key]) {\n needsMeasure = true;\n }\n }\n }\n if (!needsMeasure)\n return;\n frame.read(() => {\n updateSVGDimensions(current, renderState);\n frame.render(() => {\n buildSVGAttrs(renderState, latestValues, isSVGTag(current.tagName), props.transformTemplate);\n renderSVG(current, renderState);\n });\n });\n },\n }),\n};\n\nexport { svgMotionConfig };\n","import { createRendererMotionComponent } from '../../motion/index.mjs';\nimport { createUseRender } from '../dom/use-render.mjs';\nimport { isSVGComponent } from '../dom/utils/is-svg-component.mjs';\nimport { htmlMotionConfig } from '../html/config-motion.mjs';\nimport { svgMotionConfig } from '../svg/config-motion.mjs';\n\nfunction createMotionComponentFactory(preloadedFeatures, createVisualElement) {\n return function createMotionComponent(Component, { forwardMotionProps } = { forwardMotionProps: false }) {\n const baseConfig = isSVGComponent(Component)\n ? svgMotionConfig\n : htmlMotionConfig;\n const config = {\n ...baseConfig,\n preloadedFeatures,\n useRender: createUseRender(forwardMotionProps),\n createVisualElement,\n Component,\n };\n return createRendererMotionComponent(config);\n };\n}\n\nexport { createMotionComponentFactory };\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { complex } from '../../../value/types/complex/index.mjs';\nimport { dimensionValueTypes } from './dimensions.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { time } from '../frameloop/sync-time.mjs';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { isNumericalString } from '../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../utils/is-zero-value-string.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { complex } from '../value/types/complex/index.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { getAnimatableNone } from './dom/value-types/animatable-none.mjs';\nimport { findValueType } from './dom/value-types/find.mjs';\nimport { transformProps } from './html/utils/keys-transform.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { KeyframeResolver } from './utils/KeyframesResolver.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n /**\n * This method takes React props and returns found MotionValues. For example, HTML\n * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n *\n * This isn't an abstract method as it needs calling in the constructor, but it is\n * intended to be one.\n */\n scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n return {};\n }\n constructor({ parent, props, presenceContext, reducedMotionConfig, blockInitialAnimation, visualState, }, options = {}) {\n /**\n * A reference to the current underlying Instance, e.g. a HTMLElement\n * or Three.Mesh etc.\n */\n this.current = null;\n /**\n * A set containing references to this VisualElement's children.\n */\n this.children = new Set();\n /**\n * Determine what role this visual element should take in the variant tree.\n */\n this.isVariantNode = false;\n this.isControllingVariants = false;\n /**\n * Decides whether this VisualElement should animate in reduced motion\n * mode.\n *\n * TODO: This is currently set on every individual VisualElement but feels\n * like it could be set globally.\n */\n this.shouldReduceMotion = null;\n /**\n * A map of all motion values attached to this visual element. Motion\n * values are source of truth for any given animated value. A motion\n * value might be provided externally by the component via props.\n */\n this.values = new Map();\n this.KeyframeResolver = KeyframeResolver;\n /**\n * Cleanup functions for active features (hover/tap/exit etc)\n */\n this.features = {};\n /**\n * A map of every subscription that binds the provided or generated\n * motion values onChange listeners to this visual element.\n */\n this.valueSubscriptions = new Map();\n /**\n * A reference to the previously-provided motion values as returned\n * from scrapeMotionValuesFromProps. We use the keys in here to determine\n * if any motion values need to be removed after props are updated.\n */\n this.prevMotionValues = {};\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n /**\n * An object containing an unsubscribe function for each prop event subscription.\n * For example, every \"Update\" event can have multiple subscribers via\n * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n */\n this.propEventSubscriptions = {};\n this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n this.render = () => {\n if (!this.current)\n return;\n this.triggerBuild();\n this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n };\n this.renderScheduledAt = 0.0;\n this.scheduleRender = () => {\n const now = time.now();\n if (this.renderScheduledAt < now) {\n this.renderScheduledAt = now;\n frame.render(this.render, false, true);\n }\n };\n const { latestValues, renderState, onUpdate } = visualState;\n this.onUpdate = onUpdate;\n this.latestValues = latestValues;\n this.baseTarget = { ...latestValues };\n this.initialValues = props.initial ? { ...latestValues } : {};\n this.renderState = renderState;\n this.parent = parent;\n this.props = props;\n this.presenceContext = presenceContext;\n this.depth = parent ? parent.depth + 1 : 0;\n this.reducedMotionConfig = reducedMotionConfig;\n this.options = options;\n this.blockInitialAnimation = Boolean(blockInitialAnimation);\n this.isControllingVariants = isControllingVariants(props);\n this.isVariantNode = isVariantNode(props);\n if (this.isVariantNode) {\n this.variantChildren = new Set();\n }\n this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n /**\n * Any motion values that are provided to the element when created\n * aren't yet bound to the element, as this would technically be impure.\n * However, we iterate through the motion values and set them to the\n * initial values for this component.\n *\n * TODO: This is impure and we should look at changing this to run on mount.\n * Doing so will break some tests but this isn't necessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key], false);\n }\n }\n }\n mount(instance) {\n this.current = instance;\n visualElementStore.set(instance, this);\n if (this.projection && !this.projection.instance) {\n this.projection.mount(instance);\n }\n if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n this.removeFromVariantTree = this.parent.addVariantChild(this);\n }\n this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion =\n this.reducedMotionConfig === \"never\"\n ? false\n : this.reducedMotionConfig === \"always\"\n ? true\n : prefersReducedMotion.current;\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\");\n }\n if (this.parent)\n this.parent.children.add(this);\n this.update(this.props, this.presenceContext);\n }\n unmount() {\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.valueSubscriptions.clear();\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent && this.parent.children.delete(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n const feature = this.features[key];\n if (feature) {\n feature.unmount();\n feature.isMounted = false;\n }\n }\n this.current = null;\n }\n bindToMotionValue(key, value) {\n if (this.valueSubscriptions.has(key)) {\n this.valueSubscriptions.get(key)();\n }\n const valueIsTransform = transformProps.has(key);\n if (valueIsTransform && this.onBindTransform) {\n this.onBindTransform();\n }\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate && frame.preRender(this.notifyUpdate);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n });\n const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n let removeSyncCheck;\n if (window.MotionCheckAppearSync) {\n removeSyncCheck = window.MotionCheckAppearSync(this, key, value);\n }\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n removeOnRenderRequest();\n if (removeSyncCheck)\n removeSyncCheck();\n if (value.owner)\n value.stop();\n });\n }\n sortNodePosition(other) {\n /**\n * If these nodes aren't even of the same type we can't compare their depth.\n */\n if (!this.current ||\n !this.sortInstanceNodePosition ||\n this.type !== other.type) {\n return 0;\n }\n return this.sortInstanceNodePosition(this.current, other.current);\n }\n updateFeatures() {\n let key = \"animation\";\n for (key in featureDefinitions) {\n const featureDefinition = featureDefinitions[key];\n if (!featureDefinition)\n continue;\n const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n /**\n * If this feature is enabled but not active, make a new instance.\n */\n if (!this.features[key] &&\n FeatureConstructor &&\n isEnabled(this.props)) {\n this.features[key] = new FeatureConstructor(this);\n }\n /**\n * If we have a feature, mount or update it.\n */\n if (this.features[key]) {\n const feature = this.features[key];\n if (feature.isMounted) {\n feature.update();\n }\n else {\n feature.mount();\n feature.isMounted = true;\n }\n }\n }\n }\n triggerBuild() {\n this.build(this.renderState, this.latestValues, this.props);\n }\n /**\n * Measure the current viewport box with or without transforms.\n * Only measures axis-aligned boxes, rotate and skew must be manually\n * removed with a re-render to work.\n */\n measureViewportBox() {\n return this.current\n ? this.measureInstanceViewportBox(this.current, this.props)\n : createBox();\n }\n getStaticValue(key) {\n return this.latestValues[key];\n }\n setStaticValue(key, value) {\n this.latestValues[key] = value;\n }\n /**\n * Update the provided props. Ensure any newly-added motion values are\n * added to our map, old ones removed, and listeners updated.\n */\n update(props, presenceContext) {\n if (props.transformTemplate || this.props.transformTemplate) {\n this.scheduleRender();\n }\n this.prevProps = this.props;\n this.props = props;\n this.prevPresenceContext = this.presenceContext;\n this.presenceContext = presenceContext;\n /**\n * Update prop event handlers ie onAnimationStart, onAnimationComplete\n */\n for (let i = 0; i < propEventHandlers.length; i++) {\n const key = propEventHandlers[i];\n if (this.propEventSubscriptions[key]) {\n this.propEventSubscriptions[key]();\n delete this.propEventSubscriptions[key];\n }\n const listenerName = (\"on\" + key);\n const listener = props[listenerName];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps, this), this.prevMotionValues);\n if (this.handleChildMotionValue) {\n this.handleChildMotionValue();\n }\n this.onUpdate && this.onUpdate(this);\n }\n getProps() {\n return this.props;\n }\n /**\n * Returns the variant definition with a given name.\n */\n getVariant(name) {\n return this.props.variants ? this.props.variants[name] : undefined;\n }\n /**\n * Returns the defined default transition on this component.\n */\n getDefaultTransition() {\n return this.props.transition;\n }\n getTransformPagePoint() {\n return this.props.transformPagePoint;\n }\n getClosestVariantNode() {\n return this.isVariantNode\n ? this\n : this.parent\n ? this.parent.getClosestVariantNode()\n : undefined;\n }\n /**\n * Add a child visual element to our set of children.\n */\n addVariantChild(child) {\n const closestVariantNode = this.getClosestVariantNode();\n if (closestVariantNode) {\n closestVariantNode.variantChildren &&\n closestVariantNode.variantChildren.add(child);\n return () => closestVariantNode.variantChildren.delete(child);\n }\n }\n /**\n * Add a motion value and bind it to this visual element.\n */\n addValue(key, value) {\n // Remove existing value if it exists\n const existingValue = this.values.get(key);\n if (value !== existingValue) {\n if (existingValue)\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n this.values.set(key, value);\n this.latestValues[key] = value.get();\n }\n }\n /**\n * Remove a motion value and unbind any active subscriptions.\n */\n removeValue(key) {\n this.values.delete(key);\n const unsubscribe = this.valueSubscriptions.get(key);\n if (unsubscribe) {\n unsubscribe();\n this.valueSubscriptions.delete(key);\n }\n delete this.latestValues[key];\n this.removeValueFromRenderState(key, this.renderState);\n }\n /**\n * Check whether we have a motion value for this key\n */\n hasValue(key) {\n return this.values.has(key);\n }\n getValue(key, defaultValue) {\n if (this.props.values && this.props.values[key]) {\n return this.props.values[key];\n }\n let value = this.values.get(key);\n if (value === undefined && defaultValue !== undefined) {\n value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n this.addValue(key, value);\n }\n return value;\n }\n /**\n * If we're trying to animate to a previously unencountered value,\n * we need to check for it in our state and as a last resort read it\n * directly from the instance (which might have performance implications).\n */\n readValue(key, target) {\n var _a;\n let value = this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\n if (value !== undefined && value !== null) {\n if (typeof value === \"string\" &&\n (isNumericalString(value) || isZeroValueString(value))) {\n // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n value = parseFloat(value);\n }\n else if (!findValueType(value) && complex.test(target)) {\n value = getAnimatableNone(key, target);\n }\n this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n }\n return isMotionValue(value) ? value.get() : value;\n }\n /**\n * Set the base target to later animate back to. This is currently\n * only hydrated on creation and when we first read a value.\n */\n setBaseTarget(key, value) {\n this.baseTarget[key] = value;\n }\n /**\n * Find the base target for a value thats been removed from all animation\n * props.\n */\n getBaseTarget(key) {\n var _a;\n const { initial } = this.props;\n let valueFromInitial;\n if (typeof initial === \"string\" || typeof initial === \"object\") {\n const variant = resolveVariantFromProps(this.props, initial, (_a = this.presenceContext) === null || _a === void 0 ? void 0 : _a.custom);\n if (variant) {\n valueFromInitial = variant[key];\n }\n }\n /**\n * If this value still exists in the current initial variant, read that.\n */\n if (initial && valueFromInitial !== undefined) {\n return valueFromInitial;\n }\n /**\n * Alternatively, if this VisualElement config has defined a getBaseTarget\n * so we can read the value from an alternative source, try that.\n */\n const target = this.getBaseTargetFromProps(this.props, key);\n if (target !== undefined && !isMotionValue(target))\n return target;\n /**\n * If the value was initially defined on initial, but it doesn't any more,\n * return undefined. Otherwise return the value as initially read from the DOM.\n */\n return this.initialValues[key] !== undefined &&\n valueFromInitial === undefined\n ? undefined\n : this.baseTarget[key];\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n return this.events[eventName].add(callback);\n }\n notify(eventName, ...args) {\n if (this.events[eventName]) {\n this.events[eventName].notify(...args);\n }\n }\n}\n\nexport { VisualElement };\n","import { isBrowser } from '../is-browser.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nfunction initPrefersReducedMotion() {\n hasReducedMotionListener.current = true;\n if (!isBrowser)\n return;\n if (window.matchMedia) {\n const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n motionMediaQuery.addListener(setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\nexport { initPrefersReducedMotion };\n","import { warnOnce } from '../../utils/warn-once.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n for (const key in next) {\n const nextValue = next[key];\n const prevValue = prev[key];\n if (isMotionValue(nextValue)) {\n /**\n * If this is a motion value found in props or style, we want to add it\n * to our visual element's motion value map.\n */\n element.addValue(key, nextValue);\n /**\n * Check the version of the incoming motion value with this version\n * and warn against mismatches.\n */\n if (process.env.NODE_ENV === \"development\") {\n warnOnce(nextValue.version === \"12.4.2\", `Attempting to mix Motion versions ${nextValue.version} with 12.4.2 may not work as expected.`);\n }\n }\n else if (isMotionValue(prevValue)) {\n /**\n * If we're swapping from a motion value to a static value,\n * create a new motion value from that\n */\n element.addValue(key, motionValue(nextValue, { owner: element }));\n }\n else if (prevValue !== nextValue) {\n /**\n * If this is a flat value that has changed, update the motion value\n * or create one if it doesn't exist. We only want to do this if we're\n * not handling the value with our animation state.\n */\n if (element.hasValue(key)) {\n const existingValue = element.getValue(key);\n if (existingValue.liveStyle === true) {\n existingValue.jump(nextValue);\n }\n else if (!existingValue.hasAnimated) {\n existingValue.set(nextValue);\n }\n }\n else {\n const latestValue = element.getStaticValue(key);\n element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n }\n }\n }\n // Handle removed values\n for (const key in prev) {\n if (next[key] === undefined)\n element.removeValue(key);\n }\n return next;\n}\n\nexport { updateMotionValuesFromProps };\n","import { VisualElement } from '../VisualElement.mjs';\nimport { DOMKeyframesResolver } from './DOMKeyframesResolver.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nclass DOMVisualElement extends VisualElement {\n constructor() {\n super(...arguments);\n this.KeyframeResolver = DOMKeyframesResolver;\n }\n sortInstanceNodePosition(a, b) {\n /**\n * compareDocumentPosition returns a bitmask, by using the bitwise &\n * we're returning true if 2 in that bitmask is set to true. 2 is set\n * to true if b preceeds a.\n */\n return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n }\n getBaseTargetFromProps(props, key) {\n return props.style\n ? props.style[key]\n : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n handleChildMotionValue() {\n if (this.childSubscription) {\n this.childSubscription();\n delete this.childSubscription;\n }\n const { children } = this.props;\n if (isMotionValue(children)) {\n this.childSubscription = children.on(\"change\", (latest) => {\n if (this.current) {\n this.current.textContent = `${latest}`;\n }\n });\n }\n }\n}\n\nexport { DOMVisualElement };\n","import { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { transformProps } from './utils/keys-transform.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"html\";\n this.renderInstance = renderHTML;\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n else {\n const computedStyle = getComputedStyle(instance);\n const value = (isCSSVariableName(key)\n ? computedStyle.getPropertyValue(key)\n : computedStyle[key]) || 0;\n return typeof value === \"string\" ? value.trim() : value;\n }\n }\n measureInstanceViewportBox(instance, { transformPagePoint }) {\n return measureViewportBox(instance, transformPagePoint);\n }\n build(renderState, latestValues, props) {\n buildHTMLStyles(renderState, latestValues, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { frame } from '../../frameloop/frame.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { transformProps } from '../html/utils/keys-transform.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { updateSVGDimensions } from './utils/measure.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"svg\";\n this.isSVGTag = false;\n this.measureInstanceViewportBox = createBox;\n this.updateDimensions = () => {\n if (this.current && !this.renderState.dimensions) {\n updateSVGDimensions(this.current, this.renderState);\n }\n };\n }\n getBaseTargetFromProps(props, key) {\n return props[key];\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return instance.getAttribute(key);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n onBindTransform() {\n if (this.current && !this.renderState.dimensions) {\n frame.postRender(this.updateDimensions);\n }\n }\n build(renderState, latestValues, props) {\n buildSVGAttrs(renderState, latestValues, this.isSVGTag, props.transformTemplate);\n }\n renderInstance(instance, renderState, styleProp, projection) {\n renderSVG(instance, renderState, styleProp, projection);\n }\n mount(instance) {\n this.isSVGTag = isSVGTag(instance.tagName);\n super.mount(instance);\n }\n}\n\nexport { SVGVisualElement };\n","import { Fragment } from 'react';\nimport { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n return isSVGComponent(Component)\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options, {\n allowProjection: Component !== Fragment,\n });\n};\n\nexport { createDomVisualElement };\n","import { createDOMMotionComponentProxy } from '../create-proxy.mjs';\nimport { createMotionComponent } from './create.mjs';\n\nconst motion = /*@__PURE__*/ createDOMMotionComponentProxy(createMotionComponent);\n\nexport { motion };\n","import { animations } from '../../../motion/features/animations.mjs';\nimport { drag } from '../../../motion/features/drag.mjs';\nimport { gestureAnimations } from '../../../motion/features/gestures.mjs';\nimport { layout } from '../../../motion/features/layout.mjs';\nimport { createMotionComponentFactory } from '../create-factory.mjs';\nimport { createDomVisualElement } from '../../dom/create-visual-element.mjs';\n\nconst createMotionComponent = /*@__PURE__*/ createMotionComponentFactory({\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n}, createDomVisualElement);\n\nexport { createMotionComponent };\n","import type { ObserverInstanceCallback } from \"./index\";\n\nconst observerMap = new Map<\n string,\n {\n id: string;\n observer: IntersectionObserver;\n elements: Map>;\n }\n>();\n\nconst RootIds: WeakMap = new WeakMap();\nlet rootId = 0;\n\nlet unsupportedValue: boolean | undefined = undefined;\n\n/**\n * What should be the default behavior if the IntersectionObserver is unsupported?\n * Ideally the polyfill has been loaded, you can have the following happen:\n * - `undefined`: Throw an error\n * - `true` or `false`: Set the `inView` value to this regardless of intersection state\n * **/\nexport function defaultFallbackInView(inView: boolean | undefined) {\n unsupportedValue = inView;\n}\n\n/**\n * Generate a unique ID for the root element\n * @param root\n */\nfunction getRootId(root: IntersectionObserverInit[\"root\"]) {\n if (!root) return \"0\";\n if (RootIds.has(root)) return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\n\n/**\n * Convert the options to a string Id, based on the values.\n * Ensures we can reuse the same observer when observing elements with the same options.\n * @param options\n */\nexport function optionsToId(options: IntersectionObserverInit) {\n return Object.keys(options)\n .sort()\n .filter(\n (key) => options[key as keyof IntersectionObserverInit] !== undefined,\n )\n .map((key) => {\n return `${key}_${\n key === \"root\"\n ? getRootId(options.root)\n : options[key as keyof IntersectionObserverInit]\n }`;\n })\n .toString();\n}\n\nfunction createObserver(options: IntersectionObserverInit) {\n // Create a unique ID for this observer instance, based on the root, root margin and threshold.\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n\n if (!instance) {\n // Create a map of elements this observer is going to observe. Each element has a list of callbacks that should be triggered, once it comes into view.\n const elements = new Map>();\n // biome-ignore lint/style/useConst: It's fine to use let here, as we are going to assign it later\n let thresholds: number[] | readonly number[];\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n // While it would be nice if you could just look at isIntersecting to determine if the component is inside the viewport, browsers can't agree on how to use it.\n // -Firefox ignores `threshold` when considering `isIntersecting`, so it will never be false again if `threshold` is > 0\n const inView =\n entry.isIntersecting &&\n thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n\n // @ts-ignore support IntersectionObserver v2\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n // The browser doesn't support Intersection Observer v2, falling back to v1 behavior.\n // @ts-ignore\n entry.isVisible = inView;\n }\n\n elements.get(entry.target)?.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n\n // Ensure we have a valid thresholds array. If not, use the threshold from the options\n thresholds =\n observer.thresholds ||\n (Array.isArray(options.threshold)\n ? options.threshold\n : [options.threshold || 0]);\n\n instance = {\n id,\n observer,\n elements,\n };\n\n observerMap.set(id, instance);\n }\n\n return instance;\n}\n\n/**\n * @param element - DOM Element to observe\n * @param callback - Callback function to trigger when intersection status changes\n * @param options - Intersection Observer options\n * @param fallbackInView - Fallback inView value.\n * @return Function - Cleanup function that should be triggered to unregister the observer\n */\nexport function observe(\n element: Element,\n callback: ObserverInstanceCallback,\n options: IntersectionObserverInit = {},\n fallbackInView = unsupportedValue,\n) {\n if (\n typeof window.IntersectionObserver === \"undefined\" &&\n fallbackInView !== undefined\n ) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio:\n typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds,\n });\n return () => {\n // Nothing to cleanup\n };\n }\n // An observer with the same options can be reused, so lets use this fact\n const { id, observer, elements } = createObserver(options);\n\n // Register the callback listener for this element\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n\n callbacks.push(callback);\n observer.observe(element);\n\n return function unobserve() {\n // Remove the callback from the callback list\n callbacks.splice(callbacks.indexOf(callback), 1);\n\n if (callbacks.length === 0) {\n // No more callback exists for element, so destroy it\n elements.delete(element);\n observer.unobserve(element);\n }\n\n if (elements.size === 0) {\n // No more elements are being observer by this instance, so destroy it\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n","import * as React from \"react\";\nimport type { IntersectionObserverProps, PlainChildrenProps } from \"./index\";\nimport { observe } from \"./observe\";\n\ntype State = {\n inView: boolean;\n entry?: IntersectionObserverEntry;\n};\n\nfunction isPlainChildren(\n props: IntersectionObserverProps | PlainChildrenProps,\n): props is PlainChildrenProps {\n return typeof props.children !== \"function\";\n}\n\n/**\n ## Render props\n\n To use the `` component, you pass it a function. It will be called\n whenever the state changes, with the new value of `inView`. In addition to the\n `inView` prop, children also receive a `ref` that should be set on the\n containing DOM element. This is the element that the IntersectionObserver will\n monitor.\n\n If you need it, you can also access the\n [`IntersectionObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry)\n on `entry`, giving you access to all the details about the current intersection\n state.\n\n ```jsx\n import { InView } from 'react-intersection-observer';\n\n const Component = () => (\n \n {({ inView, ref, entry }) => (\n
\n

{`Header inside viewport ${inView}.`}

\n
\n )}\n
\n );\n\n export default Component;\n ```\n\n ## Plain children\n\n You can pass any element to the ``, and it will handle creating the\n wrapping DOM element. Add a handler to the `onChange` method, and control the\n state in your own component. Any extra props you add to `` will be\n passed to the HTML element, allowing you set the `className`, `style`, etc.\n\n ```jsx\n import { InView } from 'react-intersection-observer';\n\n const Component = () => (\n console.log('Inview:', inView)}>\n

Plain children are always rendered. Use onChange to monitor state.

\n
\n );\n\n export default Component;\n ```\n */\nexport class InView extends React.Component<\n IntersectionObserverProps | PlainChildrenProps,\n State\n> {\n node: Element | null = null;\n _unobserveCb: (() => void) | null = null;\n\n constructor(props: IntersectionObserverProps | PlainChildrenProps) {\n super(props);\n this.state = {\n inView: !!props.initialInView,\n entry: undefined,\n };\n }\n\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n\n componentDidUpdate(prevProps: IntersectionObserverProps) {\n // If a IntersectionObserver option changed, reinit the observer\n if (\n prevProps.rootMargin !== this.props.rootMargin ||\n prevProps.root !== this.props.root ||\n prevProps.threshold !== this.props.threshold ||\n prevProps.skip !== this.props.skip ||\n prevProps.trackVisibility !== this.props.trackVisibility ||\n prevProps.delay !== this.props.delay\n ) {\n this.unobserve();\n this.observeNode();\n }\n }\n\n componentWillUnmount() {\n this.unobserve();\n }\n\n observeNode() {\n if (!this.node || this.props.skip) return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView,\n } = this.props;\n\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay,\n },\n fallbackInView,\n );\n }\n\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n\n handleNode = (node?: Element | null) => {\n if (this.node) {\n // Clear the old observer, before we start observing a new element\n this.unobserve();\n\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n // Reset the state if we get a new node, and we aren't ignoring updates\n this.setState({ inView: !!this.props.initialInView, entry: undefined });\n }\n }\n\n this.node = node ? node : null;\n this.observeNode();\n };\n\n handleChange = (inView: boolean, entry: IntersectionObserverEntry) => {\n if (inView && this.props.triggerOnce) {\n // If `triggerOnce` is true, we should stop observing the element.\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n // Store the current State, so we can pass it to the children in the next render update\n // There's no reason to update the state for plain children, since it's not used in the rendering.\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n // If the user is actively listening for onChange, always trigger it\n this.props.onChange(inView, entry);\n }\n };\n\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props as PlainChildrenProps;\n\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children,\n );\n }\n}\n","import { motion } from \"framer-motion\";\nimport { useEffect, useState, ReactNode } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\n\ntype AnimationVariant =\n | \"fade\"\n | \"slideUp\"\n | \"slideDown\"\n | \"slideLeft\"\n | \"slideRight\"\n | \"zoom\"\n | \"rotate\"\n | \"flipX\"\n | \"flipY\"\n | \"bounce\"\n | \"pulse\"\n | \"swing\"\n | \"wobble\"\n | \"fadeInScale\"\n | \"skew\"\n | \"rotateIn\"\n | \"zoomOut\"\n | \"flipAndZoom\"\n | \"fadeAndSlide\"\n | \"rotateAndZoom\";\n\ninterface ScrollAnimationProps {\n children: ReactNode;\n variantType?: AnimationVariant;\n initial?: string;\n animate?: string;\n threshold?: number;\n className?: string;\n delay?: number;\n repeat?: boolean; // New prop for repeating animations\n}\n\nconst ScrollAnimation: React.FC = ({\n children,\n variantType = \"fade\",\n initial = \"hidden\",\n animate = \"visible\",\n threshold = 0.1,\n className = \"\",\n delay = 0,\n repeat = false, // Default is no repeat\n}) => {\n const { ref, inView } = useInView({ threshold, triggerOnce: !repeat });\n const [delayControl, setDelayControl] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n handleResize();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n // Define 20 animation variants\n const animationVariants = {\n fade: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n slideUp: {\n hidden: { opacity: 0, y: 100 },\n visible: { opacity: 1, y: 0 },\n },\n slideDown: {\n hidden: { opacity: 0, y: -100 },\n visible: { opacity: 1, y: 0 },\n },\n slideLeft: {\n hidden: { opacity: 0, x: -100 },\n visible: { opacity: 1, x: 0 },\n },\n slideRight: {\n hidden: { opacity: 0, x: 100 },\n visible: { opacity: 1, x: 0 },\n },\n zoom: {\n hidden: { scale: 0.5, opacity: 0 },\n visible: { scale: 1, opacity: 1 },\n },\n rotate: {\n hidden: { rotate: 0, opacity: 0 },\n visible: { rotate: 360, opacity: 1 },\n },\n flipX: {\n hidden: { rotateX: -180, opacity: 0 },\n visible: { rotateX: 0, opacity: 1 },\n },\n flipY: {\n hidden: { rotateY: -180, opacity: 0 },\n visible: { rotateY: 0, opacity: 1 },\n },\n bounce: {\n hidden: { scale: 0.8, opacity: 0 },\n visible: { scale: [1, 1.2, 1], opacity: 1 },\n },\n pulse: {\n hidden: { scale: 1, opacity: 0 },\n visible: { scale: [1, 1.05, 1], opacity: 1 },\n },\n swing: {\n hidden: { rotate: 0, opacity: 0 },\n visible: { rotate: [-15, 15, -10, 10, 0], opacity: 1 },\n },\n wobble: {\n hidden: { opacity: 0 },\n visible: { x: [-25, 25, -20, 20, 0], opacity: 1 },\n },\n fadeInScale: {\n hidden: { scale: 0.9, opacity: 0 },\n visible: { scale: 1, opacity: 1 },\n },\n skew: {\n hidden: { skewX: -15, opacity: 0 },\n visible: { skewX: 0, opacity: 1 },\n },\n rotateIn: {\n hidden: { rotate: -180, opacity: 0 },\n visible: { rotate: 0, opacity: 1 },\n },\n zoomOut: {\n hidden: { scale: 1.5, opacity: 0 },\n visible: { scale: 1, opacity: 1 },\n },\n flipAndZoom: {\n hidden: { scale: 0.5, rotateY: -180, opacity: 0 },\n visible: { scale: 1, rotateY: 0, opacity: 1 },\n },\n fadeAndSlide: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n rotateAndZoom: {\n hidden: { rotate: -180, scale: 0.5, opacity: 0 },\n visible: { rotate: 0, scale: 1, opacity: 1 },\n },\n };\n\n useEffect(() => {\n if (inView) {\n setTimeout(() => setDelayControl(true), delay);\n } else if (repeat) {\n setDelayControl(false); // Reset delay control for repeat animations\n }\n }, [inView, delay, repeat]);\n\n return (\n <>\n {isMobile ? (\n
{children}
\n ) : (\n \n
{children}
\n \n )}\n \n );\n};\n\nexport default ScrollAnimation;\n","import * as React from \"react\";\nimport type { InViewHookResponse, IntersectionOptions } from \"./index\";\nimport { observe } from \"./observe\";\n\ntype State = {\n inView: boolean;\n entry?: IntersectionObserverEntry;\n};\n\n/**\n * React Hooks make it easy to monitor the `inView` state of your components. Call\n * the `useInView` hook with the (optional) [options](#options) you need. It will\n * return an array containing a `ref`, the `inView` status and the current\n * [`entry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry).\n * Assign the `ref` to the DOM element you want to monitor, and the hook will\n * report the status.\n *\n * @example\n * ```jsx\n * import React from 'react';\n * import { useInView } from 'react-intersection-observer';\n *\n * const Component = () => {\n * const { ref, inView, entry } = useInView({\n * threshold: 0,\n * });\n *\n * return (\n *
\n *

{`Header inside viewport ${inView}.`}

\n *
\n * );\n * };\n * ```\n */\nexport function useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange,\n}: IntersectionOptions = {}): InViewHookResponse {\n const [ref, setRef] = React.useState(null);\n const callback = React.useRef(onChange);\n const [state, setState] = React.useState({\n inView: !!initialInView,\n entry: undefined,\n });\n\n // Store the onChange callback in a `ref`, so we can access the latest instance\n // inside the `useEffect`, but without triggering a rerender.\n callback.current = onChange;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: threshold is not correctly detected as a dependency\n React.useEffect(\n () => {\n // Ensure we have node ref, and that we shouldn't skip observing\n if (skip || !ref) return;\n\n let unobserve: (() => void) | undefined;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry,\n });\n if (callback.current) callback.current(inView, entry);\n\n if (entry.isIntersecting && triggerOnce && unobserve) {\n // If it should only trigger once, unobserve the element after it's inView\n unobserve();\n unobserve = undefined;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay,\n },\n fallbackInView,\n );\n\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay,\n ],\n );\n\n const entryTarget = state.entry?.target;\n const previousEntryTarget = React.useRef(undefined);\n if (\n !ref &&\n entryTarget &&\n !triggerOnce &&\n !skip &&\n previousEntryTarget.current !== entryTarget\n ) {\n // If we don't have a node ref, then reset the state (unless the hook is set to only `triggerOnce` or `skip`)\n // This ensures we correctly reflect the current state - If you aren't observing anything, then nothing is inView\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: undefined,\n });\n }\n\n const result = [setRef, state.inView, state.entry] as InViewHookResponse;\n\n // Support object destructuring, by adding the specific values.\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n\n return result;\n}\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n const threshold = 1000 / freq;\n let timer = null;\n return function throttled() {\n const force = this === true;\n\n const now = Date.now();\n if (force || now - timestamp > threshold) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n timestamp = now;\n return fn.apply(null, arguments);\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n timestamp = Date.now();\n return fn.apply(null, arguments);\n }, threshold - (now - timestamp));\n }\n };\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n }, freq);\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType} = _config;\n let onCanceled;\n function done() {\n if (_config.cancelToken) {\n _config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (_config.signal) {\n _config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n _config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (typeof _config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof _config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\n\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n const {done, value} = await iterator.next();\n\n if (done) {\n controller.close();\n onFinish();\n return;\n }\n\n let len = value.byteLength;\n onProgress && onProgress(bytes += len);\n controller.enqueue(new Uint8Array(value));\n },\n cancel(reason) {\n onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n const lengthComputable = total != null;\n return (loaded) => setTimeout(() => fn({\n lengthComputable,\n total,\n loaded\n }));\n}\n\nconst isFetchSupported = typeof fetch !== 'undefined';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream !== 'undefined';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder !== 'undefined' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n try {\n return utils.isReadableStream(new Response('').body);\n } catch(err) {\n // return undefined\n }\n})();\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n requestContentLength,\n progressEventReducer(onUploadProgress)\n ), null, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'cors' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n responseContentLength,\n progressEventReducer(onDownloadProgress, true)\n ), isStreamResponse && onFinish, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.1\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from \"axios\";\n\nconst lisapropApiUrl =\n process.env.NODE_ENV === \"development\"\n ? \"https://api.lisaprop.xyz/api\"\n : \"https://api.lisaprop.africa/api/\";\nconst lisapropApi = axios.create({\n baseURL: lisapropApiUrl,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n});\n\nexport { lisapropApi, lisapropApiUrl };\n","import React, {\n createContext,\n useContext,\n useState,\n ReactNode,\n useEffect,\n Dispatch,\n SetStateAction,\n useCallback,\n} from \"react\";\nimport { lisapropApi } from \"configurations/AxiosConfig\";\nimport { useNavigate } from \"react-router-dom\";\nimport { userType, visitorType } from \"types/allTypes\";\n\ninterface LisapropContextProps {\n user: userType;\n setUser: Dispatch>;\n lisapropVisitor: visitorType;\n setLisapropVisitor: Dispatch>;\n handleLogin: (email: string, password: string) => Promise;\n storedToken: string | null;\n setStoredToken: Dispatch>;\n isLoading: boolean;\n setIsLoading: Dispatch>;\n errorMessage: string | null;\n setErrorMessage: Dispatch>;\n fetchUserData: (accessToken: string) => Promise;\n trackAProject: boolean;\n setTrackAProject: Dispatch>;\n setTrackPropertyId: Dispatch>;\n trackPropertyId: string;\n setListPropertyId: Dispatch>;\n addMemberFee: number;\n setAddMemberFee: Dispatch>;\n listPropertyId: string;\n buildNdGoWithLand: boolean;\n setBuildNdGoWithLand: Dispatch>;\n buildNdGoNoLand: boolean;\n setBuildNdGoNoLand: Dispatch>;\n colabWithDevWithLand: boolean;\n setColabWithDevWithLand: Dispatch>;\n colabWithDevNoLand: boolean;\n setColabWithDevNoLand: Dispatch>;\n viewProjectDetails: boolean;\n setViewProjectDetails: Dispatch>;\n projectTab: string;\n setProjectTab: Dispatch>;\n devProjectTab: string;\n setDevProjectTab: Dispatch<\n SetStateAction<\"sentProposals\" | \"monitoredProjects\">\n >;\n currentProjectId: string;\n setCurrentProjectId: Dispatch>;\n itemDeleted: boolean;\n setItemDeleted: Dispatch>;\n siteImages: any;\n setSiteImages: any;\n siteImagesFile: any;\n setSiteImagesFile: any;\n visitorSignedIn: boolean;\n setVisitorSignedIn: Dispatch>;\n newMemberAddedToStorage: boolean;\n setNewMemberAddedToStorage: Dispatch>;\n userLoading: boolean;\n setUserLoading: Dispatch>;\n}\nconst AuthContext = createContext(undefined);\n\ninterface AuthProviderProps {\n children: ReactNode;\n}\n\nexport const AuthProvider: React.FC = ({ children }) => {\n const [user, setUser] = useState({} as userType);\n const [lisapropVisitor, setLisapropVisitor] = useState({} as visitorType);\n const navigate = useNavigate();\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [storedToken, setStoredToken] = useState(\"\");\n const [trackAProject, setTrackAProject] = useState(false);\n const [trackPropertyId, setTrackPropertyId] = useState(\"\");\n const [listPropertyId, setListPropertyId] = useState(\"\");\n const [buildNdGoWithLand, setBuildNdGoWithLand] = useState(false);\n const [buildNdGoNoLand, setBuildNdGoNoLand] = useState(false);\n const [colabWithDevWithLand, setColabWithDevWithLand] = useState(false);\n const [colabWithDevNoLand, setColabWithDevNoLand] = useState(false);\n const [viewProjectDetails, setViewProjectDetails] = useState(false);\n const [projectTab, setProjectTab] = useState<\"listProperty\" | \"trackProject\">(\n \"listProperty\"\n );\n const [devProjectTab, setDevProjectTab] = useState<\n \"sentProposals\" | \"monitoredProjects\"\n >(\"sentProposals\");\n const [currentProjectId, setCurrentProjectId] = useState(\"\");\n const [addMemberFee, setAddMemberFee] = useState(0);\n const [itemDeleted, setItemDeleted] = useState(false);\n const [siteImages, setSiteImages] = useState([]);\n const [siteImagesFile, setSiteImagesFile] = useState([]);\n const [visitorSignedIn, setVisitorSignedIn] = useState(false);\n const [newMemberAddedToStorage, setNewMemberAddedToStorage] = useState(false);\n const [userLoading, setUserLoading] = useState(false);\n\n useEffect(() => {\n setIsLoading(false);\n }, []);\n\n // const logout = () => {\n // localStorage.removeItem(\"accessToken\");\n // setUser({} as UserData);\n // setIsLoading(false)\n // setUserDetails({} as UserDetails);\n // setStoredToken(null);\n // setIsWalletConfirmed(false);\n // };\n const fetchUserData = useCallback(\n async (accessToken: string) => {\n setUserLoading(true);\n try {\n const response = await lisapropApi.get(\"/user\", {\n headers: {\n Accept: \"text/plain\",\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${accessToken}`,\n },\n });\n setUser(response?.data);\n } catch (error: any) {\n console.error(\"Unexpected error:\", error);\n if (error?.response?.status === 401) {\n localStorage.clear();\n navigate(\"/login\");\n }\n } finally {\n setUserLoading(false);\n }\n },\n [navigate]\n );\n\n const handleLogin = async (email: string, password: string) => {\n setErrorMessage(\"\");\n setIsLoading(true);\n try {\n const response = await lisapropApi.post(\n `/auth/signin`,\n {\n email: email,\n password: password,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n if (response.status === 200) {\n setIsLoading(false);\n navigate(\"/dashboard\");\n // console.log(\"succesfull login response\", response);\n const accessToken = response.data.accessToken;\n localStorage.setItem(\"accessToken\", accessToken);\n setStoredToken(accessToken);\n fetchUserData(accessToken);\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.message);\n setIsLoading(false);\n console.log(error);\n }\n };\n\n useEffect(() => {\n const theStoredToken = localStorage.getItem(\"accessToken\");\n if (theStoredToken) {\n fetchUserData(theStoredToken);\n }\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAuth = () => {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return context;\n};\n","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\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 status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\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\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\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 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\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;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(branches[i], decoded);\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === matches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n}\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}\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?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\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 // 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 ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized: boolean;\n let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n let hasLoaders = initialMatches.some((m) => m.route.loader);\n if (hasLazyRoutes) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) return true;\n // Explicitly opting-in to running on hydration\n if (m.route.loader.hydrate === true) return false;\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | 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 pendingError = {\n [findNearestBoundary(matches).route.id]: 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 actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\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 replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n if (\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration)\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\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(state, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\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(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.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(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\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(request, location, matches, requestContext);\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 async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\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 match\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 routeMatch?: AgnosticDataRouteMatch\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 routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\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, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\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 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 result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\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.status,\n headers: {\n Location: result.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 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 let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\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 : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\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 let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\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 : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\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: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\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 return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n v7_relativeSplatPath: boolean,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run 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, data: 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 !== 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 resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\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 (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponseImpl(status, result.statusText, data),\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 (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\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\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\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) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\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 } else {\n loaderData[id] = result.data;\n }\n\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 }\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) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","/**\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;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n event: LimitedMouseEvent,\n target?: string\n) {\n return (\n event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record\n | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nexport function createSearchParams(\n init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n return new URLSearchParams(\n typeof init === \"string\" ||\n Array.isArray(init) ||\n init instanceof URLSearchParams\n ? init\n : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [] as ParamKeyValuePair[])\n );\n}\n\nexport function getSearchParamsForLocation(\n locationSearch: string,\n defaultSearchParams: URLSearchParams | null\n) {\n let searchParams = createSearchParams(locationSearch);\n\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n\n return searchParams;\n}\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\nexport type SubmitTarget =\n | HTMLFormElement\n | HTMLButtonElement\n | HTMLInputElement\n | FormData\n | URLSearchParams\n | JsonValue\n | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\n\nexport interface SubmitOptions {\n /**\n * The HTTP method used to submit the form. Overrides ``.\n * Defaults to \"GET\".\n */\n method?: HTMLFormMethod;\n\n /**\n * The action URL path used to submit the form. Overrides ``.\n * Defaults to the path of the current route.\n */\n action?: string;\n\n /**\n * The encoding used to submit the form. Overrides ``.\n * Defaults to \"application/x-www-form-urlencoded\".\n */\n encType?: FormEncType;\n\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Set `true` to replace the current entry in the browser's history stack\n * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n * to `false`.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * In browser-based environments, prevent resetting scroll after this\n * navigation when using the component\n */\n preventScrollReset?: boolean;\n\n /**\n * Enable flushSync for this navigation's state updates\n */\n unstable_flushSync?: boolean;\n\n /**\n * Enable view transitions on this submission navigation\n */\n unstable_viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set = new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`\\`/\\`\\` ` +\n `and will default to \"${defaultEncType}\"`\n );\n\n return null;\n }\n return encType;\n}\n\nexport function getFormSubmissionInfo(\n target: SubmitTarget,\n basename: string\n): {\n action: string | null;\n method: string;\n encType: string;\n formData: FormData | undefined;\n body: any;\n} {\n let method: string;\n let action: string | null;\n let encType: string;\n let formData: FormData | undefined;\n let body: any;\n\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n formData = new FormData(target);\n } else if (\n isButtonElement(target) ||\n (isInputElement(target) &&\n (target.type === \"submit\" || target.type === \"image\"))\n ) {\n let form = target.form;\n\n if (form == null) {\n throw new Error(\n `Cannot submit a