{"version":3,"file":"app-60c927c41aa342cbd740.js","mappings":"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","sources":["webpack://plusmeta/./node_modules/gatsby-page-utils/dist/apply-trailing-slash-option.js","webpack://plusmeta/./node_modules/gatsby-react-router-scroll/index.js","webpack://plusmeta/./node_modules/gatsby-react-router-scroll/scroll-handler.js","webpack://plusmeta/./node_modules/gatsby-react-router-scroll/session-storage.js","webpack://plusmeta/./node_modules/gatsby-react-router-scroll/use-scroll-restoration.js","webpack://plusmeta/./node_modules/gatsby/dist/internal-plugins/partytown/gatsby-browser.js","webpack://plusmeta/./node_modules/gatsby/dist/internal-plugins/partytown/utils/get-forwards.js","webpack://plusmeta/./node_modules/gatsby/dist/internal-plugins/partytown/utils/inject-partytown-snippet.js","webpack://plusmeta/./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js","webpack://plusmeta/./.cache/api-runner-browser-plugins.js","webpack://plusmeta/./.cache/api-runner-browser.js","webpack://plusmeta/./.cache/create-content-digest-browser-shim.js","webpack://plusmeta/./.cache/emitter.js","webpack://plusmeta/./node_modules/mitt/dist/mitt.es.js","webpack://plusmeta/./.cache/normalize-page-path.js","webpack://plusmeta/./.cache/find-path.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://plusmeta/./.cache/slice/server-slice-renderer.js","webpack://plusmeta/./.cache/slice/server-slice.js","webpack://plusmeta/./.cache/slice/inline-slice.js","webpack://plusmeta/./.cache/slice.js","webpack://plusmeta/./.cache/gatsby-browser-entry.js","webpack://plusmeta/./.cache/prefetch.js","webpack://plusmeta/./.cache/loader.js","webpack://plusmeta/./.cache/head/components/fire-callback-in-effect.js","webpack://plusmeta/./.cache/head/constants.js","webpack://plusmeta/./.cache/head/utils.js","webpack://plusmeta/./.cache/head/head-export-handler-for-browser.js","webpack://plusmeta/./.cache/page-renderer.js","webpack://plusmeta/./.cache/route-announcer-props.js","webpack://plusmeta/./.cache/navigation.js","webpack://plusmeta/./node_modules/shallow-compare/es/index.js","webpack://plusmeta/./.cache/ensure-resources.js","webpack://plusmeta/./.cache/production-app.js","webpack://plusmeta/./.cache/public-page-renderer-prod.js","webpack://plusmeta/./.cache/public-page-renderer.js","webpack://plusmeta/./.cache/react-dom-utils.js","webpack://plusmeta/./.cache/redirect-utils.js","webpack://plusmeta/./.cache/register-service-worker.js","webpack://plusmeta/./.cache/slice/context.js","webpack://plusmeta/./.cache/static-query.js","webpack://plusmeta/./.cache/context-utils.js","webpack://plusmeta/./.cache/strip-prefix.js","webpack://plusmeta/./node_modules/gatsby-plugin-canonical-urls/gatsby-browser.js","webpack://plusmeta/./node_modules/gatsby-plugin-layout/gatsby-browser.js","webpack://plusmeta/./node_modules/gatsby-plugin-layout/wrap-page.js","webpack://plusmeta/./node_modules/gatsby-plugin-manifest/gatsby-browser.js","webpack://plusmeta/./node_modules/gatsby-plugin-manifest/get-manifest-pathname.js","webpack://plusmeta/./node_modules/gatsby-remark-images/constants.js","webpack://plusmeta/./node_modules/gatsby-remark-images/gatsby-browser.js","webpack://plusmeta/./src/utils/warning.js","webpack://plusmeta/./src/components/Button/index.jsx","webpack://plusmeta/./src/utils/isInternalLink.js","webpack://plusmeta/./src/components/Link/index.jsx","webpack://plusmeta/./src/hooks/useNavigation.js","webpack://plusmeta/./src/hooks/useTranslation.js","webpack://plusmeta/./src/hooks/useMediaQuery.js","webpack://plusmeta/./src/layout/Context.jsx","webpack://plusmeta/./src/components/MenuButton/index.jsx","webpack://plusmeta/./src/components/icons/ChevronDownIcon/index.jsx","webpack://plusmeta/./src/components/Nav/index.jsx","webpack://plusmeta/./src/components/NavButton/index.jsx","webpack://plusmeta/./src/components/LocaleSwitch/index.jsx","webpack://plusmeta/./src/components/ToggleIcon/index.jsx","webpack://plusmeta/./src/components/Submenu/index.jsx","webpack://plusmeta/./src/images/logo.png","webpack://plusmeta/./src/layout/Header.jsx","webpack://plusmeta/./src/components/icons/GoogleIcon/index.jsx","webpack://plusmeta/./src/components/icons/LinkedInIcon/index.jsx","webpack://plusmeta/./src/components/icons/YoutubeIcon/index.jsx","webpack://plusmeta/./src/images/plusmeta_Logo_Quanos_web_weiß_svg.svg","webpack://plusmeta/./src/layout/Footer.jsx","webpack://plusmeta/./src/layout/DefaultLayout.jsx","webpack://plusmeta/./src/layout/SimpleHeader.jsx","webpack://plusmeta/./src/images/logo.svg","webpack://plusmeta/./src/layout/SimpleFooter.jsx","webpack://plusmeta/./src/layout/SimpleLayout.jsx","webpack://plusmeta/./src/layout/Layout.jsx","webpack://plusmeta/./src/utils/PropTypes.js","webpack://plusmeta/./src/utils/whenKey.js","webpack://plusmeta/./node_modules/hey-listen/dist/hey-listen.es.js","webpack://plusmeta/./node_modules/invariant/browser.js","webpack://plusmeta/./node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js","webpack://plusmeta/./node_modules/react-server-dom-webpack/index.js","webpack://plusmeta/./src/images/visuals/plusmeta-spart-zeit-mit-hilfe-von-ki.svg","webpack://plusmeta/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://plusmeta/./node_modules/@builder.io/partytown/integration/index.cjs","webpack://plusmeta/./node_modules/classnames/index.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://plusmeta/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://plusmeta/./node_modules/@gatsbyjs/reach-router/dist/index.modern.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-is-mounted.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-force-update.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/PresenceContext.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/frameloop/data.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/frameloop/on-next-frame.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/frameloop/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/frameloop/create-render-step.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/LazyContext.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/definitions.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/node/state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/node/id.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/VisualElementHandler.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/load-features.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/motion-proxy.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/transform.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/clamp.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/utils.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/use-props.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/use-props.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/use-render.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/render.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/resolve-value.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/config-motion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/types.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/events/use-dom-event.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/events/event-info.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/events/use-pointer-event.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/use-hover-gesture.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/pipe.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/viewport/use-viewport.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/utils/make-renderless-component.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/gestures.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/use-tap-gesture.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/use-focus-gesture.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/array.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/color/utils.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/color/hex.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/color/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/complex/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/setters.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/time-conversion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/ease.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/mix.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/mix-color.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/mix-complex.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/progress.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/interpolate.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/noop.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/circ.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/back.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/easing.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/easing/anticipate.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/keyframes.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/find-spring.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/spring.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/decay.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/waapi/easing.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/waapi/supports.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/waapi/create-accelerated-animation.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/waapi/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/waapi/utils/get-final-keyframe.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/delay.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/create-instant-animation.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/transitions.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/utils/keyframes.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/legacy-popmotion/inertia.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/animation.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/animations.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/distance.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/PanSession.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/utils/measure.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/models.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/drag.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/use-pan-gesture.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/gestures/drag/use-drag.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/VisualElement.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/motion/features/layout/index.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/shared/stack.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/styles/transform.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/animation/animate.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/motion.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/render/dom/utils/create-config.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/is-browser.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-constant.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","webpack://plusmeta/./node_modules/framer-motion/dist/es/utils/use-unmount-effect.mjs","webpack://plusmeta/./node_modules/gatsby-link/dist/index.modern.mjs","webpack://plusmeta/./node_modules/gatsby-script/dist/index.modern.mjs"],"sourcesContent":["\"use strict\";\n\nexports.__esModule = true;\nexports.applyTrailingSlashOption = void 0;\nconst endsWithSuffixes = (suffixes, input) => {\n  for (const suffix of suffixes) {\n    if (input.endsWith(suffix)) return true;\n  }\n  return false;\n};\nconst suffixes = [`.html`, `.json`, `.js`, `.map`, `.txt`, `.xml`, `.pdf`];\nconst applyTrailingSlashOption = (input, option = `always`) => {\n  if (input === `/`) return input;\n  const hasTrailingSlash = input.endsWith(`/`);\n  if (endsWithSuffixes(suffixes, input)) {\n    return input;\n  }\n  if (option === `always`) {\n    return hasTrailingSlash ? input : `${input}/`;\n  }\n  if (option === `never`) {\n    return hasTrailingSlash ? input.slice(0, -1) : input;\n  }\n  return input;\n};\nexports.applyTrailingSlashOption = applyTrailingSlashOption;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\nvar _scrollHandler = require(\"./scroll-handler\");\nexports.ScrollContext = _scrollHandler.ScrollHandler;\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _sessionStorage = require(\"./session-storage\");\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n  (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n  function ScrollHandler() {\n    var _this;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this._stateStorage = new _sessionStorage.SessionStorage();\n    _this._isTicking = false;\n    _this._latestKnownScrollY = 0;\n    _this.scrollListener = function () {\n      _this._latestKnownScrollY = window.scrollY;\n      if (!_this._isTicking) {\n        _this._isTicking = true;\n        requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n      }\n    };\n    _this.windowScroll = function (position, prevProps) {\n      if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n        window.scrollTo(0, position);\n      }\n    };\n    _this.scrollToHash = function (hash, prevProps) {\n      var node = document.getElementById(hash.substring(1));\n      if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n        node.scrollIntoView();\n      }\n    };\n    _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n      var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n      if (!shouldUpdateScroll) {\n        return true;\n      }\n\n      // Hack to allow accessing this._stateStorage.\n      return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n    };\n    return _this;\n  }\n  var _proto = ScrollHandler.prototype;\n  _proto._saveScroll = function _saveScroll() {\n    var key = this.props.location.key || null;\n    if (key) {\n      this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n    }\n    this._isTicking = false;\n  };\n  _proto.componentDidMount = function componentDidMount() {\n    window.addEventListener(\"scroll\", this.scrollListener);\n    var scrollPosition;\n    var _this$props$location = this.props.location,\n      key = _this$props$location.key,\n      hash = _this$props$location.hash;\n    if (key) {\n      scrollPosition = this._stateStorage.read(this.props.location, key);\n    }\n\n    /** If a hash is present in the browser url as the component mounts (i.e. the user is navigating\n     * from an external website) then scroll to the hash instead of any previously stored scroll\n     * position. */\n    if (hash) {\n      this.scrollToHash(decodeURI(hash), undefined);\n    } else if (scrollPosition) {\n      this.windowScroll(scrollPosition, undefined);\n    }\n  };\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    window.removeEventListener(\"scroll\", this.scrollListener);\n  };\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var _this$props$location2 = this.props.location,\n      hash = _this$props$location2.hash,\n      key = _this$props$location2.key;\n    var scrollPosition;\n    if (key) {\n      scrollPosition = this._stateStorage.read(this.props.location, key);\n    }\n\n    /**  There are two pieces of state: the browser url and\n     * history state which keeps track of scroll position\n     * Native behaviour prescribes that we ought to restore scroll position\n     * when a user navigates back in their browser (this is the `POP` action)\n     * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n     * So we _always_ stick to the url as a source of truth — if the url\n     * contains a hash, we scroll to it\n     */\n\n    if (hash) {\n      this.scrollToHash(decodeURI(hash), prevProps);\n    } else {\n      this.windowScroll(scrollPosition, prevProps);\n    }\n  };\n  _proto.render = function render() {\n    return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n      value: this._stateStorage\n    }, this.props.children);\n  };\n  return ScrollHandler;\n}(React.Component);\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n  shouldUpdateScroll: _propTypes.default.func,\n  children: _propTypes.default.element.isRequired,\n  location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\nvar SessionStorage = /*#__PURE__*/function () {\n  function SessionStorage() {}\n  var _proto = SessionStorage.prototype;\n  _proto.read = function read(location, key) {\n    var stateKey = this.getStateKey(location, key);\n    try {\n      var value = window.sessionStorage.getItem(stateKey);\n      return value ? JSON.parse(value) : 0;\n    } catch (e) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n      }\n      if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n        return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n      }\n      return 0;\n    }\n  };\n  _proto.save = function save(location, key, value) {\n    var stateKey = this.getStateKey(location, key);\n    var storedValue = JSON.stringify(value);\n    try {\n      window.sessionStorage.setItem(stateKey, storedValue);\n    } catch (e) {\n      if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n        window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n      } else {\n        window[GATSBY_ROUTER_SCROLL_STATE] = {};\n        window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n      }\n      if (process.env.NODE_ENV !== \"production\") {\n        console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n      }\n    }\n  };\n  _proto.getStateKey = function getStateKey(location, key) {\n    var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n    return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n  };\n  return SessionStorage;\n}();\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\nvar _scrollHandler = require(\"./scroll-handler\");\nvar _react = require(\"react\");\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\nfunction useScrollRestoration(identifier) {\n  var location = (0, _reachRouter.useLocation)();\n  var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n  var ref = (0, _react.useRef)(null);\n  (0, _react.useLayoutEffect)(function () {\n    if (ref.current) {\n      var position = state.read(location, identifier);\n      ref.current.scrollTo(0, position || 0);\n    }\n  }, [location.key]);\n  return {\n    ref: ref,\n    onScroll: function onScroll() {\n      if (ref.current) {\n        state.save(location, identifier, ref.current.scrollTop);\n      }\n    }\n  };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.onInitialClientRender = void 0;\nvar _gatsbyScript = require(\"gatsby-script\");\nvar _injectPartytownSnippet = require(\"./utils/inject-partytown-snippet\");\n// Makes sure off-main-thread scripts are loaded in `gatsby develop`\nconst onInitialClientRender = () => {\n  if (process.env.NODE_ENV !== `development`) {\n    return;\n  }\n  (0, _injectPartytownSnippet.injectPartytownSnippet)(_gatsbyScript.collectedScriptsByPage.get(window.location.pathname));\n\n  // Clear scripts after we've used them to avoid leaky behavior\n  _gatsbyScript.collectedScriptsByPage.delete(window.location.pathname);\n};\n\n// Client-side navigation (CSR, e.g. Gatsby Link navigations) are broken upstream in Partytown.\n// We need an official API from Partytown for handling re-configuration and on-demand script loading.\n// Until then, `off-main-thread` scripts load only on server-side navigation (SSR).\n// See https://github.com/BuilderIO/partytown/issues/74 for more details.\nexports.onInitialClientRender = onInitialClientRender;\n//# sourceMappingURL=gatsby-browser.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.getForwards = getForwards;\nfunction getForwards(collectedScripts) {\n  return collectedScripts === null || collectedScripts === void 0 ? void 0 : collectedScripts.flatMap(script => (script === null || script === void 0 ? void 0 : script.forward) || []);\n}\n//# sourceMappingURL=get-forwards.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.injectPartytownSnippet = injectPartytownSnippet;\nvar _integration = require(\"@builder.io/partytown/integration\");\nvar _getForwards = require(\"./get-forwards\");\n// Adapted from https://github.com/BuilderIO/partytown/blob/main/src/react/snippet.tsx to only include CSR logic\nfunction injectPartytownSnippet(collectedScripts) {\n  if (!collectedScripts.length) {\n    return;\n  }\n  const existingSnippet = document.querySelector(`script[data-partytown]`);\n  const existingSandbox = document.querySelector(`iframe[src*=\"~partytown/partytown-sandbox-sw\"]`);\n  if (existingSnippet) {\n    existingSnippet.remove();\n  }\n  if (existingSandbox) {\n    existingSandbox.remove();\n  }\n  const forwards = (0, _getForwards.getForwards)(collectedScripts);\n  const snippet = document.createElement(`script`);\n  snippet.dataset.partytown = ``;\n  snippet.innerHTML = (0, _integration.partytownSnippet)({\n    forward: forwards\n  });\n  document.head.appendChild(snippet);\n}\n//# sourceMappingURL=inject-partytown-snippet.js.map","exports.components = {\n  \"component---src-pages-404-jsx\": () => import(\"./../../../src/pages/404.jsx\" /* webpackChunkName: \"component---src-pages-404-jsx\" */),\n  \"component---src-pages-bildnachweise-jsx\": () => import(\"./../../../src/pages/bildnachweise.jsx\" /* webpackChunkName: \"component---src-pages-bildnachweise-jsx\" */),\n  \"component---src-pages-blog-jsx\": () => import(\"./../../../src/pages/blog.jsx\" /* webpackChunkName: \"component---src-pages-blog-jsx\" */),\n  \"component---src-pages-branchen-jsx\": () => import(\"./../../../src/pages/branchen.jsx\" /* webpackChunkName: \"component---src-pages-branchen-jsx\" */),\n  \"component---src-pages-datenschutzerklaerung-jsx\": () => import(\"./../../../src/pages/datenschutzerklaerung.jsx\" /* webpackChunkName: \"component---src-pages-datenschutzerklaerung-jsx\" */),\n  \"component---src-pages-en-blog-jsx\": () => import(\"./../../../src/pages/en/blog.jsx\" /* webpackChunkName: \"component---src-pages-en-blog-jsx\" */),\n  \"component---src-pages-en-company-jsx\": () => import(\"./../../../src/pages/en/company.jsx\" /* webpackChunkName: \"component---src-pages-en-company-jsx\" */),\n  \"component---src-pages-en-contact-jsx\": () => import(\"./../../../src/pages/en/contact.jsx\" /* webpackChunkName: \"component---src-pages-en-contact-jsx\" */),\n  \"component---src-pages-en-disclaimer-jsx\": () => import(\"./../../../src/pages/en/disclaimer.jsx\" /* webpackChunkName: \"component---src-pages-en-disclaimer-jsx\" */),\n  \"component---src-pages-en-events-jsx\": () => import(\"./../../../src/pages/en/events.jsx\" /* webpackChunkName: \"component---src-pages-en-events-jsx\" */),\n  \"component---src-pages-en-image-credits-jsx\": () => import(\"./../../../src/pages/en/image-credits.jsx\" /* webpackChunkName: \"component---src-pages-en-image-credits-jsx\" */),\n  \"component---src-pages-en-imprint-jsx\": () => import(\"./../../../src/pages/en/imprint.jsx\" /* webpackChunkName: \"component---src-pages-en-imprint-jsx\" */),\n  \"component---src-pages-en-index-jsx\": () => import(\"./../../../src/pages/en/index.jsx\" /* webpackChunkName: \"component---src-pages-en-index-jsx\" */),\n  \"component---src-pages-en-industries-jsx\": () => import(\"./../../../src/pages/en/industries.jsx\" /* webpackChunkName: \"component---src-pages-en-industries-jsx\" */),\n  \"component---src-pages-en-online-dispute-resolution-jsx\": () => import(\"./../../../src/pages/en/online-dispute-resolution.jsx\" /* webpackChunkName: \"component---src-pages-en-online-dispute-resolution-jsx\" */),\n  \"component---src-pages-en-privacy-policy-jsx\": () => import(\"./../../../src/pages/en/privacy-policy.jsx\" /* webpackChunkName: \"component---src-pages-en-privacy-policy-jsx\" */),\n  \"component---src-pages-en-software-jsx\": () => import(\"./../../../src/pages/en/software.jsx\" /* webpackChunkName: \"component---src-pages-en-software-jsx\" */),\n  \"component---src-pages-en-solutions-jsx\": () => import(\"./../../../src/pages/en/solutions.jsx\" /* webpackChunkName: \"component---src-pages-en-solutions-jsx\" */),\n  \"component---src-pages-en-support-jsx\": () => import(\"./../../../src/pages/en/support.jsx\" /* webpackChunkName: \"component---src-pages-en-support-jsx\" */),\n  \"component---src-pages-en-vdi-2770-jsx\": () => import(\"./../../../src/pages/en/vdi2770.jsx\" /* webpackChunkName: \"component---src-pages-en-vdi-2770-jsx\" */),\n  \"component---src-pages-haftungsausschluss-jsx\": () => import(\"./../../../src/pages/haftungsausschluss.jsx\" /* webpackChunkName: \"component---src-pages-haftungsausschluss-jsx\" */),\n  \"component---src-pages-impressum-jsx\": () => import(\"./../../../src/pages/impressum.jsx\" /* webpackChunkName: \"component---src-pages-impressum-jsx\" */),\n  \"component---src-pages-index-jsx\": () => import(\"./../../../src/pages/index.jsx\" /* webpackChunkName: \"component---src-pages-index-jsx\" */),\n  \"component---src-pages-kontakt-jsx\": () => import(\"./../../../src/pages/kontakt.jsx\" /* webpackChunkName: \"component---src-pages-kontakt-jsx\" */),\n  \"component---src-pages-loesungen-jsx\": () => import(\"./../../../src/pages/loesungen.jsx\" /* webpackChunkName: \"component---src-pages-loesungen-jsx\" */),\n  \"component---src-pages-online-streitbeilegung-jsx\": () => import(\"./../../../src/pages/online-streitbeilegung.jsx\" /* webpackChunkName: \"component---src-pages-online-streitbeilegung-jsx\" */),\n  \"component---src-pages-software-jsx\": () => import(\"./../../../src/pages/software.jsx\" /* webpackChunkName: \"component---src-pages-software-jsx\" */),\n  \"component---src-pages-support-jsx\": () => import(\"./../../../src/pages/support.jsx\" /* webpackChunkName: \"component---src-pages-support-jsx\" */),\n  \"component---src-pages-unternehmen-jsx\": () => import(\"./../../../src/pages/unternehmen.jsx\" /* webpackChunkName: \"component---src-pages-unternehmen-jsx\" */),\n  \"component---src-pages-vdi-2770-jsx\": () => import(\"./../../../src/pages/vdi2770.jsx\" /* webpackChunkName: \"component---src-pages-vdi-2770-jsx\" */),\n  \"component---src-pages-veranstaltungen-jsx\": () => import(\"./../../../src/pages/veranstaltungen.jsx\" /* webpackChunkName: \"component---src-pages-veranstaltungen-jsx\" */),\n  \"component---src-pages-whitepapers-content-fit-for-chatbots-jsx\": () => import(\"./../../../src/pages/whitepapers/content-fit-for-chatbots.jsx\" /* webpackChunkName: \"component---src-pages-whitepapers-content-fit-for-chatbots-jsx\" */),\n  \"component---src-pages-whitepapers-index-jsx\": () => import(\"./../../../src/pages/whitepapers/index.jsx\" /* webpackChunkName: \"component---src-pages-whitepapers-index-jsx\" */),\n  \"component---src-pages-whitepapers-vdi-2770-jsx\": () => import(\"./../../../src/pages/whitepapers/vdi2770.jsx\" /* webpackChunkName: \"component---src-pages-whitepapers-vdi-2770-jsx\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-25-blog-launch-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-03-25_blog-launch.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-25-blog-launch-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-26-din-connect-2020-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-03-26_din-connect-2020.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-26-din-connect-2020-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-02-corona-homeoffice-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-04-02_corona-homeoffice.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-02-corona-homeoffice-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-09-homeoffice-tools-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-04-09_homeoffice-tools.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-09-homeoffice-tools-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-23-jahr-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-04-23_jahr-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-23-jahr-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-08-anwenderportal-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-05-08_anwenderportal.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-08-anwenderportal-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-20-iirds-vdi-2770-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-05-20_iirds-vdi-2770.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-20-iirds-vdi-2770-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-04-back-in-the-office-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-06-04_back-in-the-office.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-04-back-in-the-office-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-22-tekom-summercon-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-06-22_tekom-summercon.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-22-tekom-summercon-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-07-14-ditrano-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-07-14_ditrano.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-07-14-ditrano-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-03-auszeichnung-100-orte-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-08-03_auszeichnung-100-orte.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-03-auszeichnung-100-orte-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-14-landtagsabgeordnete-zu-besuch-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-08-14_landtagsabgeordnete-zu-besuch.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-14-landtagsabgeordnete-zu-besuch-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-31-iirds-best-practice-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-08-31_iirds-best-practice.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-31-iirds-best-practice-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-09-25-cloud-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-09-25_cloud.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-09-25-cloud-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-12-iirds-ot-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-10-12_iirds-ot.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-12-iirds-ot-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-28-tekom-jahrestagung-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-10-28_tekom-jahrestagung.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-28-tekom-jahrestagung-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-09-ki-4-industry-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-11-09_ki4industry.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-09-ki-4-industry-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-27-profitipps-iirds-ot-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-11-27_profitipps-iirds-ot.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-27-profitipps-iirds-ot-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-08-arbeiten-bei-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-12-08_arbeiten-bei-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-08-arbeiten-bei-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-16-idis-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-12-16_idis.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-16-idis-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-22-weihnachtsgruesse-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2020-12-22_weihnachtsgruesse.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-22-weihnachtsgruesse-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-01-26-webinar-iirds-ot-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-01-26_webinar-iirds-ot.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-01-26-webinar-iirds-ot-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-01-iirds-konsortium-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-03-01_iirds-konsortium.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-01-iirds-konsortium-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-23-zwei-jahre-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-03-23_zwei-jahre-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-23-zwei-jahre-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-08-onboarding-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-04-08_onboarding.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-08-onboarding-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-29-fruehjahrestagung-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-04-29_fruehjahrestagung.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-29-fruehjahrestagung-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-21-videoproduktion-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-05-21_videoproduktion.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-21-videoproduktion-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-27-schulungen-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-05-27_schulungen.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-27-schulungen-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-09-new-work-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-07-09_new-work.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-09-new-work-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-20-st-4-ai-cube-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-07-20_st4-ai-cube.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-20-st-4-ai-cube-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-21-ki-innovationswettbewerb-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-07-21_ki-innovationswettbewerb.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-21-ki-innovationswettbewerb-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-08-12-iirds-blogserie-teil-2-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-08-12_iirds-blogserie-teil-2.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-08-12-iirds-blogserie-teil-2-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-09-01-abschlussarbeiten-bei-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-09-01_abschlussarbeiten-bei-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-09-01-abschlussarbeiten-bei-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-02-expertenfragen-zur-vdi-2770-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-11-02_expertenfragen-zur-vdi-2770.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-02-expertenfragen-zur-vdi-2770-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-18-pdf-dateien-mit-metadaten-anreichern-und-als-vdi-2770-container-exportieren-tutorial-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-11-18_pdf-dateien-mit-metadaten-anreichern-und-als-vdi2770-container-exportieren-tutorial.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-18-pdf-dateien-mit-metadaten-anreichern-und-als-vdi-2770-container-exportieren-tutorial-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-24-deeep-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-11-24_deeep.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-24-deeep-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-07-umzug-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-12-07_umzug.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-07-umzug-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-21-frohe-weihnachten-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2021-12-21_frohe-weihnachten.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-21-frohe-weihnachten-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-04-ki-in-der-tr-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-01-04_ki-in-der-tr.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-04-ki-in-der-tr-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-18-vdi-2770-paket-generieren-video-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-01-18_vdi-2770-paket-generieren-video.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-18-vdi-2770-paket-generieren-video-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-25-mein-praxissemester-bei-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-01-25_mein-praxissemester-bei-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-25-mein-praxissemester-bei-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-02-15-vdi-2770-pakete-mit-ki-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-02-15_vdi-2770-pakete-mit-ki.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-02-15-vdi-2770-pakete-mit-ki-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-03-15-standards-technische-dokumentation-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-03-15_standards-technische-dokumentation.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-03-15-standards-technische-dokumentation-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-05-05-fachbegriffe-technische-dokumentation-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-05-05_fachbegriffe-technische-dokumentation.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-05-05-fachbegriffe-technische-dokumentation-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-07-14-3-jahre-jubileaum-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-07-14_3-jahre-jubileaum-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-07-14-3-jahre-jubileaum-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-23-digitale-datenkette-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-08-23_digitale-datenkette.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-23-digitale-datenkette-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-24-die-digitale-datenkette-einfach-erklaert-video-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-08-24_die-digitale-datenkette-einfach-erklaert-video.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-24-die-digitale-datenkette-einfach-erklaert-video-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-10-04-was-ist-deeplearning-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2022-10-04_was-ist-deeplearning.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-10-04-was-ist-deeplearning-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-10-einfache-und-erfolgreiche-metadatenvergabe-fuer-komax-in-st-4-video-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-02-10_einfache-und-erfolgreiche-metadatenvergabe-fuer-komax-in-st4-video.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-10-einfache-und-erfolgreiche-metadatenvergabe-fuer-komax-in-st-4-video-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-16-was-ist-nlp-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-02-16_was-ist-nlp.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-16-was-ist-nlp-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-18-die-digitale-datenkette-fuer-merck-umgesetzt-mit-ki-video-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-02-18_die-digitale-datenkette-fuer-merck-umgesetzt-mit-ki-video.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-18-die-digitale-datenkette-fuer-merck-umgesetzt-mit-ki-video-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-07-12-plusmeta-wird-4-jahre-alt-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-07-12_plusmeta-wird-4-jahre-alt.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-07-12-plusmeta-wird-4-jahre-alt-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-11-05-kreen-forschungsprojekt-gefoerdert-durch-investbw-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-11-05_kreen-forschungsprojekt-gefoerdert-durch-investbw.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-11-05-kreen-forschungsprojekt-gefoerdert-durch-investbw-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-12-19-jahresruecklick-23-frohe-weihnachten-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2023-12-19_jahresruecklick23-frohe-weihnachten.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-12-19-jahresruecklick-23-frohe-weihnachten-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-12-success-story-baw-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-01-12_success-story-baw.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-12-success-story-baw-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-14-aufbereitung-von-bestandsdokumente-mit-metadaten-fuer-baw-video-copy-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-01-14_aufbereitung-von-bestandsdokumente-mit-metadaten-fuer-baw-video_copy.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-14-aufbereitung-von-bestandsdokumente-mit-metadaten-fuer-baw-video-copy-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-16-metadaten-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-04-16_metadaten.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-16-metadaten-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-25-dokumentation-nach-vdi-2770-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-04-25_dokumentation-nach-vdi-2770.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-25-dokumentation-nach-vdi-2770-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-02-digital-data-chain-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-05-02_digital-data-chain.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-02-digital-data-chain-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-16-intelligente-daten-fur-content-delivery-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-05-16_intelligente-daten-für-content-delivery.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-16-intelligente-daten-fur-content-delivery-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-11-migration-in-ein-neues-ccms-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-06-11_migration-in-ein-neues-ccms.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-11-migration-in-ein-neues-ccms-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-13-top-5-llm-funktionen-von-plusmeta-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-06-13_top-5-LLM-Funktionen-von-plusmeta.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-13-top-5-llm-funktionen-von-plusmeta-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-23-gen-ai-vdi-2770-pakete-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-06-23_genAI-VDI2770-pakete.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-23-gen-ai-vdi-2770-pakete-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-15-workflow-aehnlichkeitsanalyse-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-08-15_workflow-aehnlichkeitsanalyse.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-15-workflow-aehnlichkeitsanalyse-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-22-daten-aufbereiten-fuer-eclass-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-08-22_daten-aufbereiten-fuer-eclass.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-22-daten-aufbereiten-fuer-eclass-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-27-metadaten-genai-rag-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-08-27_metadaten-genai-rag.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-27-metadaten-genai-rag-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-29-workflow-ii-rds-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-08-29_workflow-iiRDS.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-29-workflow-ii-rds-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-09-12-workflow-ki-modell-trainieren-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-09-12_workflow-KI-Modell-trainieren.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-09-12-workflow-ki-modell-trainieren-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-10-workflow-vdi-2770-pakete-erstellen-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-10-10_workflow-vdi-2770-pakete-erstellen.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-10-workflow-vdi-2770-pakete-erstellen-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-24-success-story-heller-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-10-24-Success-Story-Heller.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-24-success-story-heller-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-31-workflow-select-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-10-31_workflow-select.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-31-workflow-select-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-11-26-kreen-zwischenbericht-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-11-26_Kreen-Zwischenbericht.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-11-26-kreen-zwischenbericht-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-03-success-story-knick-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-12-03_Success_Story_Knick.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-03-success-story-knick-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-18-oekodesign-ddp-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2024-12-18_Oekodesign-DDP.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-18-oekodesign-ddp-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-01-16-chatbots-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2025-01-16_Chatbots.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-01-16-chatbots-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-02-13-experteninterview-herausforderungen-von-chatbots-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2025-02-13_Experteninterview_Herausforderungen_von_Chatbots.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-02-13-experteninterview-herausforderungen-von-chatbots-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-03-13-knowledge-graphen-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/de/2025-03-13_Knowledge-Graphen.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-03-13-knowledge-graphen-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2022-07-14-with-plusmeta-to-the-digital-data-chain-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/en/2022-07-14_with-plusmeta-to-the-digital-data-chain.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2022-07-14-with-plusmeta-to-the-digital-data-chain-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-10-24-success-story-heller-en-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/en/2024-10-24-Success-Story-Heller_en.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-10-24-success-story-heller-en-md\" */),\n  \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-12-18-oekodesign-ddp-md\": () => import(\"./../../../src/templates/blog-post.jsx?__contentFilePath=/codebuild/output/src1807157632/src/web-relaunch-2023/src/content/blog/en/2024-12-18_Oekodesign-DDP.md\" /* webpackChunkName: \"component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-12-18-oekodesign-ddp-md\" */)\n}\n\n","module.exports = [{\n      plugin: require('../node_modules/gatsby-plugin-canonical-urls/gatsby-browser.js'),\n      options: {\"plugins\":[],\"siteUrl\":\"https://www.plusmeta.de\",\"stripQueryString\":true},\n    },{\n      plugin: require('../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n      options: {\"plugins\":[],\"name\":\"plusmeta website\",\"short_name\":\"plusmeta website\",\"start_url\":\"/\",\"background_color\":\"#f0f0f0\",\"theme_color\":\"#f0f0f0\",\"display\":\"minimal-ui\",\"icon\":\"static/favicon.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"b8f8bb92c16ec9c3a22b76d82ee7dec5\"},\n    },{\n      plugin: require('../node_modules/gatsby-plugin-layout/gatsby-browser.js'),\n      options: {\"plugins\":[],\"component\":\"/codebuild/output/src1807157632/src/web-relaunch-2023/src/layout/Layout.jsx\"},\n    },{\n      plugin: require('../node_modules/gatsby-remark-images/gatsby-browser.js'),\n      options: {\"plugins\":[],\"maxWidth\":907,\"quality\":100,\"withWebp\":true,\"ignoreFileExtensions\":[],\"wrapperStyle\":\"border: 1px solid #EFEFEF; box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.1); overflow: hidden;\",\"linkImagesToOriginal\":true,\"showCaptions\":false,\"markdownCaptions\":false,\"backgroundColor\":\"white\",\"withAvif\":false,\"loading\":\"lazy\",\"decoding\":\"async\",\"disableBgImageOnAlpha\":false,\"disableBgImage\":false},\n    },{\n      plugin: require('../gatsby-browser.js'),\n      options: {\"plugins\":[]},\n    },{\n      plugin: require('../node_modules/gatsby/dist/internal-plugins/partytown/gatsby-browser.js'),\n      options: {\"plugins\":[]},\n    }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst { getResourceURLsForPathname, loadPage, loadPageSync } =\n  require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n  // Hooks for gatsby-cypress's API handler\n  if (process.env.CYPRESS_SUPPORT) {\n    if (window.___apiHandler) {\n      window.___apiHandler(api)\n    } else if (window.___resolvedAPIs) {\n      window.___resolvedAPIs.push(api)\n    } else {\n      window.___resolvedAPIs = [api]\n    }\n  }\n\n  let results = plugins.map(plugin => {\n    if (!plugin.plugin[api]) {\n      return undefined\n    }\n\n    args.getResourceURLsForPathname = getResourceURLsForPathname\n    args.loadPage = loadPage\n    args.loadPageSync = loadPageSync\n\n    const result = plugin.plugin[api](args, plugin.options)\n    if (result && argTransform) {\n      args = argTransform({ args, result, plugin })\n    }\n    return result\n  })\n\n  // Filter out undefined results.\n  results = results.filter(result => typeof result !== `undefined`)\n\n  if (results.length > 0) {\n    return results\n  } else if (defaultReturn) {\n    return [defaultReturn]\n  } else {\n    return []\n  }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n  plugins.reduce(\n    (previous, next) =>\n      next.plugin[api]\n        ? previous.then(() => next.plugin[api](args, next.options))\n        : previous,\n    Promise.resolve()\n  )\n","exports.createContentDigest = () => ``\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","//      \n// An event handler can take an optional event argument\n// and should not return a value\n                                          \n                                                               \n\n// An array of all currently registered event handlers for a type\n                                            \n                                                            \n// A map of event types and their corresponding event handlers.\n                        \n                                 \n                                   \n  \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n *  @name mitt\n *  @returns {Mitt}\n */\nfunction mitt(all                 ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param  {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param  {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type        , handler              ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param  {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param  {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type        , handler              ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type  The event type to invoke\n\t\t * @param {Any} [evt]  Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type        , evt     ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","export default pathAndSearch => {\n  if (pathAndSearch === undefined) {\n    return pathAndSearch\n  }\n  let [path, search = ``] = pathAndSearch.split(`?`)\n  if (search) {\n    search = `?` + search\n  }\n\n  if (path === `/`) {\n    return `/` + search\n  }\n  if (path.charAt(path.length - 1) === `/`) {\n    return path.slice(0, -1) + search\n  }\n  return path + search\n}\n","import { pick } from \"@gatsbyjs/reach-router\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n  let newRawPathname = rawPathname\n  const queryIndex = rawPathname.indexOf(`?`)\n\n  if (queryIndex !== -1) {\n    const [path, qs] = rawPathname.split(`?`)\n    newRawPathname = `${path}?${encodeURIComponent(qs)}`\n  }\n\n  const pathname = decodeURIComponent(newRawPathname)\n\n  // Remove the pathPrefix from the pathname.\n  const trimmedPathname = stripPrefix(\n    pathname,\n    decodeURIComponent(__BASE_PATH__)\n  )\n    // Remove any hashfragment\n    .split(`#`)[0]\n\n  return trimmedPathname\n}\n\nfunction absolutify(path) {\n  // If it's already absolute, return as-is\n  if (\n    path.startsWith(`/`) ||\n    path.startsWith(`https://`) ||\n    path.startsWith(`http://`)\n  ) {\n    return path\n  }\n  // Calculate path relative to current location, adding a trailing slash to\n  // match behavior of @reach/router\n  return new URL(\n    path,\n    window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n  ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n  matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n  const trimmedPathname = cleanPath(rawPathname)\n\n  const pickPaths = matchPaths.map(({ path, matchPath }) => {\n    return {\n      path: matchPath,\n      originalPath: path,\n    }\n  })\n\n  const path = pick(pickPaths, trimmedPathname)\n\n  if (path) {\n    return normalizePagePath(path.route.originalPath)\n  }\n\n  return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n *  { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n  const trimmedPathname = cleanPath(rawPathname)\n\n  const pickPaths = matchPaths.map(({ path, matchPath }) => {\n    return {\n      path: matchPath,\n      originalPath: path,\n    }\n  })\n\n  const path = pick(pickPaths, trimmedPathname)\n\n  if (path) {\n    return path.params\n  }\n\n  return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n  const trimmedPathname = trimPathname(absolutify(rawPathname))\n  if (pathCache.has(trimmedPathname)) {\n    return pathCache.get(trimmedPathname)\n  }\n\n  const redirect = maybeGetBrowserRedirect(rawPathname)\n  if (redirect) {\n    return findPath(redirect.toPath)\n  }\n\n  let foundPath = findMatchPath(trimmedPathname)\n\n  if (!foundPath) {\n    foundPath = cleanPath(rawPathname)\n  }\n\n  pathCache.set(trimmedPathname, foundPath)\n\n  return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n  const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n  let foundPath = trimmedPathname\n  if (foundPath === `/index.html`) {\n    foundPath = `/`\n  }\n\n  foundPath = normalizePagePath(foundPath)\n\n  return foundPath\n}\n","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return _wrapNativeSuper = function _wrapNativeSuper(t) {\n    if (null === t || !isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return construct(t, arguments, getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), setPrototypeOf(Wrapper, t);\n  }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nexport { _isNativeFunction as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","import React from \"react\"\n\nexport const ServerSliceRenderer = ({ sliceId, children }) => {\n  const contents = [\n    React.createElement(`slice-start`, {\n      id: `${sliceId}-1`,\n    }),\n    React.createElement(`slice-end`, {\n      id: `${sliceId}-1`,\n    }),\n  ]\n\n  if (children) {\n    // if children exist, we split the slice into a before and after piece\n    // see renderSlices in render-html\n    contents.push(children)\n    contents.push(\n      React.createElement(`slice-start`, {\n        id: `${sliceId}-2`,\n      }),\n      React.createElement(`slice-end`, {\n        id: `${sliceId}-2`,\n      })\n    )\n  }\n\n  return contents\n}\n","import React, { useContext } from \"react\"\nimport { createContentDigest } from \"gatsby-core-utils/create-content-digest\"\nimport { SlicesMapContext, SlicesPropsContext } from \"./context\"\nimport { ServerSliceRenderer } from \"./server-slice-renderer\"\n\nconst getSliceId = (sliceName, sliceProps) => {\n  if (!Object.keys(sliceProps).length) {\n    return sliceName\n  }\n\n  const propsString = createContentDigest(sliceProps)\n  return `${sliceName}-${propsString}`\n}\n\nexport const ServerSlice = ({\n  sliceName,\n  allowEmpty,\n  children,\n  ...sliceProps\n}) => {\n  const slicesMap = useContext(SlicesMapContext)\n  const slicesProps = useContext(SlicesPropsContext)\n  const concreteSliceName = slicesMap[sliceName]\n\n  if (!concreteSliceName) {\n    if (allowEmpty) {\n      return null\n    } else {\n      throw new Error(\n        `Slice \"${concreteSliceName}\" for \"${sliceName}\" slot not found`\n      )\n    }\n  }\n\n  const sliceId = getSliceId(concreteSliceName, sliceProps)\n\n  // set props on context object for static-entry to return\n  let sliceUsage = slicesProps[sliceId]\n  if (!sliceUsage) {\n    slicesProps[sliceId] = sliceUsage = {\n      props: sliceProps,\n      sliceName: concreteSliceName,\n      hasChildren: !!children,\n    }\n  } else {\n    if (children) {\n      sliceUsage.hasChildren = true\n    }\n  }\n\n  return <ServerSliceRenderer sliceId={sliceId}>{children}</ServerSliceRenderer>\n}\n","import React, { useContext } from \"react\"\nimport { SlicesMapContext, SlicesResultsContext } from \"./context\"\n\nexport const InlineSlice = ({\n  sliceName,\n  allowEmpty,\n  children,\n  ...sliceProps\n}) => {\n  const slicesMap = useContext(SlicesMapContext)\n  const slicesResultsMap = useContext(SlicesResultsContext)\n  const concreteSliceName = slicesMap[sliceName]\n  const slice = slicesResultsMap.get(concreteSliceName)\n\n  if (!slice) {\n    if (allowEmpty) {\n      return null\n    } else {\n      throw new Error(\n        `Slice \"${concreteSliceName}\" for \"${sliceName}\" slot not found`\n      )\n    }\n  }\n\n  return (\n    <slice.component\n      sliceContext={slice.sliceContext}\n      data={slice.data}\n      {...sliceProps}\n    >\n      {children}\n    </slice.component>\n  )\n}\n","\"use client\"\n\nimport React, { useContext } from \"react\"\nimport { ServerSlice } from \"./slice/server-slice\"\nimport { InlineSlice } from \"./slice/inline-slice\"\nimport { SlicesContext } from \"./slice/context\"\n\nexport function Slice(props) {\n  if (process.env.GATSBY_SLICES) {\n    // we use sliceName internally, so remap alias to sliceName\n    const internalProps = {\n      ...props,\n      sliceName: props.alias,\n    }\n    delete internalProps.alias\n    delete internalProps.__renderedByLocation\n\n    const slicesContext = useContext(SlicesContext)\n\n    // validate props\n    const propErrors = validateSliceProps(props)\n    if (Object.keys(propErrors).length) {\n      throw new SlicePropsError(\n        slicesContext.renderEnvironment === `browser`,\n        internalProps.sliceName,\n        propErrors,\n        props.__renderedByLocation\n      )\n    }\n\n    if (slicesContext.renderEnvironment === `server`) {\n      return <ServerSlice {...internalProps} />\n    } else if (slicesContext.renderEnvironment === `browser`) {\n      // in the browser, we'll just render the component as is\n      return <InlineSlice {...internalProps} />\n    } else if (\n      slicesContext.renderEnvironment === `engines` ||\n      slicesContext.renderEnvironment === `dev-ssr`\n    ) {\n      // if we're in SSR, we'll just render the component as is\n      return <InlineSlice {...internalProps} />\n    } else if (slicesContext.renderEnvironment === `slices`) {\n      // we are not yet supporting nested slices\n\n      let additionalContextMessage = ``\n\n      // just in case generating additional contextual information fails, we still want the base message to show\n      // and not show another cryptic error message\n      try {\n        additionalContextMessage = `\\n\\nSlice component \"${slicesContext.sliceRoot.name}\" (${slicesContext.sliceRoot.componentPath}) tried to render <Slice alias=\"${props.alias}\"/>`\n      } catch {\n        // don't need to handle it, we will just skip the additional context message if we fail to generate it\n      }\n\n      throw new Error(\n        `Nested slices are not supported.${additionalContextMessage}\\n\\nSee https://gatsbyjs.com/docs/reference/built-in-components/gatsby-slice#nested-slices`\n      )\n    } else {\n      throw new Error(\n        `Slice context \"${slicesContext.renderEnvironment}\" is not supported.`\n      )\n    }\n  } else {\n    throw new Error(`Slices are disabled.`)\n  }\n}\n\nclass SlicePropsError extends Error {\n  constructor(inBrowser, sliceName, propErrors, renderedByLocation) {\n    const errors = Object.entries(propErrors)\n      .map(\n        ([key, value]) =>\n          `not serializable \"${value}\" type passed to \"${key}\" prop`\n      )\n      .join(`, `)\n\n    const name = `SlicePropsError`\n    let stack = ``\n    let message = ``\n\n    if (inBrowser) {\n      // They're just (kinda) kidding, I promise... You can still work here <3\n      //   https://www.gatsbyjs.com/careers/\n      const fullStack =\n        React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugCurrentFrame.getCurrentStack()\n\n      // remove the first line of the stack trace\n      const stackLines = fullStack.trim().split(`\\n`).slice(1)\n      stackLines[0] = stackLines[0].trim()\n      stack = `\\n` + stackLines.join(`\\n`)\n\n      message = `Slice \"${sliceName}\" was passed props that are not serializable (${errors}).`\n    } else {\n      // we can't really grab any extra info outside of the browser, so just print what we can\n      message = `${name}: Slice \"${sliceName}\" was passed props that are not serializable (${errors}).`\n      const stackLines = new Error().stack.trim().split(`\\n`).slice(2)\n      stack = `${message}\\n${stackLines.join(`\\n`)}`\n    }\n\n    super(message)\n    this.name = name\n    if (stack) {\n      this.stack = stack\n    } else {\n      Error.captureStackTrace(this, SlicePropsError)\n    }\n\n    if (renderedByLocation) {\n      this.forcedLocation = { ...renderedByLocation, functionName: `Slice` }\n    }\n  }\n}\n\nconst validateSliceProps = (\n  props,\n  errors = {},\n  seenObjects = [],\n  path = null\n) => {\n  // recursively validate all props\n  for (const [name, value] of Object.entries(props)) {\n    if (\n      value === undefined ||\n      value === null ||\n      (!path && name === `children`)\n    ) {\n      continue\n    }\n\n    const propPath = path ? `${path}.${name}` : name\n\n    if (typeof value === `function`) {\n      errors[propPath] = typeof value\n    } else if (typeof value === `object` && seenObjects.indexOf(value) <= 0) {\n      seenObjects.push(value)\n      validateSliceProps(value, errors, seenObjects, propPath)\n    }\n  }\n\n  return errors\n}\n","import loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nfunction graphql() {\n  throw new Error(\n    `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n      `are supposed to only be evaluated at compile time, and then compiled away. ` +\n      `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n      `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n  )\n}\n\nexport { default as PageRenderer } from \"./public-page-renderer\"\nexport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nexport {\n  Link,\n  withPrefix,\n  withAssetPrefix,\n  navigate,\n  parsePath,\n} from \"gatsby-link\"\n\nexport { graphql, prefetchPathname }\nexport { StaticQuery, StaticQueryContext, useStaticQuery } from \"./static-query\"\nexport { Slice } from \"./slice\"\nexport * from \"gatsby-script\"\n","const support = function (feature) {\n  if (typeof document === `undefined`) {\n    return false\n  }\n  const fakeLink = document.createElement(`link`)\n  try {\n    if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n      return fakeLink.relList.supports(feature)\n    }\n  } catch (err) {\n    return false\n  }\n  return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n  return new Promise((resolve, reject) => {\n    if (typeof document === `undefined`) {\n      reject()\n      return\n    }\n\n    const link = document.createElement(`link`)\n    link.setAttribute(`rel`, `prefetch`)\n    link.setAttribute(`href`, url)\n\n    Object.keys(options).forEach(key => {\n      link.setAttribute(key, options[key])\n    })\n\n    link.onload = resolve\n    link.onerror = reject\n\n    const parentElement =\n      document.getElementsByTagName(`head`)[0] ||\n      document.getElementsByName(`script`)[0].parentNode\n    parentElement.appendChild(link)\n  })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n  return new Promise((resolve, reject) => {\n    const req = new XMLHttpRequest()\n    req.open(`GET`, url, true)\n\n    req.onload = () => {\n      if (req.status === 200) {\n        resolve()\n      } else {\n        reject()\n      }\n    }\n\n    req.send(null)\n  })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n  ? linkPrefetchStrategy\n  : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n  return new Promise(resolve => {\n    if (preFetched[url]) {\n      resolve()\n      return\n    }\n\n    supportedPrefetchStrategy(url, options)\n      .then(() => {\n        resolve()\n        preFetched[url] = true\n      })\n      .catch(() => {}) // 404s are logged to the console anyway\n  })\n}\n\nexport default prefetch\n","import { createFromReadableStream } from \"react-server-dom-webpack\"\nimport prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n  /**\n   * At least one of critical resources failed to load\n   */\n  Error: `error`,\n  /**\n   * Resources loaded successfully\n   */\n  Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n  s = s[0] === `/` ? s.slice(1) : s\n  s = s.endsWith(`/`) ? s.slice(0, -1) : s\n  return s\n}\n\nconst createPageDataUrl = rawPath => {\n  const [path, maybeSearch] = rawPath.split(`?`)\n  const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n  return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json${\n    maybeSearch ? `?${maybeSearch}` : ``\n  }`\n}\n\n/**\n * Utility to check the path that goes into doFetch for e.g. potential malicious intentions.\n * It checks for \"//\" because with this you could do a fetch request to a different domain.\n */\nconst shouldAbortFetch = rawPath => rawPath.startsWith(`//`)\n\nfunction doFetch(url, method = `GET`) {\n  return new Promise(resolve => {\n    const req = new XMLHttpRequest()\n    req.open(method, url, true)\n    req.onreadystatechange = () => {\n      if (req.readyState == 4) {\n        resolve(req)\n      }\n    }\n    req.send(null)\n  })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n  if (\n    `connection` in navigator &&\n    typeof navigator.connection !== `undefined`\n  ) {\n    if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n      return false\n    }\n    if (navigator.connection.saveData) {\n      return false\n    }\n  }\n  return true\n}\n\n// Regex that matches common search crawlers\nconst BOT_REGEX = /bot|crawler|spider|crawling/i\n\nconst toPageResources = (pageData, component = null, head) => {\n  const page = {\n    componentChunkName: pageData.componentChunkName,\n    path: pageData.path,\n    webpackCompilationHash: pageData.webpackCompilationHash,\n    matchPath: pageData.matchPath,\n    staticQueryHashes: pageData.staticQueryHashes,\n    getServerDataError: pageData.getServerDataError,\n    slicesMap: pageData.slicesMap ?? {},\n  }\n\n  return {\n    component,\n    head,\n    json: pageData.result,\n    page,\n  }\n}\n\nfunction waitForResponse(response) {\n  return new Promise(resolve => {\n    try {\n      const result = response.readRoot()\n      resolve(result)\n    } catch (err) {\n      if (\n        Object.hasOwnProperty.call(err, `_response`) &&\n        Object.hasOwnProperty.call(err, `_status`)\n      ) {\n        setTimeout(() => {\n          waitForResponse(response).then(resolve)\n        }, 200)\n      } else {\n        throw err\n      }\n    }\n  })\n}\n\nexport class BaseLoader {\n  constructor(loadComponent, matchPaths) {\n    // Map of pagePath -> Page. Where Page is an object with: {\n    //   status: PageResourceStatus.Success || PageResourceStatus.Error,\n    //   payload: PageResources, // undefined if PageResourceStatus.Error\n    // }\n    // PageResources is {\n    //   component,\n    //   json: pageData.result,\n    //   page: {\n    //     componentChunkName,\n    //     path,\n    //     webpackCompilationHash,\n    //     staticQueryHashes\n    //   },\n    //   staticQueryResults\n    // }\n    this.pageDb = new Map()\n    this.inFlightDb = new Map()\n    this.staticQueryDb = {}\n    this.pageDataDb = new Map()\n    this.partialHydrationDb = new Map()\n    this.slicesDataDb = new Map()\n    this.sliceInflightDb = new Map()\n    this.slicesDb = new Map()\n    this.isPrefetchQueueRunning = false\n    this.prefetchQueued = []\n    this.prefetchTriggered = new Set()\n    this.prefetchCompleted = new Set()\n    this.loadComponent = loadComponent\n    setMatchPaths(matchPaths)\n  }\n\n  inFlightNetworkRequests = new Map()\n\n  memoizedGet(url) {\n    let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n    if (!inFlightPromise) {\n      inFlightPromise = doFetch(url, `GET`)\n      this.inFlightNetworkRequests.set(url, inFlightPromise)\n    }\n\n    // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n    return inFlightPromise\n      .then(response => {\n        this.inFlightNetworkRequests.delete(url)\n        return response\n      })\n      .catch(err => {\n        this.inFlightNetworkRequests.delete(url)\n        throw err\n      })\n  }\n\n  setApiRunner(apiRunner) {\n    this.apiRunner = apiRunner\n    this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n  }\n\n  fetchPageDataJson(loadObj) {\n    const { pagePath, retries = 0 } = loadObj\n    const url = createPageDataUrl(pagePath)\n    return this.memoizedGet(url).then(req => {\n      const { status, responseText } = req\n\n      // Handle 200\n      if (status === 200) {\n        try {\n          const jsonPayload = JSON.parse(responseText)\n          if (jsonPayload.path === undefined) {\n            throw new Error(`not a valid pageData response`)\n          }\n\n          const maybeSearch = pagePath.split(`?`)[1]\n          if (maybeSearch && !jsonPayload.path.includes(maybeSearch)) {\n            jsonPayload.path += `?${maybeSearch}`\n          }\n\n          return Object.assign(loadObj, {\n            status: PageResourceStatus.Success,\n            payload: jsonPayload,\n          })\n        } catch (err) {\n          // continue regardless of error\n        }\n      }\n\n      // Handle 404\n      if (status === 404 || status === 200) {\n        // If the request was for a 404/500 page and it doesn't exist, we're done\n        if (pagePath === `/404.html` || pagePath === `/500.html`) {\n          return Object.assign(loadObj, {\n            status: PageResourceStatus.Error,\n          })\n        }\n\n        // Need some code here to cache the 404 request. In case\n        // multiple loadPageDataJsons result in 404s\n        return this.fetchPageDataJson(\n          Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n        )\n      }\n\n      // handle 500 response (Unrecoverable)\n      if (status === 500) {\n        return this.fetchPageDataJson(\n          Object.assign(loadObj, {\n            pagePath: `/500.html`,\n            internalServerError: true,\n          })\n        )\n      }\n\n      // Handle everything else, including status === 0, and 503s. Should retry\n      if (retries < 3) {\n        return this.fetchPageDataJson(\n          Object.assign(loadObj, { retries: retries + 1 })\n        )\n      }\n\n      // Retried 3 times already, result is an error.\n      return Object.assign(loadObj, {\n        status: PageResourceStatus.Error,\n      })\n    })\n  }\n\n  fetchPartialHydrationJson(loadObj) {\n    const { pagePath, retries = 0 } = loadObj\n    const url = createPageDataUrl(pagePath).replace(`.json`, `-rsc.json`)\n    return this.memoizedGet(url).then(req => {\n      const { status, responseText } = req\n\n      // Handle 200\n      if (status === 200) {\n        try {\n          return Object.assign(loadObj, {\n            status: PageResourceStatus.Success,\n            payload: responseText,\n          })\n        } catch (err) {\n          // continue regardless of error\n        }\n      }\n\n      // Handle 404\n      if (status === 404 || status === 200) {\n        // If the request was for a 404/500 page and it doesn't exist, we're done\n        if (pagePath === `/404.html` || pagePath === `/500.html`) {\n          return Object.assign(loadObj, {\n            status: PageResourceStatus.Error,\n          })\n        }\n\n        // Need some code here to cache the 404 request. In case\n        // multiple loadPageDataJsons result in 404s\n        return this.fetchPartialHydrationJson(\n          Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n        )\n      }\n\n      // handle 500 response (Unrecoverable)\n      if (status === 500) {\n        return this.fetchPartialHydrationJson(\n          Object.assign(loadObj, {\n            pagePath: `/500.html`,\n            internalServerError: true,\n          })\n        )\n      }\n\n      // Handle everything else, including status === 0, and 503s. Should retry\n      if (retries < 3) {\n        return this.fetchPartialHydrationJson(\n          Object.assign(loadObj, { retries: retries + 1 })\n        )\n      }\n\n      // Retried 3 times already, result is an error.\n      return Object.assign(loadObj, {\n        status: PageResourceStatus.Error,\n      })\n    })\n  }\n\n  loadPageDataJson(rawPath) {\n    const pagePath = findPath(rawPath)\n    if (this.pageDataDb.has(pagePath)) {\n      const pageData = this.pageDataDb.get(pagePath)\n      if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n        return Promise.resolve(pageData)\n      }\n    }\n\n    return this.fetchPageDataJson({ pagePath }).then(pageData => {\n      this.pageDataDb.set(pagePath, pageData)\n\n      return pageData\n    })\n  }\n\n  loadPartialHydrationJson(rawPath) {\n    const pagePath = findPath(rawPath)\n    if (this.partialHydrationDb.has(pagePath)) {\n      const pageData = this.partialHydrationDb.get(pagePath)\n      if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n        return Promise.resolve(pageData)\n      }\n    }\n\n    return this.fetchPartialHydrationJson({ pagePath }).then(pageData => {\n      this.partialHydrationDb.set(pagePath, pageData)\n\n      return pageData\n    })\n  }\n\n  loadSliceDataJson(sliceName) {\n    if (this.slicesDataDb.has(sliceName)) {\n      const jsonPayload = this.slicesDataDb.get(sliceName)\n      return Promise.resolve({ sliceName, jsonPayload })\n    }\n\n    const url = `${__PATH_PREFIX__}/slice-data/${sliceName}.json`\n    return doFetch(url, `GET`).then(res => {\n      const jsonPayload = JSON.parse(res.responseText)\n\n      this.slicesDataDb.set(sliceName, jsonPayload)\n      return { sliceName, jsonPayload }\n    })\n  }\n\n  findMatchPath(rawPath) {\n    return findMatchPath(rawPath)\n  }\n\n  // TODO check all uses of this and whether they use undefined for page resources not exist\n  loadPage(rawPath) {\n    const pagePath = findPath(rawPath)\n    if (this.pageDb.has(pagePath)) {\n      const page = this.pageDb.get(pagePath)\n      if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n        if (page.error) {\n          return Promise.resolve({\n            error: page.error,\n            status: page.status,\n          })\n        }\n\n        return Promise.resolve(page.payload)\n      }\n    }\n\n    if (this.inFlightDb.has(pagePath)) {\n      return this.inFlightDb.get(pagePath)\n    }\n\n    const loadDataPromises = [\n      this.loadAppData(),\n      this.loadPageDataJson(pagePath),\n    ]\n\n    if (global.hasPartialHydration) {\n      loadDataPromises.push(this.loadPartialHydrationJson(pagePath))\n    }\n\n    const inFlightPromise = Promise.all(loadDataPromises).then(allData => {\n      const [appDataResponse, pageDataResponse, rscDataResponse] = allData\n\n      if (\n        pageDataResponse.status === PageResourceStatus.Error ||\n        rscDataResponse?.status === PageResourceStatus.Error\n      ) {\n        return {\n          status: PageResourceStatus.Error,\n        }\n      }\n\n      let pageData = pageDataResponse.payload\n\n      const {\n        componentChunkName,\n        staticQueryHashes: pageStaticQueryHashes = [],\n        slicesMap = {},\n      } = pageData\n\n      const finalResult = {}\n\n      const dedupedSliceNames = Array.from(new Set(Object.values(slicesMap)))\n\n      const loadSlice = slice => {\n        if (this.slicesDb.has(slice.name)) {\n          return this.slicesDb.get(slice.name)\n        } else if (this.sliceInflightDb.has(slice.name)) {\n          return this.sliceInflightDb.get(slice.name)\n        }\n\n        const inFlight = this.loadComponent(slice.componentChunkName).then(\n          component => {\n            return {\n              component: preferDefault(component),\n              sliceContext: slice.result.sliceContext,\n              data: slice.result.data,\n            }\n          }\n        )\n\n        this.sliceInflightDb.set(slice.name, inFlight)\n        inFlight.then(results => {\n          this.slicesDb.set(slice.name, results)\n          this.sliceInflightDb.delete(slice.name)\n        })\n\n        return inFlight\n      }\n\n      return Promise.all(\n        dedupedSliceNames.map(sliceName => this.loadSliceDataJson(sliceName))\n      ).then(slicesData => {\n        const slices = []\n        const dedupedStaticQueryHashes = [...pageStaticQueryHashes]\n\n        for (const { jsonPayload, sliceName } of Object.values(slicesData)) {\n          slices.push({ name: sliceName, ...jsonPayload })\n          for (const staticQueryHash of jsonPayload.staticQueryHashes) {\n            if (!dedupedStaticQueryHashes.includes(staticQueryHash)) {\n              dedupedStaticQueryHashes.push(staticQueryHash)\n            }\n          }\n        }\n\n        const loadChunkPromises = [\n          Promise.all(slices.map(loadSlice)),\n          this.loadComponent(componentChunkName, `head`),\n        ]\n\n        if (!global.hasPartialHydration) {\n          loadChunkPromises.push(this.loadComponent(componentChunkName))\n        }\n\n        // In develop we have separate chunks for template and Head components\n        // to enable HMR (fast refresh requires single exports).\n        // In production we have shared chunk with both exports. Double loadComponent here\n        // will be deduped by webpack runtime resulting in single request and single module\n        // being loaded for both `component` and `head`.\n        // get list of components to get\n        const componentChunkPromises = Promise.all(loadChunkPromises).then(\n          components => {\n            const [sliceComponents, headComponent, pageComponent] = components\n\n            finalResult.createdAt = new Date()\n\n            for (const sliceComponent of sliceComponents) {\n              if (!sliceComponent || sliceComponent instanceof Error) {\n                finalResult.status = PageResourceStatus.Error\n                finalResult.error = sliceComponent\n              }\n            }\n\n            if (\n              !global.hasPartialHydration &&\n              (!pageComponent || pageComponent instanceof Error)\n            ) {\n              finalResult.status = PageResourceStatus.Error\n              finalResult.error = pageComponent\n            }\n\n            let pageResources\n\n            if (finalResult.status !== PageResourceStatus.Error) {\n              finalResult.status = PageResourceStatus.Success\n              if (\n                pageDataResponse.notFound === true ||\n                rscDataResponse?.notFound === true\n              ) {\n                finalResult.notFound = true\n              }\n              pageData = Object.assign(pageData, {\n                webpackCompilationHash: appDataResponse\n                  ? appDataResponse.webpackCompilationHash\n                  : ``,\n              })\n\n              if (typeof rscDataResponse?.payload === `string`) {\n                pageResources = toPageResources(pageData, null, headComponent)\n\n                pageResources.partialHydration = rscDataResponse.payload\n\n                const readableStream = new ReadableStream({\n                  start(controller) {\n                    const te = new TextEncoder()\n                    controller.enqueue(te.encode(rscDataResponse.payload))\n                  },\n                  pull(controller) {\n                    // close on next read when queue is empty\n                    controller.close()\n                  },\n                  cancel() {},\n                })\n\n                return waitForResponse(\n                  createFromReadableStream(readableStream)\n                ).then(result => {\n                  pageResources.partialHydration = result\n\n                  return pageResources\n                })\n              } else {\n                pageResources = toPageResources(\n                  pageData,\n                  pageComponent,\n                  headComponent\n                )\n              }\n            }\n\n            // undefined if final result is an error\n            return pageResources\n          }\n        )\n\n        // get list of static queries to get\n        const staticQueryBatchPromise = Promise.all(\n          dedupedStaticQueryHashes.map(staticQueryHash => {\n            // Check for cache in case this static query result has already been loaded\n            if (this.staticQueryDb[staticQueryHash]) {\n              const jsonPayload = this.staticQueryDb[staticQueryHash]\n              return { staticQueryHash, jsonPayload }\n            }\n\n            return this.memoizedGet(\n              `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n            )\n              .then(req => {\n                const jsonPayload = JSON.parse(req.responseText)\n                return { staticQueryHash, jsonPayload }\n              })\n              .catch(() => {\n                throw new Error(\n                  `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n                )\n              })\n          })\n        ).then(staticQueryResults => {\n          const staticQueryResultsMap = {}\n\n          staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n            staticQueryResultsMap[staticQueryHash] = jsonPayload\n            this.staticQueryDb[staticQueryHash] = jsonPayload\n          })\n\n          return staticQueryResultsMap\n        })\n\n        return (\n          Promise.all([componentChunkPromises, staticQueryBatchPromise])\n            .then(([pageResources, staticQueryResults]) => {\n              let payload\n              if (pageResources) {\n                payload = { ...pageResources, staticQueryResults }\n                finalResult.payload = payload\n                emitter.emit(`onPostLoadPageResources`, {\n                  page: payload,\n                  pageResources: payload,\n                })\n              }\n\n              this.pageDb.set(pagePath, finalResult)\n\n              if (finalResult.error) {\n                return {\n                  error: finalResult.error,\n                  status: finalResult.status,\n                }\n              }\n\n              return payload\n            })\n            // when static-query fail to load we throw a better error\n            .catch(err => {\n              return {\n                error: err,\n                status: PageResourceStatus.Error,\n              }\n            })\n        )\n      })\n    })\n\n    inFlightPromise\n      .then(() => {\n        this.inFlightDb.delete(pagePath)\n      })\n      .catch(error => {\n        this.inFlightDb.delete(pagePath)\n        throw error\n      })\n\n    this.inFlightDb.set(pagePath, inFlightPromise)\n\n    return inFlightPromise\n  }\n\n  // returns undefined if the page does not exists in cache\n  loadPageSync(rawPath, options = {}) {\n    const pagePath = findPath(rawPath)\n    if (this.pageDb.has(pagePath)) {\n      const pageData = this.pageDb.get(pagePath)\n\n      if (pageData.payload) {\n        return pageData.payload\n      }\n\n      if (options?.withErrorDetails) {\n        return {\n          error: pageData.error,\n          status: pageData.status,\n        }\n      }\n    }\n    return undefined\n  }\n\n  shouldPrefetch(pagePath) {\n    // Skip prefetching if we know user is on slow or constrained connection\n    if (!doesConnectionSupportPrefetch()) {\n      return false\n    }\n\n    // Don't prefetch if this is a crawler bot\n    if (navigator.userAgent && BOT_REGEX.test(navigator.userAgent)) {\n      return false\n    }\n\n    // Check if the page exists.\n    if (this.pageDb.has(pagePath)) {\n      return false\n    }\n\n    return true\n  }\n\n  prefetch(pagePath) {\n    if (!this.shouldPrefetch(pagePath)) {\n      return {\n        then: resolve => resolve(false),\n        abort: () => {},\n      }\n    }\n    if (this.prefetchTriggered.has(pagePath)) {\n      return {\n        then: resolve => resolve(true),\n        abort: () => {},\n      }\n    }\n\n    const defer = {\n      resolve: null,\n      reject: null,\n      promise: null,\n    }\n    defer.promise = new Promise((resolve, reject) => {\n      defer.resolve = resolve\n      defer.reject = reject\n    })\n    this.prefetchQueued.push([pagePath, defer])\n    const abortC = new AbortController()\n    abortC.signal.addEventListener(`abort`, () => {\n      const index = this.prefetchQueued.findIndex(([p]) => p === pagePath)\n      // remove from the queue\n      if (index !== -1) {\n        this.prefetchQueued.splice(index, 1)\n      }\n    })\n\n    if (!this.isPrefetchQueueRunning) {\n      this.isPrefetchQueueRunning = true\n      setTimeout(() => {\n        this._processNextPrefetchBatch()\n      }, 3000)\n    }\n\n    return {\n      then: (resolve, reject) => defer.promise.then(resolve, reject),\n      abort: abortC.abort.bind(abortC),\n    }\n  }\n\n  _processNextPrefetchBatch() {\n    const idleCallback = window.requestIdleCallback || (cb => setTimeout(cb, 0))\n\n    idleCallback(() => {\n      const toPrefetch = this.prefetchQueued.splice(0, 4)\n      const prefetches = Promise.all(\n        toPrefetch.map(([pagePath, dPromise]) => {\n          // Tell plugins with custom prefetching logic that they should start\n          // prefetching this path.\n          if (!this.prefetchTriggered.has(pagePath)) {\n            this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n            this.prefetchTriggered.add(pagePath)\n          }\n\n          // If a plugin has disabled core prefetching, stop now.\n          if (this.prefetchDisabled) {\n            return dPromise.resolve(false)\n          }\n\n          return this.doPrefetch(findPath(pagePath)).then(() => {\n            if (!this.prefetchCompleted.has(pagePath)) {\n              this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n              this.prefetchCompleted.add(pagePath)\n            }\n\n            dPromise.resolve(true)\n          })\n        })\n      )\n\n      if (this.prefetchQueued.length) {\n        prefetches.then(() => {\n          setTimeout(() => {\n            this._processNextPrefetchBatch()\n          }, 3000)\n        })\n      } else {\n        this.isPrefetchQueueRunning = false\n      }\n    })\n  }\n\n  doPrefetch(pagePath) {\n    const pageDataUrl = createPageDataUrl(pagePath)\n\n    if (global.hasPartialHydration) {\n      return Promise.all([\n        prefetchHelper(pageDataUrl, {\n          crossOrigin: `anonymous`,\n          as: `fetch`,\n        }).then(() =>\n          // This was just prefetched, so will return a response from\n          // the cache instead of making another request to the server\n          this.loadPageDataJson(pagePath)\n        ),\n        prefetchHelper(pageDataUrl.replace(`.json`, `-rsc.json`), {\n          crossOrigin: `anonymous`,\n          as: `fetch`,\n        }).then(() =>\n          // This was just prefetched, so will return a response from\n          // the cache instead of making another request to the server\n          this.loadPartialHydrationJson(pagePath)\n        ),\n      ])\n    } else {\n      return prefetchHelper(pageDataUrl, {\n        crossOrigin: `anonymous`,\n        as: `fetch`,\n      }).then(() =>\n        // This was just prefetched, so will return a response from\n        // the cache instead of making another request to the server\n        this.loadPageDataJson(pagePath)\n      )\n    }\n  }\n\n  hovering(rawPath) {\n    this.loadPage(rawPath)\n  }\n\n  getResourceURLsForPathname(rawPath) {\n    const pagePath = findPath(rawPath)\n    const page = this.pageDataDb.get(pagePath)\n    if (page) {\n      const pageResources = toPageResources(page.payload)\n\n      return [\n        ...createComponentUrls(pageResources.page.componentChunkName),\n        createPageDataUrl(pagePath),\n      ]\n    } else {\n      return null\n    }\n  }\n\n  isPageNotFound(rawPath) {\n    const pagePath = findPath(rawPath)\n    const page = this.pageDb.get(pagePath)\n    return !page || page.notFound\n  }\n\n  loadAppData(retries = 0) {\n    return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n      req => {\n        const { status, responseText } = req\n\n        let appData\n\n        if (status !== 200 && retries < 3) {\n          // Retry 3 times incase of non-200 responses\n          return this.loadAppData(retries + 1)\n        }\n\n        // Handle 200\n        if (status === 200) {\n          try {\n            const jsonPayload = JSON.parse(responseText)\n            if (jsonPayload.webpackCompilationHash === undefined) {\n              throw new Error(`not a valid app-data response`)\n            }\n\n            appData = jsonPayload\n          } catch (err) {\n            // continue regardless of error\n          }\n        }\n\n        return appData\n      }\n    )\n  }\n}\n\nconst createComponentUrls = componentChunkName =>\n  (window.___chunkMapping[componentChunkName] || []).map(\n    chunk => __PATH_PREFIX__ + chunk\n  )\n\nexport class ProdLoader extends BaseLoader {\n  constructor(asyncRequires, matchPaths, pageData) {\n    const loadComponent = (chunkName, exportType = `components`) => {\n      if (!global.hasPartialHydration) {\n        exportType = `components`\n      }\n\n      if (!asyncRequires[exportType][chunkName]) {\n        throw new Error(\n          `We couldn't find the correct component chunk with the name \"${chunkName}\"`\n        )\n      }\n\n      return (\n        asyncRequires[exportType][chunkName]()\n          // loader will handle the case when component is error\n          .catch(err => err)\n      )\n    }\n\n    super(loadComponent, matchPaths)\n\n    if (pageData) {\n      this.pageDataDb.set(findPath(pageData.path), {\n        pagePath: pageData.path,\n        payload: pageData,\n        status: `success`,\n      })\n    }\n  }\n\n  doPrefetch(pagePath) {\n    return super.doPrefetch(pagePath).then(result => {\n      if (result.status !== PageResourceStatus.Success) {\n        return Promise.resolve()\n      }\n      const pageData = result.payload\n      const chunkName = pageData.componentChunkName\n      const componentUrls = createComponentUrls(chunkName)\n      return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n    })\n  }\n\n  loadPageDataJson(rawPath) {\n    return super.loadPageDataJson(rawPath).then(data => {\n      if (data.notFound) {\n        if (shouldAbortFetch(rawPath)) {\n          return data\n        }\n        // check if html file exist using HEAD request:\n        // if it does we should navigate to it instead of showing 404\n        return doFetch(rawPath, `HEAD`).then(req => {\n          if (req.status === 200) {\n            // page (.html file) actually exist (or we asked for 404 )\n            // returning page resources status as errored to trigger\n            // regular browser navigation to given page\n            return {\n              status: PageResourceStatus.Error,\n            }\n          }\n\n          // if HEAD request wasn't 200, return notFound result\n          // and show 404 page\n          return data\n        })\n      }\n      return data\n    })\n  }\n\n  loadPartialHydrationJson(rawPath) {\n    return super.loadPartialHydrationJson(rawPath).then(data => {\n      if (data.notFound) {\n        if (shouldAbortFetch(rawPath)) {\n          return data\n        }\n        // check if html file exist using HEAD request:\n        // if it does we should navigate to it instead of showing 404\n        return doFetch(rawPath, `HEAD`).then(req => {\n          if (req.status === 200) {\n            // page (.html file) actually exist (or we asked for 404 )\n            // returning page resources status as errored to trigger\n            // regular browser navigation to given page\n            return {\n              status: PageResourceStatus.Error,\n            }\n          }\n\n          // if HEAD request wasn't 200, return notFound result\n          // and show 404 page\n          return data\n        })\n      }\n      return data\n    })\n  }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n  instance = _loader\n}\n\nexport const publicLoader = {\n  enqueue: rawPath => instance.prefetch(rawPath),\n\n  // Real methods\n  getResourceURLsForPathname: rawPath =>\n    instance.getResourceURLsForPathname(rawPath),\n  loadPage: rawPath => instance.loadPage(rawPath),\n  // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n  loadPageSync: (rawPath, options = {}) =>\n    instance.loadPageSync(rawPath, options),\n  prefetch: rawPath => instance.prefetch(rawPath),\n  isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n  hovering: rawPath => instance.hovering(rawPath),\n  loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n  if (instance) {\n    return instance.staticQueryDb\n  } else {\n    return {}\n  }\n}\n\nexport function getSliceResults() {\n  if (instance) {\n    return instance.slicesDb\n  } else {\n    return {}\n  }\n}\n","import { useEffect } from \"react\"\n\n/*\n * Calls callback in an effect and renders children\n */\nexport function FireCallbackInEffect({ children, callback }) {\n  useEffect(() => {\n    callback()\n  })\n\n  return children\n}\n","export const VALID_NODE_NAMES = [\n  `link`,\n  `meta`,\n  `style`,\n  `title`,\n  `base`,\n  `noscript`,\n  `script`,\n  `html`,\n  `body`,\n]\n","import { VALID_NODE_NAMES } from \"./constants\"\n\n/**\n * Filter the props coming from a page down to just the ones that are relevant for head.\n * This e.g. filters out properties that are undefined during SSR.\n */\nexport function filterHeadProps(input) {\n  return {\n    location: {\n      pathname: input.location.pathname,\n    },\n    params: input.params,\n    data: input.data || {},\n    serverData: input.serverData,\n    pageContext: input.pageContext,\n  }\n}\n\n/**\n * Throw error if Head export is not a valid function\n */\nexport function headExportValidator(head) {\n  if (typeof head !== `function`)\n    throw new Error(\n      `Expected \"Head\" export to be a function got \"${typeof head}\".`\n    )\n}\n\n/**\n * Warn once for same messsage\n */\nlet warnOnce = _ => {}\nif (process.env.NODE_ENV !== `production`) {\n  const warnings = new Set()\n  warnOnce = msg => {\n    if (!warnings.has(msg)) {\n      console.warn(msg)\n    }\n    warnings.add(msg)\n  }\n}\n\n/**\n * Warn for invalid tags in Head which may have been directly added or introduced by `wrapRootElement`\n * @param {string} tagName\n */\nexport function warnForInvalidTag(tagName) {\n  if (process.env.NODE_ENV !== `production`) {\n    const warning = createWarningForInvalidTag(tagName)\n    warnOnce(warning)\n  }\n}\n\nfunction createWarningForInvalidTag(tagName) {\n  return `<${tagName}> is not a valid head element. Please use one of the following: ${VALID_NODE_NAMES.join(\n    `, `\n  )}.\\n\\nAlso make sure that wrapRootElement in gatsby-ssr/gatsby-browser doesn't contain UI elements: https://gatsby.dev/invalid-head-elements`\n}\n\n/**\n * When a `nonce` is present on an element, browsers such as Chrome and Firefox strip it out of the\n * actual HTML attributes for security reasons *when the element is added to the document*. Thus,\n * given two equivalent elements that have nonces, `Element,isEqualNode()` will return false if one\n * of those elements gets added to the document. Although the `element.nonce` property will be the\n * same for both elements, the one that was added to the document will return an empty string for\n * its nonce HTML attribute value.\n *\n * This custom `isEqualNode()` function therefore removes the nonce value from the `newTag` before\n * comparing it to `oldTag`, restoring it afterwards.\n *\n * For more information, see:\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1211471#c12\n */\nexport function isEqualNode(oldTag, newTag) {\n  if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n    const nonce = newTag.getAttribute(`nonce`)\n    // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n    // be stripped if there is no content security policy response header that includes a nonce.\n    if (nonce && !oldTag.getAttribute(`nonce`)) {\n      const cloneTag = newTag.cloneNode(true)\n      cloneTag.setAttribute(`nonce`, ``)\n      cloneTag.nonce = nonce\n      return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag)\n    }\n  }\n\n  return oldTag.isEqualNode(newTag)\n}\n\nexport function diffNodes({ oldNodes, newNodes, onStale, onNew }) {\n  for (const existingHeadElement of oldNodes) {\n    const indexInNewNodes = newNodes.findIndex(e =>\n      isEqualNode(e, existingHeadElement)\n    )\n\n    if (indexInNewNodes === -1) {\n      onStale(existingHeadElement)\n    } else {\n      // this node is re-created as-is, so we keep old node, and remove it from list of new nodes (as we handled it already here)\n      newNodes.splice(indexInNewNodes, 1)\n    }\n  }\n\n  // remaing new nodes didn't have matching old node, so need to be added\n  for (const newNode of newNodes) {\n    onNew(newNode)\n  }\n}\n\nexport function getValidHeadNodesAndAttributes(\n  rootNode,\n  htmlAndBodyAttributes = {\n    html: {},\n    body: {},\n  }\n) {\n  const seenIds = new Map()\n  const validHeadNodes = []\n\n  // Filter out non-element nodes before looping since we don't care about them\n  for (const node of rootNode.childNodes) {\n    const nodeName = node.nodeName.toLowerCase()\n    const id = node.attributes?.id?.value\n\n    if (!isElementType(node)) continue\n\n    if (isValidNodeName(nodeName)) {\n      // <html> and <body> tags are treated differently, in that we don't render them, we only extract the attributes and apply them separetely\n      if (nodeName === `html` || nodeName === `body`) {\n        for (const attribute of node.attributes) {\n          const isStyleAttribute = attribute.name === `style`\n\n          // Merge attributes for same nodeName from previous loop iteration\n          htmlAndBodyAttributes[nodeName] = {\n            ...htmlAndBodyAttributes[nodeName],\n          }\n\n          if (!isStyleAttribute) {\n            htmlAndBodyAttributes[nodeName][attribute.name] = attribute.value\n          }\n\n          // If there is already a style attribute, we need to merge them as otherwise the last one will \"win\"\n          if (isStyleAttribute) {\n            htmlAndBodyAttributes[nodeName].style = `${\n              htmlAndBodyAttributes[nodeName]?.style\n                ? htmlAndBodyAttributes[nodeName].style\n                : ``\n            }${attribute.value} `\n          }\n        }\n      } else {\n        let clonedNode = node.cloneNode(true)\n        clonedNode.setAttribute(`data-gatsby-head`, true)\n\n        // // This is hack to make script tags work\n        if (clonedNode.nodeName.toLowerCase() === `script`) {\n          clonedNode = massageScript(clonedNode)\n        }\n        // Duplicate ids are not allowed in the head, so we need to dedupe them\n        if (id) {\n          if (!seenIds.has(id)) {\n            validHeadNodes.push(clonedNode)\n            seenIds.set(id, validHeadNodes.length - 1)\n          } else {\n            const indexOfPreviouslyInsertedNode = seenIds.get(id)\n            validHeadNodes[\n              indexOfPreviouslyInsertedNode\n            ].parentNode?.removeChild(\n              validHeadNodes[indexOfPreviouslyInsertedNode]\n            )\n            validHeadNodes[indexOfPreviouslyInsertedNode] = clonedNode\n          }\n        } else {\n          validHeadNodes.push(clonedNode)\n        }\n      }\n    } else {\n      warnForInvalidTag(nodeName)\n    }\n\n    if (node.childNodes.length) {\n      validHeadNodes.push(\n        ...getValidHeadNodesAndAttributes(node, htmlAndBodyAttributes)\n          .validHeadNodes\n      )\n    }\n  }\n\n  return { validHeadNodes, htmlAndBodyAttributes }\n}\n\nfunction massageScript(node) {\n  const script = document.createElement(`script`)\n  for (const attr of node.attributes) {\n    script.setAttribute(attr.name, attr.value)\n  }\n  script.innerHTML = node.innerHTML\n\n  return script\n}\n\nexport function isValidNodeName(nodeName) {\n  return VALID_NODE_NAMES.includes(nodeName)\n}\n/*\n * For Head, we only care about element nodes(type = 1), so this util is used to skip over non-element nodes\n * For Node type, see https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n */\nexport function isElementType(node) {\n  return node.nodeType === 1\n}\n\n/**\n * Removes all the head elements that were added by `Head`\n */\nexport function removePrevHeadElements() {\n  const prevHeadNodes = document.querySelectorAll(`[data-gatsby-head]`)\n  for (const node of prevHeadNodes) {\n    node.parentNode.removeChild(node)\n  }\n}\n\nexport function applyHtmlAndBodyAttributes(htmlAndBodyAttributes) {\n  if (!htmlAndBodyAttributes) return\n\n  const { html, body } = htmlAndBodyAttributes\n\n  const htmlElement = document.querySelector(`html`)\n  if (htmlElement) {\n    Object.entries(html).forEach(([attributeName, attributeValue]) => {\n      htmlElement.setAttribute(attributeName, attributeValue)\n    })\n  }\n\n  const bodyElement = document.querySelector(`body`)\n  if (bodyElement) {\n    Object.entries(body).forEach(([attributeName, attributeValue]) => {\n      bodyElement.setAttribute(attributeName, attributeValue)\n    })\n  }\n}\n\nexport function removeHtmlAndBodyAttributes(htmlAndBodyattributeList) {\n  if (!htmlAndBodyattributeList) return\n\n  const { html, body } = htmlAndBodyattributeList\n\n  if (html) {\n    const htmlElement = document.querySelector(`html`)\n    html.forEach(attributeName => {\n      if (htmlElement) {\n        htmlElement.removeAttribute(attributeName)\n      }\n    })\n  }\n\n  if (body) {\n    const bodyElement = document.querySelector(`body`)\n    body.forEach(attributeName => {\n      if (bodyElement) {\n        bodyElement.removeAttribute(attributeName)\n      }\n    })\n  }\n}\n","import React from \"react\"\nimport { useEffect } from \"react\"\nimport { StaticQueryContext } from \"gatsby\"\nimport { LocationProvider } from \"@gatsbyjs/reach-router\"\nimport { reactDOMUtils } from \"../react-dom-utils\"\nimport { FireCallbackInEffect } from \"./components/fire-callback-in-effect\"\nimport {\n  headExportValidator,\n  filterHeadProps,\n  diffNodes,\n  getValidHeadNodesAndAttributes,\n  removePrevHeadElements,\n  applyHtmlAndBodyAttributes,\n  removeHtmlAndBodyAttributes,\n} from \"./utils\"\nimport { apiRunner } from \"../api-runner-browser\"\n\nconst hiddenRoot = document.createElement(`div`)\nconst keysOfHtmlAndBodyAttributes = {\n  html: [],\n  body: [],\n}\n\nconst onHeadRendered = () => {\n  const { validHeadNodes, htmlAndBodyAttributes } =\n    getValidHeadNodesAndAttributes(hiddenRoot)\n\n  keysOfHtmlAndBodyAttributes.html = Object.keys(htmlAndBodyAttributes.html)\n  keysOfHtmlAndBodyAttributes.body = Object.keys(htmlAndBodyAttributes.body)\n\n  applyHtmlAndBodyAttributes(htmlAndBodyAttributes)\n\n  /**\n   * The rest of the code block below is a diffing mechanism to ensure that\n   * the head elements aren't duplicted on every re-render.\n   */\n  const existingHeadElements = document.querySelectorAll(`[data-gatsby-head]`)\n\n  if (existingHeadElements.length === 0) {\n    document.head.append(...validHeadNodes)\n    return\n  }\n\n  const newHeadNodes = []\n  diffNodes({\n    oldNodes: existingHeadElements,\n    newNodes: validHeadNodes,\n    onStale: node => node.parentNode.removeChild(node),\n    onNew: node => newHeadNodes.push(node),\n  })\n\n  document.head.append(...newHeadNodes)\n}\n\nif (process.env.BUILD_STAGE === `develop`) {\n  // sigh ... <html> and <body> elements are not valid descedents of <div> (our hidden element)\n  // react-dom in dev mode will warn about this. There doesn't seem to be a way to render arbitrary\n  // user Head without hitting this issue (our hidden element could be just \"new Document()\", but\n  // this can only have 1 child, and we don't control what is being rendered so that's not an option)\n  // instead we continue to render to <div>, and just silence warnings for <html> and <body> elements\n  // https://github.com/facebook/react/blob/e2424f33b3ad727321fc12e75c5e94838e84c2b5/packages/react-dom-bindings/src/client/validateDOMNesting.js#L498-L520\n  const originalConsoleError = console.error.bind(console)\n  console.error = (...args) => {\n    if (\n      Array.isArray(args) &&\n      args.length >= 2 &&\n      args[0]?.includes?.(`validateDOMNesting(...): %s cannot appear as`) &&\n      (args[1] === `<html>` || args[1] === `<body>`)\n    ) {\n      return undefined\n    }\n    return originalConsoleError(...args)\n  }\n\n  /* We set up observer to be able to regenerate <head> after react-refresh\n     updates our hidden element.\n  */\n  const observer = new MutationObserver(onHeadRendered)\n  observer.observe(hiddenRoot, {\n    attributes: true,\n    childList: true,\n    characterData: true,\n    subtree: true,\n  })\n}\n\nexport function headHandlerForBrowser({\n  pageComponent,\n  staticQueryResults,\n  pageComponentProps,\n}) {\n  useEffect(() => {\n    if (pageComponent?.Head) {\n      headExportValidator(pageComponent.Head)\n\n      const { render } = reactDOMUtils()\n\n      const HeadElement = (\n        <pageComponent.Head {...filterHeadProps(pageComponentProps)} />\n      )\n\n      const WrapHeadElement = apiRunner(\n        `wrapRootElement`,\n        { element: HeadElement },\n        HeadElement,\n        ({ result }) => {\n          return { element: result }\n        }\n      ).pop()\n\n      render(\n        // just a hack to call the callback after react has done first render\n        // Note: In dev, we call onHeadRendered twice( in FireCallbackInEffect and after mutualution observer dectects initail render into hiddenRoot) this is for hot reloading\n        // In Prod we only call onHeadRendered in FireCallbackInEffect to render to head\n        <FireCallbackInEffect callback={onHeadRendered}>\n          <StaticQueryContext.Provider value={staticQueryResults}>\n            <LocationProvider>{WrapHeadElement}</LocationProvider>\n          </StaticQueryContext.Provider>\n        </FireCallbackInEffect>,\n        hiddenRoot\n      )\n    }\n\n    return () => {\n      removePrevHeadElements()\n      removeHtmlAndBodyAttributes(keysOfHtmlAndBodyAttributes)\n    }\n  })\n}\n","import React, { Suspense, createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\nimport { headHandlerForBrowser } from \"./head/head-export-handler-for-browser\"\n\n// Renders page\nfunction PageRenderer(props) {\n  const pageComponentProps = {\n    ...props,\n    params: {\n      ...grabMatchParams(props.location.pathname),\n      ...props.pageResources.json.pageContext.__params,\n    },\n  }\n\n  const preferDefault = m => (m && m.default) || m\n\n  let pageElement\n  if (props.pageResources.partialHydration) {\n    pageElement = props.pageResources.partialHydration\n  } else {\n    pageElement = createElement(preferDefault(props.pageResources.component), {\n      ...pageComponentProps,\n      key: props.path || props.pageResources.page.path,\n    })\n  }\n\n  const pageComponent = props.pageResources.head\n\n  headHandlerForBrowser({\n    pageComponent,\n    staticQueryResults: props.pageResources.staticQueryResults,\n    pageComponentProps,\n  })\n\n  const wrappedPage = apiRunner(\n    `wrapPageElement`,\n    {\n      element: pageElement,\n      props: pageComponentProps,\n    },\n    pageElement,\n    ({ result }) => {\n      return { element: result, props: pageComponentProps }\n    }\n  ).pop()\n\n  return wrappedPage\n}\n\nPageRenderer.propTypes = {\n  location: PropTypes.object.isRequired,\n  pageResources: PropTypes.object.isRequired,\n  data: PropTypes.object,\n  pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n  id: `gatsby-announcer`,\n  style: {\n    position: `absolute`,\n    top: 0,\n    width: 1,\n    height: 1,\n    padding: 0,\n    overflow: `hidden`,\n    clip: `rect(0, 0, 0, 0)`,\n    whiteSpace: `nowrap`,\n    border: 0,\n  },\n  \"aria-live\": `assertive`,\n  \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport {\n  navigate as reachNavigate,\n  globalHistory,\n} from \"@gatsbyjs/reach-router\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n  const redirect = maybeGetBrowserRedirect(pathname)\n  const { hash, search } = window.location\n\n  if (redirect != null) {\n    window.___replace(redirect.toPath + search + hash)\n    return true\n  } else {\n    return false\n  }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n  if (/loading chunk \\d* failed./i.test(event.reason)) {\n    if (nextRoute) {\n      window.location.pathname = nextRoute\n    }\n  }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n  if (!maybeRedirect(location.pathname)) {\n    nextRoute = location.pathname\n    apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n  }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n  if (!maybeRedirect(location.pathname)) {\n    apiRunner(`onRouteUpdate`, { location, prevLocation })\n    if (\n      process.env.GATSBY_QUERY_ON_DEMAND &&\n      process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n    ) {\n      emitter.emit(`onRouteUpdate`, { location, prevLocation })\n    }\n  }\n}\n\nconst navigate = (to, options = {}) => {\n  // Support forward/backward navigation with numbers\n  // navigate(-2) (jumps back 2 history steps)\n  // navigate(2)  (jumps forward 2 history steps)\n  if (typeof to === `number`) {\n    globalHistory.navigate(to)\n    return\n  }\n\n  const { pathname, search, hash } = parsePath(to)\n  const redirect = maybeGetBrowserRedirect(pathname)\n\n  // If we're redirecting, just replace the passed in pathname\n  // to the one we want to redirect to.\n  if (redirect) {\n    to = redirect.toPath + search + hash\n  }\n\n  // If we had a service worker update, no matter the path, reload window and\n  // reset the pathname whitelist\n  if (window.___swUpdated) {\n    window.location = pathname + search + hash\n    return\n  }\n\n  // Start a timer to wait for a second before transitioning and showing a\n  // loader in case resources aren't around yet.\n  const timeoutId = setTimeout(() => {\n    emitter.emit(`onDelayedLoadPageResources`, { pathname })\n    apiRunner(`onRouteUpdateDelayed`, {\n      location: window.location,\n    })\n  }, 1000)\n\n  loader.loadPage(pathname + search).then(pageResources => {\n    // If no page resources, then refresh the page\n    // Do this, rather than simply `window.location.reload()`, so that\n    // pressing the back/forward buttons work - otherwise when pressing\n    // back, the browser will just change the URL and expect JS to handle\n    // the change, which won't always work since it might not be a Gatsby\n    // page.\n    if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n      window.history.replaceState({}, ``, location.href)\n      window.location = pathname\n      clearTimeout(timeoutId)\n      return\n    }\n\n    // If the loaded page has a different compilation hash to the\n    // window, then a rebuild has occurred on the server. Reload.\n    if (process.env.NODE_ENV === `production` && pageResources) {\n      if (\n        pageResources.page.webpackCompilationHash !==\n        window.___webpackCompilationHash\n      ) {\n        // Purge plugin-offline cache\n        if (\n          `serviceWorker` in navigator &&\n          navigator.serviceWorker.controller !== null &&\n          navigator.serviceWorker.controller.state === `activated`\n        ) {\n          navigator.serviceWorker.controller.postMessage({\n            gatsbyApi: `clearPathResources`,\n          })\n        }\n\n        window.location = pathname + search + hash\n      }\n    }\n    reachNavigate(to, options)\n    clearTimeout(timeoutId)\n  })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n  const { pathname, hash } = location\n  const results = apiRunner(`shouldUpdateScroll`, {\n    prevRouterProps,\n    // `pathname` for backwards compatibility\n    pathname,\n    routerProps: { location },\n    getSavedScrollPosition: args => [\n      0,\n      // FIXME this is actually a big code smell, we should fix this\n      // eslint-disable-next-line @babel/no-invalid-this\n      this._stateStorage.read(args, args.key),\n    ],\n  })\n  if (results.length > 0) {\n    // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n    // @see https://github.com/gatsbyjs/gatsby/issues/12038\n    return results[results.length - 1]\n  }\n\n  if (prevRouterProps) {\n    const {\n      location: { pathname: oldPathname },\n    } = prevRouterProps\n    if (oldPathname === pathname) {\n      // Scroll to element if it exists, if it doesn't, or no hash is provided,\n      // scroll to top.\n      return hash ? decodeURI(hash.slice(1)) : [0, 0]\n    }\n  }\n  return true\n}\n\nfunction init() {\n  // The \"scroll-behavior\" package expects the \"action\" to be on the location\n  // object so let's copy it over.\n  globalHistory.listen(args => {\n    args.location.action = args.action\n  })\n\n  window.___push = to => navigate(to, { replace: false })\n  window.___replace = to => navigate(to, { replace: true })\n  window.___navigate = (to, options) => navigate(to, options)\n}\n\nclass RouteAnnouncer extends React.Component {\n  constructor(props) {\n    super(props)\n    this.announcementRef = React.createRef()\n  }\n\n  componentDidUpdate(prevProps, nextProps) {\n    requestAnimationFrame(() => {\n      let pageName = `new page at ${this.props.location.pathname}`\n      if (document.title) {\n        pageName = document.title\n      }\n      const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n      if (pageHeadings && pageHeadings.length) {\n        pageName = pageHeadings[0].textContent\n      }\n      const newAnnouncement = `Navigated to ${pageName}`\n      if (this.announcementRef.current) {\n        const oldAnnouncement = this.announcementRef.current.innerText\n        if (oldAnnouncement !== newAnnouncement) {\n          this.announcementRef.current.innerText = newAnnouncement\n        }\n      }\n    })\n  }\n\n  render() {\n    return <div {...RouteAnnouncerProps} ref={this.announcementRef}></div>\n  }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n  if (prevLocation.href !== nextLocation.href) {\n    return true\n  }\n\n  if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n    return true\n  }\n\n  return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n  constructor(props) {\n    super(props)\n    onPreRouteUpdate(props.location, null)\n  }\n\n  componentDidMount() {\n    onRouteUpdate(this.props.location, null)\n  }\n\n  shouldComponentUpdate(nextProps) {\n    if (compareLocationProps(this.props.location, nextProps.location)) {\n      onPreRouteUpdate(nextProps.location, this.props.location)\n      return true\n    }\n    return false\n  }\n\n  componentDidUpdate(prevProps) {\n    if (compareLocationProps(prevProps.location, this.props.location)) {\n      onRouteUpdate(this.props.location, prevProps.location)\n    }\n  }\n\n  render() {\n    return (\n      <React.Fragment>\n        {this.props.children}\n        <RouteAnnouncer location={location} />\n      </React.Fragment>\n    )\n  }\n}\n\nRouteUpdates.propTypes = {\n  location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n  for (var i in a) {\n    if (!(i in b)) return true;\n  }for (var _i in b) {\n    if (a[_i] !== b[_i]) return true;\n  }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n  return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n  constructor(props) {\n    super()\n    const { location, pageResources } = props\n    this.state = {\n      location: { ...location },\n      pageResources:\n        pageResources ||\n        loader.loadPageSync(location.pathname + location.search, {\n          withErrorDetails: true,\n        }),\n    }\n  }\n\n  static getDerivedStateFromProps({ location }, prevState) {\n    if (prevState.location.href !== location.href) {\n      const pageResources = loader.loadPageSync(\n        location.pathname + location.search,\n        {\n          withErrorDetails: true,\n        }\n      )\n\n      return {\n        pageResources,\n        location: { ...location },\n      }\n    }\n\n    return {\n      location: { ...location },\n    }\n  }\n\n  loadResources(rawPath) {\n    loader.loadPage(rawPath).then(pageResources => {\n      if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n        this.setState({\n          location: { ...window.location },\n          pageResources,\n        })\n      } else {\n        window.history.replaceState({}, ``, location.href)\n        window.location = rawPath\n      }\n    })\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    // Always return false if we're missing resources.\n    if (!nextState.pageResources) {\n      this.loadResources(\n        nextProps.location.pathname + nextProps.location.search\n      )\n      return false\n    }\n\n    if (\n      process.env.BUILD_STAGE === `develop` &&\n      nextState.pageResources.stale\n    ) {\n      this.loadResources(\n        nextProps.location.pathname + nextProps.location.search\n      )\n      return false\n    }\n\n    // Check if the component or json have changed.\n    if (this.state.pageResources !== nextState.pageResources) {\n      return true\n    }\n    if (\n      this.state.pageResources.component !== nextState.pageResources.component\n    ) {\n      return true\n    }\n\n    if (this.state.pageResources.json !== nextState.pageResources.json) {\n      return true\n    }\n    // Check if location has changed on a page using internal routing\n    // via matchPath configuration.\n    if (\n      this.state.location.key !== nextState.location.key &&\n      nextState.pageResources.page &&\n      (nextState.pageResources.page.matchPath ||\n        nextState.pageResources.page.path)\n    ) {\n      return true\n    }\n    return shallowCompare(this, nextProps, nextState)\n  }\n\n  render() {\n    if (\n      process.env.NODE_ENV !== `production` &&\n      (!this.state.pageResources ||\n        this.state.pageResources.status === PageResourceStatus.Error)\n    ) {\n      const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n      if (this.state.pageResources?.error) {\n        console.error(message)\n        throw this.state.pageResources.error\n      }\n\n      throw new Error(message)\n    }\n\n    return this.props.children(this.state)\n  }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"./static-query\"\nimport {\n  SlicesMapContext,\n  SlicesContext,\n  SlicesResultsContext,\n} from \"./slice/context\"\nimport {\n  shouldUpdateScroll,\n  init as navigationInit,\n  RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n  setLoader,\n  ProdLoader,\n  publicLoader,\n  PageResourceStatus,\n  getStaticQueryResults,\n  getSliceResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\nimport { reactDOMUtils } from \"./react-dom-utils\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nconst { render, hydrate } = reactDOMUtils()\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\nconst reloadStorageKey = `gatsby-reload-compilation-hash-match`\n\napiRunnerAsync(`onClientEntry`).then(() => {\n  // Let plugins register a service worker. The plugin just needs\n  // to return true.\n  if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n    require(`./register-service-worker`)\n  }\n\n  // In gatsby v2 if Router is used in page using matchPaths\n  // paths need to contain full path.\n  // For example:\n  //   - page have `/app/*` matchPath\n  //   - inside template user needs to use `/app/xyz` as path\n  // Resetting `basepath`/`baseuri` keeps current behaviour\n  // to not introduce breaking change.\n  // Remove this in v3\n  const RouteHandler = props => (\n    <BaseContext.Provider\n      value={{\n        baseuri: `/`,\n        basepath: `/`,\n      }}\n    >\n      <PageRenderer {...props} />\n    </BaseContext.Provider>\n  )\n\n  const DataContext = React.createContext({})\n\n  const slicesContext = {\n    renderEnvironment: `browser`,\n  }\n\n  class GatsbyRoot extends React.Component {\n    render() {\n      const { children } = this.props\n      return (\n        <Location>\n          {({ location }) => (\n            <EnsureResources location={location}>\n              {({ pageResources, location }) => {\n                const staticQueryResults = getStaticQueryResults()\n                const sliceResults = getSliceResults()\n\n                return (\n                  <StaticQueryContext.Provider value={staticQueryResults}>\n                    <SlicesContext.Provider value={slicesContext}>\n                      <SlicesResultsContext.Provider value={sliceResults}>\n                        <SlicesMapContext.Provider\n                          value={pageResources.page.slicesMap}\n                        >\n                          <DataContext.Provider\n                            value={{ pageResources, location }}\n                          >\n                            {children}\n                          </DataContext.Provider>\n                        </SlicesMapContext.Provider>\n                      </SlicesResultsContext.Provider>\n                    </SlicesContext.Provider>\n                  </StaticQueryContext.Provider>\n                )\n              }}\n            </EnsureResources>\n          )}\n        </Location>\n      )\n    }\n  }\n\n  class LocationHandler extends React.Component {\n    render() {\n      return (\n        <DataContext.Consumer>\n          {({ pageResources, location }) => (\n            <RouteUpdates location={location}>\n              <ScrollContext\n                location={location}\n                shouldUpdateScroll={shouldUpdateScroll}\n              >\n                <Router\n                  basepath={__BASE_PATH__}\n                  location={location}\n                  id=\"gatsby-focus-wrapper\"\n                >\n                  <RouteHandler\n                    path={\n                      pageResources.page.path === `/404.html` ||\n                      pageResources.page.path === `/500.html`\n                        ? stripPrefix(location.pathname, __BASE_PATH__)\n                        : encodeURI(\n                            (\n                              pageResources.page.matchPath ||\n                              pageResources.page.path\n                            ).split(`?`)[0]\n                          )\n                    }\n                    {...this.props}\n                    location={location}\n                    pageResources={pageResources}\n                    {...pageResources.json}\n                  />\n                </Router>\n              </ScrollContext>\n            </RouteUpdates>\n          )}\n        </DataContext.Consumer>\n      )\n    }\n  }\n\n  const { pagePath, location: browserLoc } = window\n\n  // Explicitly call navigate if the canonical path (window.pagePath)\n  // is different to the browser path (window.location.pathname). SSR\n  // page paths might include search params, while SSG and DSG won't.\n  // If page path include search params we also compare query params.\n  // But only if NONE of the following conditions hold:\n  //\n  // - The url matches a client side route (page.matchPath)\n  // - it's a 404 page\n  // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n  if (\n    pagePath &&\n    __BASE_PATH__ + pagePath !==\n      browserLoc.pathname + (pagePath.includes(`?`) ? browserLoc.search : ``) &&\n    !(\n      loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n      pagePath.match(/^\\/(404|500)(\\/?|.html)$/) ||\n      pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n    )\n  ) {\n    navigate(\n      __BASE_PATH__ +\n        pagePath +\n        (!pagePath.includes(`?`) ? browserLoc.search : ``) +\n        browserLoc.hash,\n      {\n        replace: true,\n      }\n    )\n  }\n\n  // It's possible that sessionStorage can throw an exception if access is not granted, see https://github.com/gatsbyjs/gatsby/issues/34512\n  const getSessionStorage = () => {\n    try {\n      return sessionStorage\n    } catch {\n      return null\n    }\n  }\n\n  publicLoader.loadPage(browserLoc.pathname + browserLoc.search).then(page => {\n    const sessionStorage = getSessionStorage()\n\n    if (\n      page?.page?.webpackCompilationHash &&\n      page.page.webpackCompilationHash !== window.___webpackCompilationHash\n    ) {\n      // Purge plugin-offline cache\n      if (\n        `serviceWorker` in navigator &&\n        navigator.serviceWorker.controller !== null &&\n        navigator.serviceWorker.controller.state === `activated`\n      ) {\n        navigator.serviceWorker.controller.postMessage({\n          gatsbyApi: `clearPathResources`,\n        })\n      }\n\n      // We have not matching html + js (inlined `window.___webpackCompilationHash`)\n      // with our data (coming from `app-data.json` file). This can cause issues such as\n      // errors trying to load static queries (as list of static queries is inside `page-data`\n      // which might not match to currently loaded `.js` scripts).\n      // We are making attempt to reload if hashes don't match, but we also have to handle case\n      // when reload doesn't fix it (possibly broken deploy) so we don't end up in infinite reload loop\n      if (sessionStorage) {\n        const isReloaded = sessionStorage.getItem(reloadStorageKey) === `1`\n\n        if (!isReloaded) {\n          sessionStorage.setItem(reloadStorageKey, `1`)\n          window.location.reload(true)\n          return\n        }\n      }\n    }\n\n    if (sessionStorage) {\n      sessionStorage.removeItem(reloadStorageKey)\n    }\n\n    if (!page || page.status === PageResourceStatus.Error) {\n      const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n      // if the chunk throws an error we want to capture the real error\n      // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n      if (page && page.error) {\n        console.error(message)\n        throw page.error\n      }\n\n      throw new Error(message)\n    }\n\n    const SiteRoot = apiRunner(\n      `wrapRootElement`,\n      { element: <LocationHandler /> },\n      <LocationHandler />,\n      ({ result }) => {\n        return { element: result }\n      }\n    ).pop()\n\n    const App = function App() {\n      const onClientEntryRanRef = React.useRef(false)\n\n      React.useEffect(() => {\n        if (!onClientEntryRanRef.current) {\n          onClientEntryRanRef.current = true\n          if (performance.mark) {\n            performance.mark(`onInitialClientRender`)\n          }\n\n          apiRunner(`onInitialClientRender`)\n        }\n      }, [])\n\n      return <GatsbyRoot>{SiteRoot}</GatsbyRoot>\n    }\n\n    const focusEl = document.getElementById(`gatsby-focus-wrapper`)\n\n    // Client only pages have any empty body so we just do a normal\n    // render to avoid React complaining about hydration mis-matches.\n    let defaultRenderer = render\n    if (focusEl && focusEl.children.length) {\n      defaultRenderer = hydrate\n    }\n\n    const renderer = apiRunner(\n      `replaceHydrateFunction`,\n      undefined,\n      defaultRenderer\n    )[0]\n\n    function runRender() {\n      const rootElement =\n        typeof window !== `undefined`\n          ? document.getElementById(`___gatsby`)\n          : null\n\n      renderer(<App />, rootElement)\n    }\n\n    // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n    // TODO remove IE 10 support\n    const doc = document\n    if (\n      doc.readyState === `complete` ||\n      (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n    ) {\n      setTimeout(function () {\n        runRender()\n      }, 0)\n    } else {\n      const handler = function () {\n        doc.removeEventListener(`DOMContentLoaded`, handler, false)\n        window.removeEventListener(`load`, handler, false)\n\n        runRender()\n      }\n\n      doc.addEventListener(`DOMContentLoaded`, handler, false)\n      window.addEventListener(`load`, handler, false)\n    }\n\n    return\n  })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n  const pageResources = loader.loadPageSync(location.pathname)\n  if (!pageResources) {\n    return null\n  }\n  return React.createElement(InternalPageRenderer, {\n    location,\n    pageResources,\n    ...pageResources.json,\n  })\n}\n\nProdPageRenderer.propTypes = {\n  location: PropTypes.shape({\n    pathname: PropTypes.string.isRequired,\n  }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n  module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n  module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n  module.exports = () => null\n}\n","const map = new WeakMap()\n\nexport function reactDOMUtils() {\n  const reactDomClient = require(`react-dom/client`)\n\n  const render = (Component, el) => {\n    let root = map.get(el)\n    if (!root) {\n      map.set(el, (root = reactDomClient.createRoot(el)))\n    }\n    root.render(Component)\n  }\n\n  const hydrate = (Component, el) => reactDomClient.hydrateRoot(el, Component)\n\n  return { render, hydrate }\n}\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n  if (redirect.ignoreCase) {\n    redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n  } else {\n    redirectMap.set(redirect.fromPath, redirect)\n  }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n  let redirect = redirectMap.get(pathname)\n  if (!redirect) {\n    redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n  }\n  return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n  window.location.protocol !== `https:` &&\n  window.location.hostname !== `localhost`\n) {\n  console.error(\n    `Service workers can only be used over HTTPS, or on localhost for development`\n  )\n} else if (`serviceWorker` in navigator) {\n  navigator.serviceWorker\n    .register(`${__BASE_PATH__}/sw.js`)\n    .then(function (reg) {\n      reg.addEventListener(`updatefound`, () => {\n        apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n        // The updatefound event implies that reg.installing is set; see\n        // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n        const installingWorker = reg.installing\n        console.log(`installingWorker`, installingWorker)\n        installingWorker.addEventListener(`statechange`, () => {\n          switch (installingWorker.state) {\n            case `installed`:\n              if (navigator.serviceWorker.controller) {\n                // At this point, the old content will have been purged and the fresh content will\n                // have been added to the cache.\n\n                // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n                window.___swUpdated = true\n                // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n                apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n                // If resources failed for the current page, reload.\n                if (window.___failedResources) {\n                  console.log(`resources failed, SW updated - reloading`)\n                  window.location.reload()\n                }\n              } else {\n                // At this point, everything has been precached.\n                // It's the perfect time to display a \"Content is cached for offline use.\" message.\n                console.log(`Content is now available offline!`)\n\n                // Post to service worker that install is complete.\n                // Delay to allow time for the event listener to be added --\n                // otherwise fetch is called too soon and resources aren't cached.\n                apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n              }\n              break\n\n            case `redundant`:\n              console.error(`The installing service worker became redundant.`)\n              apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n              break\n\n            case `activated`:\n              apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n              break\n          }\n        })\n      })\n    })\n    .catch(function (e) {\n      console.error(`Error during service worker registration:`, e)\n    })\n}\n","import React from \"react\"\n\nconst SlicesResultsContext = React.createContext({})\nconst SlicesContext = React.createContext({})\nconst SlicesMapContext = React.createContext({})\nconst SlicesPropsContext = React.createContext({})\n\nexport {\n  SlicesResultsContext,\n  SlicesContext,\n  SlicesMapContext,\n  SlicesPropsContext,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport { createServerOrClientContext } from \"./context-utils\"\n\nconst StaticQueryContext = createServerOrClientContext(`StaticQuery`, {})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n  const finalData = data\n    ? data.data\n    : staticQueryData[query] && staticQueryData[query].data\n\n  return (\n    <React.Fragment>\n      {finalData && render(finalData)}\n      {!finalData && <div>Loading (StaticQuery)</div>}\n    </React.Fragment>\n  )\n}\n\nlet warnedAboutStaticQuery = false\n\n// TODO(v6): Remove completely\nconst StaticQuery = props => {\n  const { data, query, render, children } = props\n\n  if (process.env.NODE_ENV === `development` && !warnedAboutStaticQuery) {\n    console.warn(\n      `The <StaticQuery /> component is deprecated and will be removed in Gatsby v6. Use useStaticQuery instead. Refer to the migration guide for more information: https://gatsby.dev/migrating-4-to-5/#staticquery--is-deprecated`\n    )\n    warnedAboutStaticQuery = true\n  }\n\n  return (\n    <StaticQueryContext.Consumer>\n      {staticQueryData => (\n        <StaticQueryDataRenderer\n          data={data}\n          query={query}\n          render={render || children}\n          staticQueryData={staticQueryData}\n        />\n      )}\n    </StaticQueryContext.Consumer>\n  )\n}\n\nStaticQuery.propTypes = {\n  data: PropTypes.object,\n  query: PropTypes.string.isRequired,\n  render: PropTypes.func,\n  children: PropTypes.func,\n}\n\nconst useStaticQuery = query => {\n  if (\n    typeof React.useContext !== `function` &&\n    process.env.NODE_ENV === `development`\n  ) {\n    // TODO(v5): Remove since we require React >= 18\n    throw new Error(\n      `You're likely using a version of React that doesn't support Hooks\\n` +\n        `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n    )\n  }\n\n  const context = React.useContext(StaticQueryContext)\n\n  // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n  // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n  // catch the misuse of the API and give proper direction\n  if (isNaN(Number(query))) {\n    throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n  }\n\n  if (context[query]?.data) {\n    return context[query].data\n  } else {\n    throw new Error(\n      `The result of this StaticQuery could not be fetched.\\n\\n` +\n        `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n        `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n    )\n  }\n}\n\nexport { StaticQuery, StaticQueryContext, useStaticQuery }\n","import React from \"react\"\n\n// Ensure serverContext is not created more than once as React will throw when creating it more than once\n// https://github.com/facebook/react/blob/dd2d6522754f52c70d02c51db25eb7cbd5d1c8eb/packages/react/src/ReactServerContext.js#L101\nconst createServerContext = (name, defaultValue = null) => {\n  /* eslint-disable no-undef */\n  if (!globalThis.__SERVER_CONTEXT) {\n    globalThis.__SERVER_CONTEXT = {}\n  }\n\n  if (!globalThis.__SERVER_CONTEXT[name]) {\n    globalThis.__SERVER_CONTEXT[name] = React.createServerContext(\n      name,\n      defaultValue\n    )\n  }\n\n  return globalThis.__SERVER_CONTEXT[name]\n}\n\nfunction createServerOrClientContext(name, defaultValue) {\n  if (React.createServerContext) {\n    return createServerContext(name, defaultValue)\n  }\n\n  return React.createContext(defaultValue)\n}\n\nexport { createServerOrClientContext }\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n  if (!prefix) {\n    return str\n  }\n\n  if (str === prefix) {\n    return `/`\n  }\n\n  if (str.startsWith(`${prefix}/`)) {\n    return str.slice(prefix.length)\n  }\n\n  return str\n}\n","export const onRouteUpdate = ({\n  location\n}, pluginOptions = {\n  stripQueryString: false\n}) => {\n  const domElem = document.querySelector(`link[rel='canonical']`);\n  const existingValue = domElem.getAttribute(`href`);\n  const baseProtocol = domElem.getAttribute(`data-baseProtocol`);\n  const baseHost = domElem.getAttribute(`data-baseHost`);\n  if (existingValue && baseProtocol && baseHost) {\n    let value = `${baseProtocol}//${baseHost}${location.pathname}`;\n    const {\n      stripQueryString\n    } = pluginOptions;\n    if (!stripQueryString) {\n      value += location.search;\n    }\n    value += location.hash;\n    domElem.setAttribute(`href`, `${value}`);\n  }\n};","\"use strict\";\n\nexports.wrapPageElement = require(\"./wrap-page\");","\"use strict\";\n\nvar React = require(\"react\");\nvar preferDefault = function preferDefault(m) {\n  return m && m.default || m;\n};\nvar Layout;\ntry {\n  Layout = preferDefault(require(GATSBY_LAYOUT_COMPONENT_PATH));\n} catch (e) {\n  if (e.toString().indexOf(\"Error: Cannot find module\") !== -1) {\n    throw new Error(\"Couldn't find layout component at \\\"\" + GATSBY_LAYOUT_COMPONENT_PATH + \".\\n\\n\" + \"Please create layout component in that location or specify path to layout component in gatsby-config.js\");\n  } else {\n    // Logging the error for debugging older browsers as there is no way\n    // to wrap the thrown error in a try/catch.\n    console.error(e);\n    throw e;\n  }\n}\n\n// eslint-disable-next-line react/prop-types,react/display-name\nmodule.exports = function (_ref) {\n  var element = _ref.element,\n    props = _ref.props;\n  return /*#__PURE__*/React.createElement(Layout, props, element);\n};","/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\nimport { withPrefix } from \"gatsby\";\nimport getManifestForPathname from \"./get-manifest-pathname\";\n\n// when we don't have localisation in our manifest, we tree shake everything away\nexport const onRouteUpdate = function onRouteUpdate({\n  location\n}, pluginOptions) {\n  if (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n    const {\n      localize\n    } = pluginOptions;\n    const manifestFilename = getManifestForPathname(location.pathname, localize, true);\n    const manifestEl = document.head.querySelector(`link[rel=\"manifest\"]`);\n    if (manifestEl) {\n      manifestEl.setAttribute(`href`, withPrefix(manifestFilename));\n    }\n  }\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\nvar _gatsby = require(\"gatsby\");\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @param {boolean} shouldPrependPathPrefix\n * @return string\n */\nvar _default = (pathname, localizedManifests, shouldPrependPathPrefix = false) => {\n  const defaultFilename = `manifest.webmanifest`;\n  if (!Array.isArray(localizedManifests)) {\n    return defaultFilename;\n  }\n  const localizedManifest = localizedManifests.find(app => {\n    let startUrl = app.start_url;\n    if (shouldPrependPathPrefix) {\n      startUrl = (0, _gatsby.withPrefix)(startUrl);\n    }\n    return pathname.startsWith(startUrl);\n  });\n  if (!localizedManifest) {\n    return defaultFilename;\n  }\n  return `manifest_${localizedManifest.lang}.webmanifest`;\n};\nexports.default = _default;","\"use strict\";\n\nexports.DEFAULT_OPTIONS = {\n  maxWidth: 650,\n  wrapperStyle: \"\",\n  backgroundColor: \"white\",\n  linkImagesToOriginal: true,\n  showCaptions: false,\n  markdownCaptions: false,\n  withWebp: false,\n  withAvif: false,\n  tracedSVG: false,\n  loading: \"lazy\",\n  decoding: \"async\",\n  disableBgImageOnAlpha: false,\n  disableBgImage: false\n};\nexports.EMPTY_ALT = \"GATSBY_EMPTY_ALT\";\nexports.imageClass = \"gatsby-resp-image-image\";\nexports.imageWrapperClass = \"gatsby-resp-image-wrapper\";\nexports.imageBackgroundClass = \"gatsby-resp-image-background-image\";","\"use strict\";\n\nvar _require = require(\"./constants\"),\n  DEFAULT_OPTIONS = _require.DEFAULT_OPTIONS,\n  imageClass = _require.imageClass,\n  imageBackgroundClass = _require.imageBackgroundClass,\n  imageWrapperClass = _require.imageWrapperClass;\nexports.onRouteUpdate = function (apiCallbackContext, pluginOptions) {\n  var options = Object.assign({}, DEFAULT_OPTIONS, pluginOptions);\n  var imageWrappers = document.querySelectorAll(\".\" + imageWrapperClass);\n\n  // https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\n  // for cross-browser looping through NodeList without polyfills\n  var _loop = function _loop() {\n    var imageWrapper = imageWrappers[i];\n    var backgroundElement = imageWrapper.querySelector(\".\" + imageBackgroundClass);\n    var imageElement = imageWrapper.querySelector(\".\" + imageClass);\n    var onImageLoad = function onImageLoad() {\n      backgroundElement.style.transition = \"opacity 0.5s 0.5s\";\n      imageElement.style.transition = \"opacity 0.5s\";\n      onImageComplete();\n    };\n    var onImageComplete = function onImageComplete() {\n      backgroundElement.style.opacity = 0;\n      imageElement.style.opacity = 1;\n      imageElement.style.color = \"inherit\";\n      imageElement.style.boxShadow = \"inset 0px 0px 0px 400px \" + options.backgroundColor;\n      imageElement.removeEventListener(\"load\", onImageLoad);\n      imageElement.removeEventListener(\"error\", onImageComplete);\n    };\n    imageElement.style.opacity = 0;\n    imageElement.addEventListener(\"load\", onImageLoad);\n    imageElement.addEventListener(\"error\", onImageComplete);\n    if (imageElement.complete) {\n      onImageComplete();\n    }\n  };\n  for (var i = 0; i < imageWrappers.length; i++) {\n    _loop();\n  }\n};","const printWarning = (format, ...args) => {\n    let argIndex = 0;\n    const message = `Warning: ${format.replace(/%s/g, () => args[argIndex++])}`; // eslint-disable-line no-plusplus\n    if (typeof console !== 'undefined') {\n        console.error(message); // eslint-disable-line no-console\n    }\n    try {\n        throw new Error(message);\n    } catch (x) {} // eslint-disable-line no-empty\n};\n\nconst warning = process.env.NODE_ENV !== 'production'\n    ? (condition, format, ...args) => {\n        if (format === undefined) {\n            throw new Error('`warning(condition, format, ...args)` requires a warning message argument');\n        }\n        if (!condition) {\n            printWarning(format, ...args);\n        }\n    }\n    : () => {};\n\nexport default warning;\n","import classnames from 'classnames';\nimport React from 'react';\n\nimport Link from '../Link';\n\nimport PropTypes from '../../utils/PropTypes';\nimport warning from '../../utils/warning';\n\nconst propTypes = {\n    children: PropTypes.node,\n    className: PropTypes.string,\n    theme: PropTypes.oneOf(['default', 'alt']),\n    variant: PropTypes.oneOf(['default', 'reset', 'primary', 'secondary', 'accent']),\n    size: PropTypes.oneOf(['default', 'reset', 'sm', 'md', 'lg']),\n    submit: PropTypes.bool,\n    onClick: PropTypes.func,\n    to: PropTypes.string,\n};\n\nconst defaultProps = {\n    children: null,\n    className: null,\n    theme: 'default',\n    variant: 'default',\n    size: 'default',\n    submit: false,\n    onClick: null,\n    to: null,\n};\n\nconst Button = ({\n    children,\n    className,\n    onClick,\n    submit,\n    theme,\n    variant,\n    size,\n    to,\n    ...rest\n}) => {\n    const buttonClassName = classnames(\n        className,\n        'group font-body font-bold leading-none inline-flex antialiased select-none transition-all duration-200 no-underline',\n        {\n            'bg-transparent': variant === 'default' && variant === 'reset',\n            'btn-primary': theme === 'default' && variant === 'primary',\n            'btn-secondary': theme === 'default' && variant === 'secondary',\n            'btn-accent': theme === 'default' && variant === 'accent',\n            'btn-primary-alt': theme === 'alt' && variant === 'primary',\n            'btn-secondary-alt': theme === 'alt' && variant === 'secondary',\n            'btn-accent-alt': theme === 'alt' && variant === 'accent',\n            'px-0 py-0': size === 'reset',\n            'px-4 py-2 text-sm': size === 'sm',\n            'px-8 py-4 text-base': size === 'md',\n            'px-8 py-6 text-lg': size === 'lg',\n        },\n    );\n\n    warning(\n        !(submit && onClick),\n        'You provide onClick to a submit button. Please remove onClick handler or submit attribute',\n    );\n\n    if (submit) {\n        return (\n            <button type=\"submit\" className={buttonClassName}>\n                {children}\n            </button>\n        );\n    }\n\n    if (to) {\n        return (\n            <Link href={to} className={buttonClassName} {...rest} button>\n                {children}\n            </Link>\n        );\n    }\n\n    return (\n        <button type=\"button\" onClick={onClick} className={buttonClassName}>\n            {children}\n        </button>\n    );\n};\n\nButton.propTypes = propTypes;\nButton.defaultProps = defaultProps;\n\nexport default Button;\n","const isInternalLink = (link) => {\n  const whiteList = [\n    'plusmeta.de',\n    'www.plusmeta.de',\n    'blog.plusmeta.de',\n    'help.plusmeta.de',\n    'iirds-ot.plusmeta.de',\n  ];\n\n  let isWhiteListed = false;\n\n  whiteList.forEach((domain) => {\n    if (link.includes(domain)) {\n      isWhiteListed = true;\n    }\n  });\n\n  if (isWhiteListed) {\n    return isWhiteListed;\n  }\n\n  return !(new RegExp(/^[a-zA-Z]+:(?!(\\/\\/(www\\.)?plusmeta.de))/)).test(link);\n};\n\nexport default isInternalLink;\n","import classnames from 'classnames';\nimport { Link as GatsbyLink } from 'gatsby';\nimport React from 'react';\nimport isInternalLink from '../../utils/isInternalLink';\nimport PropTypes from '../../utils/PropTypes';\n\nconst propTypes = {\n    className: PropTypes.string,\n    activeClassName: PropTypes.string,\n    children: PropTypes.node,\n    partiallyActive: PropTypes.bool,\n    href: PropTypes.string.isRequired,\n    button: PropTypes.bool,\n};\n\nconst defaultProps = {\n    activeClassName: null,\n    children: null,\n    className: null,\n    partiallyActive: false,\n    button: false,\n};\n\nconst FILE_LINK_PATTERN = /\\.[0-9a-z]+$/i;\nconst UNDERLINE_CLASS_PATTERN = /(^|\\s)underline-\\S+/;\nconst DECORATION_CLASS_PATTERN = /(^|\\s)decoration-((?!(slice|clone))\\S)+/;\n\nconst Link = ({\n    activeClassName,\n    children,\n    className,\n    partiallyActive,\n    href,\n    button,\n    ...rest\n}) => {\n    const classNames = classnames(\n        className,\n        {\n            underline: !(className && className.includes('no-underline')),\n            'decoration-font': !DECORATION_CLASS_PATTERN.test(className),\n            'underline-widest': !UNDERLINE_CLASS_PATTERN.test(className),\n            'hover:opacity-80 duration-300': !button,\n        },\n    );\n\n    if (!isInternalLink(href)) {\n        return (\n            <a href={href} target=\"_blank\" rel=\"noopener noreferrer nofollow\" className={classNames} {...rest}>\n                {children}\n            </a>\n        );\n    }\n\n    if (FILE_LINK_PATTERN.test(href)) {\n        return (\n            <a href={href} className={classNames} {...rest}>\n                {children}\n            </a>\n        );\n    }\n\n    return (\n        <GatsbyLink\n            to={href}\n            activeClassName={activeClassName}\n            className={classNames}\n            partiallyActive={partiallyActive}\n            {...rest}\n        >\n            {children}\n        </GatsbyLink>\n    );\n};\n\nLink.propTypes = propTypes;\nLink.defaultProps = defaultProps;\n\nexport default Link;\n","import React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\n\nconst useNavigation = (globalLocale) => {\n  const data = useStaticQuery(graphql`\n    query {\n      navs: allNavigationYaml {\n        nodes {\n          de\n          en\n        }\n      }\n    }\n  `);\n\n  const enKeys = {};\n  const deKeys = {};\n\n  data.navs.nodes.forEach((nav) => {\n    deKeys[nav.de] = nav.en;\n    enKeys[nav.en] = nav.de;\n  });\n\n  const getLink = (link, locale = 'de') => {\n    let linkLocale = globalLocale || locale;\n\n    if (deKeys[link] && linkLocale === 'en') {\n      return deKeys[link];\n    }\n\n    if (enKeys[link] && linkLocale === 'de') {\n      return enKeys[link];\n    }\n\n    if (link.includes('/blog/') && linkLocale === 'en') {\n      return deKeys['/blog/'];\n    }\n\n    return link;\n  };\n\n  return { getLink };\n};\n\nexport default useNavigation;\n","import React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\n\nconst useTranslation = (scope, locale) => {\n  const locales = useStaticQuery(graphql`\n    query {\n      en: allLocale(filter: {lang: {eq: \"en\"}}) {\n        nodes {\n          name\n          content\n        }\n      }\n      de: allLocale(filter: {lang: {eq: \"de\"}}) {\n        nodes {\n          name\n          content\n        }\n      }\n    }\n  `);\n\n  const findTranslations = (scope) => {\n    return JSON.parse(locales[locale].nodes.find((l) => l.name === scope).content);\n  }\n\n  const t = (copy) => {\n    let translations = findTranslations(scope);\n\n    return translations[copy] ? translations[copy] : copy;\n  };\n\n  return { t };\n};\n\nexport default useTranslation;\n","/**\n * Thankfully borrowed from material ui\n */\nimport React from 'react';\n\nexport default function useMediaQuery(queryInput, options = {}) {\n    const query = queryInput.replace(/^@media( ?)/m, '');\n\n    // Wait for jsdom to support the match media feature.\n    // All the browsers Material-UI support have this built-in.\n    // This defensive check is here for simplicity.\n    // Most of the time, the match media logic isn't central to people tests.\n    const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n\n    const {\n        defaultMatches = false,\n        matchMedia = supportMatchMedia ? window.matchMedia : null,\n        noSsr = false,\n        ssrMatchMedia = null,\n    } = {\n        ...options,\n    };\n\n    const [match, setMatch] = React.useState(() => {\n        if (noSsr && supportMatchMedia) {\n            return matchMedia(query).matches;\n        }\n        if (ssrMatchMedia) {\n            return ssrMatchMedia(query).matches;\n        }\n\n        // Once the component is mounted, we rely on the\n        // event listeners to return the correct matches value.\n        return defaultMatches;\n    });\n\n    React.useEffect(() => {\n        let active = true;\n\n        if (!supportMatchMedia) {\n            return undefined;\n        }\n\n        const queryList = matchMedia(query);\n        const updateMatch = () => {\n            // Workaround Safari wrong implementation of matchMedia\n            // TODO can we remove it?\n            // https://github.com/mui-org/material-ui/pull/17315#issuecomment-528286677\n            if (active) {\n                setMatch(queryList.matches);\n            }\n        };\n        updateMatch();\n        queryList.addListener(updateMatch);\n        return () => {\n            active = false;\n            queryList.removeListener(updateMatch);\n        };\n    }, [query, matchMedia, supportMatchMedia]);\n\n    if (process.env.NODE_ENV !== 'production') {\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        React.useDebugValue({ query, match });\n    }\n\n    return match;\n}\n","import React, {\n    createContext,\n    useCallback,\n    useContext,\n    useEffect,\n    useReducer,\n} from 'react';\nimport useMediaQuery from '../hooks/useMediaQuery';\nimport PropTypes from '../utils/PropTypes';\n\nconst LayoutStateContext = createContext();\nexport const LayoutDispatchContext = createContext();\n\nfunction layoutReducer(state, action) {\n    switch (action.type) {\n        case 'openMenu': {\n            return { ...state, menuOpen: true };\n        }\n        case 'closeMenu': {\n            return { ...state, menuOpen: false };\n        }\n        case 'toggleMenu': {\n            return { ...state, menuOpen: !state.menuOpen };\n        }\n        case 'changeScreenSize': {\n            return {\n                ...state,\n                menuOpen: false,\n                isSmallScreen: action.payload.isSmallScreen,\n                isMediumScreen: action.payload.isMediumScreen,\n            };\n        }\n        case 'setLocale': {\n            return {\n                ...state,\n                locale: action.payload.locale,\n            }\n        }\n        default: {\n            throw new Error(`Unhandled action type: ${action.type}`);\n        }\n    }\n}\n\nconst useLayoutState = () => {\n    const state = useContext(LayoutStateContext);\n\n    if (state === undefined) {\n        throw new Error('useLayoutState must be used within a LayoutProvider');\n    }\n\n    return state;\n};\n\nconst useLayoutActions = () => {\n    const dispatch = useContext(LayoutDispatchContext);\n\n    if (dispatch === undefined) {\n        throw new Error('useLayoutActions must be used within a LayoutProvider');\n    }\n\n    return {\n        closeMenu: () => dispatch({ type: 'closeMenu' }),\n        openMenu: () => dispatch({ type: 'openMenu' }),\n        toggleMenu: () => dispatch({ type: 'toggleMenu' }),\n    };\n};\n\nconst useScrollTo = (targetRef, scrollOffset = -100) => {\n    const scrollTo = useCallback(() => {\n        if (!targetRef.current) {\n            return;\n        }\n\n        const element = targetRef.current;\n        const top = element.getBoundingClientRect().top + window.scrollY + scrollOffset;\n\n        window.scrollTo({ top, behavior: 'smooth' });\n    }, [targetRef, scrollOffset]);\n\n    return scrollTo;\n};\n\nconst LayoutProvider = ({ location, children }) => {\n    const [state, dispatch] = useReducer(layoutReducer, {\n        menuOpen: false,\n        isSmallScreen: false,\n        isMediumScreen: false,\n        locale: 'de',\n    });\n    const isSmallScreen = useMediaQuery('(max-width: 576px)');\n    const isMediumScreen = useMediaQuery('(max-width: 1023px)');\n\n    useEffect(() => {\n        dispatch({ type: 'changeScreenSize', payload: { isSmallScreen, isMediumScreen } });\n    }, [isSmallScreen, isMediumScreen]);\n\n    useEffect(() => {\n        if (location.pathname.includes('/en/')) {\n            dispatch({ type: 'setLocale', payload: { locale: 'en' } });\n        } else {\n            dispatch({ type: 'setLocale', payload: { locale: 'de' } });\n        }\n    }, [location.pathname])\n\n    return (\n        <LayoutDispatchContext.Provider value={dispatch}>\n            <LayoutStateContext.Provider value={state}>\n                {children}\n            </LayoutStateContext.Provider>\n        </LayoutDispatchContext.Provider>\n    );\n};\n\nLayoutProvider.propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.location.isRequired,\n};\nLayoutProvider.defaultProps = {\n    children: null,\n};\n\nconst LayoutConsumer = ({ children }) => {\n    const state = useLayoutState();\n    const actions = useLayoutActions();\n\n    return children({ ...state, ...actions });\n};\n\nLayoutConsumer.propTypes = { children: PropTypes.func.isRequired };\n\nexport {\n    LayoutConsumer,\n    LayoutProvider,\n    useLayoutActions,\n    useLayoutState,\n    useScrollTo,\n};\n","import classnames from 'classnames';\nimport React from 'react';\n\nconst MenuButton = ({ isActive, onClick }) => {\n  return (\n    <button type=\"button\" className=\"h-6 w-8 flex flex-col justify-between items-end relative\" onClick={onClick}>\n      <span className={classnames('bg-black w-3/4 h-0.5 transition-opacity duration-200', {\n          'opacity-0': isActive,\n        })}\n      />\n      <span className=\"h-0.5 w-full block relative\">\n        <span className={classnames('block bg-black w-full h-0.5 transition-transform origin-center absolute', {\n            'rotate-45': isActive,\n          })}\n        />\n        <span className={classnames('block bg-black w-full h-0.5 transition-transform origin-center absolute', {\n            '-rotate-45': isActive,\n          })}\n        />\n      </span>\n      <span className={classnames('bg-black w-5/6 h-0.5 transition-opacity duration-200', {\n          'opacity-0': isActive,\n        })}\n      />\n    </button>\n  );\n};\n\nexport default MenuButton;\n","import React from 'react';\nimport PropTypes from '../../../utils/PropTypes';\n\nconst propTypes = {\n    className: PropTypes.string,\n};\n\nconst defaultProps = {\n    className: 'h-6 w-6',\n};\n\nconst ChevronDownIcon = ({ className }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      className={className}\n    >\n      <path\n        d=\"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nChevronDownIcon.propTypes = propTypes;\nChevronDownIcon.defaultProps = defaultProps;\n\nexport default React.memo(ChevronDownIcon);\n","import React from 'react';\nimport ChevronDownIcon from '../icons/ChevronDownIcon';\nimport Link from '../Link';\n\nconst Nav = ({ children, className }) => {\n  return (\n    <div className={className}>\n      {children}\n    </div>\n  );\n};\n\nconst NavLink = ({ children, to, title }) => {\n  return (\n    <div className=\"group flex items-center relative\">\n      <Link\n        href={to}\n        className=\"typo-intro py-1 no-underline hover:text-indigo-500 mr-1\"\n      >\n        {title}\n      </Link>\n      {children}\n    </div>\n  );\n};\n\nconst NavDropdown = ({ children }) => {\n  return (\n    <>\n      <ChevronDownIcon className=\"text-gray-600 h-6 w-6\" />\n      <ul className=\"bg-white shadow-xl px-4 py-2 invisible min-w-[200px] opacity-0 group-hover:visible group-hover:opacity-100 absolute top-[100%] left-0\">\n        {children}\n      </ul>\n    </>\n  );\n};\n\nconst NavDropdownLink = ({ children, to }) => {\n  return (\n    <li>\n      <Link href={to} className=\"typo-body no-underline hover:underline hover:text-indigo-500\">\n        {children}\n      </Link>\n    </li>\n  );\n};\n\nNav.Link = NavLink;\nNav.Dropdown = NavDropdown;\nNav.DropdownLink = NavDropdownLink;\n\nexport default Nav;\n","import React from 'react';\nimport Link from '../Link';\nimport { useLayoutActions } from '../../layout/Context';\n\nconst NavButton = ({ children, to }) => {\n  const { closeMenu } = useLayoutActions();\n\n  return (\n    <Link\n      onClick={closeMenu}\n      className=\"block group typo-intro antialiased select-none py-4 no-underline w-full relative text-left\"\n      href={to}\n    >\n      {children}\n    </Link>\n  );\n};\n\nexport default NavButton;\n","import classnames from 'classnames';\nimport React, { useEffect } from 'react';\n\nimport Link from '../Link';\n\nimport { useLayoutState } from '../../layout/Context';\nimport useNavigation from '../../hooks/useNavigation';\n\nconst LocaleNavigation = ({ location }) => {\n  const { locale } = useLayoutState();\n  const { getLink } = useNavigation();\n\n  return (\n    <div className=\"flex\">\n      <Link\n        href={getLink(location.pathname, 'de')}\n        className={classnames('typo-intro no-underline uppercase', {\n          'text-indigo-500': locale === 'de',\n          'hover:text-indigo-500': locale !== 'de',\n        })}\n      >\n        De\n      </Link>\n      <span className=\"block bg-gray-600 w-px my-2 mx-2\" />\n      <Link\n        href={getLink(location.pathname, 'en')}\n        className={classnames('typo-intro no-underline uppercase', {\n          'text-indigo-500': locale === 'en',\n          'hover:text-indigo-500': locale !== 'en',\n        })}\n      >\n        En\n      </Link>\n    </div>\n  );\n};\n\nexport default LocaleNavigation;\n","import classnames from 'classnames';\nimport React from 'react';\n\nimport ChevronDownIcon from '../icons/ChevronDownIcon';\n\nconst ToggleIcon = ({ isActive, onClick }) => {\n  return (\n    <i className={classnames('bg-indigo-500 text-white rounded-sm block h-8 w-8 relative ',\n      {\n        'rotate-180': isActive,\n      })}\n      onClick={onClick}\n    >\n      <ChevronDownIcon className=\"h-8 w-8\" />\n    </i>\n  );\n};\n\nexport default ToggleIcon;\n","import { motion, AnimatePresence } from 'framer-motion';\nimport React from 'react';\n\nimport NavButton from '../NavButton';\n\nconst groupVariants = {\n  enter: { opacity: 1 },\n  idle: { opacity: 1, transition: { staggerChildren: 0.07 } },\n  exit: { opacity: 0 },\n};\n\nconst itemVariants = {\n    enter: { opacity: 0, x: '5%' },\n    idle: { opacity: 1, x: 0 },\n    exit: { opacity: 0 },\n};\n\nconst Submenu = ({ children, isActive }) => {\n  const items = React.Children.toArray(children);\n\n  return (\n    <AnimatePresence>\n      {isActive && (\n        <motion.ul\n          className=\"pl-4 divide-y\"\n          variants={groupVariants}\n          initial=\"enter\"\n          animate=\"idle\"\n          exit=\"exit\"\n        >\n          {items.map((item, i) => (\n            <motion.li\n              key={i}\n              variants={itemVariants}\n            >\n              {item}\n            </motion.li>\n          ))}\n        </motion.ul>\n      )}\n    </AnimatePresence>\n  );\n};\n\nconst Item = ({ children, to }) => {\n  return (\n    <NavButton to={to}>\n      {children}\n    </NavButton>\n  );\n};\n\nSubmenu.Item = Item;\n\nexport default Submenu;\n","export default \"data:image/png;base64,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\"","import classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport Button from '../components/Button';\nimport Link from '../components/Link';\nimport MenuButton from '../components/MenuButton';\nimport Nav from '../components/Nav';\nimport NavButton from '../components/NavButton';\nimport LocaleSwitch from '../components/LocaleSwitch';\nimport ToggleIcon from '../components/ToggleIcon';\nimport Submenu from '../components/Submenu';\n\nimport { useLayoutActions, useLayoutState } from './Context';\n\nimport LogoImageSrc from '../images/logo.png';\nimport ClockImageSrc from '../images/visuals/plusmeta-spart-zeit-mit-hilfe-von-ki.svg';\n\nimport useNavigation from '../hooks/useNavigation';\nimport useTranslation from '../hooks/useTranslation';\n\nimport whenKey from '../utils/whenKey';\n\nconst Header = ({ location }) => {\n  const { menuOpen, locale } = useLayoutState();\n  const { toggleMenu } = useLayoutActions();\n  const { getLink } = useNavigation(locale);\n  const { t } = useTranslation('navigation', locale);\n\n  const [ activeNav, setActiveNav ] = useState(null);\n\n  const toggleNav = (value) => {\n    if (activeNav === value) {\n      setActiveNav(null);\n    } else {\n      setActiveNav(value);\n    }\n  };\n\n  const isActiveNav = (value) => {\n    return activeNav === value;\n  };\n\n  return (\n    <>\n      <header className=\"fixed z-10 inset-x-0 top-0 bg-white bg-opacity-90\">\n        <div className=\"container-xl flex flex-wrap items-center justify-between w-full h-16 md:h-24\">\n          <div className=\"lg:w-1/4\">\n            <Link href={getLink('/')} className=\"block uppercase\">\n              <img src={LogoImageSrc} alt=\"Logo\" className=\"h-10\" />\n            </Link>\n          </div>\n          <div className=\"lg:w-3/4\">\n            <Nav className=\"hidden lg:flex justify-between items-center\">\n              <Nav.Link to={getLink('/software/')} title={t('Software')}>\n                <Nav.Dropdown>\n                  {/*\n                  <Submenu.Item to={getLink('/software/#features')}>\n                    {t('Features')}\n                  </Submenu.Item>\n                  */}\n                  <Nav.DropdownLink to={getLink('/software/#integrationen')}>\n                    {t('Integrationen')}\n                  </Nav.DropdownLink>\n                  {/*\n                  <Submenu.Item to={getLink('/software/#editionen')}>\n                    {t('Editionen')}\n                  </Submenu.Item>\n                  */}\n                  <Nav.DropdownLink to={getLink('/software/#software')}>\n                    {t('Software')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/software/#plugins')}>\n                    {t('Plugins')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/software/#opensource')}>\n                    {t('Open Source')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/software/#datensicherheit')}>\n                    {t('Datensicherheit')}\n                  </Nav.DropdownLink>\n                </Nav.Dropdown>\n              </Nav.Link>\n              <Nav.Link to={getLink('/loesungen/')} title={t('Lösungen')}>\n                <Nav.Dropdown>\n                  <Nav.DropdownLink to={getLink('/loesungen/#ueberblick')}>\n                    {t('Überblick')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/loesungen/#plattform')}>\n                    {t('Plattform')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/loesungen/#unser-vorgehen')}>\n                    {t('Unser Vorgehen')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/loesungen/#standards')}>\n                    {t('Standards')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/vdi2770/')}>\n                    {t('VDI 2770')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/whitepapers/')}>\n                    {t('Whitepapers')}\n                  </Nav.DropdownLink>\n                </Nav.Dropdown>\n              </Nav.Link>\n              <Nav.Link to={getLink('/branchen/')} title={t('Branchen')}>\n                <Nav.Dropdown>\n                  <Nav.DropdownLink to={getLink('/branchen/#success-stories')}>\n                    {t('Success Stories')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/branchen/#kunden')}>\n                    {t('Kunden')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/branchen/#branchen')}>\n                    {t('Branchen')}\n                  </Nav.DropdownLink>\n                </Nav.Dropdown>\n              </Nav.Link>\n              <Nav.Link to={getLink('/unternehmen/')} title={t('Unternehmen')}>\n                <Nav.Dropdown>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#ueber-uns')}>\n                    {t('Über uns')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#team')}>\n                    {t('Unser Team')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#karriere')}>\n                    {t('Karriere')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#forschung')}>\n                    {t('Forschung')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#mitgliedschaften')}>\n                    {t('Mitgliedschaften')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#auszeichnungen')}>\n                    {t('Auszeichnungen')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/unternehmen/#partner')}>\n                    {t('Partner')}\n                  </Nav.DropdownLink>\n                </Nav.Dropdown>\n              </Nav.Link>\n              <Nav.Link to={getLink('/support/')} title={t('Support')}>\n                <Nav.Dropdown>\n                  <Nav.DropdownLink to={getLink('/support/#anwenderportal')}>\n                    {t('Anwenderportal')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/support/#schulungen')}>\n                    {t('Schulungen')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/support/#videos')}>\n                    {t('plusmeta-Videos')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/support/#dokumentation')}>\n                    {t('Dokumentation')}\n                  </Nav.DropdownLink>\n                  <Nav.DropdownLink to={getLink('/kontakt/')}>\n                    {t('Kontakt')}\n                  </Nav.DropdownLink>\n                </Nav.Dropdown>\n              </Nav.Link>\n              <Nav.Link to={getLink('/veranstaltungen/')} title={t('Events')} />\n              <Nav.Link to={getLink('/blog/')} title={t('Blog')} />\n              <LocaleSwitch location={location} />\n            </Nav>\n            <div className=\"lg:hidden\">\n              <div className=\"flex gap-x-8 items-center\">\n                <LocaleSwitch location={location} />\n                <MenuButton\n                  onClick={toggleMenu}\n                  isActive={menuOpen}\n                />\n              </div>\n            </div>\n          </div>\n        </div>\n      </header>\n      <div className={classnames('bg-black bg-opacity-30 fixed inset-0 z-10 transition-all duration-500', {\n          'invisible opacity-0': !menuOpen,\n          'visible opacity-100': menuOpen,\n        })}\n        onClick={() => { toggleMenu() }}\n        onKeyDown={whenKey(' ', () => { })}\n        role=\"presentation\"\n      />\n      <div className={classnames('max-w-full w-full sm:w-96 h-full bg-white fixed z-20 transition-all duration-500',\n        {\n          'invisible opacity-0 -right-full': !menuOpen,\n          'visible opacity-100 right-0': menuOpen,\n        },\n      )}\n      >\n        <div className=\"flex flex-col h-full\">\n          <div className=\"h-16 md:h-24 px-4 md:px-8 flex justify-between items-center\">\n            <Link href={getLink('/')} className=\"block uppercase\" onClick={toggleMenu}>\n              <img src={LogoImageSrc} alt=\"Logo\" className=\"h-8\" />\n            </Link>\n            <div className=\"flex gap-x-8 items-center\">\n              <LocaleSwitch location={location} />\n              <MenuButton\n                onClick={toggleMenu}\n                isActive={menuOpen}\n              />\n            </div>\n          </div>\n          <div className=\"flex-1 overflow-y-auto\">\n            <ul className=\"py-8 divide-y px-4 md:px-8\">\n              <li>\n                <div className=\"flex items-center\">\n                  <NavButton to={getLink('/software/')}>\n                    {t('Software')}\n                  </NavButton>\n                  <Button onClick={() => { toggleNav(0) }}>\n                    <ToggleIcon isActive={isActiveNav(0)} />\n                  </Button>\n                </div>\n                <Submenu isActive={isActiveNav(0)}>\n                  {/*\n                  <Submenu.Item to={getLink('/software/#features')}>\n                    {t('Features')}\n                  </Submenu.Item>\n                  */}\n                  <Submenu.Item to={getLink('/software/#integrationen')}>\n                    {t('Integrationen')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/software/#software')}>\n                    {t('Software')}\n                  </Submenu.Item>\n                  {/*\n                  <Submenu.Item to={getLink('/software/#editionen')}>\n                    {t('Editionen')}\n                  </Submenu.Item>\n                  */}\n                  <Submenu.Item to={getLink('/software/#plugins')}>\n                    {t('Plugins')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/software/#opensource')}>\n                    {t('Open Source')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/software/#datensicherheit')}>\n                    {t('Datensicherheit')}\n                  </Submenu.Item>\n                </Submenu>\n              </li>\n              <li>\n                <div className=\"flex items-center\">\n                  <NavButton to={getLink('/loesungen/')}>\n                    {t('Lösungen')}\n                  </NavButton>\n                  <Button onClick={() => { toggleNav(1) }}>\n                    <ToggleIcon isActive={isActiveNav(1)} />\n                  </Button>\n                </div>\n                <Submenu isActive={isActiveNav(1)}>\n                  <Submenu.Item to={getLink('/loesungen/#ueberblick')}>\n                    {t('Überblick')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/loesungen/#unser-vorgehen')}>\n                    {t('Unser Vorgehen')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/loesungen/#standards')}>\n                    {t('Standards')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/vdi2770/')}>\n                    {t('VDI 2770')}\n                  </Submenu.Item>\n                </Submenu>\n              </li>\n              <li>\n                <div className=\"flex items-center\">\n                  <NavButton to={getLink('/branchen/')}>\n                    {t('Branchen')}\n                  </NavButton>\n                  <Button onClick={() => { toggleNav(2) }}>\n                    <ToggleIcon isActive={isActiveNav(2)} />\n                  </Button>\n                </div>\n                <Submenu isActive={isActiveNav(2)}>\n                  <Submenu.Item to={getLink('/branchen/#successstories')}>\n                    {t('Success Stories')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/branchen/#kunden')}>\n                    {t('Kunden')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/branchen/#branchen')}>\n                    {t('Branchen')}\n                  </Submenu.Item>\n                </Submenu>\n              </li>\n              <li>\n                <div className=\"flex items-center\">\n                  <NavButton to={getLink('/unternehmen/')}>\n                    {t('Unternehmen')}\n                  </NavButton>\n                  <Button onClick={() => { toggleNav(3) }}>\n                    <ToggleIcon isActive={isActiveNav(3)} />\n                  </Button>\n                </div>\n                <Submenu isActive={isActiveNav(3)}>\n                  <Submenu.Item to={getLink('/unternehmen/#ueber-uns')}>\n                    {t('Über uns')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#team')}>\n                    {t('Unser Team')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#karriere')}>\n                    {t('Karriere')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#forschung')}>\n                    {t('Forschung')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#mitgliedschaften')}>\n                    {t('Mitgliedschaften')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#auszeichnungen')}>\n                    {t('Auszeichnungen')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/unternehmen/#partner')}>\n                    {t('Partner')}\n                  </Submenu.Item>\n                </Submenu>\n              </li>\n              <li>\n                <div className=\"flex items-center\">\n                  <NavButton to={getLink('/support/')}>\n                    {t('Support')}\n                  </NavButton>\n                  <Button onClick={() => { toggleNav(4) }}>\n                    <ToggleIcon isActive={isActiveNav(4)} />\n                  </Button>\n                </div>\n                <Submenu isActive={isActiveNav(4)}>\n                  <Submenu.Item to={getLink('/support/#anwenderportal')}>\n                    {t('Anwenderportal')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/support/#schulungen')}>\n                    {t('Schulungen')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/support/#plusmetavideos')}>\n                    {t('plusmeta-Videos')}\n                  </Submenu.Item>\n                  <Submenu.Item to={getLink('/support/#dokumentation')}>\n                    {t('Dokumentation')}\n                  </Submenu.Item>\n                </Submenu>\n              </li>\n              <li>\n                <NavButton to={getLink('/veranstaltungen/')}>\n                  {t('Events')}\n                </NavButton>\n              </li>\n              <li>\n                <NavButton to={getLink('/blog/')}>\n                  {t('Blog')}\n                </NavButton>\n              </li>\n            </ul>\n            <div className=\"bg-indigo-500 text-white py-8 px-4 md:px-8 mt-16\">\n              <img src={ClockImageSrc} className=\"-mt-40\" alt=\"Mit der KI von plusmeta bis zu 80 % Zeitersparnis!\" />\n              <p className=\"typo-h5 text-yellow-700 text-center mt-4\">\n                {t('Banner title')}\n              </p>\n              <div className=\"mt-4 text-center\">\n                <Button to=\"/\" variant=\"secondary\" size=\"md\" theme=\"alt\">\n                  {t('Banner action')}\n                </Button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default Header;\n","import React from 'react';\nimport PropTypes from '../../../utils/PropTypes';\n\nconst propTypes = {\n    className: PropTypes.string,\n};\n\nconst defaultProps = {\n    className: 'h-6 w-6',\n};\n\nconst GoogleIcon = ({ className }) => (\n  <svg\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 16 16\"\n  >\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M7.68,0c4.239,0 7.68,3.441 7.68,7.68c0,4.239 -3.441,7.68 -7.68,7.68c-4.239,-0 -7.68,-3.441 -7.68,-7.68c0,-4.239 3.441,-7.68 7.68,-7.68Zm5.694,7.145l-5.447,0l-0,1.622l3.867,0c-0.196,2.264 -2.079,3.232 -3.862,3.232c-2.275,0 -4.271,-1.794 -4.271,-4.319c-0,-2.436 1.901,-4.319 4.277,-4.319c1.836,-0 2.912,1.17 2.912,1.17l1.128,-1.176c0,-0 -1.449,-1.616 -4.099,-1.616c-3.374,-0 -5.983,2.852 -5.983,5.941c0,3 2.454,5.941 6.072,5.941c3.179,0 5.496,-2.18 5.496,-5.4c-0,-0.684 -0.09,-1.076 -0.09,-1.076Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nGoogleIcon.propTypes = propTypes;\nGoogleIcon.defaultProps = defaultProps;\n\nexport default React.memo(GoogleIcon);\n","import React from 'react';\nimport PropTypes from '../../../utils/PropTypes';\n\nconst propTypes = {\n    className: PropTypes.string,\n};\n\nconst defaultProps = {\n    className: 'h-6 w-6',\n};\n\nconst LinkedInIcon = ({ className }) => (\n    <svg\n        className={className}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 16 16\"\n    >\n        <path\n            fillRule=\"evenodd\"\n            clipRule=\"evenodd\"\n            d=\"M7.68,0c4.239,0 7.68,3.441 7.68,7.68c0,4.239 -3.441,7.68 -7.68,7.68c-4.239,-0 -7.68,-3.441 -7.68,-7.68c0,-4.239 3.441,-7.68 7.68,-7.68Zm4.8,12.48l0,-3.823c0,-1.29 -1.061,-2.351 -2.351,-2.351c-0.613,-0 -1.327,0.375 -1.674,0.938l0,-0.801l-2.012,0l0,6.037l2.012,0l0,-3.556c0,-0.555 0.448,-1.01 1.003,-1.01c0.554,0 1.01,0.456 1.01,1.01l-0,3.556l2.012,0Zm-7.379,0l0,-6.037l-1.997,0l-0,6.037l1.997,0Zm-1.002,-7.169c0.665,-0 1.212,-0.547 1.212,-1.212c-0,-0.671 -0.541,-1.219 -1.212,-1.219c-0.669,0 -1.219,0.55 -1.219,1.219c-0,0.671 0.548,1.212 1.219,1.212Z\"\n            fill=\"currentColor\"\n        />\n    </svg>\n);\n\nLinkedInIcon.propTypes = propTypes;\nLinkedInIcon.defaultProps = defaultProps;\n\nexport default React.memo(LinkedInIcon);\n","import React from 'react';\nimport PropTypes from '../../../utils/PropTypes';\n\nconst propTypes = {\n    className: PropTypes.string,\n};\n\nconst defaultProps = {\n    className: 'h-6 w-6',\n};\n\nconst YoutubeIcon = ({ className }) => (\n    <svg\n        className={className}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 16 16\"\n    >\n        <path\n            d=\"M7.68,0c4.239,0 7.68,3.441 7.68,7.68c0,4.239 -3.441,7.68 -7.68,7.68c-4.239,-0 -7.68,-3.441 -7.68,-7.68c0,-4.239 3.441,-7.68 7.68,-7.68Zm5.277,5.014c-0.138,-0.497 -0.458,-0.817 -0.955,-0.955c-0.568,-0.155 -2.009,-0.243 -4.322,-0.243l-0.878,0.033c-0.607,0 -1.264,0.017 -1.981,0.055c-0.729,0.033 -1.204,0.083 -1.463,0.155c-0.497,0.138 -0.817,0.458 -0.955,0.955c-0.155,0.568 -0.243,1.457 -0.243,2.666l0.033,0.464c0,0.331 0.017,0.712 0.055,1.153c0.033,0.442 0.083,0.79 0.155,1.049c0.138,0.497 0.458,0.817 0.955,0.955c0.568,0.155 2.009,0.243 4.322,0.243l0.878,-0.033c0.607,-0 1.264,-0.017 1.981,-0.055c0.729,-0.033 1.204,-0.083 1.463,-0.155c0.497,-0.138 0.817,-0.458 0.955,-0.955c0.155,-0.568 0.243,-1.457 0.243,-2.666l-0.033,-0.464c-0,-0.331 -0.017,-0.712 -0.055,-1.153c-0.033,-0.442 -0.083,-0.79 -0.155,-1.049Zm-6.381,4.322l-0,-3.312l2.865,1.656l-2.865,1.656Z\"\n            fill=\"currentColor\"\n        />\n    </svg>\n);\n\nYoutubeIcon.propTypes = propTypes;\nYoutubeIcon.defaultProps = defaultProps;\n\nexport default React.memo(YoutubeIcon);\n","export default __webpack_public_path__ + \"static/plusmeta_Logo_Quanos_web_weiß_svg-4100fdad61859e186e12076ac29dab9e.svg\";","import * as React from 'react';\n\nimport Link from '../components/Link';\n\nimport GoogleIcon from '../components/icons/GoogleIcon';\nimport LinkedInIcon from '../components/icons/LinkedInIcon';\nimport YoutubeIcon from '../components/icons/YoutubeIcon';\n\nimport { useLayoutState } from './Context';\n\nimport useNavigation from '../hooks/useNavigation';\nimport useTranslation from '../hooks/useTranslation';\n\nimport LogoImageSrc from '../images/plusmeta_Logo_Quanos_web_weiß_svg.svg';\n\nconst Footer = () => {\n  const { locale } = useLayoutState();\n  const { getLink } = useNavigation(locale);\n  const { t } = useTranslation('navigation', locale);\n\n  return (\n    <>\n      <footer className=\"bg-indigo-500 text-white pt-16 pb-8\">\n        <div className=\"container-xl\">\n          <div className=\"row\">\n            <div className=\"col-full lg:col-3\">\n              <div>\n                <img src={LogoImageSrc} alt=\"Logo\" className=\"h-16 object-contain\" />\n              </div>\n              <p className=\"typo-body mt-8\">\n                {t('description')}\n              </p>\n              <ul className=\"flex mt-8\">\n                <li className=\"mr-6\">\n                  <Link href=\"https://de.linkedin.com/company/plusmeta\">\n                    <LinkedInIcon className=\"h-8 w-8\" />\n                  </Link>\n                </li>\n                <li className=\"mr-6\">\n                  <Link href=\"https://www.youtube.com/channel/UCxaIxBItWbv4uvW7YnoO4Lw\">\n                    <YoutubeIcon className=\"h-8 w-8\" />\n                  </Link>\n                </li>\n                <li>\n                  <Link href=\"https://g.page/plusmeta\">\n                    <GoogleIcon className=\"h-8 w-8\" />\n                  </Link>\n                </li>\n              </ul>\n              <ul className=\"mt-8\">\n                <li>\n                  <Link href={getLink('/impressum/')} className=\"typo-body no-underline\">\n                    {t('Impressum')}\n                  </Link>\n                </li>\n                <li className=\"mt-1\">\n                  <Link href={getLink('/datenschutzerklaerung/')} className=\"typo-body no-underline\">\n                    {t('Datenschutzerklärung')}\n                  </Link>\n                </li>\n                <li className=\"mt-1\">\n                  <Link href={getLink('/haftungsausschluss/')} className=\"typo-body no-underline\">\n                    {t('Haftungsausschuss')}\n                  </Link>\n                </li>\n                <li className=\"mt-1\">\n                  <Link href={getLink('/bildnachweise/')} className=\"typo-body no-underline\">\n                    {t('Bildnachweis')}\n                  </Link>\n                </li>\n                <li className=\"mt-1\">\n                  <Link href={getLink('/online-streitbeilegung/')} className=\"typo-body no-underline\">\n                    {t('Online-Streitbeilegung')}\n                  </Link>\n                </li>\n              </ul>\n            </div>\n            <div className=\"hidden lg:block col-full lg:col-8 lg:ml-1/12\">\n              <div className=\"row\">\n                <div className=\"col-full sm:col-6 lg:col-4 mt-8 lg:mt-0\">\n                  <h3 className=\"typo-blockquote font-display text-white\">\n                    <Link href={getLink('/software/')} className=\"no-underline\">\n                      {t('Software')}\n                    </Link>\n                  </h3>\n                  <ul className=\"mt-4\">\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/software/#integrationen')} className=\"typo-body no-underline\">\n                        {t('Integrationen')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/software/#software')} className=\"typo-body no-underline\">\n                        {t('Software')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/software/#plugins')} className=\"typo-body no-underline\">\n                        {t('Plugins')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/software/#opensource')} className=\"typo-body no-underline\">\n                        {t('Open Source')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/software/#datensicherheit')} className=\"typo-body no-underline\">\n                        {t('Datensicherheit')}\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n                <div className=\"col-full sm:col-6 lg:col-4 mt-8 lg:mt-0\">\n                  <h3 className=\"typo-blockquote font-display text-white\">\n                    <Link href={getLink('/unternehmen/')} className=\"no-underline\">\n                      {t('Unternehmen')}\n                    </Link>\n                  </h3>\n                  <ul className=\"mt-4\">\n                    <li>\n                      <Link href={getLink('/unternehmen/#ueber-uns')} className=\"typo-body no-underline\">\n                        {t('Über uns')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#team')} className=\"typo-body no-underline\">\n                        {t('Unser Team')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#karriere')} className=\"typo-body no-underline\">\n                        {t('Karriere')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#forschung')} className=\"typo-body no-underline\">\n                        {t('Forschung')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#mitgliedschaften')} className=\"typo-body no-underline\">\n                        {t('Mitgliedschaften')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#auszeichnungen')} className=\"typo-body no-underline\">\n                        {t('Auszeichnungen')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/unternehmen/#partner')} className=\"typo-body no-underline\">\n                        {t('Partner')}\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n                <div className=\"col-full sm:col-6 lg:col-4 mt-8 lg:mt-0\">\n                  <h3 className=\"typo-blockquote font-display text-white\">\n                    <Link href={getLink('/support/')} className=\"no-underline\">\n                      {t('Service & Support')}\n                    </Link>\n                  </h3>\n                  <ul className=\"mt-4\">\n                    <li>\n                      <Link href={getLink('/support/#anwenderportal')} className=\"typo-body no-underline\">\n                        {t('Anwenderportal')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/support/#dokumentation')} className=\"typo-body no-underline\">\n                        {t('Dokumentation')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/support/#schulungen')} className=\"typo-body no-underline\">\n                        {t('Schulungen')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/support/#videos')} className=\"typo-body no-underline\">\n                        {t('plusmeta-Videos')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/kontakt/')} className=\"typo-body no-underline\">\n                        {t('Kontakt')}\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n                <div className=\"col-full sm:col-6 lg:col-4 mt-8\">\n                  <h3 className=\"typo-blockquote font-display text-white\">\n                    <Link href={getLink('/loesungen/')} className=\"no-underline\">\n                      {t('Lösungen')}\n                    </Link>\n                  </h3>\n                  <ul className=\"mt-4\">\n                    <li>\n                      <Link href={getLink('/loesungen/#ueberblick')} className=\"typo-body no-underline\">\n                        {t('Überblick')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/loesungen/#unser-vorgehen')} className=\"typo-body no-underline\">\n                        {t('Unser Vorgehen')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/loesungen/#standards')} className=\"typo-body no-underline\">\n                        {t('Standards')}\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n                <div className=\"col-full sm:col-6 lg:col-4 mt-8\">\n                  <h3 className=\"typo-blockquote font-display text-white\">\n                    <Link href={getLink('/branchen/')} className=\"no-underline\">\n                      {t('Branchen')}\n                    </Link>\n                  </h3>\n                  <ul className=\"mt-4\">\n                    <li>\n                      <Link href={getLink('/branchen/#success-stories')} className=\"typo-body no-underline\">\n                        {t('Success Stories')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/branchen/#kunden')} className=\"typo-body no-underline\">\n                        {t('Kunden')}\n                      </Link>\n                    </li>\n                    <li className=\"mt-2\">\n                      <Link href={getLink('/branchen/#branchen')} className=\"typo-body no-underline\">\n                        {t('Branchen')}\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n          </div>\n          <div className=\"mt-8\">\n            <small className=\"typo-small\">\n              &copy;2024 plusmeta GmbH - a Quanos Company\n            </small>\n          </div>\n        </div>\n      </footer>\n    </>\n  );\n};\n\nexport default Footer;\n","import React from 'react';\nimport { LayoutProvider } from './Context';\nimport Header from './Header';\nimport Footer from './Footer';\n\nconst DefaultLayout = ({ children, location }) => {\n  return (\n    <LayoutProvider location={location}>\n      <Header location={location} />\n      <main className=\"pt-16 md:pt-24\">\n        {children}\n      </main>\n      <Footer />\n    </LayoutProvider>\n  );\n};\n\nexport default DefaultLayout;\n","import React from 'react';\nimport LogoImageSrc from '../images/logo.svg';\n\nconst SimpleHeader = () => {\n  return (\n    <header className=\"container-xl py-8\">\n      <img src={LogoImageSrc} alt=\"Logo\" className=\"h-10 object-contain\" />\n    </header>\n  );\n};\n\nexport default SimpleHeader;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYzIiBoZWlnaHQ9IjU2IiB2aWV3Qm94PSIwIDAgMjYzIDU2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDcuNjAzNiAzOS42NDEzSDQwLjA0OThWMzIuMTA4NkgzMS45NjJWMzkuNjQxM0gyNC40MDgyVjQ3LjcwNjVIMzEuOTYyVjU1LjIzOTFINDAuMDQ5OFY0Ny43MDY1SDQ3LjYwMzZWMzkuNjQxM1oiIGZpbGw9IiM1NzU1RDkiLz4KPHBhdGggZD0iTTUzLjI1IDQ3LjcwNjVWMzkuNjQxM0M1NC43OTM2IDM5LjY0NzUgNTYuMzIwOSAzOS4zMjcxIDU3LjczMTIgMzguNzAxMkM1OS4xNDE0IDM4LjA3NTIgNjAuNDAyNCAzNy4xNTggNjEuNDMwOCAzNi4wMTAxQzYyLjQ1OTMgMzQuODYyMyA2My4yMzE4IDMzLjUwOTggNjMuNjk3MyAzMi4wNDIyQzY0LjE2MjggMzAuNTc0NiA2NC4zMTA3IDI5LjAyNTIgNjQuMTMxMyAyNy40OTYzQzYzLjk1MTkgMjUuOTY3NSA2My40NDkyIDI0LjQ5NCA2Mi42NTY1IDIzLjE3MzJDNjEuODYzOCAyMS44NTI0IDYwLjc5OSAyMC43MTQzIDU5LjUzMjYgMTkuODM0M0M1OC4yNjYyIDE4Ljk1NDIgNTYuODI2OSAxOC4zNTIxIDU1LjMwOTggMTguMDY3N0M1My43OTI4IDE3Ljc4MzQgNTIuMjMyNSAxNy44MjMzIDUwLjczMjEgMTguMTg0N0w0Ny44MzI2IDE4Ljg2OTVMNDYuMzA2NiAxNi4zNTg3QzQ0LjU2NDIgMTMuNDY3MiA0MS45MjA1IDExLjIyNDEgMzguNzc5MyA5Ljk3MkMzNS42MzgyIDguNzE5OTEgMzIuMTcyMyA4LjUyNzczIDI4LjkxMTMgOS40MjQ4QzI1LjY1MDMgMTAuMzIxOSAyMi43NzM0IDEyLjI1ODkgMjAuNzIwMyAxNC45Mzk4QzE4LjY2NzIgMTcuNjIwOCAxNy41NTA2IDIwLjg5ODQgMTcuNTQxMyAyNC4yNzE3VjI4LjIyODJIMTMuNTczN0MxMi4wNTYgMjguMjI4MiAxMC42MDA0IDI4LjgyOTQgOS41MjcyMyAyOS44OTk2QzguNDU0MDQgMzAuOTY5OCA3Ljg1MTE0IDMyLjQyMTMgNy44NTExNCAzMy45MzQ3QzcuODUxMTQgMzUuNDQ4MiA4LjQ1NDA0IDM2Ljg5OTcgOS41MjcyMyAzNy45Njk5QzEwLjYwMDQgMzkuMDQwMSAxMi4wNTYgMzkuNjQxMyAxMy41NzM3IDM5LjY0MTNIMTguNzYyMVY0Ny43MDY1SDEzLjU3MzdDMTAuMjg3MSA0Ny42NDk4IDcuMTI4NTYgNDYuNDI2MSA0LjY2NTc3IDQ0LjI1NTFDMi4yMDI5NyA0Mi4wODQyIDAuNTk3NDI0IDM5LjEwODUgMC4xMzc3MTIgMzUuODYyOUMtMC4zMjE5OTkgMzIuNjE3MiAwLjM5NDI2OSAyOS4zMTQ1IDIuMTU3NzggMjYuNTQ4M0MzLjkyMTI4IDIzLjc4MjEgNi42MTYzOCAyMS43MzM4IDkuNzU4NjUgMjAuNzcxN0MxMC40NjAxIDE2LjIzNTggMTIuNDc3NSAxMi4wMDM4IDE1LjU2MiA4LjU5NzYzQzE4LjY0NjYgNS4xOTE0MyAyMi42NjM1IDIuNzU5OTkgMjcuMTE3MyAxLjYwMzE0QzMxLjU3MSAwLjQ0NjI5OCAzNi4yNjcgMC42MTQ2NDQgNDAuNjI1OSAyLjA4NzQyQzQ0Ljk4NDkgMy41NjAyIDQ4LjgxNjMgNi4yNzI5OSA1MS42NDc3IDkuODkxMjdDNTIuMTgwNCA5Ljg0MjI5IDUyLjcxNSA5LjgxNjkgNTMuMjUgOS44MTUxOEM1OC4yODg4IDkuODE1MTggNjMuMTIxMiAxMS44MTEyIDY2LjY4NDIgMTUuMzY0MkM3MC4yNDcyIDE4LjkxNzIgNzIuMjQ4OCAyMy43MzYxIDcyLjI0ODggMjguNzYwOEM3Mi4yNDg4IDMzLjc4NTUgNzAuMjQ3MiAzOC42MDQ0IDY2LjY4NDIgNDIuMTU3NEM2My4xMjEyIDQ1LjcxMDQgNTguMjg4OCA0Ny43MDY1IDUzLjI1IDQ3LjcwNjVaIiBmaWxsPSIjNTc1NUQ5Ii8+CjxwYXRoIGQ9Ik05My4xNTUyIDI4LjgzNjlDOTMuMTU1MiAzMi45NDU2IDkxLjYyOTIgMzQuOTIzOSA4OC41NzcyIDM0LjkyMzlDODcuMzUwMiAzNC45MDgzIDg2LjE0NTUgMzQuNTk1IDg1LjA2NzMgMzQuMDEwOVYyMi41MjE3Qzg1Ljk5OTkgMjIuMzY4IDg2Ljk0NjcgMjIuMzE2OSA4Ny44OTA0IDIyLjM2OTZDODkuNjQ1NCAyMi4zNjk2IDkwLjk0MjUgMjIuOTAyMiA5MS44NTgxIDI0LjExOTZDOTIuNjk3NCAyNS4yNjA5IDkzLjE1NTIgMjYuODU4NyA5My4xNTUyIDI4LjgzNjlaTTk5LjY0MDcgMjguNjg0OEM5OS42NDA3IDI2Ljg1ODcgOTkuNDExOCAyNS4yNjA5IDk4Ljg3NzcgMjMuODE1MkM5OC4zNDM2IDIyLjM2OTYgOTcuNTgwNiAyMS4wNzYxIDk2LjU4ODcgMjAuMDg2OUM5NS41OTY4IDE5LjA5NzggOTQuMzc2IDE4LjMzNjkgOTIuOTI2MyAxNy43MjgyQzkxLjQwMDMgMTcuMTk1NiA4OS43OTggMTYuODkxMyA4Ny44OTA0IDE2Ljg5MTNDODYuMjU0NiAxNi44NzQ0IDg0LjYyMDUgMTcuMDAxOCA4My4wMDcyIDE3LjI3MTdDODEuNTY0MyAxNy40ODE5IDgwLjEzNjkgMTcuNzg2OSA3OC43MzQ0IDE4LjE4NDhWNDcuNzgyNkg4NS4wNjczVjM5LjMzNjlDODYuNTYxMSAzOS45ODE3IDg4LjE3MDMgNDAuMzE4MiA4OS43OTggNDAuMzI2MUM5MS40MDAzIDQwLjMyNjEgOTIuODUgNDAuMDIxNyA5NC4wNzA4IDM5LjQ4OTFDOTUuMjkxNiAzOC44ODA0IDk2LjI4MzUgMzguMTE5NiA5Ny4xMjI4IDM3LjA1NDNDOTcuOTYyMSAzNi4wNjUyIDk4LjU3MjUgMzQuODQ3OCA5OS4wMzAzIDMzLjQwMjJDOTkuNDg4MSAzMS45NTY1IDk5LjY0MDcgMzAuNDM0OCA5OS42NDA3IDI4LjY4NDhaTTExMy42MDQgNDAuMzI2MUwxMTQuNTE5IDM1LjA3NjFDMTEzLjc1NiAzNSAxMTMuMTQ2IDM0LjkyMzkgMTEyLjY4OCAzNC42OTU2QzExMi4yMyAzNC40Njc0IDExMS44NDkgMzQuMjM5MSAxMTEuNjIgMzMuOTM0OEMxMTEuMzkxIDMzLjYzMDQgMTExLjE2MiAzMy4yNSAxMTEuMDg2IDMyLjc5MzVMMTExLjAxIDMxLjE5NTZWNi43NzE3M0wxMDQuNiA3Ljc2MDg2VjMyLjQ4OTFDMTA0LjYgMzMuNzA2NSAxMDQuNjc3IDM0Ljc3MTcgMTA0Ljk4MiAzNS43NjA5QzEwNS4yMTEgMzYuNjczOSAxMDUuNjY4IDM3LjUxMDkgMTA2LjM1NSAzOC4xOTU2QzEwNy4wNDIgMzguODgwNCAxMDcuODgxIDM5LjMzNjkgMTA5LjEwMiAzOS43MTc0QzExMC4yNDcgNDAuMDk3OCAxMTEuNzczIDQwLjMyNjEgMTEzLjYwNCA0MC4zMjYxWk0xMzcuNDEgMzkuMTA4N1YxNy40MjM5SDEzMVYzNC43NzE3QzEzMC4wNjUgMzQuOTEwNSAxMjkuMTIyIDM0Ljk4NjcgMTI4LjE3NyAzNUMxMjYuNjUxIDM1IDEyNS42NTkgMzQuNTQzNSAxMjUuMTI1IDMzLjYzMDRDMTI0LjU5MSAzMi43MTc0IDEyNC4yODYgMzEuMTk1NiAxMjQuMjg2IDI5LjE0MTNWMTcuNDIzOUgxMTcuOTUzVjI5Ljk3ODJDMTE3Ljk1MyAzMS41IDExOC4xMDUgMzIuODY5NiAxMTguNDExIDM0LjE2M0MxMTguNzE2IDM1LjQ1NjUgMTE5LjI1IDM2LjU5NzggMTIwLjAxMyAzNy41MTA5QzEyMC43IDM4LjQyMzkgMTIxLjc2OCAzOS4xMDg3IDEyMi45ODkgMzkuNjQxM0MxMjQuMjg2IDQwLjE3MzkgMTI1Ljg4OCA0MC40MDIyIDEyNy43OTYgNDAuNDAyMkMxMzEuMDQ2IDQwLjQyNjkgMTM0LjI4MiAzOS45OTE0IDEzNy40MSAzOS4xMDg3Wk0xNDkuODQ3IDM1LjMwNDNDMTQ3LjUzNyAzNS4zMTk4IDE0NS4yNSAzNC44NTMzIDE0My4xMzIgMzMuOTM0OEwxNDIuMDY0IDM5LjEwODdDMTQ0LjU0MSA0MC4wNzcxIDE0Ny4xODcgNDAuNTQyNyAxNDkuODQ3IDQwLjQ3ODJDMTUyLjg5OSA0MC40NzgyIDE1NS4yNjQgMzkuOTQ1NiAxNTYuOTQyIDM4LjgwNDNDMTU4LjU0NSAzNy42NjMgMTU5LjM4NCAzNS45ODkxIDE1OS4zODQgMzMuNzgyNkMxNTkuMzg0IDMyLjc5MzUgMTU5LjMwOCAzMS45NTY1IDE1OS4wNzkgMzEuMjcxN0MxNTguODUgMzAuNTg2OSAxNTguNTQ1IDI5LjkwMjIgMTU4LjAxMSAyOS4yOTM1QzE1Ny40NzcgMjguNzYwOSAxNTYuNzE0IDI4LjIyODIgMTU1Ljc5OCAyNy42OTU2TDE1Mi4zNjQgMjYuMTczOUMxNTEuNDE5IDI1LjgwODMgMTUwLjUwMSAyNS4zNzYgMTQ5LjYxOCAyNC44ODA0QzE0OS4zMTIgMjQuNzI4MiAxNDkuMTYgMjQuNSAxNDkuMDg0IDI0LjI3MTdMMTQ4LjkzMSAyMy41ODY5QzE0OC45MzEgMjIuNTIxNyAxNDkuOTIzIDIxLjk4OTEgMTUxLjk4MyAyMS45ODkxQzE1My4wNTEgMjEuOTg5MSAxNTQuMDQzIDIyLjA2NTIgMTU0Ljg4MiAyMi4yMTc0TDE1Ny4zMjQgMjIuOTAyMkwxNTguNDY4IDE3Ljk1NjVDMTU3LjcwNSAxNy43MjgyIDE1Ni43MTQgMTcuNDIzOSAxNTUuNDE2IDE3LjE5NTZDMTU0LjE5NiAxNi45Njc0IDE1Mi44MjIgMTYuODE1MiAxNTEuNTI1IDE2LjgxNTJDMTQ4Ljc3OCAxNi44MTUyIDE0Ni41NjYgMTcuNDIzOSAxNDUuMDQgMTguNjQxM0MxNDQuMjcgMTkuMjI3MyAxNDMuNjUzIDE5Ljk4OTYgMTQzLjI0MSAyMC44NjM4QzE0Mi44MjkgMjEuNzM3OSAxNDIuNjM1IDIyLjY5ODEgMTQyLjY3NCAyMy42NjNDMTQyLjY3NCAyNC43MjgyIDE0Mi44MjcgMjUuNjQxMyAxNDMuMTMyIDI2LjQ3ODJDMTQzLjQzNyAyNy4yMzkxIDE0My44OTUgMjcuODQ3OCAxNDQuNDI5IDI4LjQ1NjVDMTQ1LjA0IDI4Ljk4OTEgMTQ1LjcyNiAyOS40NDU2IDE0Ni41NjYgMjkuODI2MUMxNDcuMzI5IDMwLjI4MjYgMTQ4LjI0NCAzMC42NjMgMTQ5LjIzNiAzMS4wNDM1QzE1MC41MzMgMzEuNSAxNTEuNTI1IDMxLjk1NjUgMTUyLjEzNiAzMi4zMzY5QzE1Mi43NDYgMzIuNzE3NCAxNTMuMDUxIDMzLjE3MzkgMTUzLjA1MSAzMy43MDY1QzE1My4wNTEgMzQuMzE1MiAxNTIuODIyIDM0Ljc3MTcgMTUyLjM2NCAzNUMxNTEuODMgMzUuMjI4MiAxNTAuOTkxIDM1LjMwNDMgMTQ5Ljg0NyAzNS4zMDQzWk0xNzYuNTUyIDI4VjM5Ljg2OTZIMTgyLjk2MVYyNy42MTk2TDE4Mi44ODUgMjUuMzM2OUwxODIuNTAzIDIzLjIwNjVDMTgyLjg4NSAyMi45NzgzIDE4My40MTkgMjIuNzUgMTg0LjAyOSAyMi41OTc4TDE4NS40MDMgMjIuMzY5NkMxODYuNyAyMi4zNjk2IDE4Ny42MTUgMjIuNzUgMTg4LjE0OSAyMy41ODY5QzE4OC42ODQgMjQuNSAxODguOTEyIDI1Ljk0NTYgMTg4LjkxMiAyOFYzOS44Njk2SDE5NS4zMjJWMjcuMjM5MUMxOTUuMzIyIDI1LjY0MTMgMTk1LjE2OSAyNC4yNzE3IDE5NC45NCAyMy4wNTQzQzE5NC43MTEgMjEuNzYwOSAxOTQuMjUzIDIwLjY5NTYgMTkzLjU2NyAxOS43ODI2QzE5Mi44OCAxOC44Njk2IDE5MS45NjQgMTguMTg0OCAxOTAuNzQ0IDE3LjY1MjJDMTg4LjI3MiAxNi43MDE3IDE4NS41NDQgMTYuNjQ3OSAxODMuMDM3IDE3LjVDMTgxLjg5MyAxNy44MDQzIDE4MC44MjUgMTguMzM2OSAxNzkuOTA5IDE5LjAyMTdDMTc5LjIyMiAxOC40MTMgMTc4LjM4MyAxNy45NTY1IDE3Ny4zOTEgMTcuNUMxNzYuMzk5IDE3LjExOTYgMTc1LjAyNiAxNi44OTEzIDE3My40MjMgMTYuODkxM0MxNzAuOTU2IDE2Ljg2NCAxNjguNDk2IDE3LjE0NTIgMTY2LjA5OSAxNy43MjgyTDE2NC4xOTEgMTguMTg0OFYzOS44Njk2SDE3MC41MjRWMjIuNTIxN0MxNzEuMzYgMjIuNDI4NyAxNzIuMjAxIDIyLjM3NzkgMTczLjA0MiAyMi4zNjk2QzE3NC4zMzkgMjIuMzY5NiAxNzUuMjU1IDIyLjc1IDE3NS43ODkgMjMuNTg2OUMxNzYuMzIzIDI0LjUgMTc2LjU1MiAyNS45NDU2IDE3Ni41NTIgMjhaTTIwMC4wNTIgMjguODM2OUMyMDAuMDUyIDMwLjUxMDkgMjAwLjI4MSAzMi4wMzI2IDIwMC43MzkgMzMuNDc4MkMyMDEuMTk1IDM0Ljg4OTUgMjAxLjk2OCAzNi4xNzgzIDIwMyAzNy4yNDY0QzIwNC4wMzEgMzguMzE0NCAyMDUuMjkzIDM5LjEzMzYgMjA2LjY5IDM5LjY0MTNDMjA4LjE0IDQwLjE3MzkgMjA5Ljk3MSA0MC40NzgyIDIxMS45NTUgNDAuNDc4MkMyMTQuNjYxIDQwLjUwMTEgMjE3LjM0OSA0MC4wMzcyIDIxOS44OSAzOS4xMDg3TDIxOS4wNTEgMzMuOTM0OEMyMTcuMDcyIDM0LjY2NzYgMjE0Ljk4MSAzNS4wNTM3IDIxMi44NzEgMzUuMDc2MUMyMTAuOTYzIDM1IDIwOS41MTQgMzQuNjE5NiAyMDguNDQ1IDMzLjg1ODdDMjA3LjkyOSAzMy41MDQzIDIwNy40OTggMzMuMDQxMiAyMDcuMTgyIDMyLjUwMjFDMjA2Ljg2NSAzMS45NjMxIDIwNi42NzEgMzEuMzYxMiAyMDYuNjE0IDMwLjczOTFIMjIxLjExMUMyMjEuMTUyIDI5Ljk1MzQgMjIxLjE3NyAyOS4xNjcxIDIyMS4xODggMjguMzgwNEMyMjEuMTg4IDI0LjU3NjEgMjIwLjI3MiAyMS42ODQ4IDIxOC40NDEgMTkuNzgyNkMyMTYuNjEgMTcuODA0MyAyMTQuMDE1IDE2LjgxNTIgMjEwLjg4NyAxNi44MTUyQzIwOC4wOTMgMTYuODIyOSAyMDUuNDExIDE3LjkxNDMgMjAzLjQxIDE5Ljg1ODdDMjAyLjQxOCAyMC44NDc4IDIwMS41NzggMjIuMTQxMyAyMDAuOTY4IDIzLjU4NjlDMjAwLjM1OCAyNS4xMDg3IDIwMC4wNTIgMjYuODU4NyAyMDAuMDUyIDI4LjgzNjlaTTIxNS4wODQgMjYuNDAyMkgyMDYuNjE0TDIwNi45OTYgMjQuODA0M0MyMDcuMjI1IDI0LjI3MTcgMjA3LjQ1MyAyMy44MTUyIDIwNy44MzUgMjMuNDM0OEMyMDguMTQgMjIuOTc4MyAyMDguNTk4IDIyLjY3MzkgMjA5LjA1NiAyMi40NDU2QzIwOS41OSAyMi4yMTc0IDIxMC4yIDIyLjA2NTIgMjEwLjk2MyAyMi4wNjUyQzIxMS42NSAyMi4wNjUyIDIxMi4zMzcgMjIuMjE3NCAyMTIuNzk0IDIyLjQ0NTZDMjEzLjI2OSAyMi42ODMxIDIxMy42OSAyMy4wMTQ4IDIxNC4wMzEgMjMuNDIwNEMyMTQuMzcyIDIzLjgyNjEgMjE0LjYyNiAyNC4yOTcgMjE0Ljc3OCAyNC44MDQzTDIxNS4wODQgMjYuNDAyMlpNMjI1LjkxOCAxMS43OTM1VjMwLjczOTFDMjI1LjkxOCAzMi4xODQ4IDIyNi4wNzEgMzMuNDc4MiAyMjYuMzc2IDM0LjY5NTZDMjI2LjYwNSAzNS45MTMgMjI3LjA2MyAzNi45MDIyIDIyNy43NDkgMzcuNzM5MUMyMjguNDM2IDM4LjU3NjEgMjI5LjM1MiAzOS4yNjA5IDIzMC40OTYgMzkuNzE3NEMyMzEuNjQxIDQwLjE3MzkgMjMzLjA5IDQwLjQwMjIgMjM0Ljg0NSA0MC40MDIyQzIzNi45MTIgNDAuNDM5IDIzOC45NjQgNDAuMDUwNSAyNDAuODczIDM5LjI2MDlMMjQwLjAzNCAzNC4zMTUyQzIzOC43MTUgMzQuNzk3IDIzNy4zMTggMzUuMDI5MiAyMzUuOTE0IDM1QzIzNC40NjQgMzUgMjMzLjQ3MiAzNC42MTk2IDIzMy4wMTQgMzMuODU4N0MyMzIuNTU2IDMzLjAyMTcgMjMyLjMyNyAzMS45NTY1IDIzMi4zMjcgMzAuNjYzVjIyLjc1SDI0MC4wMzRWMTcuNDIzOUgyMzIuMzI3VjEwLjgwNDNMMjI1LjkxOCAxMS43OTM1Wk0yNTIuOTI5IDM1LjQ1NjVDMjUxLjc4NCAzNS40NTY1IDI1MC44NjggMzUuMzA0MyAyNTAuMTgyIDM0LjkyMzlDMjQ5LjQ5NSAzNC40Njc0IDI0OS4xOSAzMy43ODI2IDI0OS4xOSAzMi43OTM1QzI0OS4xOSAzMi4yNjA5IDI0OS4yNjYgMzEuODgwNCAyNDkuNDk1IDMxLjVDMjQ5LjcyNCAzMS4xOTU2IDI1MC4wMjkgMzAuODkxMyAyNTAuNDg3IDMwLjczOTFDMjUwLjg2OCAzMC41MTA5IDI1MS4zMjYgMzAuMzU4NyAyNTEuODYgMzAuMjgyNkMyNTMuMjg0IDMwLjEwMTQgMjU0LjcyNyAzMC4xNTI4IDI1Ni4xMzMgMzAuNDM0OFYzNS4zMDQzTDI1NC43NiAzNS40NTY1SDI1Mi45MjlaTTI1Mi4zOTUgMTYuODE1MkMyNTAuOTYxIDE2LjgwMjMgMjQ5LjUzIDE2LjkyOTcgMjQ4LjEyMiAxNy4xOTU2QzI0Ny4wMzkgMTcuMzUzMiAyNDUuOTY5IDE3LjU4MTkgMjQ0LjkxNyAxNy44ODA0TDI0NS43NTYgMjMuMDU0M0MyNDcuNjg3IDIyLjQ3MzMgMjQ5LjY5MSAyMi4xNjYgMjUxLjcwOCAyMi4xNDEzQzI1My4zMSAyMi4xNDEzIDI1NC40NTUgMjIuNDQ1NiAyNTUuMTQxIDIzLjEzMDRDMjU1Ljc1MiAyMy43MzkxIDI1Ni4xMzMgMjQuNjUyMiAyNTYuMTMzIDI1LjcxNzRWMjYuMzI2MUwyNTQuNTMxIDI2LjAyMTdDMjUyLjYxOSAyNS44NDIxIDI1MC42OTEgMjUuOTQ0NiAyNDguODA4IDI2LjMyNjFDMjQ3LjY2NCAyNi41NTQzIDI0Ni41OTYgMjYuOTM0OCAyNDUuNzU2IDI3LjQ2NzRDMjQ0LjgyIDI4LjAzMiAyNDQuMDU1IDI4Ljg0MDMgMjQzLjU0NCAyOS44MDU0QzI0My4wMzQgMzAuNzcwNSAyNDIuNzk2IDMxLjg1NjEgMjQyLjg1NyAzMi45NDU2QzI0Mi44NTcgMzQuMzE1MiAyNDMuMDg2IDM1LjUzMjYgMjQzLjU0NCAzNi40NDU2QzI0NC4wMDEgMzcuMzU4NyAyNDQuNjEyIDM4LjExOTYgMjQ1LjQ1MSAzOC43MjgyQzI0Ni4zNjcgMzkuMzM2OSAyNDcuMzU5IDM5LjcxNzQgMjQ4LjU3OSA0MC4wMjE3QzI1My4xNCA0MC42Mjc1IDI1Ny43NzMgNDAuMzY5NCAyNjIuMjM3IDM5LjI2MDlWMjYuMDIxN0MyNjIuMjM3IDI0LjY1MjIgMjYyLjA4NSAyMy4zNTg3IDI2MS43NzkgMjIuMjE3NEMyNjEuNDggMjEuMDk2NCAyNjAuODk0IDIwLjA3MjIgMjYwLjA3OCAxOS4yNDUyQzI1OS4yNjIgMTguNDE4MiAyNTguMjQ0IDE3LjgxNjggMjU3LjEyNSAxNy41QzI1NS45MDQgMTcuMDQzNSAyNTQuMzAyIDE2LjgxNTIgMjUyLjM5NSAxNi44MTUyWiIgZmlsbD0iIzRBNEE0QSIvPgo8cGF0aCBkPSJNOTIuMDA5OCA0NC45NjczSDI2Mi40NjVWNDcuODU4Nkg5Mi4wMDk4VjQ0Ljk2NzNaIiBmaWxsPSIjNTc1NUQ5Ii8+Cjwvc3ZnPgo=\"","import React from 'react';\n\nimport { useLayoutState } from './Context';\nimport useNavigation from '../hooks/useNavigation';\nimport useTranslation from '../hooks/useTranslation';\n\nimport LogoImageSrc from '../images/plusmeta_Logo_Quanos_web_weiß_svg.svg';\nimport Link from '../components/Link';\n\nconst SimpleFooter = () => {\n  const { locale } = useLayoutState();\n  const { getLink } = useNavigation(locale);\n  const { t } = useTranslation('navigation', locale);\n\n  return (\n    <footer className=\"bg-indigo-500 text-white py-8\">\n      <div className=\"container-xl\">\n        <div className=\"flex flex-col sm:flex-row justify-between\">\n          <div>\n            <div>\n              <img src={LogoImageSrc} alt=\"Logo\" className=\"h-10 object-contain\" />\n            </div>\n          </div>\n          <div className=\"flex flex-col sm:flex-row gap-x-16 mt-8 sm:mt-0\">\n            <Link href={getLink('/kontakt/')} className=\"typo-body no-underline\">\n              {t('Kontakt')}\n            </Link>\n            <Link href={getLink('/impressum/')} className=\"typo-body no-underline\">\n              {t('Impressum')}\n            </Link>\n            <Link href={getLink('/datenschutzerklaerung/')} className=\"typo-body no-underline\">\n              {t('Datenschutzerklärung')}\n            </Link>\n          </div>\n        </div>\n      </div>\n    </footer>\n  );\n};\n\nexport default SimpleFooter;\n","import React from 'react';\nimport SimpleHeader from './SimpleHeader';\nimport SimpleFooter from './SimpleFooter';\nimport { LayoutProvider } from './Context';\n\nconst DefaultLayout = ({ children, location }) => {\n  return (\n    <LayoutProvider location={location}>\n      <SimpleHeader location={location} />\n      <main>\n        {children}\n      </main>\n      <SimpleFooter />\n    </LayoutProvider>\n  );\n};\n\nexport default DefaultLayout;\n","import * as React from 'react';\nimport DefaultLayout from './DefaultLayout';\nimport SimpleLayout from './SimpleLayout';\n\nconst Layout = ({ children, location, pageContext }) => {\n  if (pageContext.layout === 'simple') {\n    return (\n      <SimpleLayout location={location}>\n        {children}\n      </SimpleLayout>\n    );\n  }\n\n  return (\n    <DefaultLayout location={location}>\n      {children}\n    </DefaultLayout>\n  );\n};\n\nexport default Layout;\n","import PropTypes from 'prop-types';\n\nconst location = PropTypes.shape({\n    state: PropTypes.shape({\n        key: PropTypes.string,\n    }),\n});\n\nconst propTypes = {\n    ...PropTypes,\n    location,\n};\n\nexport default propTypes;\n","// TODO: currying\nconst whenKey = (code, cb) => (event) => {\n    if (event.key === code) {\n        cb(event);\n    }\n};\n\nexport default whenKey;\n","var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n    warning = function (check, message) {\r\n        if (!check && typeof console !== 'undefined') {\r\n            console.warn(message);\r\n        }\r\n    };\r\n    invariant = function (check, message) {\r\n        if (!check) {\r\n            throw new Error(message);\r\n        }\r\n    };\r\n}\n\nexport { invariant, warning };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\n * @license React\n * react-server-dom-webpack.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var k=require(\"react\"),l={stream:!0},n=new Map,p=Symbol.for(\"react.element\"),q=Symbol.for(\"react.lazy\"),r=Symbol.for(\"react.default_value\"),t=k.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ContextRegistry;function u(a){t[a]||(t[a]=k.createServerContext(a,r));return t[a]}function v(a,b,c){this._status=a;this._value=b;this._response=c}v.prototype.then=function(a){0===this._status?(null===this._value&&(this._value=[]),this._value.push(a)):a()};\nfunction w(a){switch(a._status){case 3:return a._value;case 1:var b=JSON.parse(a._value,a._response._fromJSON);a._status=3;return a._value=b;case 2:b=a._value;for(var c=b.chunks,d=0;d<c.length;d++){var e=n.get(c[d]);if(null!==e)throw e;}c=__webpack_require__(b.id);b=\"*\"===b.name?c:\"\"===b.name?c.__esModule?c.default:c:c[b.name];a._status=3;return a._value=b;case 0:throw a;default:throw a._value;}}function x(){var a=y(this,0);return w(a)}function z(a,b){return new v(3,b,a)}\nfunction A(a){if(null!==a)for(var b=0;b<a.length;b++)(0,a[b])()}function C(a,b){if(0===a._status){var c=a._value;a._status=4;a._value=b;A(c)}}function D(a,b){a._chunks.forEach(function(a){C(a,b)})}function y(a,b){var c=a._chunks,d=c.get(b);d||(d=new v(0,null,a),c.set(b,d));return d}\nfunction E(a,b,c){switch(c[0]){case \"$\":if(\"$\"===c)return p;if(\"$\"===c[1]||\"@\"===c[1])return c.substring(1);b=parseInt(c.substring(1),16);a=y(a,b);return w(a);case \"@\":return b=parseInt(c.substring(1),16),a=y(a,b),{$$typeof:q,_payload:a,_init:w}}return c}function F(a){D(a,Error(\"Connection closed.\"))}\nfunction G(a,b){if(\"\"!==b){var c=b[0],d=b.indexOf(\":\",1),e=parseInt(b.substring(1,d),16);d=b.substring(d+1);switch(c){case \"J\":b=a._chunks;(c=b.get(e))?0===c._status&&(a=c._value,c._status=1,c._value=d,A(a)):b.set(e,new v(1,d,a));break;case \"M\":b=a._chunks;c=b.get(e);d=JSON.parse(d,a._fromJSON);var f=a._bundlerConfig;d=f?f[d.id][d.name]:d;f=d.chunks;for(var h=0;h<f.length;h++){var g=f[h];if(void 0===n.get(g)){var B=__webpack_chunk_load__(g),m=n.set.bind(n,g,null),J=n.set.bind(n,g);B.then(m,J);n.set(g,\nB)}}c?0===c._status&&(a=c._value,c._status=2,c._value=d,A(a)):b.set(e,new v(2,d,a));break;case \"P\":a._chunks.set(e,z(a,u(d).Provider));break;case \"S\":c=JSON.parse(d);a._chunks.set(e,z(a,Symbol.for(c)));break;case \"E\":b=JSON.parse(d);c=Error(b.message);c.stack=b.stack;b=a._chunks;(d=b.get(e))?C(d,c):b.set(e,new v(4,c,a));break;default:throw Error(\"Error parsing the data. It's probably an error code or network corruption.\");}}}\nfunction H(a){return function(b,c){return\"string\"===typeof c?E(a,this,c):\"object\"===typeof c&&null!==c?(b=c[0]===p?{$$typeof:p,type:c[1],key:c[2],ref:null,props:c[3],_owner:null}:c,b):c}}function I(a){var b=new TextDecoder,c=new Map;a={_bundlerConfig:a,_chunks:c,readRoot:x,_partialRow:\"\",_stringDecoder:b};a._fromJSON=H(a);return a}\nfunction K(a,b){function c(b){var h=b.value;if(b.done)F(a);else{b=h;h=a._stringDecoder;for(var g=b.indexOf(10);-1<g;){var f=a._partialRow;var m=b.subarray(0,g);m=h.decode(m);G(a,f+m);a._partialRow=\"\";b=b.subarray(g+1);g=b.indexOf(10)}a._partialRow+=h.decode(b,l);return e.read().then(c,d)}}function d(b){D(a,b)}var e=b.getReader();e.read().then(c,d)}exports.createFromFetch=function(a,b){var c=I(b&&b.moduleMap?b.moduleMap:null);a.then(function(a){K(c,a.body)},function(a){D(c,a)});return c};\nexports.createFromReadableStream=function(a,b){b=I(b&&b.moduleMap?b.moduleMap:null);K(b,a);return b};\nexports.createFromXHR=function(a,b){function c(){for(var b=a.responseText,c=f,d=b.indexOf(\"\\n\",c);-1<d;)c=e._partialRow+b.substring(c,d),G(e,c),e._partialRow=\"\",c=d+1,d=b.indexOf(\"\\n\",c);e._partialRow+=b.substring(c);f=b.length}function d(){D(e,new TypeError(\"Network error\"))}var e=I(b&&b.moduleMap?b.moduleMap:null),f=0;a.addEventListener(\"progress\",c);a.addEventListener(\"load\",function(){c();F(e)});a.addEventListener(\"error\",d);a.addEventListener(\"abort\",d);a.addEventListener(\"timeout\",d);return e};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-server-dom-webpack.production.min.js');\n} else {\n  module.exports = require('./cjs/react-server-dom-webpack.development.js');\n}\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA4MCIgaGVpZ2h0PSI4NTYiIHZpZXdCb3g9IjAgMCAxMDgwIDg1NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTg4NS42MDQgMjQ2LjU5Nkw5NjIuNDQ2IDIyNy4xNjJMMTAwNy4zNCAzMTIuNDk5TDkyOC4xOTQgMzUyLjk1NUw4OTIuMzY3IDI3Ny40MDRMODg1LjYwNCAyNDYuNTk2WiIgZmlsbD0iI0M5QTM0OCIvPgo8cGF0aCBkPSJNMTAyMi4zNyAzOTEuMzczQzEwNzYuMDIgMzU3Ljg2NCAxMDk1LjgzIDI4OC4yMzcgMTA2Ni4yOCAyMzEuMDU1QzEwMzYuNzIgMTczLjg3NCA5NjguNDYxIDE0OS43NzIgOTEwLjA5OCAxNzQuMTU4TDEwMjIuMzcgMzkxLjM3M1oiIGZpbGw9IiNGRkMxMDciLz4KPHBhdGggZD0iTTQ5Ni41OTEgMTQ1LjY0Nkw0MzguODk1IDkxLjI5NzFMMzU4LjE3MSAxNDQuMDM2TDQwNy42NTYgMjE3Ljg3M0w0NzUuNyAxNjkuMjc3TDQ5Ni41OTEgMTQ1LjY0NloiIGZpbGw9IiNDOUEzNDgiLz4KPHBhdGggZD0iTTMwMC40MTcgMjA1LjY0N0MyNzYuMDk3IDE1MC4yNzkgMjkyLjYzOCA3OS44MDI1IDM0Ni4yNjkgNDQuMjA4NUMzOTkuOTAxIDguNjE0OTcgNDcxLjI2OSAyMC43NDY1IDUwNC4xNDUgNzAuNDM2TDMwMC40MTcgMjA1LjY0N1oiIGZpbGw9IiNGRkMxMDciLz4KPHBhdGggZD0iTTg3NS42MzQgMjA4LjI2Nkw4MjMuODY2IDE5MC44NTFDODIzLjkxNyAxOTAuNjUyIDgzNS41MTYgMTU0LjA4NSA4MTYuMDMxIDEyMC4yMzZDODAxLjAwMSA5NC4xMzYgNzcwLjkyNyA3NS4wNzAxIDcyNi42MzYgNjMuNTc2M0M2NzguMTIzIDUwLjk4NjcgNjM4Ljk0OSA1Mi4yNzUgNjEzLjM0NCA2Ny4yOTM2QzU4OC4xNDUgODIuMDgwMiA1ODIuNzg0IDEwNS43MTIgNTgyLjU2NiAxMDYuNzA4TDUyOC45ODcgOTYuMDA0M0M1MjkuODY1IDkxLjM0NTMgNTM4LjgyMiA0OS43MjA0IDU4Mi45MzcgMjMuMDY1N0M2MjIuMDg0IC0wLjU4NzAwNyA2NzQuODU2IC00LjAzMzAzIDczOS44MDcgMTIuODIyM0M3OTkuNjg1IDI4LjM2MDcgODQxLjQ3OSA1Ni40MzI3IDg2NC4wMyA5Ni4yNTVDODk0Ljg0MyAxNTAuNjU5IDg3Ni40NDQgMjA1Ljk0MyA4NzUuNjM0IDIwOC4yNjZaIiBmaWxsPSIjRkZDMTA3Ii8+CjxwYXRoIGQ9Ik0yOTUuOTc1IDMzNi4wMkMyNDUuMTQ4IDUyMS4xMjYgMzU0LjAwMyA3MTIuMzg4IDUzOS4xMSA3NjMuMjE1QzcyNC4yMTcgODE0LjA0MiA5MTUuNDc5IDcwNS4xODYgOTY2LjMwNiA1MjAuMDhDMTAxNy4xMyAzMzQuOTc0IDkwOC4yNzcgMTQzLjcxMSA3MjMuMTcgOTIuODg0MUM1MzguMDYzIDQyLjA1NzMgMzQ2LjgwMSAxNTAuOTEzIDI5NS45NzUgMzM2LjAyWiIgZmlsbD0iI0ZGQzEwNyIvPgo8cGF0aCBkPSJNMzU0Ljk4NCAzNTIuMjIzQzMxMi43NDcgNTA2LjA0NCA0MDMuMjA1IDY2NC45NzkgNTU3LjAyNiA3MDcuMjE1QzcxMC44NDggNzQ5LjQ1MSA4NjkuNzgzIDY1OC45OTUgOTEyLjAxOSA1MDUuMTczQzk1NC4yNTUgMzUxLjM1MiA4NjMuNzk4IDE5Mi40MTYgNzA5Ljk3NyAxNTAuMThDNTU2LjE1NiAxMDcuOTQ0IDM5Ny4yMiAxOTguNDAxIDM1NC45ODQgMzUyLjIyM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik03MDQuNDkzIDE1Ni4yOUw3MTEuNTcyIDE1OC4yMzRMNjk0Ljc3NiAyMTkuNDExTDY4Ny42OTcgMjE3LjQ2N0w3MDQuNDkzIDE1Ni4yOVoiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTU3Mi40OTYgNjM3LjAwOEw1NzkuNTgyIDYzOC45NTRMNTYyLjc4IDcwMC4xMjlMNTU1LjY5NCA2OTguMTgzTDU3Mi40OTYgNjM3LjAwOFoiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTkwNS41NTYgNDk5LjA2Nkw5MDMuNjEzIDUwNi4xNDNMODQyLjQzNSA0ODkuMzQ5TDg0NC4zNzggNDgyLjI3Mkw5MDUuNTU2IDQ5OS4wNjZaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik00MjQuODM3IDM2Ny4wN0w0MjIuODkyIDM3NC4xNTNMMzYxLjcxNiAzNTcuMzUzTDM2My42NjEgMzUwLjI3TDQyNC44MzcgMzY3LjA3WiIgZmlsbD0iIzQyNDFBNiIvPgo8cGF0aCBkPSJNNzczLjA0MyA2NjguMjY1TDc2OC44NCA2NzAuNjU3TDc0OC4xOSA2MzQuMzY4TDc1Mi4zOTMgNjMxLjk3Nkw3NzMuMDQzIDY2OC4yNjVaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik01MTcuNDA3IDIxOS4xMDdMNTEzLjIwOSAyMjEuNDk3TDQ5Mi41NTQgMTg1LjIxTDQ5Ni43NTMgMTgyLjgyTDUxNy40MDcgMjE5LjEwN1oiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTg3NC4zMjYgMjg2LjQ5M0w4NzYuNzE2IDI5MC42OTFMODQwLjQyOSAzMTEuMzQ2TDgzOC4wMzkgMzA3LjE0OEw4NzQuMzI2IDI4Ni40OTNaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik00MjUuMTY4IDU0Mi4xMjhMNDI3LjU1OSA1NDYuMzI5TDM5MS4yNyA1NjYuOTgyTDM4OC44OCA1NjIuNzgxTDQyNS4xNjggNTQyLjEyOFoiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTkwOC4wNDggMzc5LjM5M0w5MDguODI2IDM4NC4xNjVMODY3LjYxNyAzOTAuODg0TDg2Ni44MzkgMzg2LjExM0w5MDguMDQ4IDM3OS4zOTNaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik0zOTcuOTc4IDQ2Mi41OUwzOTguNzU2IDQ2Ny4zNTdMMzU3LjU0NyA0NzQuMDgyTDM1Ni43NjkgNDY5LjMxNEwzOTcuOTc4IDQ2Mi41OVoiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTgwMy41MjkgMjA1LjcwNkw4MDcuMzI2IDIwOC42OTFMNzgxLjUxOSAyNDEuNTE1TDc3Ny43MjIgMjM4LjUyOUw4MDMuNTI5IDIwNS43MDZaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik00ODQuMDc2IDYxMS45Nkw0ODcuODc3IDYxNC45NDlMNDYyLjA2NiA2NDcuNzY5TDQ1OC4yNjUgNjQ0Ljc4TDQ4NC4wNzYgNjExLjk2WiIgZmlsbD0iIzQyNDFBNiIvPgo8cGF0aCBkPSJNNTkyLjA3MSAxNTAuNDNMNTk2Ljg1OCAxNDkuNzY3TDYwMi41ODkgMTkxLjEyNUw1OTcuODAyIDE5MS43ODlMNTkyLjA3MSAxNTAuNDNaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik02NjMuMDA3IDY2Mi4zNUw2NjcuNzk0IDY2MS42ODZMNjczLjUyNSA3MDMuMDQ1TDY2OC43MzcgNzAzLjcwOEw2NjMuMDA3IDY2Mi4zNVoiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTQxMS43MTYgMjU2LjA3Mkw0MTQuNzAxIDI1Mi4yNzNMNDQ3LjUzMSAyNzguMDcxTDQ0NC41NDYgMjgxLjg3TDQxMS43MTYgMjU2LjA3MloiIGZpbGw9IiM0MjQxQTYiLz4KPHBhdGggZD0iTTgxOC4wNjYgNTc1LjQwNEw4MjEuMDUxIDU3MS42MDVMODUzLjg4MiA1OTcuNDAzTDg1MC44OTYgNjAxLjIwMkw4MTguMDY2IDU3NS40MDRaIiBmaWxsPSIjNDI0MUE2Ii8+CjxwYXRoIGQ9Ik02MzUuNTc5IDQyNS40MjFDNjQwLjA0NCAzNDUuMzQ5IDY2Mi42OTYgMjgxLjgzIDY3Ni4zNTIgMjUwLjA3QzY3OC45MyAyNDQuMDczIDY4Ny44NTIgMjQ1Ljc3MiA2ODguMDY1IDI1Mi4yOTZDNjg4Ljg0IDI3Ni4wMSA2ODYuMzI3IDMxMC45MjMgNjgzLjM5NSAzMzIuNDA1QzY3Ni4xODMgMzg1LjIyOSA2MzkuMzY5IDQzNi4xNjQgNjM1LjU3OSA0MjUuNDIxWiIgZmlsbD0iIzU3NTVEOSIvPgo8cGF0aCBkPSJNNjQwLjc4OSA0MzEuNzc0QzU2OS43MzMgNDY4Ljk1NCA1MDMuNTc1IDQ4Mi4wMzQgNDY5LjMwNCA0ODYuNTc0QzQ2Mi44MzMgNDg3LjQzMSA0NTkuNzIzIDQ3OC44OTkgNDY1LjIxNyA0NzUuMzc0QzQ4NS4xODcgNDYyLjU2MSA1MTYuNDU4IDQ0Ni44MzcgNTM2LjQxIDQzOC4zNTNDNTg1LjQ3MiA0MTcuNDg4IDY0OC4wNzYgNDIzLjAxNyA2NDAuNzg5IDQzMS43NzRaIiBmaWxsPSIjNTc1NUQ5Ii8+CjxwYXRoIGQ9Ik02MTMuNTIxIDQxOC4wNzZDNjA5Ljg1IDQzMS40NDYgNjE3LjcxMiA0NDUuMjU5IDYzMS4wODEgNDQ4LjkzQzY0NC40NSA0NTIuNjAxIDY1OC4yNjMgNDQ0LjczOSA2NjEuOTM0IDQzMS4zN0M2NjUuNjA0IDQxOC4wMDEgNjU3Ljc0MiA0MDQuMTg4IDY0NC4zNzQgNDAwLjUxN0M2MzEuMDA1IDM5Ni44NDYgNjE3LjE5MiA0MDQuNzA3IDYxMy41MjEgNDE4LjA3NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik02MjcuMTYzIDQyMS44MjNDNjI1LjU2MSA0MjcuNjU3IDYyOC45OTMgNDMzLjY4NSA2MzQuODI2IDQzNS4yODdDNjQwLjY2IDQzNi44ODggNjQ2LjY4NyA0MzMuNDU3IDY0OC4yODkgNDI3LjYyNEM2NDkuODkxIDQyMS43OTEgNjQ2LjQ2IDQxNS43NjMgNjQwLjYyNiA0MTQuMTYxQzYzNC43OTMgNDEyLjU1OSA2MjguNzY2IDQxNS45OSA2MjcuMTYzIDQyMS44MjNaIiBmaWxsPSIjNTc1NUQ5Ii8+CjxwYXRoIGQ9Ik02NS43NDg4IDMzNy43OTlMNzIuMjk4MiAzNjguOTY0TDM4LjY3OTQgMzczLjg4OEw0MC4yNTQ5IDMyNC4zMjhMNjUuNzQ4OCAzMzcuNzk5WiIgZmlsbD0iI0YzOUY4NSIvPgo8cGF0aCBkPSJNNzYuNzMxNCAzNDIuNDU0QzgwLjY0MjUgMzQxLjkzIDg0LjIxNDEgMzQwLjk1NiA4NS45NTE2IDMzOS4yMDVDOTUuNTE2MyAzMjEuNTUxIDc3LjkxODggMjc4LjU3MyA3Ny45MTg4IDI3OC41NzNMNTkuMDMwOSAyNzIuODgxTDM3LjU3OTEgMjg5LjY1MUwzOS40Mjk0IDMxOS41MDlDMzkuOTIyNyAzMjcuNDc4IDQ0LjUzOTQgMzM0LjY4NSA1MS44NjQ0IDMzOC45MThDNTkuNTc0OCAzNDIuMjI5IDY4LjIxNjggMzQzLjU5OCA3Ni43MzE0IDM0Mi40NTRaIiBmaWxsPSIjRjdCNThFIi8+CjxwYXRoIGQ9Ik00Mi45ODg1IDMwNi4xMUM0My43MjAxIDMwMC45ODIgNDEuODM4MSAyODkuNTM0IDQ3LjAwOTcgMjg5LjgyN0M1MC43ODIxIDI5MC4wMzkgNjMuNTQ0OCAyODkuMjEyIDY3LjgyMTEgMjg4Ljc1OEM3OC4wMTE2IDI4Ny42NzUgOTUuNzUyNyAyODEuNzU4IDk0LjEwNTQgMjY2LjI1MkM5My4yODA5IDI1OC40OTggODUuMDUxNyAyNTIuNjE0IDgwLjA3NzMgMjUxLjEzMkM3NS4xOTU0IDI0OS42NzcgNjkuOTI2OSAyNTAuMzMyIDY1LjMyMTYgMjUyLjUxMUM1NC41MTcxIDI1Ny42MjQgNDAuNTU1IDI2Ny44NjEgMzQuNDkzMiAyNjcuMjk4QzI0LjI5NjUgMjY2LjM1MiAxNC45NTY5IDI3My4yNjcgMTUuOTk4NiAyODEuNzM0QzE3LjExMTYgMjkwLjc4MSAyMy4yODg0IDMwMy45MSAyOC42NjM1IDMxMi4wOTVDMzEuNzczOSAzMTYuODMyIDM1LjY5NzQgMzIwLjk2IDQwLjI1NDcgMzI0LjMyOEw0Mi45ODg1IDMwNi4xMVoiIGZpbGw9IiM0NDQ0NDQiLz4KPHBhdGggZD0iTTMyLjc3NTUgMzA4LjMyOEMzNC44MzMyIDMwNi4wODEgMzkuMTI0NiAzMDYuMDEgNDIuMzYwNSAzMDguMTY3QzQ1LjU5NTUgMzEwLjMyNSA0Ni41NTAzIDMxMy44OTcgNDQuNDkxNSAzMTYuMTQzQzQyLjQzNDQgMzE4LjM4OSAzOC4xNDI5IDMxOC40NjEgMzQuOTA3NyAzMTYuMzAzQzMxLjY3MjcgMzE0LjE0NSAzMC43MTg1IDMxMC41NzQgMzIuNzc1NSAzMDguMzI4WiIgZmlsbD0iI0Y3QjU4RSIvPgo8cGF0aCBkPSJNMjQ0LjU5IDQ2Ni45NzJMMjYzLjQ2OCA0NjUuNDM1QzI2Ni45ODUgNDcxLjU1OCAyNjYuNTk2IDQ3OS4xNzEgMjYyLjQ3MSA0ODQuOTAyTDI2MS43MjggNDg1LjkzNkwyNDMuMjQ5IDQ4Mi43NzdMMjQ0LjU5IDQ2Ni45NzJaIiBmaWxsPSIjRjdCNThFIi8+CjxwYXRoIGQ9Ik0yNTYuMzYgNDY1LjQ5OEMyNTYuMzYgNDY1LjQ5OCAyNjcuMzA2IDQ1MS45MDggMjcyLjY4NiA0MjIuMjlDMjczLjg3IDQxNS43NyAyNzEuMjA3IDQwOS4wMTUgMjgxLjc3NyA0MDguMjc2QzI4Mi43MjYgNDIxLjg2NiAyODQuMjQ0IDQ0My41OTEgMjg0LjI0NCA0NDMuNTkxTDI4MS4yMTYgNDczLjMxN0wyODYuMjk2IDQ3Mi45NjJMMjg3LjQwNCA0ODguODI1QzI4Ny40MDQgNDg4LjgyNSAyNjEuNzY5IDQ5NS4wNTUgMjU3Ljc5NCA0ODYuMDIzQzI1Ny4xOTUgNDc3LjQ0MiAyNTYuMzYgNDY1LjQ5OCAyNTYuMzYgNDY1LjQ5OFoiIGZpbGw9IiM0NDQ0NDQiLz4KPHBhdGggZD0iTTIyMi4wNTYgNzM3LjkxTDIxNy4yMjEgNzU0LjczNEMyMTEuMTY1IDc1Ny4zNDUgMjA0LjE0MiA3NTYuMTcyIDE5OS4yNjMgNzUxLjczNEwxOTguMzg0IDc1MC45MzRMMjAxLjgzNSA3MzMuODMxTDIyMi4wNTYgNzM3LjkxWiIgZmlsbD0iI0Y3QjU4RSIvPgo8cGF0aCBkPSJNMTUxLjIzNiA1MjcuMzc0QzE1MS4yMzYgNTI3LjM3NCAxNTIuMjE5IDUwNS4yNDcgMTI5LjAwMSA0NTkuMzgxQzE3OC45OSA0OTMuMzE5IDI1MS4yODEgNDg5Ljc3MyAyNTEuMjgxIDQ4OS43NzNMMjUzLjQwMyA0NjQuNzc4TDk3LjQ1NTUgMzg5LjU2OUw3Ny4yODMyIDUzNi4zMjVMMTUxLjYyNyA1NDIuNjM3TDE1MS4yMzYgNTI3LjM3NFoiIGZpbGw9IiM0MjQwQTYiLz4KPHBhdGggZD0iTTM3LjgwNzcgMzU2LjEwM0MzNy44MDc3IDM1Ni4xMDMgLTQ4LjM4MzEgNDI2LjI0NiAzOS41MDk1IDU4Ny4zNDJDNjguNDM4NyA1NjcuMDE4IDEyMy4xMjUgNTI4LjU5OCAxMjMuMTI1IDUyOC41OThMMTAyLjk1NSA0NDYuODQyTDEyNC43MzMgMzg4LjAxMkwzNy44MDc3IDM1Ni4xMDNaIiBmaWxsPSIjREVDNzhGIi8+CjxwYXRoIGQ9Ik0zOS41MDk4IDU4Ny4zNDJDMzkuNTA5OCA1ODcuMzQyIDY3LjU1MTUgNjMxLjAzNiAxMDcuNDY3IDYzNy4wMDdDMTQ3LjM4MyA2NDIuOTc3IDIyNS44MzkgNjA4LjMyNSAyMjUuODM5IDYwOC4zMjVDMjI1LjgzOSA2MDguMzI1IDE4My41MjEgNjUwLjk3OSAxOTguNDQ4IDczNi4yNzlDMjIwLjAxNCA3NDMuMzkgMjI0LjU1MiA3NDMuNzc1IDIyNC41NTIgNzQzLjc3NUMyMjQuNTUyIDc0My43NzUgMzAyLjI2MSA1NzYuMDgzIDI3My4yMjMgNTQ3Ljc5N0MyNDQuMTg2IDUxOS41MTEgMTIzLjEyNiA1MjguNTk4IDEyMy4xMjYgNTI4LjU5OEwzOS41MDk4IDU4Ny4zNDJaIiBmaWxsPSIjNDI0MEE2Ii8+CjxwYXRoIGQ9Ik0yMTguMDg2IDc1MC45NTZDMjE4LjA4NiA3NTAuOTU2IDIyMi41MzYgNzYzLjc3NSAyNjEuMzg1IDc2NS40MzlDMjY5LjM1NCA3NjUuNzgxIDI2Ny40OTggNzY4LjU4MiAyNjkuNjc2IDc3MS4zNDVDMjU3LjgxOSA3NzQuMzQzIDIzMy4yNTQgNzgxLjY4IDIzMy4yNTQgNzgxLjY4TDIwNy4zODMgNzcyLjgxNEwyMDMuNDIyIDc3OC40NDJMMTg4Ljc3MSA3NjkuODhDMTg4Ljc3MSA3NjkuODggMTkwLjAzNCA3NTEuODA4IDE5OC45MzMgNzQ5LjQwNEMyMDYuOTM5IDc1MC4wNTMgMjE4LjA4NiA3NTAuOTU2IDIxOC4wODYgNzUwLjk1NloiIGZpbGw9IiM0NDQ0NDQiLz4KPHBhdGggZD0iTTEwMi45NTUgNDQ2Ljg0MkMxMDIuOTU1IDQ0Ni44NDIgMTY5LjkzMyA0NDguNjU2IDIwMy4wNjcgNDM4LjU1N0MyMzYuMjAxIDQyOC40NiAzMDAuNDQ0IDM3MS4yNjUgMzAwLjQ0NCAzNzEuMjY1TDI4MS45NTUgMzYwLjk0OUwyMDIuNzA1IDM5Ny4yMTRMMTI0LjczMyAzODguMDEzTDEwMi45NTUgNDQ2Ljg0MloiIGZpbGw9IiNGN0I1OEUiLz4KPHBhdGggZD0iTTI4Mi45NTQgMzYxLjE2OEMyODQuNzcxIDM2MC45NzUgMjkwLjk0OCAzNTkuNzI3IDMwMC44MTQgMzUxLjUwOEMzMDkuNjY2IDM0NC4xMzMgMzIzLjU4MiAzMjMuNDA3IDMyOC4yMTggMzM0Ljc2NEMzMjQuNTQ5IDM0Ni43MDkgMzIxLjY2OSAzNjEuMTc1IDMyMS42NjkgMzYxLjE3NUMzMTguNzM4IDM2OC4xODUgMzA3Ljc1MiAzNzQuNzIzIDMwMC4xMzcgMzc3LjQ5N0wyNzUuNjk1IDM4My4yMTFDMjc1LjY5NSAzODMuMjExIDI2NS45MzUgMzc1LjkyMSAyNjUuNDExIDM3NS42NjFMMjY3LjUwNyAzNzAuNzkzQzI3My4xNjggMzY4LjQwNyAyNzguMzUzIDM2NS4xMSAyODIuOTU0IDM2MS4xNjhaIiBmaWxsPSIjRjdCNThFIi8+CjxwYXRoIGQ9Ik0yODkuMyAzNjIuMDFDMjg5LjMgMzYyLjAxIDI4OS45NjIgMzYyLjEzOCAyOTEuMTczIDM2Mi4wOTdDMjkwLjUxNyAzNjMuNjAyIDI4OS45NTQgMzY1LjEyNyAyODkuNDQyIDM2Ni42NThDMjg1LjI3MiAzNzAuOTk0IDI4MS4yMzUgMzc1LjQ1NSAyNzcuMTEzIDM3OS44MzVDMjc0Ljk0NCAzNzcuMTA0IDI3MS44OTEgMzczLjI3NyAyNzEuNjI2IDM3My4wNDZMMjkyLjkzNiAzMzkuMDA2QzI5Mi45MzYgMzM5LjAwNiAyOTguMDc3IDMzOS43MTkgMjk2LjA5NSAzNDcuODg2QzI5NC4xMSAzNTYuMDUyIDI4OS4zIDM2Mi4wMSAyODkuMyAzNjIuMDFaIiBmaWxsPSIjRjdCNThFIi8+CjxwYXRoIGQ9Ik02OTEuMjYgMjczLjE2MUwzMDEuNTA4IDM0My44NDZDMzAxLjUwOCAzNDMuODQ2IDI4OS4xMyA0NjAuMTgzIDMyNC4wNjggNTAwLjgzOUMzNjcuMTM0IDU1MC45NTEgMzc1Ljc0NyA1NzkuOTIzIDM3MC4yNjYgNjI4LjQ2OUMzNjEuODczIDcwMi44MDIgMzA5Ljk3NCA3NTMuNzUxIDMwOS45NzQgNzUzLjc1MSIgc3Ryb2tlPSIjQzlBMzQ4IiBzdHJva2Utd2lkdGg9IjI0Ljk5OTYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMjkyLjU2NCAzNTcuNDM4TDMwNi42NDYgMzQ4LjUxOUwzMDkuMzQ3IDM3My4wN0MzMDkuMzQ3IDM3My4wNyAyOTUuNjQgMzgxLjIyMyAyODguOTY2IDM4MC40NzlDMjgyLjI5MiAzNzkuNzM2IDI5Mi41NjQgMzU3LjQzOCAyOTIuNTY0IDM1Ny40MzhaIiBmaWxsPSIjRjdCNThFIi8+Cjwvc3ZnPgo=\"","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst PartytownSnippet = \"/* Partytown 0.7.6 - MIT builder.io */\\n!function(t,e,n,i,r,o,a,d,s,c,p,l){function u(){l||(l=1,\\\"/\\\"==(a=(o.lib||\\\"/~partytown/\\\")+(o.debug?\\\"debug/\\\":\\\"\\\"))[0]&&(s=e.querySelectorAll('script[type=\\\"text/partytown\\\"]'),i!=t?i.dispatchEvent(new CustomEvent(\\\"pt1\\\",{detail:t})):(d=setTimeout(f,1e4),e.addEventListener(\\\"pt0\\\",w),r?h(1):n.serviceWorker?n.serviceWorker.register(a+(o.swPath||\\\"partytown-sw.js\\\"),{scope:a}).then((function(t){t.active?h():t.installing&&t.installing.addEventListener(\\\"statechange\\\",(function(t){\\\"activated\\\"==t.target.state&&h()}))}),console.error):f())))}function h(t){c=e.createElement(t?\\\"script\\\":\\\"iframe\\\"),t||(c.setAttribute(\\\"style\\\",\\\"display:block;width:0;height:0;border:0;visibility:hidden\\\"),c.setAttribute(\\\"aria-hidden\\\",!0)),c.src=a+\\\"partytown-\\\"+(t?\\\"atomics.js?v=0.7.6\\\":\\\"sandbox-sw.html?\\\"+Date.now()),e.body.appendChild(c)}function f(n,r){for(w(),i==t&&(o.forward||[]).map((function(e){delete t[e.split(\\\".\\\")[0]]})),n=0;n<s.length;n++)(r=e.createElement(\\\"script\\\")).innerHTML=s[n].innerHTML,e.head.appendChild(r);c&&c.parentNode.removeChild(c)}function w(){clearTimeout(d)}o=t.partytown||{},i==t&&(o.forward||[]).map((function(e){p=t,e.split(\\\".\\\").map((function(e,n,i){p=p[i[n]]=n+1<i.length?\\\"push\\\"==i[n+1]?[]:p[i[n]]||{}:function(){(t._ptf=t._ptf||[]).push(i,arguments)}}))})),\\\"complete\\\"==e.readyState?u():(t.addEventListener(\\\"DOMContentLoaded\\\",u),t.addEventListener(\\\"load\\\",u))}(window,document,navigator,top,window.crossOriginIsolated);\";\n\nconst createSnippet = (config, snippetCode) => {\n    const { forward = [], ...filteredConfig } = config || {};\n    const configStr = JSON.stringify(filteredConfig, (k, v) => {\n        if (typeof v === 'function') {\n            v = String(v);\n            if (v.startsWith(k + '(')) {\n                v = 'function ' + v;\n            }\n        }\n        return v;\n    });\n    return [\n        `!(function(w,p,f,c){`,\n        Object.keys(filteredConfig).length > 0\n            ? `c=w[p]=Object.assign(w[p]||{},${configStr});`\n            : `c=w[p]=w[p]||{};`,\n        `c[f]=(c[f]||[])`,\n        forward.length > 0 ? `.concat(${JSON.stringify(forward)})` : ``,\n        `})(window,'partytown','forward');`,\n        snippetCode,\n    ].join('');\n};\n\n/**\n * The `type` attribute for Partytown scripts, which does two things:\n *\n * 1. Prevents the `<script>` from executing on the main thread.\n * 2. Is used as a selector so the Partytown library can find all scripts to execute in a web worker.\n *\n * @public\n */\nconst SCRIPT_TYPE = `text/partytown`;\n\n/**\n * Function that returns the Partytown snippet as a string, which can be\n * used as the innerHTML of the inlined Partytown script in the head.\n *\n * @public\n */\nconst partytownSnippet = (config) => createSnippet(config, PartytownSnippet);\n\nexports.SCRIPT_TYPE = SCRIPT_TYPE;\nexports.partytownSnippet = partytownSnippet;\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import*as e from\"react\";import t from\"react\";import r from\"prop-types\";import n from\"invariant\";function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},o.apply(this,arguments)}function a(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)t.indexOf(r=a[n])>=0||(o[r]=e[r]);return o}const s=e=>{const{search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c}=e.location;let{pathname:l}=e.location;return!l&&n&&u&&(l=new URL(n).pathname),{pathname:encodeURI(decodeURI(l)),search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c,state:e.history.state,key:e.history.state&&e.history.state.key||\"initial\"}},i=(e,t)=>{let r=[],n=s(e),a=!1,i=()=>{};return{get location(){return n},get transitioning(){return a},_onTransitionComplete(){a=!1,i()},listen(t){r.push(t);const o=()=>{n=s(e),t({location:n,action:\"POP\"})};return e.addEventListener(\"popstate\",o),()=>{e.removeEventListener(\"popstate\",o),r=r.filter(e=>e!==t)}},navigate(t,{state:c,replace:u=!1}={}){if(\"number\"==typeof t)e.history.go(t);else{c=o({},c,{key:Date.now()+\"\"});try{a||u?e.history.replaceState(c,null,t):e.history.pushState(c,null,t)}catch(r){e.location[u?\"replace\":\"assign\"](t)}}n=s(e),a=!0;const l=new Promise(e=>i=e);return r.forEach(e=>e({location:n,action:\"PUSH\"})),l}}},c=(e=\"/\")=>{const t=e.indexOf(\"?\"),r={pathname:t>-1?e.substr(0,t):e,search:t>-1?e.substr(t):\"\"};let n=0;const o=[r],a=[null];return{get location(){return o[n]},addEventListener(e,t){},removeEventListener(e,t){},history:{get entries(){return o},get index(){return n},get state(){return a[n]},pushState(e,t,r){const[s,i=\"\"]=r.split(\"?\");n++,o.push({pathname:s,search:i.length?`?${i}`:i}),a.push(e)},replaceState(e,t,r){const[s,i=\"\"]=r.split(\"?\");o[n]={pathname:s,search:i},a[n]=e},go(e){const t=n+e;t<0||t>a.length-1||(n=t)}}}},u=!(\"undefined\"==typeof window||!window.document||!window.document.createElement),l=i(u?window:c()),{navigate:p}=l;function h(e,r){return t.createServerContext?((e,r=null)=>(globalThis.__SERVER_CONTEXT||(globalThis.__SERVER_CONTEXT={}),globalThis.__SERVER_CONTEXT[e]||(globalThis.__SERVER_CONTEXT[e]=t.createServerContext(e,r)),globalThis.__SERVER_CONTEXT[e]))(e,r):t.createContext(r)}const m=h(\"Base\",{baseuri:\"/\",basepath:\"/\"}),d=h(\"Location\"),f=()=>e.useContext(m),y=()=>e.useContext(d);function E(e){this.uri=e}const g=e=>e instanceof E,v=e=>{throw new E(e)};function b(t){const{to:r,replace:n=!0,state:o,noThrow:a,baseuri:s}=t;e.useEffect(()=>{Promise.resolve().then(()=>{const e=k(r,s);p(P(e,t),{replace:n,state:o})})},[]);const i=k(r,s);return a||v(P(i,t)),null}const R=t=>{const r=y(),{baseuri:n}=f();/*#__PURE__*/return e.createElement(b,o({},r,{baseuri:n},t))};R.propTypes={from:r.string,to:r.string.isRequired};const C=(e,t)=>e.substr(0,t.length)===t,w=(e,t)=>{let r,o;const[a]=t.split(\"?\"),s=N(a),i=\"\"===s[0],c=j(e);for(let e=0,a=c.length;e<a;e++){let a=!1;const u=c[e].route;if(u.default){o={route:u,params:{},uri:t};continue}const l=N(u.path),p={},h=Math.max(s.length,l.length);let m=0;for(;m<h;m++){const e=l[m],t=s[m];if($(e)){p[e.slice(1)||\"*\"]=s.slice(m).map(decodeURIComponent).join(\"/\");break}if(void 0===t){a=!0;break}const r=O.exec(e);if(r&&!i){const e=-1===U.indexOf(r[1]);n(e,`<Router> dynamic segment \"${r[1]}\" is a reserved name. Please use a different name in path \"${u.path}\".`);const o=decodeURIComponent(t);p[r[1]]=o}else if(e!==t){a=!0;break}}if(!a){r={route:u,params:p,uri:\"/\"+s.slice(0,m).join(\"/\")};break}}return r||o||null},x=(e,t)=>w([{path:e}],t),k=(e,t)=>{if(C(e,\"/\"))return e;const[r,n]=e.split(\"?\"),[o]=t.split(\"?\"),a=N(r),s=N(o);if(\"\"===a[0])return L(o,n);if(!C(a[0],\".\")){const e=s.concat(a).join(\"/\");return L((\"/\"===o?\"\":\"/\")+e,n)}const i=s.concat(a),c=[];for(let e=0,t=i.length;e<t;e++){const t=i[e];\"..\"===t?c.pop():\".\"!==t&&c.push(t)}return L(\"/\"+c.join(\"/\"),n)},P=(e,t)=>{const[r,n=\"\"]=e.split(\"?\");let o=\"/\"+N(r).map(e=>{const r=O.exec(e);return r?t[r[1]]:e}).join(\"/\");const{location:{search:a=\"\"}={}}=t,s=a.split(\"?\")[1]||\"\";return o=L(o,n,s),o},T=(e,t)=>{const r=e=>_(e);return N(e).filter(r).sort().join(\"/\")===N(t).filter(r).sort().join(\"/\")},O=/^:(.+)/,_=e=>O.test(e),$=e=>e&&\"*\"===e[0],S=(e,t)=>({route:e,score:e.default?0:N(e.path).reduce((e,t)=>(e+=4,(e=>\"\"===e)(t)?e+=1:_(t)?e+=2:$(t)?e-=5:e+=3,e),0),index:t}),j=e=>e.map(S).sort((e,t)=>e.score<t.score?1:e.score>t.score?-1:e.index-t.index),N=e=>e.replace(/(^\\/+|\\/+$)/g,\"\").split(\"/\"),L=(e,...t)=>e+((t=t.filter(e=>e&&e.length>0))&&t.length>0?`?${t.join(\"&\")}`:\"\"),U=[\"uri\",\"path\"],D=(e,t)=>{const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(r=>t.hasOwnProperty(r)&&e[r]===t[r])},M=e=>e.replace(/(^\\/+|\\/+$)/g,\"\"),I=t=>r=>{if(!r)return null;if(r.type===e.Fragment&&r.props.children)return e.Children.map(r.props.children,I(t));if(n(r.props.path||r.props.default||r.type===R,`<Router>: Children of <Router> must have a \\`path\\` or \\`default\\` prop, or be a \\`<Redirect>\\`. None found on element type \\`${r.type}\\``),n(!!(r.type!==R||r.props.from&&r.props.to),`<Redirect from=\"${r.props.from}\" to=\"${r.props.to}\"/> requires both \"from\" and \"to\" props when inside a <Router>.`),n(!(r.type===R&&!T(r.props.from,r.props.to)),`<Redirect from=\"${r.props.from} to=\"${r.props.to}\"/> has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.`),r.props.default)return{value:r,default:!0};const o=r.type===R?r.props.from:r.props.path,a=\"/\"===o?t:`${M(t)}/${M(o)}`;return{value:r,default:r.props.default,path:r.props.children?`${M(a)}/*`:a}},V=[\"innerRef\"],q=[\"to\",\"state\",\"replace\",\"getProps\"],X=[\"key\"];let{forwardRef:B}=e;void 0===B&&(B=e=>e);const K=()=>{},A=B((t,r)=>{let{innerRef:n}=t,s=a(t,V);const{baseuri:i}=f(),{location:c}=y(),{to:u,state:l,replace:h,getProps:m=K}=s,d=a(s,q),E=k(u,i),g=encodeURI(E),v=c.pathname===g,b=C(c.pathname,g);/*#__PURE__*/return e.createElement(\"a\",o({ref:r||n,\"aria-current\":v?\"page\":void 0},d,m({isCurrent:v,isPartiallyCurrent:b,href:E,location:c}),{href:E,onClick:e=>{if(d.onClick&&d.onClick(e),(e=>!e.defaultPrevented&&0===e.button&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey))(e)){e.preventDefault();let t=h;if(\"boolean\"!=typeof h&&v){const e=a(o({},c.state),X);t=D(o({},l),e)}p(E,{state:l,replace:t})}}}))});A.displayName=\"Link\",A.propTypes={to:r.string.isRequired};class F extends e.Component{constructor(...e){super(...e),this.displayName=\"ReactUseErrorBoundary\"}componentDidCatch(...e){this.setState({}),this.props.onError(...e)}render(){return this.props.children}}const W=e.createContext({componentDidCatch:{current:void 0},error:void 0,setError:()=>!1});function H({children:t}){const[r,n]=e.useState(),o=e.useRef(),a=e.useMemo(()=>({componentDidCatch:o,error:r,setError:n}),[r]);/*#__PURE__*/return e.createElement(W.Provider,{value:a},/*#__PURE__*/e.createElement(F,{error:r,onError:(e,t)=>{n(e),null==o.current||o.current(e,t)}},t))}H.displayName=\"ReactUseErrorBoundaryContext\";const z=function(t){var r,n;function a(r){/*#__PURE__*/return e.createElement(H,null,/*#__PURE__*/e.createElement(t,o({key:\"WrappedComponent\"},r)))}return a.displayName=`WithErrorBoundary(${null!=(r=null!=(n=t.displayName)?n:t.name)?r:\"Component\"})`,a}(({history:t=l,children:r})=>{const{location:n}=t,[o,a]=e.useState({location:n}),[s]=function(t){const r=e.useContext(W);r.componentDidCatch.current=void 0;const n=e.useCallback(()=>{r.setError(void 0)},[]);return[r.error,n]}();if(e.useEffect(()=>{t._onTransitionComplete()},[o.location]),e.useEffect(()=>{let e=!1;const r=t.listen(({location:t})=>{Promise.resolve().then(()=>{requestAnimationFrame(()=>{e||a({location:t})})})});return()=>{e=!0,r()}},[]),s){if(!g(s))throw s;p(s.uri,{replace:!0})}/*#__PURE__*/return e.createElement(d.Provider,{value:o},\"function\"==typeof r?r(o):r||null)}),G=({children:t})=>{const r=y();return r?t(r):/*#__PURE__*/e.createElement(z,null,t)},J=({url:t,children:r})=>{const n=t.indexOf(\"?\");let o,a=\"\";return n>-1?(o=t.substring(0,n),a=t.substring(n)):o=t,/*#__PURE__*/e.createElement(d.Provider,{value:{location:{pathname:o,search:a,hash:\"\"}}},r)},Q=({path:e,children:t})=>{const{baseuri:r}=f(),{location:n}=y(),a=k(e,r),s=x(a,n.pathname);return t({location:n,match:s?o({},s.params,{uri:s.uri,path:e}):null})},Y=[\"uri\",\"location\",\"component\"],Z=[\"children\",\"style\",\"component\",\"uri\",\"location\"],ee=t=>{let{uri:r,location:n,component:s}=t,i=a(t,Y);/*#__PURE__*/return e.createElement(re,o({},i,{component:s,uri:r,location:n}))};let te=0;const re=t=>{let{children:r,style:n,component:s=\"div\",uri:i,location:c}=t,u=a(t,Z);const l=e.useRef(),p=e.useRef(!0),h=e.useRef(i),m=e.useRef(c.pathname),d=e.useRef(!1);e.useEffect(()=>(te++,f(),()=>{te--,0===te&&(p.current=!0)}),[]),e.useEffect(()=>{let e=!1,t=!1;i!==h.current&&(h.current=i,e=!0),c.pathname!==m.current&&(m.current=c.pathname,t=!0),d.current=e||t&&c.pathname===i,d.current&&f()},[i,c]);const f=e.useCallback(()=>{var e;\"test\"!==process.env.NODE_ENV&&(p.current?p.current=!1:(e=l.current,d.current&&e&&e.focus()))},[]);/*#__PURE__*/return e.createElement(s,o({style:o({outline:\"none\"},n),tabIndex:\"-1\",ref:l},u),r)},ne=[\"location\",\"primary\",\"children\",\"basepath\",\"baseuri\",\"component\"],oe=t=>{const r=f(),n=y();/*#__PURE__*/return e.createElement(ae,o({},r,n,t))};function ae(t){const{location:r,primary:n=!0,children:s,basepath:i,component:c=\"div\"}=t,u=a(t,ne),l=e.Children.toArray(s).reduce((e,t)=>{const r=I(i)(t);return e.concat(r)},[]),{pathname:p}=r,h=w(l,p);if(h){const{params:t,uri:a,route:s,route:{value:l}}=h,p=s.default?i:s.path.replace(/\\*$/,\"\"),d=o({},t,{uri:a,location:r}),f=e.cloneElement(l,d,l.props.children?/*#__PURE__*/e.createElement(oe,{location:r,primary:n},l.props.children):void 0),y=n?ee:c,E=n?o({uri:a,location:r,component:c},u):u;/*#__PURE__*/return e.createElement(m.Provider,{value:{baseuri:a,basepath:p}},/*#__PURE__*/e.createElement(y,E,f))}return null}const se=()=>{const e=y();if(!e)throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");return e.location},ie=()=>{throw new Error(\"useNavigate is removed. Use import { navigate } from 'gatsby' instead\")},ce=()=>{const e=f();if(!e)throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");const t=se(),r=x(e.basepath,t.pathname);return r?r.params:null},ue=e=>{if(!e)throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");const t=f();if(!t)throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");const r=se(),n=k(e,t.baseuri),a=x(n,r.pathname);return a?o({},a.params,{uri:a.uri,path:e}):null};export{m as BaseContext,A as Link,G as Location,d as LocationContext,z as LocationProvider,Q as Match,R as Redirect,oe as Router,J as ServerLocation,i as createHistory,c as createMemorySource,l as globalHistory,P as insertParams,g as isRedirect,x as match,p as navigate,w as pick,v as redirectTo,k as resolve,D as shallowCompare,C as startsWith,f as useBaseContext,se as useLocation,y as useLocationContext,ue as useMatch,ie as useNavigate,ce as useParams,T as validateRedirect};\n//# sourceMappingURL=index.modern.mjs.map\n","import { useRef } from 'react';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-effect.mjs';\n\nfunction useIsMounted() {\n    const isMounted = useRef(false);\n    useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n            isMounted.current = false;\n        };\n    }, []);\n    return isMounted;\n}\n\nexport { useIsMounted };\n","import * as React from 'react';\nimport { useId, useRef, useInsertionEffect } from 'react';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n    getSnapshotBeforeUpdate(prevProps) {\n        const element = this.props.childRef.current;\n        if (element && prevProps.isPresent && !this.props.isPresent) {\n            const size = this.props.sizeRef.current;\n            size.height = element.offsetHeight || 0;\n            size.width = element.offsetWidth || 0;\n            size.top = element.offsetTop;\n            size.left = element.offsetLeft;\n        }\n        return null;\n    }\n    /**\n     * Required with getSnapshotBeforeUpdate to stop React complaining.\n     */\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\nfunction PopChild({ children, isPresent }) {\n    const id = useId();\n    const ref = useRef(null);\n    const size = useRef({\n        width: 0,\n        height: 0,\n        top: 0,\n        left: 0,\n    });\n    /**\n     * We create and inject a style block so we can apply this explicit\n     * sizing in a non-destructive manner by just deleting the style block.\n     *\n     * We can't apply size via render as the measurement happens\n     * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n     * styles directly on the DOM node, we might be overwriting\n     * styles set via the style prop.\n     */\n    useInsertionEffect(() => {\n        const { width, height, top, left } = size.current;\n        if (isPresent || !ref.current || !width || !height)\n            return;\n        ref.current.dataset.motionPopId = id;\n        const style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        if (style.sheet) {\n            style.sheet.insertRule(`\n          [data-motion-pop-id=\"${id}\"] {\n            position: absolute !important;\n            width: ${width}px !important;\n            height: ${height}px !important;\n            top: ${top}px !important;\n            left: ${left}px !important;\n          }\n        `);\n        }\n        return () => {\n            document.head.removeChild(style);\n        };\n    }, [isPresent]);\n    return (React.createElement(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size }, React.cloneElement(children, { ref })));\n}\n\nexport { PopChild };\n","import * as React from 'react';\nimport { useId, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, }) => {\n    const presenceChildren = useConstant(newChildrenMap);\n    const id = useId();\n    const context = useMemo(() => ({\n        id,\n        initial,\n        isPresent,\n        custom,\n        onExitComplete: (childId) => {\n            presenceChildren.set(childId, true);\n            for (const isComplete of presenceChildren.values()) {\n                if (!isComplete)\n                    return; // can stop searching when any is incomplete\n            }\n            onExitComplete && onExitComplete();\n        },\n        register: (childId) => {\n            presenceChildren.set(childId, false);\n            return () => presenceChildren.delete(childId);\n        },\n    }), \n    /**\n     * If the presence of a child affects the layout of the components around it,\n     * we want to make a new context value to ensure they get re-rendered\n     * so they can detect that layout change.\n     */\n    presenceAffectsLayout ? undefined : [isPresent]);\n    useMemo(() => {\n        presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n    }, [isPresent]);\n    /**\n     * If there's no `motion` components to fire exit animations, we want to remove this\n     * component immediately.\n     */\n    React.useEffect(() => {\n        !isPresent &&\n            !presenceChildren.size &&\n            onExitComplete &&\n            onExitComplete();\n    }, [isPresent]);\n    if (mode === \"popLayout\") {\n        children = React.createElement(PopChild, { isPresent: isPresent }, children);\n    }\n    return (React.createElement(PresenceContext.Provider, { value: context }, children));\n};\nfunction newChildrenMap() {\n    return new Map();\n}\n\nexport { PresenceChild };\n","import * as React from 'react';\nimport { useContext, useRef, cloneElement, Children, isValidElement } from 'react';\nimport { useForceUpdate } from '../../utils/use-force-update.mjs';\nimport { useIsMounted } from '../../utils/use-is-mounted.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { useUnmountEffect } from '../../utils/use-unmount-effect.mjs';\nimport { warnOnce } from '../../utils/warn-once.mjs';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction updateChildLookup(children, allChildren) {\n    children.forEach((child) => {\n        const key = getChildKey(child);\n        allChildren.set(key, child);\n    });\n}\nfunction onlyElements(children) {\n    const filtered = [];\n    // We use forEach here instead of map as map mutates the component key by preprending `.$`\n    Children.forEach(children, (child) => {\n        if (isValidElement(child))\n            filtered.push(child);\n    });\n    return filtered;\n}\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n *   <AnimatePresence>\n *     {items.map(item => (\n *       <motion.div\n *         key={item.id}\n *         initial={{ opacity: 0 }}\n *         animate={{ opacity: 1 }}\n *         exit={{ opacity: 0 }}\n *       />\n *     ))}\n *   </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, exitBeforeEnter, presenceAffectsLayout = true, mode = \"sync\", }) => {\n    // Support deprecated exitBeforeEnter prop\n    if (exitBeforeEnter) {\n        mode = \"wait\";\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, \"Replace exitBeforeEnter with mode='wait'\");\n        }\n    }\n    // We want to force a re-render once all exiting animations have finished. We\n    // either use a local forceRender function, or one from a parent context if it exists.\n    let [forceRender] = useForceUpdate();\n    const forceRenderLayoutGroup = useContext(LayoutGroupContext).forceRender;\n    if (forceRenderLayoutGroup)\n        forceRender = forceRenderLayoutGroup;\n    const isMounted = useIsMounted();\n    // Filter out any children that aren't ReactElements. We can only track ReactElements with a props.key\n    const filteredChildren = onlyElements(children);\n    let childrenToRender = filteredChildren;\n    const exiting = new Set();\n    // Keep a living record of the children we're actually rendering so we\n    // can diff to figure out which are entering and exiting\n    const presentChildren = useRef(childrenToRender);\n    // A lookup table to quickly reference components by key\n    const allChildren = useRef(new Map()).current;\n    // If this is the initial component render, just deal with logic surrounding whether\n    // we play onMount animations or not.\n    const isInitialRender = useRef(true);\n    useIsomorphicLayoutEffect(() => {\n        isInitialRender.current = false;\n        updateChildLookup(filteredChildren, allChildren);\n        presentChildren.current = childrenToRender;\n    });\n    useUnmountEffect(() => {\n        isInitialRender.current = true;\n        allChildren.clear();\n        exiting.clear();\n    });\n    if (isInitialRender.current) {\n        return (React.createElement(React.Fragment, null, childrenToRender.map((child) => (React.createElement(PresenceChild, { key: getChildKey(child), isPresent: true, initial: initial ? undefined : false, presenceAffectsLayout: presenceAffectsLayout, mode: mode }, child)))));\n    }\n    // If this is a subsequent render, deal with entering and exiting children\n    childrenToRender = [...childrenToRender];\n    // Diff the keys of the currently-present and target children to update our\n    // exiting list.\n    const presentKeys = presentChildren.current.map(getChildKey);\n    const targetKeys = filteredChildren.map(getChildKey);\n    // Diff the present children with our target children and mark those that are exiting\n    const numPresent = presentKeys.length;\n    for (let i = 0; i < numPresent; i++) {\n        const key = presentKeys[i];\n        if (targetKeys.indexOf(key) === -1) {\n            exiting.add(key);\n        }\n    }\n    // If we currently have exiting children, and we're deferring rendering incoming children\n    // until after all current children have exiting, empty the childrenToRender array\n    if (mode === \"wait\" && exiting.size) {\n        childrenToRender = [];\n    }\n    // Loop through all currently exiting components and clone them to overwrite `animate`\n    // with any `exit` prop they might have defined.\n    exiting.forEach((key) => {\n        // If this component is actually entering again, early return\n        if (targetKeys.indexOf(key) !== -1)\n            return;\n        const child = allChildren.get(key);\n        if (!child)\n            return;\n        const insertionIndex = presentKeys.indexOf(key);\n        const onExit = () => {\n            allChildren.delete(key);\n            exiting.delete(key);\n            // Remove this child from the present children\n            const removeIndex = presentChildren.current.findIndex((presentChild) => presentChild.key === key);\n            presentChildren.current.splice(removeIndex, 1);\n            // Defer re-rendering until all exiting children have indeed left\n            if (!exiting.size) {\n                presentChildren.current = filteredChildren;\n                if (isMounted.current === false)\n                    return;\n                forceRender();\n                onExitComplete && onExitComplete();\n            }\n        };\n        childrenToRender.splice(insertionIndex, 0, React.createElement(PresenceChild, { key: getChildKey(child), isPresent: false, onExitComplete: onExit, custom: custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode }, child));\n    });\n    // Add `MotionContext` even to children that don't need it to ensure we're rendering\n    // the same tree between renders\n    childrenToRender = childrenToRender.map((child) => {\n        const key = child.key;\n        return exiting.has(key) ? (child) : (React.createElement(PresenceChild, { key: getChildKey(child), isPresent: true, presenceAffectsLayout: presenceAffectsLayout, mode: mode }, child));\n    });\n    if (process.env.NODE_ENV !== \"production\" &&\n        mode === \"wait\" &&\n        childrenToRender.length > 1) {\n        console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n    }\n    return (React.createElement(React.Fragment, null, exiting.size\n        ? childrenToRender\n        : childrenToRender.map((child) => cloneElement(child))));\n};\n\nexport { AnimatePresence };\n","import { sync } from '../frameloop/index.mjs';\nimport { useState, useCallback } from 'react';\nimport { useIsMounted } from './use-is-mounted.mjs';\n\nfunction useForceUpdate() {\n    const isMounted = useIsMounted();\n    const [forcedRenderCount, setForcedRenderCount] = useState(0);\n    const forceRender = useCallback(() => {\n        isMounted.current && setForcedRenderCount(forcedRenderCount + 1);\n    }, [forcedRenderCount]);\n    /**\n     * Defer this to the end of the next animation frame in case there are multiple\n     * synchronous calls.\n     */\n    const deferredForceRender = useCallback(() => sync.postRender(forceRender), [forceRender]);\n    return [deferredForceRender, forcedRenderCount];\n}\n\nexport { useForceUpdate };\n","import { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n","const frameData = {\n    delta: 0,\n    timestamp: 0,\n};\n\nexport { frameData };\n","/*\n  Detect and load appropriate clock setting for the execution environment\n */\nconst defaultTimestep = (1 / 60) * 1000;\nconst getCurrentTime = typeof performance !== \"undefined\"\n    ? () => performance.now()\n    : () => Date.now();\nconst onNextFrame = typeof window !== \"undefined\"\n    ? (callback) => window.requestAnimationFrame(callback)\n    : (callback) => setTimeout(() => callback(getCurrentTime()), defaultTimestep);\n\nexport { defaultTimestep, onNextFrame };\n","import { onNextFrame, defaultTimestep } from './on-next-frame.mjs';\nimport { createRenderStep } from './create-render-step.mjs';\nimport { frameData } from './data.mjs';\n\nconst maxElapsed = 40;\nlet useDefaultElapsed = true;\nlet runNextFrame = false;\nlet isProcessing = false;\nconst stepsOrder = [\n    \"read\",\n    \"update\",\n    \"preRender\",\n    \"render\",\n    \"postRender\",\n];\nconst steps = stepsOrder.reduce((acc, key) => {\n    acc[key] = createRenderStep(() => (runNextFrame = true));\n    return acc;\n}, {});\nconst sync = stepsOrder.reduce((acc, key) => {\n    const step = steps[key];\n    acc[key] = (process, keepAlive = false, immediate = false) => {\n        if (!runNextFrame)\n            startLoop();\n        return step.schedule(process, keepAlive, immediate);\n    };\n    return acc;\n}, {});\nconst cancelSync = stepsOrder.reduce((acc, key) => {\n    acc[key] = steps[key].cancel;\n    return acc;\n}, {});\nconst flushSync = stepsOrder.reduce((acc, key) => {\n    acc[key] = () => steps[key].process(frameData);\n    return acc;\n}, {});\nconst processStep = (stepId) => steps[stepId].process(frameData);\nconst processFrame = (timestamp) => {\n    runNextFrame = false;\n    frameData.delta = useDefaultElapsed\n        ? defaultTimestep\n        : Math.max(Math.min(timestamp - frameData.timestamp, maxElapsed), 1);\n    frameData.timestamp = timestamp;\n    isProcessing = true;\n    stepsOrder.forEach(processStep);\n    isProcessing = false;\n    if (runNextFrame) {\n        useDefaultElapsed = false;\n        onNextFrame(processFrame);\n    }\n};\nconst startLoop = () => {\n    runNextFrame = true;\n    useDefaultElapsed = true;\n    if (!isProcessing)\n        onNextFrame(processFrame);\n};\n\nexport { cancelSync, flushSync, sync };\n","function createRenderStep(runNextFrame) {\n    /**\n     * We create and reuse two arrays, 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 toRun = [];\n    let toRunNextFrame = [];\n    /**\n     *\n     */\n    let numToRun = 0;\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    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 buffer = addToCurrentFrame ? toRun : toRunNextFrame;\n            if (keepAlive)\n                toKeepAlive.add(callback);\n            // If the buffer doesn't already contain this callback, add it\n            if (buffer.indexOf(callback) === -1) {\n                buffer.push(callback);\n                // If we're adding it to the currently running buffer, update its measured size\n                if (addToCurrentFrame && isProcessing)\n                    numToRun = toRun.length;\n            }\n            return callback;\n        },\n        /**\n         * Cancel the provided callback from running on the next frame.\n         */\n        cancel: (callback) => {\n            const index = toRunNextFrame.indexOf(callback);\n            if (index !== -1)\n                toRunNextFrame.splice(index, 1);\n            toKeepAlive.delete(callback);\n        },\n        /**\n         * Execute all schedule callbacks.\n         */\n        process: (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            [toRun, toRunNextFrame] = [toRunNextFrame, toRun];\n            // Clear the next frame list\n            toRunNextFrame.length = 0;\n            // Execute this frame\n            numToRun = toRun.length;\n            if (numToRun) {\n                for (let i = 0; i < numToRun; i++) {\n                    const callback = toRun[i];\n                    callback(frameData);\n                    if (toKeepAlive.has(callback)) {\n                        step.schedule(callback);\n                        runNextFrame();\n                    }\n                }\n            }\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 { 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","import { createContext, useContext } from 'react';\n\nconst MotionContext = createContext({});\nfunction useVisualElementContext() {\n    return useContext(MotionContext).visualElement;\n}\n\nexport { MotionContext, useVisualElementContext };\n","import { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","import { useContext, useRef, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useVisualElementContext } 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';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement) {\n    const parent = useVisualElementContext();\n    const lazyContext = useContext(LazyContext);\n    const presenceContext = useContext(PresenceContext);\n    const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n    const visualElementRef = useRef();\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            presenceId: presenceContext ? presenceContext.id : undefined,\n            blockInitialAnimation: presenceContext\n                ? presenceContext.initial === false\n                : false,\n            reducedMotionConfig,\n        });\n    }\n    const visualElement = visualElementRef.current;\n    useIsomorphicLayoutEffect(() => {\n        visualElement && visualElement.render();\n    });\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    const useAnimateChangesEffect = window.HandoffAppearAnimations\n        ? useIsomorphicLayoutEffect\n        : useEffect;\n    useAnimateChangesEffect(() => {\n        if (visualElement && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n    });\n    return visualElement;\n}\n\nexport { useVisualElement };\n","function isRefObject(ref) {\n    return (typeof ref === \"object\" &&\n        Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\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","function isAnimationControls(v) {\n    return typeof v === \"object\" && typeof v.start === \"function\";\n}\n\nexport { isAnimationControls };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\n\nconst variantProps = [\n    \"initial\",\n    \"animate\",\n    \"exit\",\n    \"whileHover\",\n    \"whileDrag\",\n    \"whileTap\",\n    \"whileFocus\",\n    \"whileInView\",\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 { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\nimport { isControllingVariants } from '../../render/utils/is-controlling-variants.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 createDefinition = (propNames) => ({\n    isEnabled: (props) => propNames.some((name) => !!props[name]),\n});\nconst featureDefinitions = {\n    measureLayout: createDefinition([\"layout\", \"layoutId\", \"drag\"]),\n    animation: createDefinition([\n        \"animate\",\n        \"exit\",\n        \"variants\",\n        \"whileHover\",\n        \"whileTap\",\n        \"whileFocus\",\n        \"whileDrag\",\n        \"whileInView\",\n    ]),\n    exit: createDefinition([\"exit\"]),\n    drag: createDefinition([\"drag\", \"dragControls\"]),\n    focus: createDefinition([\"whileFocus\"]),\n    hover: createDefinition([\"whileHover\", \"onHoverStart\", \"onHoverEnd\"]),\n    tap: createDefinition([\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"]),\n    pan: createDefinition([\n        \"onPan\",\n        \"onPanStart\",\n        \"onPanSessionStart\",\n        \"onPanEnd\",\n    ]),\n    inView: createDefinition([\n        \"whileInView\",\n        \"onViewportEnter\",\n        \"onViewportLeave\",\n    ]),\n};\n\nexport { featureDefinitions };\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 { useConstant } from '../../utils/use-constant.mjs';\nimport { globalProjectionState } from './state.mjs';\n\nlet id = 1;\nfunction useProjectionId() {\n    return useConstant(() => {\n        if (globalProjectionState.hasEverUpdated) {\n            return id++;\n        }\n    });\n}\n\nexport { useProjectionId };\n","import React__default from 'react';\n\nclass VisualElementHandler extends React__default.Component {\n    /**\n     * Update visual element props as soon as we know this update is going to be commited.\n     */\n    getSnapshotBeforeUpdate() {\n        const { visualElement, props } = this.props;\n        if (visualElement)\n            visualElement.setProps(props);\n        return null;\n    }\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\n\nexport { VisualElementHandler };\n","import { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","import * as React from 'react';\nimport { forwardRef, useContext } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { featureDefinitions } from './features/definitions.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { useProjectionId } from '../projection/node/id.mjs';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { VisualElementHandler } from './utils/VisualElementHandler.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { SwitchLayoutGroupContext } from '../context/SwitchLayoutGroupContext.mjs';\nimport { motionComponentSymbol } from './utils/symbol.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 createMotionComponent({ preloadedFeatures, createVisualElement, projectionNodeConstructor, useRender, useVisualState, Component, }) {\n    preloadedFeatures && loadFeatures(preloadedFeatures);\n    function MotionComponent(props, externalRef) {\n        const configAndProps = {\n            ...useContext(MotionConfigContext),\n            ...props,\n            layoutId: useLayoutId(props),\n        };\n        const { isStatic } = configAndProps;\n        let features = null;\n        const context = useCreateMotionContext(props);\n        /**\n         * Create a unique projection ID for this component. If a new component is added\n         * during a layout animation we'll use this to query the DOM and hydrate its ref early, allowing\n         * us to measure it as soon as any layout effect flushes pending layout animations.\n         *\n         * Performance note: It'd be better not to have to search the DOM for these elements.\n         * For newly-entering components it could be enough to only correct treeScale, in which\n         * case we could mount in a scale-correction mode. This wouldn't be enough for\n         * shared element transitions however. Perhaps for those we could revert to a root node\n         * that gets forceRendered and layout animations are triggered on its layout effect.\n         */\n        const projectionId = isStatic ? undefined : useProjectionId();\n        /**\n         *\n         */\n        const visualState = useVisualState(props, isStatic);\n        if (!isStatic && isBrowser) {\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);\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 lazyStrictMode = useContext(LazyContext).strict;\n            const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n            if (context.visualElement) {\n                features = context.visualElement.loadFeatures(\n                // Note: Pass the full new combined props to correctly re-render dynamic feature components.\n                configAndProps, lazyStrictMode, preloadedFeatures, projectionId, projectionNodeConstructor ||\n                    featureDefinitions.projectionNodeConstructor, initialLayoutGroupConfig);\n            }\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 (React.createElement(VisualElementHandler, { visualElement: context.visualElement, props: configAndProps },\n            features,\n            React.createElement(MotionContext.Provider, { value: context }, useRender(Component, props, projectionId, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement))));\n    }\n    const ForwardRefComponent = forwardRef(MotionComponent);\n    ForwardRefComponent[motionComponentSymbol] = Component;\n    return ForwardRefComponent;\n}\nfunction useLayoutId({ layoutId }) {\n    const layoutGroupId = useContext(LayoutGroupContext).id;\n    return layoutGroupId && layoutId !== undefined\n        ? layoutGroupId + \"-\" + layoutId\n        : layoutId;\n}\n\nexport { createMotionComponent };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n    for (const key in features) {\n        if (key === \"projectionNodeConstructor\") {\n            featureDefinitions.projectionNodeConstructor = features[key];\n        }\n        else {\n            featureDefinitions[key].Component = features[key];\n        }\n    }\n}\n\nexport { loadFeatures };\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        instance && visualState.mount && visualState.mount(instance);\n        if (visualElement) {\n            instance\n                ? visualElement.mount(instance)\n                : visualElement.unmount();\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 { createMotionComponent } from '../../motion/index.mjs';\n\n/**\n * Convert any React component into a `motion` component. The provided component\n * **must** use `React.forwardRef` to the underlying DOM component you want to animate.\n *\n * ```jsx\n * const Component = React.forwardRef((props, ref) => {\n *   return <div ref={ref} />\n * })\n *\n * const MotionComponent = motion(Component)\n * ```\n *\n * @public\n */\nfunction createMotionProxy(createConfig) {\n    function custom(Component, customMotionComponentConfig = {}) {\n        return createMotionComponent(createConfig(Component, customMotionComponentConfig));\n    }\n    if (typeof Proxy === \"undefined\") {\n        return custom;\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    return new Proxy(custom, {\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            /**\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, custom(key));\n            }\n            return componentCache.get(key);\n        },\n    });\n}\n\nexport { createMotionProxy };\n","/**\n * We keep these listed seperately 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]/.test(Component)) {\n        return true;\n    }\n    return false;\n}\n\nexport { isSVGComponent };\n","const scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n    Object.assign(scaleCorrectors, correctors);\n}\n\nexport { addScaleCorrector, scaleCorrectors };\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 { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/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","const isMotionValue = (value) => !!(value === null || value === void 0 ? void 0 : value.getVelocity);\n\nexport { isMotionValue };\n","import { transformPropOrder } from './transform.mjs';\n\nconst translateAlias = {\n    x: \"translateX\",\n    y: \"translateY\",\n    z: \"translateZ\",\n    transformPerspective: \"perspective\",\n};\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\nconst sortTransformProps = (a, b) => transformPropOrder.indexOf(a) - transformPropOrder.indexOf(b);\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({ transform, transformKeys, }, { enableHardwareAcceleration = true, allowTransformNone = true, }, transformIsDefault, transformTemplate) {\n    // The transform string we're going to build into.\n    let transformString = \"\";\n    // Transform keys into their default order - this will determine the output order.\n    transformKeys.sort(sortTransformProps);\n    // Loop over each transform and build them into transformString\n    for (const key of transformKeys) {\n        transformString += `${translateAlias[key] || key}(${transform[key]}) `;\n    }\n    if (enableHardwareAcceleration && !transform.z) {\n        transformString += \"translateZ(0)\";\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 (allowTransformNone && transformIsDefault) {\n        transformString = \"none\";\n    }\n    return transformString;\n}\n\nexport { buildTransform };\n","/**\n * Returns true if the provided key is a CSS variable\n */\nfunction isCSSVariable(key) {\n    return key.startsWith(\"--\");\n}\n\nexport { isCSSVariable };\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","const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\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","/**\n * TODO: When we move from string as a source of truth to data models\n * everything in this folder should probably be referred to as models vs types\n */\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;\nconst floatRegex = /(-)?([\\d]*\\.?[\\d])+/g;\nconst colorRegex = /(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))/gi;\nconst singleColorRegex = /^(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))$/i;\nfunction isString(v) {\n    return typeof v === \"string\";\n}\n\nexport { colorRegex, floatRegex, isString, sanitize, singleColorRegex };\n","import { isString } from '../utils.mjs';\n\nconst createUnitType = (unit) => ({\n    test: (v) => isString(v) && v.endsWith(unit) && v.split(\" \").length === 1,\n    parse: parseFloat,\n    transform: (v) => `${v}${unit}`,\n});\nconst degrees = createUnitType(\"deg\");\nconst percent = createUnitType(\"%\");\nconst px = createUnitType(\"px\");\nconst vh = createUnitType(\"vh\");\nconst vw = 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 { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n    ...number,\n    transform: Math.round,\n};\n\nexport { int };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { px, degrees, progressPercentage } from '../../../value/types/numbers/units.mjs';\nimport { int } from './type-int.mjs';\n\nconst numberValueTypes = {\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    size: 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    // Transform props\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    // Misc\n    zIndex: int,\n    // SVG\n    fillOpacity: alpha,\n    strokeOpacity: alpha,\n    numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { buildTransform } from './build-transform.mjs';\nimport { isCSSVariable } from '../../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './transform.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\n\nfunction buildHTMLStyles(state, latestValues, options, transformTemplate) {\n    const { style, vars, transform, transformKeys, transformOrigin } = state;\n    transformKeys.length = 0;\n    // Track whether we encounter any transform or transformOrigin values.\n    let hasTransform = false;\n    let hasTransformOrigin = false;\n    // Does the calculated transform essentially equal \"none\"?\n    let transformIsNone = true;\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 seperately for further processing.\n     */\n    for (const key in latestValues) {\n        const value = latestValues[key];\n        /**\n         * If this is a CSS variable we don't do any further processing.\n         */\n        if (isCSSVariable(key)) {\n            vars[key] = value;\n            continue;\n        }\n        // Convert the value to its default value type, ie 0 -> \"0px\"\n        const valueType = numberValueTypes[key];\n        const valueAsType = getValueAsType(value, valueType);\n        if (transformProps.has(key)) {\n            // If this is a transform, flag to enable further transform processing\n            hasTransform = true;\n            transform[key] = valueAsType;\n            transformKeys.push(key);\n            // If we already know we have a non-default transform, early return\n            if (!transformIsNone)\n                continue;\n            // Otherwise check to see if this is a default transform\n            if (value !== (valueType.default || 0))\n                transformIsNone = false;\n        }\n        else if (key.startsWith(\"origin\")) {\n            // If this is a transform origin, flag and enable further transform-origin processing\n            hasTransformOrigin = true;\n            transformOrigin[key] = valueAsType;\n        }\n        else {\n            style[key] = valueAsType;\n        }\n    }\n    if (!latestValues.transform) {\n        if (hasTransform || transformTemplate) {\n            style.transform = buildTransform(state, options, transformIsNone, 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    transformKeys: [],\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, isStatic) {\n    return useMemo(() => {\n        const state = createHtmlRenderState();\n        buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);\n        return Object.assign({}, state.vars, state.style);\n    }, [visualState]);\n}\nfunction useStyle(props, visualState, isStatic) {\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, isStatic));\n    return props.transformValues ? props.transformValues(style) : style;\n}\nfunction useHTMLProps(props, visualState, isStatic) {\n    // The `any` isn't ideal but it is the type of createElement props argument\n    const htmlProps = {};\n    const style = useStyle(props, visualState, isStatic);\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    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    \"transformValues\",\n    \"custom\",\n    \"inherit\",\n    \"onLayoutAnimationStart\",\n    \"onLayoutAnimationComplete\",\n    \"onLayoutMeasure\",\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    \"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        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\"] && key.startsWith(\"onDrag\"))) {\n            filteredProps[key] = props[key];\n        }\n    }\n    return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\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 { 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 { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, options, isSVGTag, transformTemplate) {\n    buildHTMLStyles(state, latest, options, 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    // Treat x/y not as shortcuts but as actual attributes\n    if (attrX !== undefined)\n        attrs.x = attrX;\n    if (attrY !== undefined)\n        attrs.y = attrY;\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, { enableHardwareAcceleration: false }, 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 { 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, projectionId, 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 = {\n            ...filteredProps,\n            ...visualProps,\n            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        if (projectionId) {\n            elementProps[\"data-projection-id\"] = projectionId;\n        }\n        return createElement(Component, {\n            ...elementProps,\n            children: renderedChildren,\n        });\n    };\n    return useRender;\n}\n\nexport { createUseRender };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\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 { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n    const { style } = props;\n    const newValues = {};\n    for (const key in style) {\n        if (isMotionValue(style[key]) ||\n            (prevProps.style && isMotionValue(prevProps.style[key])) ||\n            isForcedMotionValue(key, props)) {\n            newValues[key] = style[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n    const newValues = scrapeMotionValuesFromProps$1(props, prevProps);\n    for (const key in props) {\n        if (isMotionValue(props[key]) || isMotionValue(prevProps[key])) {\n            const targetKey = key === \"x\" || key === \"y\" ? \"attr\" + key.toUpperCase() : key;\n            newValues[targetKey] = props[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","function resolveVariantFromProps(props, definition, custom, currentValues = {}, currentVelocity = {}) {\n    /**\n     * If the variant definition is a function, resolve.\n     */\n    if (typeof definition === \"function\") {\n        definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\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        definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\n    }\n    return definition;\n}\n\nexport { resolveVariantFromProps };\n","const isKeyframesTarget = (v) => {\n    return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\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 { 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","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.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';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {\n    const state = {\n        latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n        renderState: createRenderState(),\n    };\n    if (onMount) {\n        state.mount = (instance) => onMount(props, instance, state);\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        list.forEach((definition) => {\n            const resolved = resolveVariantFromProps(props, definition);\n            if (!resolved)\n                return;\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    return values;\n}\n\nexport { makeUseVisualState };\n","import { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nconst svgMotionConfig = {\n    useVisualState: makeUseVisualState({\n        scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n        createRenderState: createSvgRenderState,\n        onMount: (props, instance, { renderState, latestValues }) => {\n            try {\n                renderState.dimensions =\n                    typeof instance.getBBox ===\n                        \"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            buildSVGAttrs(renderState, latestValues, { enableHardwareAcceleration: false }, isSVGTag(instance.tagName), props.transformTemplate);\n            renderSVG(instance, renderState);\n        },\n    }),\n};\n\nexport { svgMotionConfig };\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","var AnimationType;\n(function (AnimationType) {\n    AnimationType[\"Animate\"] = \"animate\";\n    AnimationType[\"Hover\"] = \"whileHover\";\n    AnimationType[\"Tap\"] = \"whileTap\";\n    AnimationType[\"Drag\"] = \"whileDrag\";\n    AnimationType[\"Focus\"] = \"whileFocus\";\n    AnimationType[\"InView\"] = \"whileInView\";\n    AnimationType[\"Exit\"] = \"exit\";\n})(AnimationType || (AnimationType = {}));\n\nexport { AnimationType };\n","import { useEffect } from 'react';\n\nfunction addDomEvent(target, eventName, handler, options = { passive: true }) {\n    target.addEventListener(eventName, handler, options);\n    return () => target.removeEventListener(eventName, handler);\n}\n/**\n * Attaches an event listener directly to the provided DOM element.\n *\n * Bypassing React's event system can be desirable, for instance when attaching non-passive\n * event handlers.\n *\n * ```jsx\n * const ref = useRef(null)\n *\n * useDomEvent(ref, 'wheel', onWheel, { passive: false })\n *\n * return <div ref={ref} />\n * ```\n *\n * @param ref - React.RefObject that's been provided to the element you want to bind the listener to.\n * @param eventName - Name of the event you want listen for.\n * @param handler - Function to fire when receiving the event.\n * @param options - Options to pass to `Event.addEventListener`.\n *\n * @public\n */\nfunction useDomEvent(ref, eventName, handler, options) {\n    useEffect(() => {\n        const element = ref.current;\n        if (handler && element) {\n            return addDomEvent(element, eventName, handler, options);\n        }\n    }, [ref, eventName, handler, options]);\n}\n\nexport { addDomEvent, useDomEvent };\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","import { isPrimaryPointer } from './utils/is-primary-pointer.mjs';\n\nfunction extractEventInfo(event, pointType = \"page\") {\n    return {\n        point: {\n            x: event[pointType + \"X\"],\n            y: event[pointType + \"Y\"],\n        },\n    };\n}\nconst addPointerInfo = (handler) => {\n    return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent, useDomEvent } from './use-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}\nfunction usePointerEvent(ref, eventName, handler, options) {\n    return useDomEvent(ref, eventName, handler && addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent, usePointerEvent };\n","function createLock(name) {\n    let lock = null;\n    return () => {\n        const openLock = () => {\n            lock = null;\n        };\n        if (lock === null) {\n            lock = name;\n            return openLock;\n        }\n        return false;\n    };\n}\nconst globalHorizontalLock = createLock(\"dragHorizontal\");\nconst globalVerticalLock = createLock(\"dragVertical\");\nfunction getGlobalLock(drag) {\n    let lock = false;\n    if (drag === \"y\") {\n        lock = globalVerticalLock();\n    }\n    else if (drag === \"x\") {\n        lock = globalHorizontalLock();\n    }\n    else {\n        const openHorizontal = globalHorizontalLock();\n        const openVertical = globalVerticalLock();\n        if (openHorizontal && openVertical) {\n            lock = () => {\n                openHorizontal();\n                openVertical();\n            };\n        }\n        else {\n            // Release the locks because we don't use them\n            if (openHorizontal)\n                openHorizontal();\n            if (openVertical)\n                openVertical();\n        }\n    }\n    return lock;\n}\nfunction isDragActive() {\n    // Check the gesture lock - if we get it, it means no drag gesture is active\n    // and we can safely fire the tap gesture.\n    const openGestureLock = getGlobalLock(true);\n    if (!openGestureLock)\n        return true;\n    openGestureLock();\n    return false;\n}\n\nexport { createLock, getGlobalLock, isDragActive };\n","import { AnimationType } from '../render/utils/types.mjs';\nimport { usePointerEvent } from '../events/use-pointer-event.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { useMemo } from 'react';\n\nfunction createHoverEvent(visualElement, isActive, applyVariants, callback) {\n    return (event, info) => {\n        if (event.type === \"touch\" || isDragActive())\n            return;\n        /**\n         * Ensure we trigger animations before firing event callback\n         */\n        if (applyVariants && visualElement.animationState) {\n            visualElement.animationState.setActive(AnimationType.Hover, isActive);\n        }\n        callback && callback(event, info);\n    };\n}\nfunction useHoverGesture({ onHoverStart, onHoverEnd, whileHover, visualElement, }) {\n    usePointerEvent(visualElement, \"pointerenter\", useMemo(() => {\n        return onHoverStart || whileHover\n            ? createHoverEvent(visualElement, true, Boolean(whileHover), onHoverStart)\n            : undefined;\n    }, [onHoverStart, Boolean(whileHover), visualElement]), { passive: !onHoverStart });\n    usePointerEvent(visualElement, \"pointerleave\", useMemo(() => {\n        return onHoverEnd || whileHover\n            ? createHoverEvent(visualElement, false, Boolean(whileHover), onHoverEnd)\n            : undefined;\n    }, [onHoverStart, Boolean(whileHover), visualElement]), { passive: !onHoverEnd });\n}\n\nexport { useHoverGesture };\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","/**\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","/**\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 { useRef, useEffect } from 'react';\nimport { AnimationType } from '../../../render/utils/types.mjs';\nimport { warnOnce } from '../../../utils/warn-once.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nfunction useViewport({ visualElement, whileInView, onViewportEnter, onViewportLeave, viewport = {}, }) {\n    const state = useRef({\n        hasEnteredView: false,\n        isInView: false,\n    });\n    let shouldObserve = Boolean(whileInView || onViewportEnter || onViewportLeave);\n    if (viewport.once && state.current.hasEnteredView)\n        shouldObserve = false;\n    const useObserver = typeof IntersectionObserver === \"undefined\"\n        ? useMissingIntersectionObserver\n        : useIntersectionObserver;\n    useObserver(shouldObserve, state.current, visualElement, viewport);\n}\nconst thresholdNames = {\n    some: 0,\n    all: 1,\n};\nfunction useIntersectionObserver(shouldObserve, state, visualElement, { root, margin: rootMargin, amount = \"some\", once }) {\n    useEffect(() => {\n        if (!shouldObserve || !visualElement.current)\n            return;\n        const options = {\n            root: root === null || root === void 0 ? void 0 : root.current,\n            rootMargin,\n            threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n        };\n        const intersectionCallback = (entry) => {\n            const { isIntersecting } = entry;\n            /**\n             * If there's been no change in the viewport state, early return.\n             */\n            if (state.isInView === isIntersecting)\n                return;\n            state.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 && state.hasEnteredView) {\n                return;\n            }\n            else if (isIntersecting) {\n                state.hasEnteredView = true;\n            }\n            if (visualElement.animationState) {\n                visualElement.animationState.setActive(AnimationType.InView, isIntersecting);\n            }\n            /**\n             * Use the latest committed props rather than the ones in scope\n             * when this observer is created\n             */\n            const props = visualElement.getProps();\n            const callback = isIntersecting\n                ? props.onViewportEnter\n                : props.onViewportLeave;\n            callback && callback(entry);\n        };\n        return observeIntersection(visualElement.current, options, intersectionCallback);\n    }, [shouldObserve, root, rootMargin, amount]);\n}\n/**\n * If IntersectionObserver is missing, we activate inView and fire onViewportEnter\n * on mount. This way, the page will be in the state the author expects users\n * to see it in for everyone.\n */\nfunction useMissingIntersectionObserver(shouldObserve, state, visualElement, { fallback = true }) {\n    useEffect(() => {\n        if (!shouldObserve || !fallback)\n            return;\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, \"IntersectionObserver not available on this device. whileInView animations will trigger on mount.\");\n        }\n        /**\n         * Fire this in an rAF because, at this point, the animation state\n         * won't have flushed for the first time and there's certain logic in\n         * there that behaves differently on the initial animation.\n         *\n         * This hook should be quite rarely called so setting this in an rAF\n         * is preferred to changing the behaviour of the animation state.\n         */\n        requestAnimationFrame(() => {\n            state.hasEnteredView = true;\n            const { onViewportEnter } = visualElement.getProps();\n            onViewportEnter && onViewportEnter(null);\n            if (visualElement.animationState) {\n                visualElement.animationState.setActive(AnimationType.InView, true);\n            }\n        });\n    }, [shouldObserve]);\n}\n\nexport { useViewport };\n","const makeRenderlessComponent = (hook) => (props) => {\n    hook(props);\n    return null;\n};\n\nexport { makeRenderlessComponent };\n","import { useFocusGesture } from '../../gestures/use-focus-gesture.mjs';\nimport { useHoverGesture } from '../../gestures/use-hover-gesture.mjs';\nimport { useTapGesture } from '../../gestures/use-tap-gesture.mjs';\nimport { useViewport } from './viewport/use-viewport.mjs';\nimport { makeRenderlessComponent } from '../utils/make-renderless-component.mjs';\n\nconst gestureAnimations = {\n    inView: makeRenderlessComponent(useViewport),\n    tap: makeRenderlessComponent(useTapGesture),\n    focus: makeRenderlessComponent(useFocusGesture),\n    hover: makeRenderlessComponent(useHoverGesture),\n};\n\nexport { gestureAnimations };\n","import { useRef, useCallback } from 'react';\nimport { isNodeOrChild } from './utils/is-node-or-child.mjs';\nimport { addPointerEvent, usePointerEvent } from '../events/use-pointer-event.mjs';\nimport { useUnmountEffect } from '../utils/use-unmount-effect.mjs';\nimport { AnimationType } from '../render/utils/types.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\n/**\n * @param handlers -\n * @internal\n */\nfunction useTapGesture({ onTap, onTapStart, onTapCancel, whileTap, visualElement, ...props }) {\n    const hasPressListeners = onTap || onTapStart || onTapCancel || whileTap;\n    const isPressing = useRef(false);\n    const cancelPointerEndListeners = useRef(null);\n    /**\n     * Only set listener to passive if there are no external listeners.\n     */\n    const eventOptions = {\n        passive: !(onTapStart ||\n            onTap ||\n            onTapCancel ||\n            props[\"onPointerDown\"]),\n    };\n    function removePointerEndListener() {\n        cancelPointerEndListeners.current && cancelPointerEndListeners.current();\n        cancelPointerEndListeners.current = null;\n    }\n    function checkPointerEnd() {\n        removePointerEndListener();\n        isPressing.current = false;\n        const latestProps = visualElement.getProps();\n        if (latestProps.whileTap && visualElement.animationState) {\n            visualElement.animationState.setActive(AnimationType.Tap, false);\n        }\n        return !isDragActive();\n    }\n    function onPointerUp(event, info) {\n        var _a, _b, _c, _d;\n        if (!checkPointerEnd())\n            return;\n        /**\n         * We only count this as a tap gesture if the event.target is the same\n         * as, or a child of, this component's element\n         */\n        !isNodeOrChild(visualElement.current, event.target)\n            ? (_b = (_a = visualElement.getProps()).onTapCancel) === null || _b === void 0 ? void 0 : _b.call(_a, event, info)\n            : (_d = (_c = visualElement.getProps()).onTap) === null || _d === void 0 ? void 0 : _d.call(_c, event, info);\n    }\n    function onPointerCancel(event, info) {\n        var _a, _b;\n        if (!checkPointerEnd())\n            return;\n        (_b = (_a = visualElement.getProps()).onTapCancel) === null || _b === void 0 ? void 0 : _b.call(_a, event, info);\n    }\n    const startPress = useCallback((event, info) => {\n        var _a;\n        removePointerEndListener();\n        if (isPressing.current)\n            return;\n        isPressing.current = true;\n        cancelPointerEndListeners.current = pipe(addPointerEvent(window, \"pointerup\", onPointerUp, eventOptions), addPointerEvent(window, \"pointercancel\", onPointerCancel, eventOptions));\n        const latestProps = visualElement.getProps();\n        /**\n         * Ensure we trigger animations before firing event callback\n         */\n        if (latestProps.whileTap && visualElement.animationState) {\n            visualElement.animationState.setActive(AnimationType.Tap, true);\n        }\n        (_a = latestProps.onTapStart) === null || _a === void 0 ? void 0 : _a.call(latestProps, event, info);\n    }, [Boolean(onTapStart), visualElement]);\n    usePointerEvent(visualElement, \"pointerdown\", hasPressListeners ? startPress : undefined, eventOptions);\n    useUnmountEffect(removePointerEndListener);\n}\n\nexport { useTapGesture };\n","import { AnimationType } from '../render/utils/types.mjs';\nimport { useDomEvent } from '../events/use-dom-event.mjs';\nimport { useCallback } from 'react';\n\n/**\n *\n * @param props\n * @param ref\n * @internal\n */\nfunction useFocusGesture({ whileFocus, visualElement, }) {\n    const { animationState } = visualElement;\n    const onFocus = useCallback(() => {\n        animationState && animationState.setActive(AnimationType.Focus, true);\n    }, [animationState]);\n    const onBlur = useCallback(() => {\n        animationState && animationState.setActive(AnimationType.Focus, false);\n    }, [animationState]);\n    useDomEvent(visualElement, \"focus\", whileFocus ? onFocus : undefined);\n    useDomEvent(visualElement, \"blur\", whileFocus ? onBlur : undefined);\n}\n\nexport { useFocusGesture };\n","import { useContext, useId, useEffect } 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 <div />\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() {\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    // Replace with useId when released in React\n    const id = useId();\n    useEffect(() => register(id), []);\n    const safeToRemove = () => onExitComplete && onExitComplete(id);\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 <div />\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","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 * 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+$/.test(v);\n\nexport { isNumericalString };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/.test(v);\n\nexport { isZeroValueString };\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 { frameData } from '../frameloop/data.mjs';\nimport { sync } from '../frameloop/index.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\n\nconst isFloat = (value) => {\n    return !isNaN(parseFloat(value));\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 = \"8.5.5\";\n        /**\n         * Duration, in milliseconds, since last updating frame.\n         *\n         * @internal\n         */\n        this.timeDelta = 0;\n        /**\n         * Timestamp of the last time this `MotionValue` was updated.\n         *\n         * @internal\n         */\n        this.lastUpdated = 0;\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 = false;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        this.updateAndNotify = (v, render = true) => {\n            this.prev = this.current;\n            this.current = v;\n            // Update timestamp\n            const { delta, timestamp } = frameData;\n            if (this.lastUpdated !== timestamp) {\n                this.timeDelta = delta;\n                this.lastUpdated = timestamp;\n                sync.postRender(this.scheduleVelocityCheck);\n            }\n            // Update update subscribers\n            if (this.prev !== this.current && this.events.change) {\n                this.events.change.notify(this.current);\n            }\n            // Update velocity subscribers\n            if (this.events.velocityChange) {\n                this.events.velocityChange.notify(this.getVelocity());\n            }\n            // Update render subscribers\n            if (render && this.events.renderRequest) {\n                this.events.renderRequest.notify(this.current);\n            }\n        };\n        /**\n         * Schedule a velocity check for the next frame.\n         *\n         * This is an instanced and bound function to prevent generating a new\n         * function once per frame.\n         *\n         * @internal\n         */\n        this.scheduleVelocityCheck = () => sync.postRender(this.velocityCheck);\n        /**\n         * Updates `prev` with `current` if the value hasn't been updated this frame.\n         * This ensures velocity calculations return `0`.\n         *\n         * This is an instanced and bound function to prevent generating a new\n         * function once per frame.\n         *\n         * @internal\n         */\n        this.velocityCheck = ({ timestamp }) => {\n            if (timestamp !== this.lastUpdated) {\n                this.prev = this.current;\n                if (this.events.velocityChange) {\n                    this.events.velocityChange.notify(this.getVelocity());\n                }\n            }\n        };\n        this.hasAnimated = false;\n        this.prev = this.current = init;\n        this.canTrackVelocity = isFloat(this.current);\n        this.owner = options.owner;\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 <motion.div style={{ x }} />\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        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                sync.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 = prev;\n        this.timeDelta = 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) {\n        this.updateAndNotify(v);\n        this.prev = v;\n        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        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        // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n        return this.canTrackVelocity\n            ? // These casts could be avoided if parseFloat would be typed better\n                velocityPerSecond(parseFloat(this.current) -\n                    parseFloat(this.prev), this.timeDelta)\n            : 0;\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) || null;\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        this.animation = null;\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, motionValue };\n","import { isString, singleColorRegex, floatRegex } from '../utils.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((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||\n        (testProp && Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n    if (!isString(v))\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","import { clamp } from '../../../utils/clamp.mjs';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils.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: isColorString(\"rgb\", \"red\"),\n    parse: 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: isColorString(\"#\"),\n    parse: parseHex,\n    transform: rgba.transform,\n};\n\nexport { hex };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n    test: isColorString(\"hsl\", \"hue\"),\n    parse: 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 { isString } from '../utils.mjs';\nimport { 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 isString(v)\n            ? v\n            : v.hasOwnProperty(\"red\")\n                ? rgba.transform(v)\n                : hsla.transform(v);\n    },\n};\n\nexport { color };\n","import { color } from '../color/index.mjs';\nimport { number } from '../numbers/index.mjs';\nimport { isString, floatRegex, colorRegex, sanitize } from '../utils.mjs';\n\nconst colorToken = \"${c}\";\nconst numberToken = \"${n}\";\nfunction test(v) {\n    var _a, _b;\n    return (isNaN(v) &&\n        isString(v) &&\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}\nfunction analyseComplexValue(v) {\n    if (typeof v === \"number\")\n        v = `${v}`;\n    const values = [];\n    let numColors = 0;\n    let numNumbers = 0;\n    const colors = v.match(colorRegex);\n    if (colors) {\n        numColors = colors.length;\n        // Strip colors from input so they're not picked up by number regex.\n        // There's a better way to combine these regex searches, but its beyond my regex skills\n        v = v.replace(colorRegex, colorToken);\n        values.push(...colors.map(color.parse));\n    }\n    const numbers = v.match(floatRegex);\n    if (numbers) {\n        numNumbers = numbers.length;\n        v = v.replace(floatRegex, numberToken);\n        values.push(...numbers.map(number.parse));\n    }\n    return { values, numColors, numNumbers, tokenised: v };\n}\nfunction parse(v) {\n    return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n    const { values, numColors, tokenised } = analyseComplexValue(source);\n    const numValues = values.length;\n    return (v) => {\n        let output = tokenised;\n        for (let i = 0; i < numValues; i++) {\n            output = output.replace(i < numColors ? colorToken : numberToken, i < numColors\n                ? color.transform(v[i])\n                : sanitize(v[i]));\n        }\n        return output;\n    };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n    const parsed = parse(v);\n    const transformer = createTransformer(v);\n    return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = { test, parse, createTransformer, getAnimatableNone };\n\nexport { analyseComplexValue, complex };\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils.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 = /([a-z-]*)\\(.*?\\)/g;\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 { 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    var _a;\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 (_a = defaultValueType.getAnimatableNone) === null || _a === void 0 ? void 0 : _a.call(defaultValueType, value);\n}\n\nexport { getAnimatableNone };\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 { 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","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\n/**\n * Creates an object containing the latest state of every MotionValue on a VisualElement\n */\nfunction getCurrent(visualElement) {\n    const current = {};\n    visualElement.values.forEach((value, key) => (current[key] = value.get()));\n    return current;\n}\n/**\n * Creates an object containing the latest velocity of every MotionValue on a VisualElement\n */\nfunction getVelocity(visualElement) {\n    const velocity = {};\n    visualElement.values.forEach((value, key) => (velocity[key] = value.getVelocity()));\n    return velocity;\n}\nfunction resolveVariant(visualElement, definition, custom) {\n    const props = visualElement.getProps();\n    return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, getCurrent(visualElement), getVelocity(visualElement));\n}\n\nexport { resolveVariant };\n","import { isNumericalString } from '../../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\nimport { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../dom/value-types/animatable-none.mjs';\nimport { findValueType } from '../dom/value-types/find.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 ? visualElement.makeTargetAnimatable(resolved, false) : {};\n    target = { ...target, ...transitionEnd };\n    for (const key in target) {\n        const value = resolveFinalValueInKeyframes(target[key]);\n        setMotionValue(visualElement, key, value);\n    }\n}\nfunction setVariants(visualElement, variantLabels) {\n    const reversedLabels = [...variantLabels].reverse();\n    reversedLabels.forEach((key) => {\n        var _a;\n        const variant = visualElement.getVariant(key);\n        variant && setTarget(visualElement, variant);\n        (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => {\n            setVariants(child, variantLabels);\n        });\n    });\n}\nfunction setValues(visualElement, definition) {\n    if (Array.isArray(definition)) {\n        return setVariants(visualElement, definition);\n    }\n    else if (typeof definition === \"string\") {\n        return setVariants(visualElement, [definition]);\n    }\n    else {\n        setTarget(visualElement, definition);\n    }\n}\nfunction checkTargetForNewValues(visualElement, target, origin) {\n    var _a, _b;\n    const newValueKeys = Object.keys(target).filter((key) => !visualElement.hasValue(key));\n    const numNewValues = newValueKeys.length;\n    if (!numNewValues)\n        return;\n    for (let i = 0; i < numNewValues; i++) {\n        const key = newValueKeys[i];\n        const targetValue = target[key];\n        let value = null;\n        /**\n         * If the target is a series of keyframes, we can use the first value\n         * in the array. If this first value is null, we'll still need to read from the DOM.\n         */\n        if (Array.isArray(targetValue)) {\n            value = targetValue[0];\n        }\n        /**\n         * If the target isn't keyframes, or the first keyframe was null, we need to\n         * first check if an origin value was explicitly defined in the transition as \"from\",\n         * if not read the value from the DOM. As an absolute fallback, take the defined target value.\n         */\n        if (value === null) {\n            value = (_b = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readValue(key)) !== null && _b !== void 0 ? _b : target[key];\n        }\n        /**\n         * If value is still undefined or null, ignore it. Preferably this would throw,\n         * but this was causing issues in Framer.\n         */\n        if (value === undefined || value === null)\n            continue;\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(targetValue)) {\n            value = getAnimatableNone(key, targetValue);\n        }\n        visualElement.addValue(key, motionValue(value, { owner: visualElement }));\n        if (origin[key] === undefined) {\n            origin[key] = value;\n        }\n        if (value !== null)\n            visualElement.setBaseTarget(key, value);\n    }\n}\nfunction getOriginFromTransition(key, transition) {\n    if (!transition)\n        return;\n    const valueTransition = transition[key] || transition[\"default\"] || transition;\n    return valueTransition.from;\n}\nfunction getOrigin(target, transition, visualElement) {\n    var _a;\n    const origin = {};\n    for (const key in target) {\n        const transitionOrigin = getOriginFromTransition(key, transition);\n        origin[key] =\n            transitionOrigin !== undefined\n                ? transitionOrigin\n                : (_a = visualElement.getValue(key)) === null || _a === void 0 ? void 0 : _a.get();\n    }\n    return origin;\n}\n\nexport { checkTargetForNewValues, getOrigin, getOriginFromTransition, setTarget, setValues };\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","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n\nexport { secondsToMilliseconds };\n","const instantAnimationState = {\n    current: false,\n};\n\nexport { instantAnimationState };\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 { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst easeIn = (p) => p * p;\nconst easeOut = reverseEasing(easeIn);\nconst easeInOut = mirrorEasing(easeIn);\n\nexport { easeIn, easeInOut, easeOut };\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 mix = (from, to, progress) => -progress * from + progress * to + from;\n\nexport { mix };\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","import { mix } from './mix.mjs';\nimport { invariant } from 'hey-listen';\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';\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    return Math.sqrt(Math.max(0, v * (to * to - fromExpo) + fromExpo));\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n    const type = getColorType(color);\n    invariant(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n    let model = type.parse(color);\n    if (type === hsla) {\n        // TODO Remove this cast - needed since Framer 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    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 = mix(fromRGBA.alpha, toRGBA.alpha, v);\n        return rgba.transform(blended);\n    };\n};\n\nexport { mixColor, mixLinearColor };\n","import { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { pipe } from './pipe.mjs';\nimport { warning } from 'hey-listen';\nimport { color } from '../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../value/types/complex/index.mjs';\n\nfunction getMixer(origin, target) {\n    if (typeof origin === \"number\") {\n        return (v) => mix(origin, target, v);\n    }\n    else if (color.test(origin)) {\n        return mixColor(origin, target);\n    }\n    else {\n        return mixComplex(origin, target);\n    }\n}\nconst mixArray = (from, to) => {\n    const output = [...from];\n    const numValues = output.length;\n    const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));\n    return (v) => {\n        for (let i = 0; i < numValues; i++) {\n            output[i] = blendValue[i](v);\n        }\n        return output;\n    };\n};\nconst mixObject = (origin, target) => {\n    const output = { ...origin, ...target };\n    const blendValue = {};\n    for (const key in output) {\n        if (origin[key] !== undefined && target[key] !== undefined) {\n            blendValue[key] = getMixer(origin[key], target[key]);\n        }\n    }\n    return (v) => {\n        for (const key in blendValue) {\n            output[key] = blendValue[key](v);\n        }\n        return output;\n    };\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.numColors === targetStats.numColors &&\n        originStats.numNumbers >= targetStats.numNumbers;\n    if (canInterpolate) {\n        return pipe(mixArray(originStats.values, 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 (p) => `${p > 0 ? target : origin}`;\n    }\n};\n\nexport { mixArray, mixComplex, mixObject };\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*/\nconst progress = (from, to, value) => {\n    const toFromDifference = to - from;\n    return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","import { invariant } from 'hey-listen';\nimport { color } from '../value/types/color/index.mjs';\nimport { clamp } from './clamp.mjs';\nimport { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { mixComplex, mixArray, mixObject } from './mix-complex.mjs';\nimport { pipe } from './pipe.mjs';\nimport { progress } from './progress.mjs';\n\nconst mixNumber = (from, to) => (p) => mix(from, to, p);\nfunction detectMixerFactory(v) {\n    if (typeof v === \"number\") {\n        return mixNumber;\n    }\n    else if (typeof v === \"string\") {\n        if (color.test(v)) {\n            return mixColor;\n        }\n        else {\n            return mixComplex;\n        }\n    }\n    else if (Array.isArray(v)) {\n        return mixArray;\n    }\n    else if (typeof v === \"object\") {\n        return mixObject;\n    }\n    return mixNumber;\n}\nfunction createMixers(output, ease, customMixer) {\n    const mixers = [];\n    const mixerFactory = customMixer || detectMixerFactory(output[0]);\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] : 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    invariant(!ease || !Array.isArray(ease) || ease.length === inputLength - 1, \"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values.\");\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        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","const noop = (any) => any;\n\nexport { noop };\n","import { noop } from '../utils/noop.mjs';\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","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(circOut);\n\nexport { circIn, circInOut, circOut };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = reverseEasing(backOut);\nconst backInOut = mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { invariant } from 'hey-listen';\nimport { cubicBezier } from '../../easing/cubic-bezier.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { easeIn, easeInOut, easeOut } from '../../easing/ease.mjs';\nimport { circIn, circInOut, circOut } from '../../easing/circ.mjs';\nimport { backIn, backInOut, backOut } from '../../easing/back.mjs';\nimport { anticipate } from '../../easing/anticipate.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 (Array.isArray(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};\nconst isEasingArray = (ease) => {\n    return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { easingDefinitionToFunction, isEasingArray };\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 { easeInOut } from '../../easing/ease.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { isEasingArray, easingDefinitionToFunction } from '../utils/easing.mjs';\n\nfunction defaultEasing(values, easing) {\n    return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction defaultOffset(values) {\n    const numValues = values.length;\n    return values.map((_value, i) => i !== 0 ? i / (numValues - 1) : 0);\n}\nfunction convertOffsetToTimes(offset, duration) {\n    return offset.map((o) => o * duration);\n}\nfunction keyframes({ keyframes: keyframeValues, ease = easeInOut, times, duration = 300, }) {\n    keyframeValues = [...keyframeValues];\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    function createInterpolator() {\n        return interpolate(absoluteTimes, keyframeValues, {\n            ease: Array.isArray(easingFunctions)\n                ? easingFunctions\n                : defaultEasing(keyframeValues, easingFunctions),\n        });\n    }\n    let interpolator = createInterpolator();\n    return {\n        next: (t) => {\n            state.value = interpolator(t);\n            state.done = t >= duration;\n            return state;\n        },\n        flipTarget: () => {\n            keyframeValues.reverse();\n            interpolator = createInterpolator();\n        },\n    };\n}\n\nexport { convertOffsetToTimes, defaultEasing, defaultOffset, keyframes };\n","import { warning } from 'hey-listen';\nimport { clamp } from '../../utils/clamp.mjs';\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= maxDuration * 1000, \"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(minDamping, maxDamping, dampingRatio);\n    duration = clamp(minDuration, maxDuration, duration / 1000);\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 = duration * 1000;\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: 100,\n            damping: 10,\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, maxDamping, maxDuration, minDamping, minDuration };\n","import { findSpring, calcAngularFreq } from './find-spring.mjs';\nimport { velocityPerSecond } from '../../utils/velocity-per-second.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: 0.0,\n        stiffness: 100,\n        damping: 10,\n        mass: 1.0,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        const derived = findSpring(options);\n        springOptions = {\n            ...springOptions,\n            ...derived,\n            velocity: 0.0,\n            mass: 1.0,\n        };\n        springOptions.isResolvedFromDuration = true;\n    }\n    return springOptions;\n}\nconst velocitySampleDuration = 5;\n/**\n * This is based on the spring implementation of Wobble https://github.com/skevy/wobble\n */\nfunction spring({ keyframes, restDelta, restSpeed, ...options }) {\n    let origin = keyframes[0];\n    let target = keyframes[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, velocity, duration, isResolvedFromDuration, } = getSpringOptions(options);\n    let resolveSpring = zero;\n    let initialVelocity = velocity ? -(velocity / 1000) : 0.0;\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    function createSpring() {\n        const initialDelta = target - origin;\n        const undampedAngularFreq = Math.sqrt(stiffness / mass) / 1000;\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 ? 0.01 : 2);\n        restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);\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) *\n                            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    }\n    createSpring();\n    return {\n        next: (t) => {\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                let currentVelocity = initialVelocity;\n                if (t !== 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                        const prevT = Math.max(0, t - velocitySampleDuration);\n                        currentVelocity = velocityPerSecond(current - resolveSpring(prevT), t - prevT);\n                    }\n                    else {\n                        currentVelocity = 0;\n                    }\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        flipTarget: () => {\n            initialVelocity = -initialVelocity;\n            [origin, target] = [target, origin];\n            createSpring();\n        },\n    };\n}\nspring.needsInterpolation = (a, b) => typeof a === \"string\" || typeof b === \"string\";\nconst zero = (_t) => 0;\n\nexport { spring };\n","import { keyframes } from './keyframes.mjs';\nimport { spring } from './spring.mjs';\nimport { decay } from './decay.mjs';\nimport { sync, cancelSync } from '../../frameloop/index.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\n\nconst types = {\n    decay,\n    keyframes: keyframes,\n    tween: keyframes,\n    spring,\n};\nfunction loopElapsed(elapsed, duration, delay = 0) {\n    return elapsed - duration - delay;\n}\nfunction reverseElapsed(elapsed, duration = 0, delay = 0, isForwardPlayback = true) {\n    return isForwardPlayback\n        ? loopElapsed(duration + -elapsed, duration, delay)\n        : duration - (elapsed - duration) + delay;\n}\nfunction hasRepeatDelayElapsed(elapsed, duration, delay, isForwardPlayback) {\n    return isForwardPlayback ? elapsed >= duration + delay : elapsed <= -delay;\n}\nconst framesync = (update) => {\n    const passTimestamp = ({ delta }) => update(delta);\n    return {\n        start: () => sync.update(passTimestamp, true),\n        stop: () => cancelSync.update(passTimestamp),\n    };\n};\nfunction animate({ duration, driver = framesync, elapsed = 0, repeat: repeatMax = 0, repeatType = \"loop\", repeatDelay = 0, keyframes: keyframes$1, autoplay = true, onPlay, onStop, onComplete, onRepeat, onUpdate, type = \"keyframes\", ...options }) {\n    var _a, _b;\n    const initialElapsed = elapsed;\n    let driverControls;\n    let repeatCount = 0;\n    let computedDuration = duration;\n    let isComplete = false;\n    let isForwardPlayback = true;\n    let interpolateFromNumber;\n    const animator = types[keyframes$1.length > 2 ? \"keyframes\" : type] || keyframes;\n    const origin = keyframes$1[0];\n    const target = keyframes$1[keyframes$1.length - 1];\n    let state = { done: false, value: origin };\n    if ((_b = (_a = animator).needsInterpolation) === null || _b === void 0 ? void 0 : _b.call(_a, origin, target)) {\n        interpolateFromNumber = interpolate([0, 100], [origin, target], {\n            clamp: false,\n        });\n        keyframes$1 = [0, 100];\n    }\n    const animation = animator({\n        ...options,\n        duration,\n        keyframes: keyframes$1,\n    });\n    function repeat() {\n        repeatCount++;\n        if (repeatType === \"reverse\") {\n            isForwardPlayback = repeatCount % 2 === 0;\n            elapsed = reverseElapsed(elapsed, computedDuration, repeatDelay, isForwardPlayback);\n        }\n        else {\n            elapsed = loopElapsed(elapsed, computedDuration, repeatDelay);\n            if (repeatType === \"mirror\")\n                animation.flipTarget();\n        }\n        isComplete = false;\n        onRepeat && onRepeat();\n    }\n    function complete() {\n        driverControls && driverControls.stop();\n        onComplete && onComplete();\n    }\n    function update(delta) {\n        if (!isForwardPlayback)\n            delta = -delta;\n        elapsed += delta;\n        if (!isComplete) {\n            state = animation.next(Math.max(0, elapsed));\n            if (interpolateFromNumber)\n                state.value = interpolateFromNumber(state.value);\n            isComplete = isForwardPlayback ? state.done : elapsed <= 0;\n        }\n        onUpdate && onUpdate(state.value);\n        if (isComplete) {\n            if (repeatCount === 0) {\n                computedDuration =\n                    computedDuration !== undefined ? computedDuration : elapsed;\n            }\n            if (repeatCount < repeatMax) {\n                hasRepeatDelayElapsed(elapsed, computedDuration, repeatDelay, isForwardPlayback) && repeat();\n            }\n            else {\n                complete();\n            }\n        }\n    }\n    function play() {\n        onPlay && onPlay();\n        driverControls = driver(update);\n        driverControls.start();\n    }\n    autoplay && play();\n    return {\n        stop: () => {\n            onStop && onStop();\n            driverControls && driverControls.stop();\n        },\n        /**\n         * Set the current time of the animation. This is purposefully\n         * mirroring the WAAPI animation API to make them interchanagable.\n         * Going forward this file should be ported more towards\n         * https://github.com/motiondivision/motionone/blob/main/packages/animation/src/Animation.ts\n         * Which behaviourally adheres to WAAPI as far as possible.\n         *\n         * WARNING: This is not safe to use for most animations. We currently\n         * only use it for handoff from WAAPI within Framer.\n         *\n         * This animation function consumes time every frame rather than being sampled for time.\n         * So the sample() method performs some headless frames to ensure\n         * repeats are handled correctly. Ideally in the future we will replace\n         * that method with this, once repeat calculations are pure.\n         */\n        set currentTime(t) {\n            elapsed = initialElapsed;\n            update(t);\n        },\n        /**\n         * animate() can't yet be sampled for time, instead it\n         * consumes time. So to sample it we have to run a low\n         * temporal-resolution version.\n         */\n        sample: (t) => {\n            elapsed = initialElapsed;\n            const sampleResolution = duration && typeof duration === \"number\"\n                ? Math.max(duration * 0.5, 50)\n                : 50;\n            let sampleElapsed = 0;\n            update(0);\n            while (sampleElapsed <= t) {\n                const remaining = t - sampleElapsed;\n                update(Math.min(remaining, sampleResolution));\n                sampleElapsed += sampleResolution;\n            }\n            return state;\n        },\n    };\n}\n\nexport { animate, hasRepeatDelayElapsed, loopElapsed, reverseElapsed };\n","function decay({ \n/**\n * The decay animation dynamically calculates an end of the animation\n * based on the initial keyframe, so we only need to define a single keyframe\n * as default.\n */\nkeyframes = [0], velocity = 0, power = 0.8, timeConstant = 350, restDelta = 0.5, modifyTarget, }) {\n    const origin = keyframes[0];\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    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    return {\n        next: (t) => {\n            const delta = -amplitude * Math.exp(-t / timeConstant);\n            state.done = !(delta > restDelta || delta < -restDelta);\n            state.value = state.done ? target : target + delta;\n            return state;\n        },\n        flipTarget: () => { },\n    };\n}\n\nexport { decay };\n","function isWaapiSupportedEasing(easing) {\n    return (!easing || // Default easing\n        Array.isArray(easing) || // Bezier curve\n        (typeof easing === \"string\" && supportedWaapiEasing[easing]));\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: cubicBezierAsString([0, 0.65, 0.55, 1]),\n    circOut: cubicBezierAsString([0.55, 0, 1, 0.45]),\n    backIn: cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n    backOut: cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing) {\n    if (!easing)\n        return undefined;\n    return Array.isArray(easing)\n        ? cubicBezierAsString(easing)\n        : supportedWaapiEasing[easing];\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","const featureTests = {\n    waapi: () => Object.hasOwnProperty.call(Element.prototype, \"animate\"),\n};\nconst results = {};\nconst supports = {};\n/**\n * Generate features tests that cache their results.\n */\nfor (const key in featureTests) {\n    supports[key] = () => {\n        if (results[key] === undefined)\n            results[key] = featureTests[key]();\n        return results[key];\n    };\n}\n\nexport { supports };\n","import { sync } from '../../frameloop/index.mjs';\nimport { animate } from '../legacy-popmotion/index.mjs';\nimport { animateStyle } from './index.mjs';\nimport { isWaapiSupportedEasing } from './easing.mjs';\nimport { supports } from './supports.mjs';\nimport { getFinalKeyframe } from './utils/get-final-keyframe.mjs';\n\n/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\"opacity\"]);\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\nfunction createAcceleratedAnimation(value, valueName, { onUpdate, onComplete, ...options }) {\n    const canAccelerateAnimation = supports.waapi() &&\n        acceleratedValues.has(valueName) &&\n        !options.repeatDelay &&\n        options.repeatType !== \"mirror\" &&\n        options.damping !== 0;\n    if (!canAccelerateAnimation)\n        return false;\n    let { keyframes, duration = 300, elapsed = 0, ease } = options;\n    /**\n     * If this animation needs pre-generated keyframes then generate.\n     */\n    if (options.type === \"spring\" || !isWaapiSupportedEasing(options.ease)) {\n        /**\n         * If we need to pre-generate keyframes and repeat is infinite then\n         * early return as this will lock the thread.\n         */\n        if (options.repeat === Infinity)\n            return;\n        const sampleAnimation = animate({ ...options, elapsed: 0 });\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 < 20000) {\n            state = sampleAnimation.sample(t);\n            pregeneratedKeyframes.push(state.value);\n            t += sampleDelta;\n        }\n        keyframes = pregeneratedKeyframes;\n        duration = t - sampleDelta;\n        ease = \"linear\";\n    }\n    const animation = animateStyle(value.owner.current, valueName, keyframes, {\n        ...options,\n        delay: -elapsed,\n        duration,\n        /**\n         * This function is currently not called if ease is provided\n         * as a function so the cast is safe.\n         *\n         * However it would be possible for a future refinement to port\n         * in easing pregeneration from Motion One for browsers that\n         * support the upcoming `linear()` easing function.\n         */\n        ease: ease,\n    });\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        value.set(getFinalKeyframe(keyframes, options));\n        sync.update(() => animation.cancel());\n        onComplete && onComplete();\n    };\n    /**\n     * Animation interrupt callback.\n     */\n    return {\n        get currentTime() {\n            return animation.currentTime || 0;\n        },\n        set currentTime(t) {\n            animation.currentTime = t;\n        },\n        stop: () => {\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            const { currentTime } = animation;\n            if (currentTime) {\n                const sampleAnimation = animate({ ...options, autoplay: false });\n                value.setWithVelocity(sampleAnimation.sample(currentTime - sampleDelta).value, sampleAnimation.sample(currentTime).value, sampleDelta);\n            }\n            sync.update(() => animation.cancel());\n        },\n    };\n}\n\nexport { createAcceleratedAnimation };\n","import { mapEasingToNativeEasing } from './easing.mjs';\n\nfunction animateStyle(element, valueName, keyframes, { delay = 0, duration, repeat = 0, repeatType = \"loop\", ease, times, } = {}) {\n    return element.animate({ [valueName]: keyframes, offset: times }, {\n        delay,\n        duration,\n        easing: mapEasingToNativeEasing(ease),\n        fill: \"both\",\n        iterations: repeat + 1,\n        direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n    });\n}\n\nexport { animateStyle };\n","function getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }) {\n    const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n        ? 0\n        : keyframes.length - 1;\n    return keyframes[index];\n}\n\nexport { getFinalKeyframe };\n","import { sync, cancelSync } from '../frameloop/index.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n    const start = performance.now();\n    const checkElapsed = ({ timestamp }) => {\n        const elapsed = timestamp - start;\n        if (elapsed >= timeout) {\n            cancelSync.read(checkElapsed);\n            callback(elapsed - timeout);\n        }\n    };\n    sync.read(checkElapsed, true);\n    return () => cancelSync.read(checkElapsed);\n}\n\nexport { delay };\n","import { delay } from '../utils/delay.mjs';\n\nfunction createInstantAnimation({ keyframes, elapsed, onUpdate, onComplete, }) {\n    const setValue = () => {\n        onUpdate && onUpdate(keyframes[keyframes.length - 1]);\n        onComplete && onComplete();\n    };\n    return elapsed ? { stop: delay(setValue, -elapsed) } : setValue();\n}\n\nexport { createInstantAnimation };\n","const 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 linearTween = () => ({\n    type: \"keyframes\",\n    ease: \"linear\",\n    duration: 0.3,\n});\nconst keyframesTransition = {\n    type: \"keyframes\",\n    duration: 0.8,\n};\nconst defaultTransitions = {\n    x: underDampedSpring,\n    y: underDampedSpring,\n    z: underDampedSpring,\n    rotate: underDampedSpring,\n    rotateX: underDampedSpring,\n    rotateY: underDampedSpring,\n    rotateZ: underDampedSpring,\n    scaleX: criticallyDampedSpring,\n    scaleY: criticallyDampedSpring,\n    scale: criticallyDampedSpring,\n    opacity: linearTween,\n    backgroundColor: linearTween,\n    color: linearTween,\n    default: criticallyDampedSpring,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n    if (keyframes.length > 2) {\n        return keyframesTransition;\n    }\n    else {\n        const factory = defaultTransitions[valueKey] || defaultTransitions.default;\n        return factory(keyframes[1]);\n    }\n};\n\nexport { criticallyDampedSpring, getDefaultTransition, linearTween, underDampedSpring };\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 = (key, value) => {\n    // If the list of keys tat might be non-animatable grows, replace with Set\n    if (key === \"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) && // 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 { getAnimatableNone } from '../../render/dom/value-types/animatable-none.mjs';\n\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}\nfunction isZero(value) {\n    return (value === 0 ||\n        (typeof value === \"string\" &&\n            parseFloat(value) === 0 &&\n            value.indexOf(\" \") === -1));\n}\nfunction getZeroUnit(potentialUnitType) {\n    return typeof potentialUnitType === \"number\"\n        ? 0\n        : getAnimatableNone(\"\", potentialUnitType);\n}\nfunction getValueTransition(transition, key) {\n    return transition[key] || transition[\"default\"] || transition;\n}\n\nexport { getValueTransition, getZeroUnit, isTransitionDefined, isZero };\n","import { warning } from 'hey-listen';\nimport { secondsToMilliseconds } from '../utils/time-conversion.mjs';\nimport { instantAnimationState } from '../utils/use-instant-transition-state.mjs';\nimport { createAcceleratedAnimation } from './waapi/create-accelerated-animation.mjs';\nimport { createInstantAnimation } from './create-instant-animation.mjs';\nimport { animate } from './legacy-popmotion/index.mjs';\nimport { inertia } from './legacy-popmotion/inertia.mjs';\nimport { getDefaultTransition } from './utils/default-transitions.mjs';\nimport { isAnimatable } from './utils/is-animatable.mjs';\nimport { getKeyframes } from './utils/keyframes.mjs';\nimport { getValueTransition, isTransitionDefined } from './utils/transitions.mjs';\n\nconst createMotionValueAnimation = (valueName, value, target, transition = {}) => {\n    return (onComplete) => {\n        const valueTransition = getValueTransition(transition, valueName) || {};\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        const keyframes = getKeyframes(value, valueName, target, valueTransition);\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        const targetKeyframe = keyframes[keyframes.length - 1];\n        const isOriginAnimatable = isAnimatable(valueName, originKeyframe);\n        const isTargetAnimatable = isAnimatable(valueName, targetKeyframe);\n        warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${valueName} 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        let options = {\n            keyframes,\n            velocity: value.getVelocity(),\n            ...valueTransition,\n            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        };\n        if (!isOriginAnimatable ||\n            !isTargetAnimatable ||\n            instantAnimationState.current ||\n            valueTransition.type === false) {\n            /**\n             * If we can't animate this value, or the global instant animation flag is set,\n             * or this is simply defined as an instant transition, return an instant transition.\n             */\n            return createInstantAnimation(options);\n        }\n        else if (valueTransition.type === \"inertia\") {\n            /**\n             * If this is an inertia animation, we currently don't support pre-generating\n             * keyframes for this as such it must always run on the main thread.\n             */\n            return inertia(options);\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(valueName, 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        const visualElement = value.owner;\n        const element = visualElement && visualElement.current;\n        /**\n         * Animate via WAAPI if possible.\n         */\n        if (visualElement &&\n            element instanceof HTMLElement &&\n            !(visualElement === null || visualElement === void 0 ? void 0 : visualElement.getProps().onUpdate)) {\n            const acceleratedAnimation = createAcceleratedAnimation(value, valueName, options);\n            if (acceleratedAnimation)\n                return acceleratedAnimation;\n        }\n        /**\n         * If we didn't create an accelerated animation, create a JS animation\n         */\n        return animate(options);\n    };\n};\n\nexport { createMotionValueAnimation };\n","import { getAnimatableNone } from '../../render/dom/value-types/animatable-none.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\nimport { isZero, getZeroUnit } from './transitions.mjs';\n\nfunction getKeyframes(value, valueName, target, transition) {\n    const isTargetAnimatable = isAnimatable(valueName, target);\n    let origin = transition.from !== undefined ? transition.from : value.get();\n    if (origin === \"none\" && isTargetAnimatable && typeof target === \"string\") {\n        /**\n         * If we're trying to animate from \"none\", try and get an animatable version\n         * of the target. This could be improved to work both ways.\n         */\n        origin = getAnimatableNone(valueName, target);\n    }\n    else if (isZero(origin) && typeof target === \"string\") {\n        origin = getZeroUnit(target);\n    }\n    else if (!Array.isArray(target) &&\n        isZero(target) &&\n        typeof origin === \"string\") {\n        target = getZeroUnit(origin);\n    }\n    /**\n     * If the target has been defined as a series of keyframes\n     */\n    if (Array.isArray(target)) {\n        /**\n         * Ensure an initial wildcard keyframe is hydrated by the origin.\n         * TODO: Support extra wildcard keyframes i.e [1, null, 0]\n         */\n        if (target[0] === null) {\n            target[0] = origin;\n        }\n        return target;\n    }\n    else {\n        return [origin, target];\n    }\n}\n\nexport { getKeyframes };\n","import { animate } from './index.mjs';\nimport { velocityPerSecond } from '../../utils/velocity-per-second.mjs';\nimport { frameData } from '../../frameloop/data.mjs';\n\nfunction inertia({ keyframes, velocity = 0, min, max, power = 0.8, timeConstant = 750, bounceStiffness = 500, bounceDamping = 10, restDelta = 1, modifyTarget, driver, onUpdate, onComplete, onStop, }) {\n    const origin = keyframes[0];\n    let currentAnimation;\n    function isOutOfBounds(v) {\n        return (min !== undefined && v < min) || (max !== undefined && v > max);\n    }\n    function findNearestBoundary(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    function startAnimation(options) {\n        currentAnimation === null || currentAnimation === void 0 ? void 0 : currentAnimation.stop();\n        currentAnimation = animate({\n            keyframes: [0, 1],\n            velocity: 0,\n            ...options,\n            driver,\n            onUpdate: (v) => {\n                var _a;\n                onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate(v);\n                (_a = options.onUpdate) === null || _a === void 0 ? void 0 : _a.call(options, v);\n            },\n            onComplete,\n            onStop,\n        });\n    }\n    function startSpring(options) {\n        startAnimation({\n            type: \"spring\",\n            stiffness: bounceStiffness,\n            damping: bounceDamping,\n            restDelta,\n            ...options,\n        });\n    }\n    if (isOutOfBounds(origin)) {\n        // Start the animation with spring if outside the defined boundaries\n        startSpring({\n            velocity,\n            keyframes: [origin, findNearestBoundary(origin)],\n        });\n    }\n    else {\n        /**\n         * Or if the value is out of bounds, simulate the inertia movement\n         * with the decay animation.\n         *\n         * Pre-calculate the target so we can detect if it's out-of-bounds.\n         * If it is, we want to check per frame when to switch to a spring\n         * animation\n         */\n        let target = power * velocity + origin;\n        if (typeof modifyTarget !== \"undefined\")\n            target = modifyTarget(target);\n        const boundary = findNearestBoundary(target);\n        const heading = boundary === min ? -1 : 1;\n        let prev;\n        let current;\n        const checkBoundary = (v) => {\n            prev = current;\n            current = v;\n            velocity = velocityPerSecond(v - prev, frameData.delta);\n            if ((heading === 1 && v > boundary) ||\n                (heading === -1 && v < boundary)) {\n                startSpring({ keyframes: [v, boundary], velocity });\n            }\n        };\n        startAnimation({\n            type: \"decay\",\n            keyframes: [origin, 0],\n            velocity,\n            timeConstant,\n            power,\n            restDelta,\n            modifyTarget,\n            onUpdate: isOutOfBounds(target) ? checkBoundary : undefined,\n        });\n    }\n    return {\n        stop: () => currentAnimation === null || currentAnimation === void 0 ? void 0 : currentAnimation.stop(),\n    };\n}\n\nexport { inertia };\n","import { setTarget } from './setters.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { transformProps } from '../html/utils/transform.mjs';\nimport { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\nimport { createMotionValueAnimation } from '../../animation/index.mjs';\nimport { sync } from '../../frameloop/index.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 = animateTarget(visualElement, resolvedDefinition, options);\n    }\n    return animation.then(() => visualElement.notify(\"AnimationComplete\", definition));\n}\nfunction animateVariant(visualElement, variant, options = {}) {\n    var _a;\n    const resolved = resolveVariant(visualElement, variant, options.custom);\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        ? () => 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 = ((_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.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}\n/**\n * @internal\n */\nfunction animateTarget(visualElement, definition, { delay = 0, transitionOverride, type } = {}) {\n    var _a;\n    let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = visualElement.makeTargetAnimatable(definition);\n    const willChange = visualElement.getValue(\"willChange\");\n    if (transitionOverride)\n        transition = transitionOverride;\n    const animations = [];\n    const animationTypeState = type && ((_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.getState()[type]);\n    for (const key in target) {\n        const value = visualElement.getValue(key);\n        const valueTarget = target[key];\n        if (!value ||\n            valueTarget === undefined ||\n            (animationTypeState &&\n                shouldBlockAnimation(animationTypeState, key))) {\n            continue;\n        }\n        const valueTransition = { delay, elapsed: 0, ...transition };\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        if (window.HandoffAppearAnimations && !value.hasAnimated) {\n            const appearId = visualElement.getProps()[optimizedAppearDataAttribute];\n            if (appearId) {\n                valueTransition.elapsed = window.HandoffAppearAnimations(appearId, key, value, sync);\n            }\n        }\n        let animation = value.start(createMotionValueAnimation(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)\n            ? { type: false }\n            : valueTransition));\n        if (isWillChangeMotionValue(willChange)) {\n            willChange.add(key);\n            animation = animation.then(() => willChange.remove(key));\n        }\n        animations.push(animation);\n    }\n    return Promise.all(animations).then(() => {\n        transitionEnd && setTarget(visualElement, transitionEnd);\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 stopAnimation(visualElement) {\n    visualElement.values.forEach((value) => value.stop());\n}\nfunction sortByTreeOrder(a, b) {\n    return a.sortNodePosition(b);\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}\n\nexport { animateVisualElement, sortByTreeOrder, stopAnimation };\n","import { 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 { animateVisualElement } from './animation.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { AnimationType } from './types.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\n\nconst variantPriorityOrder = [\n    AnimationType.Animate,\n    AnimationType.InView,\n    AnimationType.Focus,\n    AnimationType.Hover,\n    AnimationType.Tap,\n    AnimationType.Drag,\n    AnimationType.Exit,\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    const 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 = (acc, definition) => {\n        const resolved = resolveVariant(visualElement, definition);\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(options, changedActiveType) {\n        const props = visualElement.getProps();\n        const context = visualElement.getVariantContext(true) || {};\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 ? props[type] : 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] && prop !== props[type] && 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            /**\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, {});\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                removedKeys.delete(key);\n                typeState.needsAnimating[key] = true;\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                if (next !== prev) {\n                    /**\n                     * If both values are keyframes, we need to shallow compare them to\n                     * detect whether any value has changed. If it has, we animate it.\n                     */\n                    if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n                        if (!shallowCompare(next, prev) || variantDidChange) {\n                            markToAnimate(key);\n                        }\n                        else {\n                            /**\n                             * If it hasn't changed, we want to ensure it doesn't animate by\n                             * adding it to the list of protected keys.\n                             */\n                            typeState.protectedKeys[key] = true;\n                        }\n                    }\n                    else if (next !== undefined) {\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 hard-block animations\n             * TODO: Test as this should probably still handle animations triggered\n             * by removed values?\n             */\n            if (shouldAnimateType && !isInherited) {\n                animations.push(...definitionList.map((animation) => ({\n                    animation: animation,\n                    options: { type, ...options },\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            removedKeys.forEach((key) => {\n                const fallbackTarget = visualElement.getBaseTarget(key);\n                if (fallbackTarget !== undefined) {\n                    fallbackAnimation[key] = fallbackTarget;\n                }\n            });\n            animations.push({ animation: fallbackAnimation });\n        }\n        let shouldAnimate = Boolean(animations.length);\n        if (isInitialRender &&\n            props.initial === false &&\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, options) {\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(options, 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    };\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        [AnimationType.Animate]: createTypeState(true),\n        [AnimationType.InView]: createTypeState(),\n        [AnimationType.Hover]: createTypeState(),\n        [AnimationType.Tap]: createTypeState(),\n        [AnimationType.Drag]: createTypeState(),\n        [AnimationType.Focus]: createTypeState(),\n        [AnimationType.Exit]: createTypeState(),\n    };\n}\n\nexport { checkVariantsDidChange, createAnimationState, variantPriorityOrder };\n","import { useEffect, useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { usePresence } from '../../components/AnimatePresence/use-presence.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { createAnimationState } from '../../render/utils/animation-state.mjs';\nimport { AnimationType } from '../../render/utils/types.mjs';\nimport { makeRenderlessComponent } from '../utils/make-renderless-component.mjs';\n\nconst animations = {\n    animation: makeRenderlessComponent(({ visualElement, animate }) => {\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        visualElement.animationState || (visualElement.animationState = createAnimationState(visualElement));\n        /**\n         * Subscribe any provided AnimationControls to the component's VisualElement\n         */\n        if (isAnimationControls(animate)) {\n            useEffect(() => animate.subscribe(visualElement), [animate]);\n        }\n    }),\n    exit: makeRenderlessComponent((props) => {\n        const { custom, visualElement } = props;\n        const [isPresent, safeToRemove] = usePresence();\n        const presenceContext = useContext(PresenceContext);\n        useEffect(() => {\n            visualElement.isPresent = isPresent;\n            const animation = visualElement.animationState &&\n                visualElement.animationState.setActive(AnimationType.Exit, !isPresent, {\n                    custom: (presenceContext && presenceContext.custom) ||\n                        custom,\n                });\n            if (animation && !isPresent) {\n                animation.then(safeToRemove);\n            }\n        }, [isPresent]);\n    }),\n};\n\nexport { animations };\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 { extractEventInfo } from '../events/event-info.mjs';\nimport { sync, cancelSync } from '../frameloop/index.mjs';\nimport { secondsToMilliseconds } from '../utils/time-conversion.mjs';\nimport { addPointerEvent } from '../events/use-pointer-event.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { distance2D } from '../utils/distance.mjs';\nimport { frameData } from '../frameloop/data.mjs';\nimport { isPrimaryPointer } from '../events/utils/is-primary-pointer.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n    constructor(event, handlers, { transformPagePoint } = {}) {\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        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            sync.update(this.updatePoint, true);\n        };\n        this.handlePointerUp = (event, info) => {\n            this.end();\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const { onEnd, onSessionEnd } = this.handlers;\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.handlers = handlers;\n        this.transformPagePoint = transformPagePoint;\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(window, \"pointermove\", this.handlePointerMove), addPointerEvent(window, \"pointerup\", this.handlePointerUp), addPointerEvent(window, \"pointercancel\", this.handlePointerUp));\n    }\n    updateHandlers(handlers) {\n        this.handlers = handlers;\n    }\n    end() {\n        this.removeListeners && this.removeListeners();\n        cancelSync.update(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 = (lastPoint.timestamp - timestampedPoint.timestamp) / 1000;\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","import { mix } from '../../utils/mix.mjs';\n\nfunction calcLength(axis) {\n    return axis.max - axis.min;\n}\nfunction isNear(value, target = 0, maxDistance = 0.01) {\n    return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n    delta.origin = origin;\n    delta.originPoint = mix(source.min, source.max, delta.origin);\n    delta.scale = calcLength(target) / calcLength(source);\n    if (isNear(delta.scale, 1, 0.0001) || isNaN(delta.scale))\n        delta.scale = 1;\n    delta.translate =\n        mix(target.min, target.max, delta.origin) - delta.originPoint;\n    if (isNear(delta.translate) || isNaN(delta.translate))\n        delta.translate = 0;\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n    calcAxisDelta(delta.x, source.x, target.x, origin === null || origin === void 0 ? void 0 : origin.originX);\n    calcAxisDelta(delta.y, source.y, target.y, origin === null || origin === void 0 ? void 0 : origin.originY);\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 '../../../utils/progress.mjs';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mix } from '../../../utils/mix.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 ? mix(min, point, elastic.min) : 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 ? mix(max, point, elastic.max) : 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","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}\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 { mix } from '../../utils/mix.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}\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    var _a, _b;\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        if (((_b = (_a = node.instance) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.display) === \"contents\")\n            continue;\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    treeScale.x = snapToDefault(treeScale.x);\n    treeScale.y = snapToDefault(treeScale.y);\n}\nfunction snapToDefault(scale) {\n    if (Number.isInteger(scale))\n        return scale;\n    return scale > 1.0000000000001 || scale < 0.999999999999 ? scale : 1;\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, transforms, [key, scaleKey, originKey]) {\n    const axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n    const originPoint = mix(axis.min, axis.max, axisOrigin);\n    // Apply the axis delta to the final axis\n    applyAxisDelta(axis, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\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 * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n    transformAxis(box.x, transform, xKeys);\n    transformAxis(box.y, transform, yKeys);\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","import { invariant } from 'hey-listen';\nimport { PanSession } from '../PanSession.mjs';\nimport { getGlobalLock } from './utils/lock.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/use-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\nimport { AnimationType } from '../../render/utils/types.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/use-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { createMotionValueAnimation } from '../../animation/index.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n    constructor(visualElement) {\n        // This is a reference to the global drag gesture lock, ensuring only one component\n        // can \"capture\" the drag of one or both axes.\n        // TODO: Look into moving this into pansession?\n        this.openGlobalLock = 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        if (this.visualElement.isPresent === false)\n            return;\n        const onSessionStart = (event) => {\n            // Stop any animations on both axis values immediately. This allows the user to throw and catch\n            // the component.\n            this.stopAnimation();\n            if (snapToCursor) {\n                this.snapToCursor(extractEventInfo(event, \"page\").point);\n            }\n        };\n        const onStart = (event, info) => {\n            var _a;\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.openGlobalLock)\n                    this.openGlobalLock();\n                this.openGlobalLock = getGlobalLock(drag);\n                // If we don 't have the lock, don't start dragging\n                if (!this.openGlobalLock)\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                var _a, _b;\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 measuredAxis = (_b = (_a = this.visualElement.projection) === null || _a === void 0 ? void 0 : _a.layout) === null || _b === void 0 ? void 0 : _b.layoutBox[axis];\n                    if (measuredAxis) {\n                        const length = calcLength(measuredAxis);\n                        current = length * (parseFloat(current) / 100);\n                    }\n                }\n                this.originPoint[axis] = current;\n            });\n            // Fire onDragStart event\n            onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(event, info);\n            (_a = this.visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(AnimationType.Drag, 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.openGlobalLock)\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 === null || onDirectionLock === void 0 ? void 0 : 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 === null || onDrag === void 0 ? void 0 : onDrag(event, info);\n        };\n        const onSessionEnd = (event, info) => this.stop(event, info);\n        this.panSession = new PanSession(originEvent, {\n            onSessionStart,\n            onStart,\n            onMove,\n            onSessionEnd,\n        }, { transformPagePoint: this.visualElement.getTransformPagePoint() });\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        onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(event, info);\n    }\n    cancel() {\n        var _a, _b;\n        this.isDragging = false;\n        if (this.visualElement.projection) {\n            this.visualElement.projection.isAnimationBlocked = false;\n        }\n        (_a = this.panSession) === null || _a === void 0 ? void 0 : _a.end();\n        this.panSession = undefined;\n        const { dragPropagation } = this.getProps();\n        if (!dragPropagation && this.openGlobalLock) {\n            this.openGlobalLock();\n            this.openGlobalLock = null;\n        }\n        (_b = this.visualElement.animationState) === null || _b === void 0 ? void 0 : _b.setActive(AnimationType.Drag, 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        const { dragConstraints, dragElastic } = this.getProps();\n        const { layout } = this.visualElement.projection || {};\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.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 === null || constraints === void 0 ? void 0 : 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        return axisValue.start(createMotionValueAnimation(axis, axisValue, 0, transition));\n    }\n    stopAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).stop());\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        var _a;\n        const dragKey = \"_drag\" + axis.toUpperCase();\n        const externalMotionValue = this.visualElement.getProps()[dragKey];\n        return externalMotionValue\n            ? externalMotionValue\n            : this.visualElement.getValue(axis, ((_a = this.visualElement.getProps().initial) === null || _a === void 0 ? void 0 : _a[axis]) || 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] - mix(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        var _a;\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) {\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        (_a = projection.root) === null || _a === void 0 ? void 0 : _a.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(mix(min, max, boxProgress[axis]));\n        });\n    }\n    addListeners() {\n        var _a;\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)) {\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            (_a = projection.root) === null || _a === void 0 ? void 0 : _a.updateScroll();\n            projection.updateLayout();\n        }\n        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 === null || stopLayoutUpdateListener === void 0 ? void 0 : 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","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","import { useDrag } from '../../gestures/drag/use-drag.mjs';\nimport { usePanGesture } from '../../gestures/use-pan-gesture.mjs';\nimport { makeRenderlessComponent } from '../utils/make-renderless-component.mjs';\n\nconst drag = {\n    pan: makeRenderlessComponent(usePanGesture),\n    drag: makeRenderlessComponent(useDrag),\n};\n\nexport { drag };\n","import { useRef, useContext, useEffect } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { useUnmountEffect } from '../utils/use-unmount-effect.mjs';\nimport { usePointerEvent } from '../events/use-pointer-event.mjs';\nimport { PanSession } from './PanSession.mjs';\n\n/**\n *\n * @param handlers -\n * @param ref -\n *\n * @privateRemarks\n * Currently this sets new pan gesture functions every render. The memo route has been explored\n * in the past but ultimately we're still creating new functions every render. An optimisation\n * to explore is creating the pan gestures and loading them into a `ref`.\n *\n * @internal\n */\nfunction usePanGesture({ onPan, onPanStart, onPanEnd, onPanSessionStart, visualElement, }) {\n    const hasPanEvents = onPan || onPanStart || onPanEnd || onPanSessionStart;\n    const panSession = useRef(null);\n    const { transformPagePoint } = useContext(MotionConfigContext);\n    const handlers = {\n        onSessionStart: onPanSessionStart,\n        onStart: onPanStart,\n        onMove: onPan,\n        onEnd: (event, info) => {\n            panSession.current = null;\n            onPanEnd && onPanEnd(event, info);\n        },\n    };\n    useEffect(() => {\n        if (panSession.current !== null) {\n            panSession.current.updateHandlers(handlers);\n        }\n    });\n    function onPointerDown(event) {\n        panSession.current = new PanSession(event, handlers, {\n            transformPagePoint,\n        });\n    }\n    usePointerEvent(visualElement, \"pointerdown\", hasPanEvents && onPointerDown);\n    useUnmountEffect(() => panSession.current && panSession.current.end());\n}\n\nexport { usePanGesture };\n","import { useEffect } from 'react';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\n\n/**\n * A hook that allows an element to be dragged.\n *\n * @internal\n */\nfunction useDrag(props) {\n    const { dragControls: groupDragControls, visualElement } = props;\n    const dragControls = useConstant(() => new VisualElementDragControls(visualElement));\n    // If we've been provided a DragControls for manual control over the drag gesture,\n    // subscribe this component to it on mount.\n    useEffect(() => groupDragControls && groupDragControls.subscribe(dragControls), [dragControls, groupDragControls]);\n    // Apply the event listeners to the element\n    useEffect(() => dragControls.addListeners(), [dragControls]);\n}\n\nexport { useDrag };\n","import { invariant } from 'hey-listen';\n\nfunction isCSSVariable(value) {\n    return typeof value === \"string\" && value.startsWith(\"var(--\");\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 cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\nfunction parseCSSVariable(current) {\n    const match = cssVariableRegex.exec(current);\n    if (!match)\n        return [,];\n    const [, token, fallback] = match;\n    return [token, 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        return resolved.trim();\n    }\n    else if (isCSSVariable(fallback)) {\n        // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n        return getVariableValue(fallback, element, depth + 1);\n    }\n    else {\n        return fallback;\n    }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\nfunction resolveCSSVariables(visualElement, { ...target }, transitionEnd) {\n    const element = visualElement.current;\n    if (!(element instanceof Element))\n        return { target, transitionEnd };\n    // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n    // only if they change but I think this reads clearer and this isn't a performance-critical path.\n    if (transitionEnd) {\n        transitionEnd = { ...transitionEnd };\n    }\n    // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n    visualElement.values.forEach((value) => {\n        const current = value.get();\n        if (!isCSSVariable(current))\n            return;\n        const resolved = getVariableValue(current, element);\n        if (resolved)\n            value.set(resolved);\n    });\n    // Cycle through every target property and resolve CSS variables. Currently\n    // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n    for (const key in target) {\n        const current = target[key];\n        if (!isCSSVariable(current))\n            continue;\n        const resolved = getVariableValue(current, element);\n        if (!resolved)\n            continue;\n        // Clone target if it hasn't already been\n        target[key] = resolved;\n        // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n        // CSS variable. This will ensure that after the animation the component will reflect\n        // changes in the value of the CSS variable.\n        if (transitionEnd && transitionEnd[key] === undefined) {\n            transitionEnd[key] = current;\n        }\n    }\n    return { target, transitionEnd };\n}\n\nexport { cssVariableRegex, parseCSSVariable, resolveCSSVariables };\n","import { isKeyframesTarget } from '../../../animation/utils/is-keyframes-target.mjs';\nimport { invariant } from 'hey-listen';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\nimport { findDimensionValueType } from '../value-types/dimensions.mjs';\nimport { isBrowser } from '../../../utils/is-browser.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst positionalKeys = new Set([\n    \"width\",\n    \"height\",\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    \"x\",\n    \"y\",\n]);\nconst isPositionalKey = (key) => positionalKeys.has(key);\nconst hasPositionalKey = (target) => {\n    return Object.keys(target).some(isPositionalKey);\n};\nconst isNumOrPxType = (v) => v === number || v === px;\nvar BoundingBoxDimension;\n(function (BoundingBoxDimension) {\n    BoundingBoxDimension[\"width\"] = \"width\";\n    BoundingBoxDimension[\"height\"] = \"height\";\n    BoundingBoxDimension[\"left\"] = \"left\";\n    BoundingBoxDimension[\"right\"] = \"right\";\n    BoundingBoxDimension[\"top\"] = \"top\";\n    BoundingBoxDimension[\"bottom\"] = \"bottom\";\n})(BoundingBoxDimension || (BoundingBoxDimension = {}));\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\\((.+)\\)$/);\n    if (matrix3d) {\n        return getPosFromMatrix(matrix3d[1], pos3);\n    }\n    else {\n        const matrix = transform.match(/^matrix\\((.+)\\)$/);\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    // Apply changes to element before measurement\n    if (removedTransforms.length)\n        visualElement.render();\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};\nconst convertChangedValueTypes = (target, visualElement, changedKeys) => {\n    const originBbox = visualElement.measureViewportBox();\n    const element = visualElement.current;\n    const elementComputedStyle = getComputedStyle(element);\n    const { display } = elementComputedStyle;\n    const origin = {};\n    // If the element is currently set to display: \"none\", make it visible before\n    // measuring the target bounding box\n    if (display === \"none\") {\n        visualElement.setStaticValue(\"display\", target.display || \"block\");\n    }\n    /**\n     * Record origins before we render and update styles\n     */\n    changedKeys.forEach((key) => {\n        origin[key] = positionalValues[key](originBbox, elementComputedStyle);\n    });\n    // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n    visualElement.render();\n    const targetBbox = visualElement.measureViewportBox();\n    changedKeys.forEach((key) => {\n        // Restore styles to their **calculated computed style**, not their actual\n        // originally set style. This allows us to animate between equivalent pixel units.\n        const value = visualElement.getValue(key);\n        value && value.jump(origin[key]);\n        target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n    });\n    return target;\n};\nconst checkAndConvertChangedValueTypes = (visualElement, target, origin = {}, transitionEnd = {}) => {\n    target = { ...target };\n    transitionEnd = { ...transitionEnd };\n    const targetPositionalKeys = Object.keys(target).filter(isPositionalKey);\n    // We want to remove any transform values that could affect the element's bounding box before\n    // it's measured. We'll reapply these later.\n    let removedTransformValues = [];\n    let hasAttemptedToRemoveTransformValues = false;\n    const changedValueTypeKeys = [];\n    targetPositionalKeys.forEach((key) => {\n        const value = visualElement.getValue(key);\n        if (!visualElement.hasValue(key))\n            return;\n        let from = origin[key];\n        let fromType = findDimensionValueType(from);\n        const to = target[key];\n        let toType;\n        // TODO: The current implementation of this basically throws an error\n        // if you try and do value conversion via keyframes. There's probably\n        // a way of doing this but the performance implications would need greater scrutiny,\n        // as it'd be doing multiple resize-remeasure operations.\n        if (isKeyframesTarget(to)) {\n            const numKeyframes = to.length;\n            const fromIndex = to[0] === null ? 1 : 0;\n            from = to[fromIndex];\n            fromType = findDimensionValueType(from);\n            for (let i = fromIndex; i < numKeyframes; i++) {\n                if (!toType) {\n                    toType = findDimensionValueType(to[i]);\n                    invariant(toType === fromType ||\n                        (isNumOrPxType(fromType) && isNumOrPxType(toType)), \"Keyframes must be of the same dimension as the current value\");\n                }\n                else {\n                    invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n                }\n            }\n        }\n        else {\n            toType = findDimensionValueType(to);\n        }\n        if (fromType !== toType) {\n            // If they're both just number or px, convert them both to numbers rather than\n            // relying on resize/remeasure to convert (which is wasteful in this situation)\n            if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n                const current = value.get();\n                if (typeof current === \"string\") {\n                    value.set(parseFloat(current));\n                }\n                if (typeof to === \"string\") {\n                    target[key] = parseFloat(to);\n                }\n                else if (Array.isArray(to) && toType === px) {\n                    target[key] = to.map(parseFloat);\n                }\n            }\n            else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) &&\n                (toType === null || toType === void 0 ? void 0 : toType.transform) &&\n                (from === 0 || to === 0)) {\n                // If one or the other value is 0, it's safe to coerce it to the\n                // type of the other without measurement\n                if (from === 0) {\n                    value.set(toType.transform(from));\n                }\n                else {\n                    target[key] = fromType.transform(to);\n                }\n            }\n            else {\n                // If we're going to do value conversion via DOM measurements, we first\n                // need to remove non-positional transform values that could affect the bbox measurements.\n                if (!hasAttemptedToRemoveTransformValues) {\n                    removedTransformValues =\n                        removeNonTranslationalTransform(visualElement);\n                    hasAttemptedToRemoveTransformValues = true;\n                }\n                changedValueTypeKeys.push(key);\n                transitionEnd[key] =\n                    transitionEnd[key] !== undefined\n                        ? transitionEnd[key]\n                        : target[key];\n                value.jump(to);\n            }\n        }\n    });\n    if (changedValueTypeKeys.length) {\n        const scrollY = changedValueTypeKeys.indexOf(\"height\") >= 0\n            ? window.pageYOffset\n            : null;\n        const convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys);\n        // If we removed transform values, reapply them before the next render\n        if (removedTransformValues.length) {\n            removedTransformValues.forEach(([key, value]) => {\n                visualElement.getValue(key).set(value);\n            });\n        }\n        // Reapply original values\n        visualElement.render();\n        // Restore scroll position\n        if (isBrowser && scrollY !== null) {\n            window.scrollTo({ top: scrollY });\n        }\n        return { target: convertedTarget, transitionEnd };\n    }\n    else {\n        return { target, transitionEnd };\n    }\n};\n/**\n * Convert value types for x/y/width/height/top/left/bottom/right\n *\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\n *\n * @internal\n */\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n    return hasPositionalKey(target)\n        ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd)\n        : { target, transitionEnd };\n}\n\nexport { BoundingBoxDimension, positionalValues, unitConversion };\n","import { resolveCSSVariables } from './css-variables-conversion.mjs';\nimport { unitConversion } from './unit-conversion.mjs';\n\n/**\n * Parse a DOM variant to make it animatable. This involves resolving CSS variables\n * and ensuring animations like \"20%\" => \"calc(50vw)\" are performed in pixels.\n */\nconst parseDomVariant = (visualElement, target, origin, transitionEnd) => {\n    const resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n    target = resolved.target;\n    transitionEnd = resolved.transitionEnd;\n    return unitConversion(visualElement, target, origin, transitionEnd);\n};\n\nexport { parseDomVariant };\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 { sync, cancelSync } from '../frameloop/index.mjs';\nimport { invariant } from 'hey-listen';\nimport { createElement } from 'react';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { isRefObject } from '../utils/is-ref-object.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 { motionValue } from '../value/index.mjs';\nimport { isWillChangeMotionValue } from '../value/use-will-change/is.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { transformProps } from './html/utils/transform.mjs';\nimport { variantPriorityOrder } from './utils/animation-state.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from './utils/is-variant-label.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\n\nconst featureNames = Object.keys(featureDefinitions);\nconst numFeatures = featureNames.length;\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    constructor({ parent, props, reducedMotionConfig, 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        /**\n         * Tracks whether this VisualElement's React component is currently present\n         * within the defined React tree.\n         */\n        this.isPresent = true;\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.scheduleRender = () => sync.render(this.render, false, true);\n        const { latestValues, renderState } = visualState;\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.depth = parent ? parent.depth + 1 : 0;\n        this.reducedMotionConfig = reducedMotionConfig;\n        this.options = options;\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 neccessarily a breaking change,\n         * more a reflection of the test.\n         */\n        const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {});\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                if (isWillChangeMotionValue(willChange)) {\n                    willChange.add(key);\n                }\n            }\n        }\n    }\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) {\n        return {};\n    }\n    mount(instance) {\n        var _a;\n        this.current = instance;\n        if (this.projection) {\n            this.projection.mount(instance);\n        }\n        if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n            this.removeFromVariantTree = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.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.setProps(this.props);\n    }\n    unmount() {\n        var _a, _b, _c;\n        (_a = this.projection) === null || _a === void 0 ? void 0 : _a.unmount();\n        cancelSync.update(this.notifyUpdate);\n        cancelSync.render(this.render);\n        this.valueSubscriptions.forEach((remove) => remove());\n        (_b = this.removeFromVariantTree) === null || _b === void 0 ? void 0 : _b.call(this);\n        (_c = this.parent) === null || _c === void 0 ? void 0 : _c.children.delete(this);\n        for (const key in this.events) {\n            this.events[key].clear();\n        }\n        this.current = null;\n    }\n    bindToMotionValue(key, value) {\n        const valueIsTransform = transformProps.has(key);\n        const removeOnChange = value.on(\"change\", (latestValue) => {\n            this.latestValues[key] = latestValue;\n            this.props.onUpdate &&\n                sync.update(this.notifyUpdate, false, true);\n            if (valueIsTransform && this.projection) {\n                this.projection.isTransformDirty = true;\n            }\n        });\n        const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n        this.valueSubscriptions.set(key, () => {\n            removeOnChange();\n            removeOnRenderRequest();\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        return this.sortInstanceNodePosition(this.current, other.current);\n    }\n    loadFeatures({ children, ...renderedProps }, isStrict, preloadedFeatures, projectionId, ProjectionNodeConstructor, initialLayoutGroupConfig) {\n        const features = [];\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            invariant(false, \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\");\n        }\n        for (let i = 0; i < numFeatures; i++) {\n            const name = featureNames[i];\n            const { isEnabled, Component } = featureDefinitions[name];\n            /**\n             * It might be possible in the future to use this moment to\n             * dynamically request functionality. In initial tests this\n             * was producing a lot of duplication amongst bundles.\n             */\n            if (isEnabled(renderedProps) && Component) {\n                features.push(createElement(Component, {\n                    key: name,\n                    ...renderedProps,\n                    visualElement: this,\n                }));\n            }\n        }\n        if (!this.projection && ProjectionNodeConstructor) {\n            this.projection = new ProjectionNodeConstructor(projectionId, this.latestValues, this.parent && this.parent.projection);\n            const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = renderedProps;\n            this.projection.setOptions({\n                layoutId,\n                layout,\n                alwaysMeasureLayout: Boolean(drag) ||\n                    (dragConstraints && isRefObject(dragConstraints)),\n                visualElement: this,\n                scheduleRender: () => this.scheduleRender(),\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: initialLayoutGroupConfig,\n                layoutScroll,\n                layoutRoot,\n            });\n        }\n        return features;\n    }\n    triggerBuild() {\n        this.build(this.renderState, this.latestValues, this.options, 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     * Make a target animatable by Popmotion. For instance, if we're\n     * trying to animate width from 100px to 100vw we need to measure 100vw\n     * in pixels to determine what we really need to animate to. This is also\n     * pluggable to support Framer's custom value types like Color,\n     * and CSS variables.\n     */\n    makeTargetAnimatable(target, canMutate = true) {\n        return this.makeTargetAnimatableFromInstance(target, this.props, canMutate);\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    setProps(props) {\n        if (props.transformTemplate || this.props.transformTemplate) {\n            this.scheduleRender();\n        }\n        const prevProps = this.props;\n        this.props = props;\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 listener = props[\"on\" + key];\n            if (listener) {\n                this.propEventSubscriptions[key] = this.on(key, listener);\n            }\n        }\n        this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, prevProps), this.prevMotionValues);\n        if (this.handleChildMotionValue) {\n            this.handleChildMotionValue();\n        }\n    }\n    getProps() {\n        return this.props;\n    }\n    /**\n     * Returns the variant definition with a given name.\n     */\n    getVariant(name) {\n        var _a;\n        return (_a = this.props.variants) === null || _a === void 0 ? void 0 : _a[name];\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        var _a;\n        return this.isVariantNode ? this : (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getClosestVariantNode();\n    }\n    getVariantContext(startAtParent = false) {\n        var _a, _b;\n        if (startAtParent)\n            return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getVariantContext();\n        if (!this.isControllingVariants) {\n            const context = ((_b = this.parent) === null || _b === void 0 ? void 0 : _b.getVariantContext()) || {};\n            if (this.props.initial !== undefined) {\n                context.initial = this.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 = this.props[name];\n            if (isVariantLabel(prop) || prop === false) {\n                context[name] = prop;\n            }\n        }\n        return context;\n    }\n    /**\n     * Add a child visual element to our set of children.\n     */\n    addVariantChild(child) {\n        var _a;\n        const closestVariantNode = this.getClosestVariantNode();\n        if (closestVariantNode) {\n            (_a = closestVariantNode.variantChildren) === null || _a === void 0 ? void 0 : _a.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        if (value !== this.values.get(key)) {\n            this.removeValue(key);\n            this.bindToMotionValue(key, value);\n        }\n        this.values.set(key, value);\n        this.latestValues[key] = value.get();\n    }\n    /**\n     * Remove a motion value and unbind any active subscriptions.\n     */\n    removeValue(key) {\n        var _a;\n        this.values.delete(key);\n        (_a = this.valueSubscriptions.get(key)) === null || _a === void 0 ? void 0 : _a();\n        this.valueSubscriptions.delete(key);\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, { 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) {\n        return this.latestValues[key] !== undefined || !this.current\n            ? this.latestValues[key]\n            : this.readValueFromInstance(this.current, key, this.options);\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        const valueFromInitial = typeof initial === \"string\" || typeof initial === \"object\"\n            ? (_a = resolveVariantFromProps(this.props, initial)) === null || _a === void 0 ? void 0 : _a[key]\n            : undefined;\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        var _a;\n        (_a = this.events[eventName]) === null || _a === void 0 ? void 0 : _a.notify(...args);\n    }\n}\nconst variantProps = [\"initial\", ...variantPriorityOrder];\nconst numVariantProps = variantProps.length;\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 { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { 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    const { willChange } = next;\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            if (isWillChangeMotionValue(willChange)) {\n                willChange.add(key);\n            }\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 === \"8.5.5\", `Attempting to mix Framer Motion versions ${nextValue.version} with 8.5.5 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            if (isWillChangeMotionValue(willChange)) {\n                willChange.remove(key);\n            }\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                // TODO: Only update values that aren't being animated or even looked at\n                !existingValue.hasAnimated && existingValue.set(nextValue);\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 { getOrigin, checkTargetForNewValues } from '../utils/setters.mjs';\nimport { parseDomVariant } from './utils/parse-dom-variant.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\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        var _a;\n        return (_a = props.style) === null || _a === void 0 ? void 0 : _a[key];\n    }\n    removeValueFromRenderState(key, { vars, style }) {\n        delete vars[key];\n        delete style[key];\n    }\n    makeTargetAnimatableFromInstance({ transition, transitionEnd, ...target }, { transformValues }, isMounted) {\n        let origin = getOrigin(target, transition || {}, this);\n        /**\n         * If Framer has provided a function to convert `Color` etc value types, convert them\n         */\n        if (transformValues) {\n            if (transitionEnd)\n                transitionEnd = transformValues(transitionEnd);\n            if (target)\n                target = transformValues(target);\n            if (origin)\n                origin = transformValues(origin);\n        }\n        if (isMounted) {\n            checkTargetForNewValues(this, target, origin);\n            const parsed = parseDomVariant(this, target, origin, transitionEnd);\n            transitionEnd = parsed.transitionEnd;\n            target = parsed.target;\n        }\n        return {\n            transition,\n            transitionEnd,\n            ...target,\n        };\n    }\n}\n\nexport { DOMVisualElement };\n","import { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { isCSSVariable } from '../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './utils/transform.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction getComputedStyle(element) {\n    return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\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 = (isCSSVariable(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, options, props) {\n        buildHTMLStyles(renderState, latestValues, options, props.transformTemplate);\n    }\n    scrapeMotionValuesFromProps(props, prevProps) {\n        return scrapeMotionValuesFromProps(props, prevProps);\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    renderInstance(instance, renderState, styleProp, projection) {\n        renderHTML(instance, renderState, styleProp, projection);\n    }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { transformProps } from '../html/utils/transform.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.isSVGTag = false;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props[key];\n    }\n    readValueFromInstance(instance, key) {\n        var _a;\n        if (transformProps.has(key)) {\n            return ((_a = getDefaultValueType(key)) === null || _a === void 0 ? void 0 : _a.default) || 0;\n        }\n        key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n        return instance.getAttribute(key);\n    }\n    measureInstanceViewportBox() {\n        return createBox();\n    }\n    scrapeMotionValuesFromProps(props, prevProps) {\n        return scrapeMotionValuesFromProps(props, prevProps);\n    }\n    build(renderState, latestValues, options, props) {\n        buildSVGAttrs(renderState, latestValues, options, 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 { 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, { enableHardwareAcceleration: false })\n        : new HTMLVisualElement(options, { enableHardwareAcceleration: true });\n};\n\nexport { createDomVisualElement };\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 { cssVariableRegex } from '../../render/dom/utils/css-variables-conversion.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\n\nconst varToken = \"_$css\";\nconst correctBoxShadow = {\n    correct: (latest, { treeScale, projectionDelta }) => {\n        const original = latest;\n        /**\n         * We need to first strip and store CSS variables from the string.\n         */\n        const containsCSSVariables = latest.includes(\"var(\");\n        const cssVariables = [];\n        if (containsCSSVariables) {\n            latest = latest.replace(cssVariableRegex, (match) => {\n                cssVariables.push(match);\n                return varToken;\n            });\n        }\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 = mix(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        let output = template(shadow);\n        if (containsCSSVariables) {\n            let i = 0;\n            output = output.replace(varToken, () => {\n                const cssVariable = cssVariables[i];\n                i++;\n                return cssVariable;\n            });\n        }\n        return output;\n    },\n};\n\nexport { correctBoxShadow };\n","import { sync } from '../../../frameloop/index.mjs';\nimport React__default, { useContext } 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';\n\nclass MeasureLayoutWithContext extends React__default.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                sync.postRender(() => {\n                    var _a;\n                    if (!((_a = projection.getStack()) === null || _a === void 0 ? void 0 : _a.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            if (!projection.currentAnimation && projection.isLead()) {\n                this.safeToRemove();\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 === null || layoutGroup === void 0 ? void 0 : layoutGroup.group)\n                layoutGroup.group.remove(projection);\n            if (promoteContext === null || promoteContext === void 0 ? void 0 : promoteContext.deregister)\n                promoteContext.deregister(projection);\n        }\n    }\n    safeToRemove() {\n        const { safeToRemove } = this.props;\n        safeToRemove === null || safeToRemove === void 0 ? void 0 : safeToRemove();\n    }\n    render() {\n        return null;\n    }\n}\nfunction MeasureLayout(props) {\n    const [isPresent, safeToRemove] = usePresence();\n    const layoutGroup = useContext(LayoutGroupContext);\n    return (React__default.createElement(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 { MeasureLayout } from './MeasureLayout.mjs';\n\nconst layoutFeatures = {\n    measureLayout: MeasureLayout,\n};\n\nexport { layoutFeatures };\n","import { circOut } from '../../easing/circ.mjs';\nimport { progress } from '../../utils/progress.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { noop } from '../../utils/noop.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 = mix(0, \n        // TODO Reinstate this if only child\n        lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n        target.opacityExit = mix(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n    }\n    else if (isOnlyMember) {\n        target.opacity = mix(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(mix(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 = mix(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 = compress(0, 0.5, circOut);\nconst easeCrossfadeOut = 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\nexport { copyAxisInto, copyBoxInto };\n","import { mix } from '../../utils/mix.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 = mix(sourceAxis.min, sourceAxis.max, translate / 100);\n        translate = relativeProgress - sourceAxis.min;\n    }\n    if (typeof translate !== \"number\")\n        return;\n    let originPoint = mix(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 === null || originBox === void 0 ? void 0 : originBox.x, sourceBox === null || sourceBox === void 0 ? void 0 : sourceBox.x);\n    removeAxisTransforms(box.y, transforms, yKeys, originBox === null || originBox === void 0 ? void 0 : originBox.y, sourceBox === null || sourceBox === void 0 ? void 0 : sourceBox.y);\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 boxEquals(a, b) {\n    return (a.x.min === b.x.min &&\n        a.x.max === b.x.max &&\n        a.y.min === b.y.min &&\n        a.y.max === b.y.max);\n}\nfunction aspectRatio(box) {\n    return calcLength(box.x) / calcLength(box.y);\n}\n\nexport { aspectRatio, boxEquals, 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        var _a;\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 ((_a = node.root) === null || _a === void 0 ? void 0 : _a.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            var _a, _b, _c, _d, _e;\n            (_b = (_a = node.options).onExitComplete) === null || _b === void 0 ? void 0 : _b.call(_a);\n            (_e = (_c = node.resumingFrom) === null || _c === void 0 ? void 0 : (_d = _c.options).onExitComplete) === null || _e === void 0 ? void 0 : _e.call(_d);\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","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    if (xTranslate || yTranslate) {\n        transform = `translate3d(${xTranslate}px, ${yTranslate}px, 0) `;\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 { rotate, rotateX, rotateY } = latestTransform;\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    }\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","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 { cancelSync, flushSync, sync } from '../../frameloop/index.mjs';\nimport { animate } from '../../animation/animate.mjs';\nimport { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcRelativePosition, calcRelativeBox, calcBoxDelta, calcLength, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { getValueTransition } from '../../animation/utils/transitions.mjs';\nimport { boxEquals, isDeltaZero, aspectRatio } 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 { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mix } from '../../utils/mix.mjs';\n\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\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 createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n    return class ProjectionNode {\n        constructor(elementId, 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            this.isTransformDirty = false;\n            /**\n             * Flag to true if we think the projection calculations for this or any\n             * child might need recalculating as a result of an updated transform or layout animation.\n             */\n            this.isProjectionDirty = 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             * 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            // Note: Currently only running on root node\n            this.potentialNodes = new Map();\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.nodes.forEach(propagateDirtyNodes);\n                this.nodes.forEach(resolveTargetDelta);\n                this.nodes.forEach(calcProjection);\n            };\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.elementId = elementId;\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            elementId && this.root.registerPotentialNode(elementId, this);\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 === null || subscriptionManager === void 0 ? void 0 : subscriptionManager.notify(...args);\n        }\n        hasListeners(name) {\n            return this.eventHandlers.has(name);\n        }\n        registerPotentialNode(elementId, node) {\n            this.potentialNodes.set(elementId, node);\n        }\n        /**\n         * Lifecycles\n         */\n        mount(instance, isLayoutDirty = false) {\n            var _a;\n            if (this.instance)\n                return;\n            this.isSVG =\n                instance instanceof SVGElement && instance.tagName !== \"svg\";\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            (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children.add(this);\n            this.elementId && this.root.potentialNodes.delete(this.elementId);\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, hasRelativeTargetChanged, layout: newLayout, }) => {\n                    var _a, _b, _c, _d, _e;\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 = (_b = (_a = this.options.transition) !== null && _a !== void 0 ? _a : visualElement.getDefaultTransition()) !== null && _b !== void 0 ? _b : 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 targetChanged = !this.targetLayout ||\n                        !boxEquals(this.targetLayout, newLayout) ||\n                        hasRelativeTargetChanged;\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 && hasRelativeTargetChanged;\n                    if (this.options.layoutRoot ||\n                        ((_c = this.resumeFrom) === null || _c === void 0 ? void 0 : _c.instance) ||\n                        hasOnlyRelativeTargetChanged ||\n                        (hasLayoutChanged &&\n                            (targetChanged || !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                            this.animationProgress === 0) {\n                            finishAnimation(this);\n                        }\n                        this.isLead() && ((_e = (_d = this.options).onExitComplete) === null || _e === void 0 ? void 0 : _e.call(_d));\n                    }\n                    this.targetLayout = newLayout;\n                });\n            }\n        }\n        unmount() {\n            var _a, _b;\n            this.options.layoutId && this.willUpdate();\n            this.root.nodes.remove(this);\n            (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.remove(this);\n            (_b = this.parent) === null || _b === void 0 ? void 0 : _b.children.delete(this);\n            this.instance = undefined;\n            cancelSync.preRender(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            var _a;\n            return (this.isAnimationBlocked ||\n                ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isTreeAnimationBlocked()) ||\n                false);\n        }\n        // Note: currently only running on root node\n        startUpdate() {\n            var _a;\n            if (this.isUpdateBlocked())\n                return;\n            this.isUpdating = true;\n            (_a = this.nodes) === null || _a === void 0 ? void 0 : _a.forEach(resetRotation);\n            this.animationId++;\n        }\n        getTransformTemplate() {\n            var _a;\n            return (_a = this.options.visualElement) === null || _a === void 0 ? void 0 : _a.getProps().transformTemplate;\n        }\n        willUpdate(shouldNotifyListeners = true) {\n            var _a, _b, _c;\n            if (this.root.isUpdateBlocked()) {\n                (_b = (_a = this.options).onExitComplete) === null || _b === void 0 ? void 0 : _b.call(_a);\n                return;\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            this.prevTransformTemplateValue = (_c = this.getTransformTemplate()) === null || _c === void 0 ? void 0 : _c(this.latestValues, \"\");\n            this.updateSnapshot();\n            shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n        }\n        // Note: Currently only running on root node\n        didUpdate() {\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                return;\n            this.isUpdating = false;\n            /**\n             * Search for and mount newly-added projection elements.\n             *\n             * TODO: Every time a new component is rendered we could search up the tree for\n             * the closest mounted node and query from there rather than document.\n             */\n            if (this.potentialNodes.size) {\n                this.potentialNodes.forEach(mountNodeEarly);\n                this.potentialNodes.clear();\n            }\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            // Flush any scheduled updates\n            flushSync.update();\n            flushSync.preRender();\n            flushSync.render();\n        }\n        clearAllSnapshots() {\n            this.nodes.forEach(clearSnapshot);\n            this.sharedNodes.forEach(removeLeadSnapshots);\n        }\n        scheduleUpdateProjection() {\n            sync.preRender(this.updateProjection, false, true);\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            sync.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        }\n        updateLayout() {\n            var _a;\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            (_a = this.options.visualElement) === null || _a === void 0 ? void 0 : _a.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout === null || prevLayout === void 0 ? void 0 : prevLayout.layoutBox);\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                this.scroll = {\n                    animationId: this.root.animationId,\n                    phase,\n                    isRoot: checkIsScrollRoot(this.instance),\n                    offset: measureScroll(this.instance),\n                };\n            }\n        }\n        resetTransform() {\n            var _a;\n            if (!resetTransform)\n                return;\n            const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;\n            const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n            const transformTemplateValue = (_a = this.getTransformTemplate()) === null || _a === void 0 ? void 0 : _a(this.latestValues, \"\");\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            const { visualElement } = this.options;\n            if (!visualElement)\n                return createBox();\n            const box = visualElement.measureViewportBox();\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            return box;\n        }\n        removeElementScroll(box) {\n            const boxWithoutScroll = createBox();\n            copyBoxInto(boxWithoutScroll, box);\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.isRoot) {\n                        copyBoxInto(boxWithoutScroll, box);\n                        const { scroll: rootScroll } = this.root;\n                        /**\n                         * Undo the application of page scroll that was originally added\n                         * to the measured bounding box.\n                         */\n                        if (rootScroll) {\n                            translateAxis(boxWithoutScroll.x, -rootScroll.offset.x);\n                            translateAxis(boxWithoutScroll.y, -rootScroll.offset.y);\n                        }\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            var _a;\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, (_a = node.snapshot) === null || _a === void 0 ? void 0 : _a.layoutBox, sourceBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                removeBoxTransforms(boxWithoutTransform, this.latestValues);\n            }\n            return boxWithoutTransform;\n        }\n        /**\n         *\n         */\n        setTargetDelta(delta) {\n            this.targetDelta = delta;\n            this.isProjectionDirty = true;\n            this.root.scheduleUpdateProjection();\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        /**\n         * Frame calculations\n         */\n        resolveTargetDelta() {\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            /**\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            if (!this.isProjectionDirty && !this.attemptToResolveRelativeTarget)\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            /**\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            // TODO If this is unsuccessful this currently happens every frame\n            if (!this.targetDelta && !this.relativeTarget) {\n                // TODO: This is a semi-repetition of further down this function, make DRY\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent && relativeParent.layout) {\n                    this.relativeParent = relativeParent;\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                ((_a = this.relativeParent) === null || _a === void 0 ? void 0 : _a.target)) {\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.relativeParent = relativeParent;\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        getClosestProjectingParent() {\n            if (!this.parent ||\n                hasScale(this.parent.latestValues) ||\n                has2DTranslate(this.parent.latestValues)) {\n                return undefined;\n            }\n            if ((this.parent.relativeTarget ||\n                this.parent.targetDelta ||\n                this.parent.options.layoutRoot) &&\n                this.parent.layout) {\n                return this.parent;\n            }\n            else {\n                return this.parent.getClosestProjectingParent();\n            }\n        }\n        calcProjection() {\n            var _a;\n            const { isProjectionDirty, isTransformDirty } = this;\n            this.isProjectionDirty = this.isTransformDirty = false;\n            const lead = this.getLead();\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            let canSkip = true;\n            if (isProjectionDirty)\n                canSkip = false;\n            if (isShared && isTransformDirty)\n                canSkip = false;\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(((_a = this.parent) === null || _a === void 0 ? void 0 : _a.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             * 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            const { target } = lead;\n            if (!target)\n                return;\n            if (!this.projectionDelta) {\n                this.projectionDelta = createDelta();\n                this.projectionDeltaWithTransform = createDelta();\n            }\n            const prevTreeScaleX = this.treeScale.x;\n            const prevTreeScaleY = this.treeScale.y;\n            const prevProjectionTransform = this.projectionTransform;\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            this.projectionTransform = buildProjectionTransform(this.projectionDelta, this.treeScale);\n            if (this.projectionTransform !== prevProjectionTransform ||\n                this.treeScale.x !== prevTreeScaleX ||\n                this.treeScale.y !== prevTreeScaleY) {\n                this.hasProjected = true;\n                this.scheduleRender();\n                this.notifyListeners(\"projectionUpdate\", target);\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, _b, _c;\n            (_b = (_a = this.options).scheduleRender) === null || _b === void 0 ? void 0 : _b.call(_a);\n            notifyAll && ((_c = this.getStack()) === null || _c === void 0 ? void 0 : _c.scheduleRender());\n            if (this.resumingFrom && !this.resumingFrom.instance) {\n                this.resumingFrom = undefined;\n            }\n        }\n        setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n            var _a, _b;\n            const snapshot = this.snapshot;\n            const snapshotLatestValues = (snapshot === null || snapshot === void 0 ? void 0 : snapshot.latestValues) || {};\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 isSharedLayoutAnimation = (snapshot === null || snapshot === void 0 ? void 0 : snapshot.source) !== ((_a = this.layout) === null || _a === void 0 ? void 0 : _a.source);\n            const isOnlyMember = (((_b = this.getStack()) === null || _b === void 0 ? void 0 : _b.members.length) || 0) <= 1;\n            const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n                !isOnlyMember &&\n                this.options.crossfade === true &&\n                !this.path.some(hasOpacityCrossfade));\n            this.animationProgress = 0;\n            this.mixTargetDelta = (latest) => {\n                var _a;\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                    ((_a = this.relativeParent) === null || _a === void 0 ? void 0 : _a.layout)) {\n                    calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n                    mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\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            var _a, _b;\n            this.notifyListeners(\"animationStart\");\n            (_a = this.currentAnimation) === null || _a === void 0 ? void 0 : _a.stop();\n            if (this.resumingFrom) {\n                (_b = this.resumingFrom.currentAnimation) === null || _b === void 0 ? void 0 : _b.stop();\n            }\n            if (this.pendingAnimation) {\n                cancelSync.update(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 = sync.update(() => {\n                globalProjectionState.hasAnimatedSinceResize = true;\n                this.currentAnimation = animate(0, animationTarget, {\n                    ...options,\n                    onUpdate: (latest) => {\n                        var _a;\n                        this.mixTargetDelta(latest);\n                        (_a = options.onUpdate) === null || _a === void 0 ? void 0 : _a.call(options, latest);\n                    },\n                    onComplete: () => {\n                        var _a;\n                        (_a = options.onComplete) === null || _a === void 0 ? void 0 : _a.call(options);\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            var _a;\n            if (this.resumingFrom) {\n                this.resumingFrom.currentAnimation = undefined;\n                this.resumingFrom.preserveOpacity = undefined;\n            }\n            (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.exitAnimationComplete();\n            this.resumingFrom =\n                this.currentAnimation =\n                    this.animationValues =\n                        undefined;\n            this.notifyListeners(\"animationComplete\");\n        }\n        finishAnimation() {\n            var _a;\n            if (this.currentAnimation) {\n                (_a = this.mixTargetDelta) === null || _a === void 0 ? void 0 : _a.call(this, 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            var _a, _b, _c;\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            node.promote({\n                transition: (_a = node.options.initialPromotionConfig) === null || _a === void 0 ? void 0 : _a.transition,\n                preserveFollowOpacity: (_c = (_b = node.options.initialPromotionConfig) === null || _b === void 0 ? void 0 : _b.shouldPreserveFollowOpacity) === null || _c === void 0 ? void 0 : _c.call(_b, node),\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        resetRotation() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return;\n            // If there's no detected rotation values, we can early return without a forced render.\n            let hasRotate = 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.rotate ||\n                latestValues.rotateX ||\n                latestValues.rotateY ||\n                latestValues.rotateZ) {\n                hasRotate = true;\n            }\n            // If there's no rotation values, we don't need to do any more.\n            if (!hasRotate)\n                return;\n            const resetValues = {};\n            // Check the rotate value of all axes and reset to 0\n            for (let i = 0; i < transformAxes.length; i++) {\n                const key = \"rotate\" + transformAxes[i];\n                // Record the rotation and then temporarily set it to 0\n                if (latestValues[key]) {\n                    resetValues[key] = latestValues[key];\n                    visualElement.setStaticValue(key, 0);\n                }\n            }\n            // Force a render of this element to apply the transform with all rotations\n            // set to 0.\n            visualElement === null || visualElement === void 0 ? void 0 : visualElement.render();\n            // Put back all the values we reset\n            for (const key in resetValues) {\n                visualElement.setStaticValue(key, resetValues[key]);\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            // TODO: Return lifecycle-persistent object\n            const styles = {};\n            if (!this.instance || this.isSVG)\n                return styles;\n            if (!this.isVisible) {\n                return { visibility: \"hidden\" };\n            }\n            else {\n                styles.visibility = \"\";\n            }\n            const transformTemplate = this.getTransformTemplate();\n            if (this.needsReset) {\n                this.needsReset = false;\n                styles.opacity = \"\";\n                styles.pointerEvents =\n                    resolveMotionValue(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.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 } = 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                    styles[key] = corrected;\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.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, _b, _c;\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        }\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 hasRelativeTargetChanged = 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 (!boxEquals(relativeSnapshot, relativeLayout)) {\n                        hasRelativeTargetChanged = 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            hasRelativeTargetChanged,\n        });\n    }\n    else if (node.isLead()) {\n        (_c = (_b = node.options).onExitComplete) === null || _c === void 0 ? void 0 : _c.call(_b);\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     * Propagate isProjectionDirty. Nodes are ordered by depth, so if the parent here\n     * is dirty we can simply pass this forward.\n     */\n    node.isProjectionDirty || (node.isProjectionDirty = Boolean(node.parent && node.parent.isProjectionDirty));\n    /**\n     * Propagate isTransformDirty.\n     */\n    node.isTransformDirty || (node.isTransformDirty = Boolean(node.parent && node.parent.isTransformDirty));\n}\nfunction clearSnapshot(node) {\n    node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n    node.clearMeasurements();\n}\nfunction resetTransformStyle(node) {\n    const { visualElement } = node.options;\n    if (visualElement === null || visualElement === void 0 ? void 0 : 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}\nfunction resolveTargetDelta(node) {\n    node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n    node.calcProjection();\n}\nfunction resetRotation(node) {\n    node.resetRotation();\n}\nfunction removeLeadSnapshots(stack) {\n    stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n    output.translate = mix(delta.translate, 0, p);\n    output.scale = mix(delta.scale, 1, p);\n    output.origin = delta.origin;\n    output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n    output.min = mix(from.min, to.min, p);\n    output.max = mix(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};\nfunction mountNodeEarly(node, elementId) {\n    /**\n     * Rather than searching the DOM from document we can search the\n     * path for the deepest mounted ancestor and search from there\n     */\n    let searchNode = node.root;\n    for (let i = node.path.length - 1; i >= 0; i--) {\n        if (Boolean(node.path[i].instance)) {\n            searchNode = node.path[i];\n            break;\n        }\n    }\n    const searchElement = searchNode && searchNode !== node.root ? searchNode.instance : document;\n    const element = searchElement.querySelector(`[data-projection-id=\"${elementId}\"]`);\n    if (element)\n        node.mount(element, true);\n}\nfunction roundAxis(axis) {\n    axis.min = Math.round(axis.min);\n    axis.max = Math.round(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}\n\nexport { createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","import { createMotionValueAnimation } from './index.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\n\n/**\n * Animate a single value or a `MotionValue`.\n *\n * The first argument is either a `MotionValue` to animate, or an initial animation value.\n *\n * The second is either a value to animate to, or an array of keyframes to animate through.\n *\n * The third argument can be either tween or spring options, and optional lifecycle methods: `onUpdate`, `onPlay`, `onComplete`, `onRepeat` and `onStop`.\n *\n * Returns `AnimationPlaybackControls`, currently just a `stop` method.\n *\n * ```javascript\n * const x = useMotionValue(0)\n *\n * useEffect(() => {\n *   const controls = animate(x, 100, {\n *     type: \"spring\",\n *     stiffness: 2000,\n *     onComplete: v => {}\n *   })\n *\n *   return controls.stop\n * })\n * ```\n *\n * @public\n */\nfunction animate(from, to, transition = {}) {\n    const value = isMotionValue(from) ? from : motionValue(from);\n    value.start(createMotionValueAnimation(\"\", value, to, transition));\n    return {\n        stop: () => value.stop(),\n        isAnimating: () => value.isAnimating(),\n    };\n}\n\nexport { animate };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/use-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(0, {});\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 { createMotionComponent } from '../../motion/index.mjs';\nimport { createMotionProxy } from './motion-proxy.mjs';\nimport { createDomMotionConfig } from './utils/create-config.mjs';\nimport { gestureAnimations } from '../../motion/features/gestures.mjs';\nimport { animations } from '../../motion/features/animations.mjs';\nimport { drag } from '../../motion/features/drag.mjs';\nimport { createDomVisualElement } from './create-visual-element.mjs';\nimport { layoutFeatures } from '../../motion/features/layout/index.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst featureBundle = {\n    ...animations,\n    ...gestureAnimations,\n    ...drag,\n    ...layoutFeatures,\n};\n/**\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\n *\n * @public\n */\nconst motion = /*@__PURE__*/ createMotionProxy((Component, config) => createDomMotionConfig(Component, config, featureBundle, createDomVisualElement, HTMLProjectionNode));\n/**\n * Create a DOM `motion` component with the provided string. This is primarily intended\n * as a full alternative to `motion` for consumers who have to support environments that don't\n * support `Proxy`.\n *\n * ```javascript\n * import { createDomMotionComponent } from \"framer-motion\"\n *\n * const motion = {\n *   div: createDomMotionComponent('div')\n * }\n * ```\n *\n * @public\n */\nfunction createDomMotionComponent(key) {\n    return createMotionComponent(createDomMotionConfig(key, { forwardMotionProps: false }, featureBundle, createDomVisualElement, HTMLProjectionNode));\n}\n\nexport { createDomMotionComponent, motion };\n","import { isSVGComponent } from './is-svg-component.mjs';\nimport { createUseRender } from '../use-render.mjs';\nimport { svgMotionConfig } from '../../svg/config-motion.mjs';\nimport { htmlMotionConfig } from '../../html/config-motion.mjs';\n\nfunction createDomMotionConfig(Component, { forwardMotionProps = false }, preloadedFeatures, createVisualElement, projectionNodeConstructor) {\n    const baseConfig = isSVGComponent(Component)\n        ? svgMotionConfig\n        : htmlMotionConfig;\n    return {\n        ...baseConfig,\n        preloadedFeatures,\n        useRender: createUseRender(forwardMotionProps),\n        createVisualElement,\n        projectionNodeConstructor,\n        Component,\n    };\n}\n\nexport { createDomMotionConfig };\n","const isBrowser = typeof document !== \"undefined\";\n\nexport { isBrowser };\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 { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import { useEffect } from 'react';\n\nfunction useUnmountEffect(callback) {\n    return useEffect(() => () => callback(), []);\n}\n\nexport { useUnmountEffect };\n","\"use client\"\nimport t from\"prop-types\";import e from\"react\";import{resolve as n,Location as r,Link as o}from\"@gatsbyjs/reach-router\";import{applyTrailingSlashOption as s}from\"gatsby-page-utils/apply-trailing-slash-option\";function i(){return i=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i.apply(this,arguments)}function a(t){let e=t||\"/\",n=\"\",r=\"\";const o=e.indexOf(\"#\");-1!==o&&(r=e.slice(o),e=e.slice(0,o));const s=e.indexOf(\"?\");return-1!==s&&(n=e.slice(s),e=e.slice(0,s)),{pathname:e,search:\"?\"===n?\"\":n,hash:\"#\"===r?\"\":r}}const c=/^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/,l=t=>{if(\"string\"==typeof t)return!(t=>c.test(t))(t)},p=()=>\"production\"!==process.env.NODE_ENV?\"undefined\"!=typeof __BASE_PATH__?__BASE_PATH__:void 0:__BASE_PATH__,h=()=>\"production\"!==process.env.NODE_ENV?\"undefined\"!=typeof __PATH_PREFIX__?__PATH_PREFIX__:void 0:__PATH_PREFIX__;function f(t,e=p()){var n;if(!l(t))return t;if(t.startsWith(\"./\")||t.startsWith(\"../\"))return t;const r=null!=(n=null!=e?e:h())?n:\"/\";return`${null!=r&&r.endsWith(\"/\")?r.slice(0,-1):r}${t.startsWith(\"/\")?t:`/${t}`}`}const u=t=>null==t?void 0:t.startsWith(\"/\"),_=()=>\"undefined\"!=typeof __TRAILING_SLASH__?__TRAILING_SLASH__:void 0;function d(t,e){const{pathname:n,search:r,hash:o}=a(t);return`${s(n,e)}${r}${o}`}const m=(t,e)=>\"number\"==typeof t?t:l(t)?u(t)?function(t){const e=f(t),n=_();return\"always\"===n||\"never\"===n?d(e,n):e}(t):function(t,e){if(u(t))return t;const r=_(),o=n(t,e);return\"always\"===r||\"never\"===r?d(o,r):o}(t,e):t,y=[\"to\",\"getProps\",\"onClick\",\"onMouseEnter\",\"activeClassName\",\"activeStyle\",\"innerRef\",\"partiallyActive\",\"state\",\"replace\",\"_location\"];function v(t){return f(t,h())}const b={activeClassName:t.string,activeStyle:t.object,partiallyActive:t.bool};function w(t){/*#__PURE__*/return e.createElement(r,null,({location:n})=>/*#__PURE__*/e.createElement(P,i({},t,{_location:n})))}class P extends e.Component{constructor(t){super(t),this.defaultGetProps=({isPartiallyCurrent:t,isCurrent:e})=>(this.props.partiallyActive?t:e)?{className:[this.props.className,this.props.activeClassName].filter(Boolean).join(\" \"),style:i({},this.props.style,this.props.activeStyle)}:null;let e=!1;\"undefined\"!=typeof window&&window.IntersectionObserver&&(e=!0),this.state={IOSupported:e},this.abortPrefetch=null,this.handleRef=this.handleRef.bind(this)}_prefetch(){let t=window.location.pathname+window.location.search;this.props._location&&this.props._location.pathname&&(t=this.props._location.pathname+this.props._location.search);const e=a(m(this.props.to,t)),n=e.pathname+e.search;if(t!==n)return ___loader.enqueue(n)}componentWillUnmount(){if(!this.io)return;const{instance:t,el:e}=this.io;this.abortPrefetch&&this.abortPrefetch.abort(),t.unobserve(e),t.disconnect()}handleRef(t){this.props.innerRef&&Object.prototype.hasOwnProperty.call(this.props.innerRef,\"current\")?this.props.innerRef.current=t:this.props.innerRef&&this.props.innerRef(t),this.state.IOSupported&&t&&(this.io=((t,e)=>{const n=new window.IntersectionObserver(n=>{n.forEach(n=>{t===n.target&&e(n.isIntersecting||n.intersectionRatio>0)})});return n.observe(t),{instance:n,el:t}})(t,t=>{t?this.abortPrefetch=this._prefetch():this.abortPrefetch&&this.abortPrefetch.abort()}))}render(){const t=this.props,{to:n,getProps:r=this.defaultGetProps,onClick:s,onMouseEnter:c,state:p,replace:h,_location:f}=t,u=function(t,e){if(null==t)return{};var n,r,o={},s=Object.keys(t);for(r=0;r<s.length;r++)e.indexOf(n=s[r])>=0||(o[n]=t[n]);return o}(t,y);\"production\"===process.env.NODE_ENV||l(n)||console.warn(`External link ${n} was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links`);const _=m(n,f.pathname);return l(_)?/*#__PURE__*/e.createElement(o,i({to:_,state:p,getProps:r,innerRef:this.handleRef,onMouseEnter:t=>{c&&c(t);const e=a(_);___loader.hovering(e.pathname+e.search)},onClick:t=>{if(s&&s(t),!(0!==t.button||this.props.target||t.defaultPrevented||t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)){t.preventDefault();let e=h;const n=encodeURI(_)===f.pathname;\"boolean\"!=typeof h&&n&&(e=!0),window.___navigate(_,{state:p,replace:e})}return!0}},u)):/*#__PURE__*/e.createElement(\"a\",i({href:_},u))}}P.propTypes=i({},b,{onClick:t.func,to:t.string.isRequired,replace:t.bool,state:t.object});const E=e.forwardRef((t,n)=>/*#__PURE__*/e.createElement(w,i({innerRef:n},t))),g=(t,e)=>{window.___navigate(m(t,window.location.pathname),e)};export{E as Link,g as navigate,a as parsePath,v as withAssetPrefix,f as withPrefix};\n//# sourceMappingURL=index.modern.mjs.map\n","\"use client\"\nimport t,{useEffect as e}from\"react\";import{Location as n,useLocation as r}from\"@gatsbyjs/reach-router\";function o(){return o=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},o.apply(this,arguments)}const a=new Map,l={get:t=>a.get(t)||[],set(t,e){const n=a.get(t)||[];n.push(e),a.set(t,n)},delete(t){a.delete(t)}},s=\"undefined\"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(t){const e=Date.now();return setTimeout(function(){t({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-e))}})},1)};var c;!function(t){t.postHydrate=\"post-hydrate\",t.idle=\"idle\",t.offMainThread=\"off-main-thread\"}(c||(c={}));const i=new Set([\"src\",\"strategy\",\"dangerouslySetInnerHTML\",\"children\",\"onLoad\",\"onError\"]),u=new Set,d=new Map;function f(e){/*#__PURE__*/return t.createElement(n,null,()=>/*#__PURE__*/t.createElement(p,e))}function p(n){const{src:a,strategy:i=c.postHydrate}=n||{},{pathname:u}=r();if(e(()=>{let t;switch(i){case c.postHydrate:t=y(n);break;case c.idle:s(()=>{t=y(n)});break;case c.offMainThread:{const t=b(n);l.set(u,t)}}return()=>{const{script:e,loadCallback:n,errorCallback:r}=t||{};n&&(null==e||e.removeEventListener(\"load\",n)),r&&(null==e||e.removeEventListener(\"error\",r)),null==e||e.remove()}},[]),i===c.offMainThread){const e=m(n),r=b(n);return\"undefined\"==typeof window&&l.set(u,r),/*#__PURE__*/t.createElement(\"script\",e?o({type:\"text/partytown\",\"data-strategy\":i,crossOrigin:\"anonymous\"},r,{dangerouslySetInnerHTML:{__html:m(n)}}):o({type:\"text/partytown\",src:h(a),\"data-strategy\":i,crossOrigin:\"anonymous\"},r))}return null}function y(t){const{id:e,src:n,strategy:r=c.postHydrate,onLoad:a,onError:l}=t||{},s=e||n,i=[\"load\",\"error\"],f={load:a,error:l};if(s){for(const t of i)if(null!=f&&f[t]){var p;const e=d.get(s)||{},{callbacks:n=[]}=(null==e?void 0:e[t])||{};var y,h;n.push(null==f?void 0:f[t]),null!=e&&null!=(p=e[t])&&p.event?null==f||null==(y=f[t])||y.call(f,null==e||null==(h=e[t])?void 0:h.event):d.set(s,o({},e,{[t]:{callbacks:n}}))}if(u.has(s))return null}const v=m(t),k=b(t),w=document.createElement(\"script\");e&&(w.id=e),w.dataset.strategy=r;for(const[t,e]of Object.entries(k))w.setAttribute(t,e);v&&(w.textContent=v),n&&(w.src=n);const C={};if(s){for(const t of i){const e=e=>g(e,s,t);w.addEventListener(t,e),C[`${t}Callback`]=e}u.add(s)}return document.body.appendChild(w),{script:w,loadCallback:C.loadCallback,errorCallback:C.errorCallback}}function m(t){const{dangerouslySetInnerHTML:e,children:n=\"\"}=t||{},{__html:r=\"\"}=e||{};return r||n}function b(t){const e={};for(const[n,r]of Object.entries(t))i.has(n)||(e[n]=r);return e}function h(t){if(t)return`/__third-party-proxy?url=${encodeURIComponent(t)}`}function g(t,e,n){const r=d.get(e)||{};for(const e of(null==r||null==(o=r[n])?void 0:o.callbacks)||[]){var o;e(t)}d.set(e,{[n]:{event:t}})}export{f as Script,c as ScriptStrategy,l as collectedScriptsByPage,u as scriptCache,d as scriptCallbackCache};\n//# sourceMappingURL=index.modern.mjs.map\n"],"names":["exports","suffixes","input","option","hasTrailingSlash","endsWith","suffix","endsWithSuffixes","slice","_scrollHandler","ScrollHandler","_useScrollRestoration","useScrollRestoration","_interopRequireDefault","__esModule","ScrollContext","_assertThisInitialized2","_inheritsLoose2","React","obj","nodeInterop","default","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_interopRequireWildcard","_propTypes","_sessionStorage","WeakMap","cacheBabelInterop","cacheNodeInterop","createContext","SessionStorage","displayName","_React$Component","_this","_len","arguments","length","args","Array","_key","apply","this","concat","_stateStorage","_isTicking","_latestKnownScrollY","scrollListener","window","scrollY","requestAnimationFrame","_saveScroll","bind","windowScroll","position","prevProps","shouldUpdateScroll","props","scrollTo","scrollToHash","hash","node","document","getElementById","substring","scrollIntoView","prevRouterProps","routerProps","_proto","location","save","componentDidMount","scrollPosition","addEventListener","_this$props$location","read","decodeURI","undefined","componentWillUnmount","removeEventListener","componentDidUpdate","_this$props$location2","render","createElement","Provider","value","children","Component","propTypes","func","element","isRequired","object","GATSBY_ROUTER_SCROLL_STATE","stateKey","getStateKey","sessionStorage","getItem","JSON","parse","e","storedValue","stringify","setItem","stateKeyBase","pathname","identifier","_reachRouter","useLocation","state","_react","useContext","ref","useRef","useLayoutEffect","current","onScroll","scrollTop","onInitialClientRender","getForwards","collectedScripts","flatMap","script","forward","injectPartytownSnippet","existingSnippet","querySelector","existingSandbox","remove","forwards","_getForwards","snippet","dataset","partytown","innerHTML","_integration","partytownSnippet","head","appendChild","components","component---src-pages-404-jsx","component---src-pages-bildnachweise-jsx","component---src-pages-blog-jsx","component---src-pages-branchen-jsx","component---src-pages-datenschutzerklaerung-jsx","component---src-pages-en-blog-jsx","component---src-pages-en-company-jsx","component---src-pages-en-contact-jsx","component---src-pages-en-disclaimer-jsx","component---src-pages-en-events-jsx","component---src-pages-en-image-credits-jsx","component---src-pages-en-imprint-jsx","component---src-pages-en-index-jsx","component---src-pages-en-industries-jsx","component---src-pages-en-online-dispute-resolution-jsx","component---src-pages-en-privacy-policy-jsx","component---src-pages-en-software-jsx","component---src-pages-en-solutions-jsx","component---src-pages-en-support-jsx","component---src-pages-en-vdi-2770-jsx","component---src-pages-haftungsausschluss-jsx","component---src-pages-impressum-jsx","component---src-pages-index-jsx","component---src-pages-kontakt-jsx","component---src-pages-loesungen-jsx","component---src-pages-online-streitbeilegung-jsx","component---src-pages-software-jsx","component---src-pages-support-jsx","component---src-pages-unternehmen-jsx","component---src-pages-vdi-2770-jsx","component---src-pages-veranstaltungen-jsx","component---src-pages-whitepapers-content-fit-for-chatbots-jsx","component---src-pages-whitepapers-index-jsx","component---src-pages-whitepapers-vdi-2770-jsx","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-25-blog-launch-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-03-26-din-connect-2020-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-02-corona-homeoffice-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-09-homeoffice-tools-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-04-23-jahr-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-08-anwenderportal-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-05-20-iirds-vdi-2770-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-04-back-in-the-office-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-06-22-tekom-summercon-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-07-14-ditrano-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-03-auszeichnung-100-orte-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-14-landtagsabgeordnete-zu-besuch-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-08-31-iirds-best-practice-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-09-25-cloud-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-12-iirds-ot-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-10-28-tekom-jahrestagung-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-09-ki-4-industry-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-11-27-profitipps-iirds-ot-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-08-arbeiten-bei-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-16-idis-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2020-12-22-weihnachtsgruesse-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-01-26-webinar-iirds-ot-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-01-iirds-konsortium-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-03-23-zwei-jahre-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-08-onboarding-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-04-29-fruehjahrestagung-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-21-videoproduktion-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-05-27-schulungen-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-09-new-work-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-20-st-4-ai-cube-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-07-21-ki-innovationswettbewerb-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-08-12-iirds-blogserie-teil-2-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-09-01-abschlussarbeiten-bei-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-02-expertenfragen-zur-vdi-2770-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-18-pdf-dateien-mit-metadaten-anreichern-und-als-vdi-2770-container-exportieren-tutorial-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-11-24-deeep-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-07-umzug-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2021-12-21-frohe-weihnachten-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-04-ki-in-der-tr-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-18-vdi-2770-paket-generieren-video-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-01-25-mein-praxissemester-bei-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-02-15-vdi-2770-pakete-mit-ki-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-03-15-standards-technische-dokumentation-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-05-05-fachbegriffe-technische-dokumentation-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-07-14-3-jahre-jubileaum-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-23-digitale-datenkette-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-08-24-die-digitale-datenkette-einfach-erklaert-video-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2022-10-04-was-ist-deeplearning-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-10-einfache-und-erfolgreiche-metadatenvergabe-fuer-komax-in-st-4-video-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-16-was-ist-nlp-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-02-18-die-digitale-datenkette-fuer-merck-umgesetzt-mit-ki-video-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-07-12-plusmeta-wird-4-jahre-alt-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-11-05-kreen-forschungsprojekt-gefoerdert-durch-investbw-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2023-12-19-jahresruecklick-23-frohe-weihnachten-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-12-success-story-baw-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-01-14-aufbereitung-von-bestandsdokumente-mit-metadaten-fuer-baw-video-copy-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-16-metadaten-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-04-25-dokumentation-nach-vdi-2770-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-02-digital-data-chain-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-05-16-intelligente-daten-fur-content-delivery-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-11-migration-in-ein-neues-ccms-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-13-top-5-llm-funktionen-von-plusmeta-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-06-23-gen-ai-vdi-2770-pakete-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-15-workflow-aehnlichkeitsanalyse-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-22-daten-aufbereiten-fuer-eclass-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-27-metadaten-genai-rag-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-08-29-workflow-ii-rds-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-09-12-workflow-ki-modell-trainieren-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-10-workflow-vdi-2770-pakete-erstellen-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-24-success-story-heller-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-10-31-workflow-select-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-11-26-kreen-zwischenbericht-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-03-success-story-knick-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2024-12-18-oekodesign-ddp-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-01-16-chatbots-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-02-13-experteninterview-herausforderungen-von-chatbots-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-de-2025-03-13-knowledge-graphen-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2022-07-14-with-plusmeta-to-the-digital-data-chain-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-10-24-success-story-heller-en-md","component---src-templates-blog-post-jsx-content-file-path-src-content-blog-en-2024-12-18-oekodesign-ddp-md","module","plugin","require","options","plugins","getResourceURLsForPathname","loadPage","loadPageSync","api","defaultReturn","argTransform","results","map","result","filter","reduce","previous","next","then","Promise","resolve","all","create","on","type","handler","push","off","splice","indexOf","emit","evt","mitt","pathAndSearch","path","search","split","charAt","pathCache","Map","matchPaths","trimPathname","rawPathname","newRawPathname","qs","encodeURIComponent","decodeURIComponent","stripPrefix","__BASE_PATH__","absolutify","startsWith","URL","href","setMatchPaths","findMatchPath","trimmedPathname","cleanPath","pickPaths","_ref","matchPath","originalPath","pick","normalizePagePath","route","grabMatchParams","_ref2","params","findPath","redirect","maybeGetBrowserRedirect","toPath","foundPath","_getPrototypeOf","t","setPrototypeOf","getPrototypeOf","__proto__","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_wrapNativeSuper","r","Function","toString","n","TypeError","Wrapper","o","p","constructor","enumerable","writable","configurable","ServerSliceRenderer","sliceId","contents","id","ServerSlice","sliceName","allowEmpty","sliceProps","slicesMap","SlicesMapContext","slicesProps","SlicesPropsContext","concreteSliceName","Error","getSliceId","keys","createContentDigest","sliceUsage","hasChildren","InlineSlice","slicesResultsMap","SlicesResultsContext","component","assign","sliceContext","data","Slice","internalProps","alias","__renderedByLocation","slicesContext","SlicesContext","propErrors","validateSliceProps","SlicePropsError","renderEnvironment","additionalContextMessage","sliceRoot","name","componentPath","_Error","inBrowser","renderedByLocation","errors","entries","join","stack","message","stackLines","ReactDebugCurrentFrame","getCurrentStack","trim","captureStackTrace","forcedLocation","functionName","_inheritsLoose","seenObjects","propPath","prefetchPathname","loader","enqueue","graphql","supportedPrefetchStrategy","feature","fakeLink","relList","supports","err","support","url","reject","link","setAttribute","forEach","onload","onerror","getElementsByTagName","getElementsByName","parentNode","req","XMLHttpRequest","open","status","send","preFetched","catch","PageResourceStatus","Success","createPageDataUrl","rawPath","maybeSearch","s","shouldAbortFetch","doFetch","method","onreadystatechange","readyState","BOT_REGEX","toPageResources","pageData","_pageData$slicesMap","page","componentChunkName","webpackCompilationHash","staticQueryHashes","getServerDataError","json","waitForResponse","response","readRoot","setTimeout","BaseLoader","loadComponent","inFlightNetworkRequests","pageDb","inFlightDb","staticQueryDb","pageDataDb","partialHydrationDb","slicesDataDb","sliceInflightDb","slicesDb","isPrefetchQueueRunning","prefetchQueued","prefetchTriggered","Set","prefetchCompleted","memoizedGet","inFlightPromise","delete","setApiRunner","apiRunner","prefetchDisabled","some","a","fetchPageDataJson","loadObj","pagePath","retries","responseText","jsonPayload","includes","payload","notFound","internalServerError","fetchPartialHydrationJson","replace","loadPageDataJson","loadPartialHydrationJson","loadSliceDataJson","res","error","loadDataPromises","loadAppData","allData","appDataResponse","pageDataResponse","rscDataResponse","pageStaticQueryHashes","finalResult","dedupedSliceNames","from","values","loadSlice","inFlight","m","slicesData","slices","dedupedStaticQueryHashes","_toConsumableArray","staticQueryHash","loadChunkPromises","componentChunkPromises","sliceComponents","headComponent","pageComponent","createdAt","Date","sliceComponent","pageResources","partialHydration","readableStream","ReadableStream","start","controller","te","TextEncoder","encode","pull","close","cancel","createFromReadableStream","staticQueryBatchPromise","staticQueryResults","staticQueryResultsMap","emitter","_options","withErrorDetails","shouldPrefetch","doesConnectionSupportPrefetch","navigator","connection","effectiveType","saveData","userAgent","test","prefetch","abort","defer","promise","abortC","AbortController","signal","index","findIndex","_ref3","_processNextPrefetchBatch","requestIdleCallback","cb","toPrefetch","prefetches","_ref4","dPromise","add","doPrefetch","pageDataUrl","prefetchHelper","crossOrigin","as","hovering","createComponentUrls","isPageNotFound","appData","___chunkMapping","chunk","__PATH_PREFIX__","instance","ProdLoader","_BaseLoader2","asyncRequires","chunkName","exportType","_proto2","componentUrls","setLoader","_loader","publicLoader","getStaticQueryResults","getSliceResults","FireCallbackInEffect","callback","useEffect","VALID_NODE_NAMES","isEqualNode","oldTag","newTag","HTMLElement","nonce","getAttribute","cloneTag","cloneNode","getValidHeadNodesAndAttributes","rootNode","htmlAndBodyAttributes","html","body","seenIds","validHeadNodes","childNodes","_node$attributes","_node$attributes$id","nodeName","toLowerCase","attributes","isElementType","isValidNodeName","attribute","isStyleAttribute","_htmlAndBodyAttribute","style","clonedNode","massageScript","_validHeadNodes$index","indexOfPreviouslyInsertedNode","removeChild","attr","nodeType","hiddenRoot","keysOfHtmlAndBodyAttributes","onHeadRendered","_document$head2","htmlElement","attributeName","attributeValue","bodyElement","applyHtmlAndBodyAttributes","existingHeadElements","querySelectorAll","_document$head","append","newHeadNodes","oldNodes","newNodes","onStale","onNew","existingHeadElement","indexInNewNodes","newNode","diffNodes","headHandlerForBrowser","pageComponentProps","Head","headExportValidator","reactDOMUtils","HeadElement","serverData","pageContext","WrapHeadElement","pop","StaticQueryContext","LocationProvider","prevHeadNodes","removePrevHeadElements","htmlAndBodyattributeList","removeAttribute","removeHtmlAndBodyAttributes","PageRenderer","__params","pageElement","PropTypes","RouteAnnouncerProps","top","width","height","padding","overflow","clip","whiteSpace","border","maybeRedirect","___replace","nextRoute","event","reason","onPreRouteUpdate","prevLocation","onRouteUpdate","navigate","to","globalHistory","parsePath","___swUpdated","timeoutId","history","replaceState","clearTimeout","___webpackCompilationHash","serviceWorker","postMessage","gatsbyApi","reachNavigate","getSavedScrollPosition","oldPathname","RouteAnnouncer","announcementRef","nextProps","pageName","title","pageHeadings","textContent","newAnnouncement","innerText","compareLocationProps","nextLocation","_prevLocation$state","_nextLocation$state","RouteUpdates","_React$Component2","_this2","shouldComponentUpdate","shallowDiffers","b","i","_i","EnsureResources","getDerivedStateFromProps","prevState","loadResources","setState","nextState","shallowCompare","hydrate","___emitter","___loader","listen","action","___push","___navigate","reloadStorageKey","apiRunnerAsync","RouteHandler","BaseContext","baseuri","basepath","DataContext","GatsbyRoot","Location","sliceResults","LocationHandler","Consumer","Router","encodeURI","browserLoc","match","getSessionStorage","_page$page","reload","removeItem","console","SiteRoot","App","onClientEntryRanRef","performance","mark","focusEl","defaultRenderer","renderer","runRender","rootElement","doc","documentElement","doScroll","InternalPageRenderer","reactDomClient","el","root","createRoot","hydrateRoot","redirectMap","redirectIgnoreCaseMap","ignoreCase","fromPath","protocol","hostname","register","reg","installingWorker","installing","log","___failedResources","defaultValue","createServerContext","globalThis","__SERVER_CONTEXT","StaticQueryDataRenderer","staticQueryData","query","finalData","StaticQuery","useStaticQuery","_context$query","context","isNaN","Number","str","prefix","pluginOptions","stripQueryString","domElem","existingValue","baseProtocol","baseHost","wrapPageElement","Layout","GATSBY_LAYOUT_COMPONENT_PATH","_gatsby","DEFAULT_OPTIONS","maxWidth","wrapperStyle","backgroundColor","linkImagesToOriginal","showCaptions","markdownCaptions","withWebp","withAvif","tracedSVG","loading","decoding","disableBgImageOnAlpha","disableBgImage","EMPTY_ALT","imageClass","imageWrapperClass","imageBackgroundClass","_require","apiCallbackContext","imageWrappers","_loop","imageWrapper","backgroundElement","imageElement","onImageLoad","transition","onImageComplete","opacity","color","boxShadow","complete","Button","className","onClick","submit","theme","variant","size","rest","buttonClassName","classnames","warning","Link","button","defaultProps","isWhiteListed","domain","RegExp","FILE_LINK_PATTERN","UNDERLINE_CLASS_PATTERN","DECORATION_CLASS_PATTERN","activeClassName","partiallyActive","classNames","underline","isInternalLink","GatsbyLink","target","rel","globalLocale","enKeys","deKeys","navs","nodes","nav","de","en","getLink","locale","linkLocale","useTranslation","scope","locales","copy","translations","find","l","content","findTranslations","useMediaQuery","queryInput","supportMatchMedia","matchMedia","defaultMatches","noSsr","ssrMatchMedia","setMatch","matches","active","queryList","updateMatch","addListener","removeListener","LayoutStateContext","LayoutDispatchContext","layoutReducer","menuOpen","isSmallScreen","isMediumScreen","useLayoutState","useLayoutActions","dispatch","closeMenu","openMenu","toggleMenu","useScrollTo","targetRef","scrollOffset","useCallback","getBoundingClientRect","behavior","LayoutProvider","useReducer","isActive","ChevronDownIcon","xmlns","viewBox","d","fill","Nav","Dropdown","DropdownLink","useNavigation","groupVariants","enter","idle","staggerChildren","exit","itemVariants","x","Submenu","items","toArray","AnimatePresence","motion","ul","variants","initial","animate","item","li","Item","NavButton","activeNav","setActiveNav","useState","toggleNav","isActiveNav","src","LogoImageSrc","alt","LocaleSwitch","MenuButton","onKeyDown","whenKey","role","ToggleIcon","ClockImageSrc","GoogleIcon","fillRule","clipRule","LinkedInIcon","YoutubeIcon","Footer","Header","SimpleHeader","SimpleFooter","layout","SimpleLayout","DefaultLayout","code","invariant","condition","format","c","f","argIndex","framesToPop","k","stream","Symbol","for","q","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ContextRegistry","v","_status","_value","_response","w","_fromJSON","chunks","__webpack_require__","y","z","A","C","D","_chunks","F","G","parseInt","_bundlerConfig","h","g","B","J","u","H","$$typeof","_payload","_init","E","_owner","I","TextDecoder","_partialRow","_stringDecoder","K","getReader","done","subarray","decode","moduleMap","ReferenceError","_setPrototypeOf","SCRIPT_TYPE","config","snippetCode","filteredConfig","configStr","String","createSnippet","hasOwn","classes","arg","appendClass","parseValue","isArray","newClass","_arrayLikeToArray","iterator","origin","host","port","transitioning","_onTransitionComplete","go","now","pushState","substr","uri","noThrow","P","R","N","j","Math","max","$","O","exec","U","L","T","_","sort","S","score","every","M","V","X","forwardRef","innerRef","getProps","isCurrent","isPartiallyCurrent","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","preventDefault","super","componentDidCatch","onError","W","setError","Q","Y","Z","ee","re","focus","outline","tabIndex","ne","oe","ae","primary","se","ie","ce","ue","useIsMounted","isMounted","PopChildMeasure","getSnapshotBeforeUpdate","childRef","isPresent","sizeRef","offsetHeight","offsetWidth","offsetTop","left","offsetLeft","PopChild","useId","useInsertionEffect","motionPopId","sheet","insertRule","PresenceChild","onExitComplete","custom","presenceAffectsLayout","mode","presenceChildren","newChildrenMap","useMemo","childId","isComplete","PresenceContext","getChildKey","child","exitBeforeEnter","forceRender","forcedRenderCount","setForcedRenderCount","postRender","useForceUpdate","forceRenderLayoutGroup","LayoutGroupContext","filteredChildren","filtered","Children","isValidElement","onlyElements","childrenToRender","exiting","presentChildren","allChildren","isInitialRender","updateChildLookup","clear","presentKeys","targetKeys","numPresent","insertionIndex","removeIndex","presentChild","cloneElement","frameData","delta","timestamp","defaultTimestep","getCurrentTime","onNextFrame","useDefaultElapsed","runNextFrame","isProcessing","stepsOrder","steps","acc","toRun","toRunNextFrame","numToRun","flushNextFrame","toKeepAlive","WeakSet","step","schedule","keepAlive","immediate","addToCurrentFrame","buffer","process","createRenderStep","sync","startLoop","cancelSync","flushSync","processStep","stepId","processFrame","min","MotionConfigContext","transformPagePoint","isStatic","reducedMotion","MotionContext","LazyContext","strict","useVisualElement","visualState","createVisualElement","parent","visualElement","lazyContext","presenceContext","reducedMotionConfig","visualElementRef","presenceId","blockInitialAnimation","HandoffAppearAnimations","animationState","animateChanges","isRefObject","isVariantLabel","isAnimationControls","variantProps","isControllingVariants","isVariantNode","useCreateMotionContext","inherit","getCurrentTreeVariants","variantLabelsAsDependency","prop","createDefinition","propNames","isEnabled","featureDefinitions","measureLayout","animation","drag","hover","tap","pan","inView","globalProjectionState","hasAnimatedSinceResize","hasEverUpdated","VisualElementHandler","setProps","SwitchLayoutGroupContext","motionComponentSymbol","preloadedFeatures","projectionNodeConstructor","useRender","useVisualState","features","loadFeatures","ForwardRefComponent","externalRef","configAndProps","layoutId","useLayoutId","projectionId","lazyStrictMode","initialLayoutGroupConfig","mount","unmount","useMotionRef","layoutGroupId","createMotionProxy","createConfig","customMotionComponentConfig","Proxy","componentCache","_target","lowercaseSVGElements","isSVGComponent","scaleCorrectors","transformPropOrder","transformProps","isForcedMotionValue","isMotionValue","getVelocity","translateAlias","transformPerspective","sortTransformProps","isCSSVariable","getValueAsType","transform","clamp","number","parseFloat","alpha","scale","sanitize","round","floatRegex","colorRegex","singleColorRegex","isString","createUnitType","unit","degrees","percent","px","vh","vw","progressPercentage","numberValueTypes","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","radius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","maxHeight","right","bottom","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","rotate","rotateX","rotateY","rotateZ","scaleX","scaleY","scaleZ","skew","skewX","skewY","distance","translateX","translateY","translateZ","perspective","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","buildHTMLStyles","latestValues","transformTemplate","vars","transformKeys","transformOrigin","hasTransform","hasTransformOrigin","transformIsNone","valueType","valueAsType","enableHardwareAcceleration","allowTransformNone","transformIsDefault","transformString","buildTransform","createHtmlRenderState","copyRawValuesOnly","source","useStyle","useInitialMotionValues","transformValues","useHTMLProps","htmlProps","dragListener","draggable","userSelect","WebkitUserSelect","WebkitTouchCallout","touchAction","validMotionProps","isValidMotionProp","shouldForward","isValidProp","_a","calcOrigin","offset","dashKeys","array","camelKeys","buildSVGAttrs","attrX","attrY","pathLength","pathSpacing","pathOffset","latest","isSVGTag","attrs","dimensions","calcSVGTransformOrigin","spacing","useDashCase","buildSVGPath","createSvgRenderState","tag","useSVGProps","_isStatic","visualProps","rawStyles","createUseRender","forwardMotionProps","filteredProps","isDom","filterProps","elementProps","renderedChildren","camelToDash","renderHTML","styleProp","projection","getProjectionStyles","setProperty","camelCaseAttributes","renderSVG","renderState","_styleProp","scrapeMotionValuesFromProps","newValues","toUpperCase","resolveVariantFromProps","definition","currentValues","currentVelocity","isKeyframesTarget","resolveMotionValue","unwrappedValue","mix","toValue","makeUseVisualState","make","createRenderState","onMount","makeLatestValues","makeState","scrapeMotionValues","motionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","resolved","transitionEnd","valueTarget","svgMotionConfig","getBBox","tagName","htmlMotionConfig","AnimationType","addDomEvent","eventName","passive","useDomEvent","isPrimaryPointer","pointerType","isPrimary","extractEventInfo","pointType","point","addPointerInfo","addPointerEvent","usePointerEvent","createLock","lock","openLock","globalHorizontalLock","globalVerticalLock","getGlobalLock","openHorizontal","openVertical","isDragActive","openGestureLock","createHoverEvent","applyVariants","info","setActive","Hover","isNodeOrChild","parentElement","combineFunctions","pipe","transformers","observerCallbacks","observers","fireObserverCallback","entry","fireAllObserverCallbacks","observeIntersection","rootInteresectionObserver","lookupRoot","rootObservers","IntersectionObserver","initIntersectionObserver","observe","unobserve","thresholdNames","useIntersectionObserver","shouldObserve","rootMargin","amount","once","threshold","isIntersecting","isInView","hasEnteredView","InView","onViewportEnter","onViewportLeave","useMissingIntersectionObserver","fallback","makeRenderlessComponent","hook","gestureAnimations","whileInView","viewport","onTap","onTapStart","onTapCancel","whileTap","hasPressListeners","isPressing","cancelPointerEndListeners","eventOptions","removePointerEndListener","checkPointerEnd","Tap","onPointerUp","_b","_c","_d","onPointerCancel","startPress","latestProps","whileFocus","onFocus","Focus","onBlur","onHoverStart","onHoverEnd","whileHover","usePresence","prev","prevLength","isZeroValueString","addUniqueItem","arr","SubscriptionManager","subscriptions","notify","numSubscriptions","getSize","velocityPerSecond","velocity","frameDuration","MotionValue","init","version","timeDelta","lastUpdated","canTrackVelocity","events","updateAndNotify","scheduleVelocityCheck","change","velocityChange","renderRequest","velocityCheck","hasAnimated","owner","onChange","subscription","unsubscribe","stop","clearListeners","eventManagers","attach","passiveEffect","stopPassiveEffect","setWithVelocity","jump","getPrevious","startAnimation","animationStart","animationComplete","clearAnimation","animationCancel","isAnimating","destroy","motionValue","isColorString","testProp","splitColor","aName","bName","cName","rgbUnit","clampRgbUnit","rgba","red","green","blue","alpha$1","hex","hsla","hue","saturation","lightness","colorToken","numberToken","analyseComplexValue","numColors","numNumbers","colors","numbers","tokenised","createTransformer","numValues","output","convertNumbersToZero","complex","getAnimatableNone","parsed","transformer","maxDefaults","applyDefaultFilter","functionRegex","functions","defaultValueTypes","outlineColor","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","WebkitFilter","getDefaultValueType","defaultValueType","testValueType","dimensionValueTypes","findDimensionValueType","valueTypes","findValueType","resolveVariant","getCurrent","setMotionValue","hasValue","getValue","addValue","setTarget","makeTargetAnimatable","getOriginFromTransition","isWillChangeMotionValue","optimizedAppearDataAttribute","secondsToMilliseconds","seconds","instantAnimationState","mirrorEasing","easing","reverseEasing","easeIn","easeOut","easeInOut","progress","hueToRgb","mixLinearColor","fromExpo","sqrt","colorTypes","asRGBA","model","hslaToRgba","mixColor","fromRGBA","toRGBA","blended","getMixer","mixComplex","mixArray","blendValue","fromThis","mixObject","template","originStats","targetStats","toFromDifference","mixNumber","createMixers","ease","customMixer","mixers","mixerFactory","numMixers","mixer","easingFunction","interpolate","isClamp","inputLength","reverse","interpolator","progressInRange","noop","any","calcBezier","a1","a2","cubicBezier","mX1","mY1","mX2","mY2","getTForX","aX","lowerBound","upperBound","currentX","currentT","abs","binarySubdivide","circIn","sin","acos","circOut","circInOut","backOut","backIn","backInOut","easingLookup","linear","anticipate","pow","easingDefinitionToFunction","x1","y1","x2","y2","keyframes","keyframeValues","times","duration","easingFunctions","isEasingArray","absoluteTimes","convertOffsetToTimes","defaultOffset","createInterpolator","flipTarget","safeMin","findSpring","bounce","mass","envelope","derivative","maxDuration","dampingRatio","undampedFreq","exponentialDecay","calcAngularFreq","exp","initialGuess","rootIterations","approximateRoot","stiffness","damping","durationKeys","physicsKeys","isSpringType","spring","restDelta","restSpeed","isResolvedFromDuration","springOptions","derived","getSpringOptions","resolveSpring","zero","initialVelocity","createSpring","initialDelta","undampedAngularFreq","isGranularScale","angularFreq","cos","dampedAngularFreq","freqForT","sinh","cosh","prevT","isBelowVelocityThreshold","isBelowDisplacementThreshold","needsInterpolation","_t","types","decay","power","timeConstant","modifyTarget","amplitude","ideal","tween","loopElapsed","elapsed","delay","framesync","update","passTimestamp","driver","repeat","repeatMax","repeatType","repeatDelay","keyframes$1","autoplay","onPlay","onStop","onComplete","onRepeat","onUpdate","initialElapsed","driverControls","interpolateFromNumber","repeatCount","computedDuration","isForwardPlayback","animator","reverseElapsed","hasRepeatDelayElapsed","currentTime","sample","sampleResolution","sampleElapsed","remaining","cubicBezierAsString","supportedWaapiEasing","mapEasingToNativeEasing","featureTests","waapi","Element","acceleratedValues","createAcceleratedAnimation","valueName","Infinity","sampleAnimation","pregeneratedKeyframes","iterations","direction","animateStyle","onfinish","getFinalKeyframe","timeout","checkElapsed","createInstantAnimation","setValue","underDampedSpring","criticallyDampedSpring","linearTween","keyframesTransition","defaultTransitions","getDefaultTransition","valueKey","isAnimatable","isZero","getZeroUnit","potentialUnitType","getValueTransition","createMotionValueAnimation","valueTransition","isTargetAnimatable","getKeyframes","originKeyframe","targetKeyframe","isOriginAnimatable","bounceStiffness","bounceDamping","currentAnimation","isOutOfBounds","findNearestBoundary","startSpring","boundary","heading","checkBoundary","inertia","when","_delay","delayChildren","staggerDirection","isTransitionDefined","acceleratedAnimation","animateVariant","transitionOverride","getAnimation","animateTarget","getChildAnimations","variantChildren","forwardDelay","animations","maxStaggerDuration","generateStaggerDuration","sortByTreeOrder","animateChildren","first","last","willChange","animationTypeState","getState","shouldBlockAnimation","appearId","shouldReduceMotion","sortNodePosition","protectedKeys","needsAnimating","shouldBlock","variantPriorityOrder","Animate","Drag","Exit","reversePriorityOrder","numAnimationTypes","animateList","resolvedDefinition","animateVisualElement","createAnimationState","createTypeState","buildResolvedTypeValues","changedActiveType","getVariantContext","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","manuallyAnimateOnMount","prevProp","variantDidChange","checkVariantsDidChange","shouldAnimateType","definitionList","resolvedValues","prevResolvedValues","allKeys","markToAnimate","fallbackAnimation","fallbackTarget","getBaseTarget","shouldAnimate","setAnimateFunction","makeAnimator","subscribe","safeToRemove","PanSession","handlers","startEvent","lastMoveEvent","lastMoveEventInfo","updatePoint","getPanInfo","isPanStarted","isDistancePastThreshold","xDelta","yDelta","distance2D","onStart","onMove","handlePointerMove","transformPoint","handlePointerUp","end","onEnd","onSessionEnd","panInfo","initialInfo","onSessionStart","removeListeners","updateHandlers","subtractPoint","lastDevicePoint","startDevicePoint","timestampedPoint","lastPoint","time","calcLength","axis","isNear","maxDistance","calcAxisDelta","originPoint","translate","calcBoxDelta","calcRelativeAxis","relative","calcRelativeAxisPosition","calcRelativePosition","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","defaultElastic","resolveAxisElastic","dragElastic","minLabel","maxLabel","resolvePointElastic","label","eachAxis","convertBoundingBoxToBox","isIdentityScale","hasScale","has2DTranslate","is2DTranslate","scalePoint","applyPointDelta","boxScale","applyAxisDelta","applyBoxDelta","box","snapToDefault","isInteger","translateAxis","transformAxis","transforms","scaleKey","originKey","axisOrigin","xKeys","yKeys","transformBox","measureViewportBox","topLeft","bottomRight","transformBoxPoints","elementDragControls","VisualElementDragControls","openGlobalLock","isDragging","currentDirection","constraints","hasMutatedConstraints","elastic","originEvent","snapToCursor","panSession","stopAnimation","dragPropagation","onDragStart","resolveConstraints","isAnimationBlocked","getAxisMotionValue","measuredAxis","layoutBox","dragDirectionLock","onDirectionLock","onDrag","lockThreshold","getCurrentDirection","updateAxis","getTransformPagePoint","onDragEnd","_point","shouldDrag","axisValue","applyConstraints","dragConstraints","prevConstraints","resolveRefConstraints","calcRelativeConstraints","resolveDragElastic","relativeConstraints","rebaseAxisConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","rootProjectionNode","viewportBox","scroll","measurePageBox","measuredConstraints","calcViewportConstraints","userConstraints","convertBoxToBoundingBox","dragMomentum","dragTransition","dragSnapToOrigin","onDragTransitionEnd","momentumAnimations","startAxisValueAnimation","dragKey","externalMotionValue","scalePositionWithinConstraints","boxProgress","sourceLength","targetLength","updateScroll","updateLayout","addListeners","stopPointerListener","measureDragConstraints","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","hasLayoutChanged","onPan","onPanStart","onPanEnd","onPanSessionStart","hasPanEvents","dragControls","groupDragControls","cssVariableRegex","getVariableValue","depth","token","parseCSSVariable","getComputedStyle","getPropertyValue","positionalKeys","isPositionalKey","isNumOrPxType","BoundingBoxDimension","getPosFromMatrix","matrix","pos","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","nonTranslationalTransformKeys","positionalValues","checkAndConvertChangedValueTypes","targetPositionalKeys","removedTransformValues","hasAttemptedToRemoveTransformValues","changedValueTypeKeys","fromType","toType","numKeyframes","fromIndex","removedTransforms","removeNonTranslationalTransform","pageYOffset","convertedTarget","changedKeys","originBbox","elementComputedStyle","display","setStaticValue","targetBbox","convertChangedValueTypes","unitConversion","hasPositionalKey","parseDomVariant","resolveCSSVariables","prefersReducedMotion","hasReducedMotionListener","featureNames","numFeatures","propEventHandlers","VisualElement","valueSubscriptions","prevMotionValues","propEventSubscriptions","notifyUpdate","triggerBuild","renderInstance","scheduleRender","baseTarget","initialValues","initialMotionValues","_props","_prevProps","removeFromVariantTree","addVariantChild","bindToMotionValue","motionMediaQuery","setReducedMotionPreferences","initPrefersReducedMotion","valueIsTransform","removeOnChange","latestValue","isTransformDirty","removeOnRenderRequest","other","sortInstanceNodePosition","renderedProps","isStrict","ProjectionNodeConstructor","layoutScroll","layoutRoot","setOptions","alwaysMeasureLayout","animationType","initialPromotionConfig","build","measureInstanceViewportBox","getStaticValue","canMutate","makeTargetAnimatableFromInstance","listener","nextValue","prevValue","removeValue","updateMotionValuesFromProps","handleChildMotionValue","getVariant","getClosestVariantNode","startAtParent","numVariantProps","closestVariantNode","removeValueFromRenderState","readValue","readValueFromInstance","setBaseTarget","valueFromInitial","getBaseTargetFromProps","DOMVisualElement","compareDocumentPosition","transitionOrigin","getOrigin","newValueKeys","numNewValues","targetValue","checkTargetForNewValues","HTMLVisualElement","defaultType","computedStyle","childSubscription","SVGVisualElement","pixelsToPercent","pixels","correctBorderRadius","correct","varToken","correctBoxShadow","treeScale","projectionDelta","original","containsCSSVariables","cssVariables","shadow","xScale","yScale","averageScale","cssVariable","MeasureLayoutWithContext","layoutGroup","switchLayoutGroup","correctors","defaultScaleCorrectors","group","didUpdate","layoutDependency","willUpdate","promote","relegate","getStack","members","isLead","promoteContext","scheduleCheckAfterUnmount","deregister","applyTo","layoutFeatures","borders","numBorders","asNumber","isPx","getRadius","radiusName","easeCrossfadeIn","compress","easeCrossfadeOut","copyAxisInto","originAxis","copyBoxInto","originBox","removePointDelta","removeAxisTransforms","sourceAxis","removeAxisDelta","removeBoxTransforms","sourceBox","isAxisDeltaZero","isDeltaZero","boxEquals","aspectRatio","NodeStack","prevLead","lead","indexOfNode","member","preserveFollowOpacity","show","resumeFrom","preserveOpacity","snapshot","animationValues","isUpdating","isLayoutDirty","crossfade","hide","exitAnimationComplete","_e","resumingFrom","removeLeadSnapshot","buildProjectionTransform","latestTransform","xTranslate","yTranslate","elementScaleX","elementScaleY","compareByDepth","FlatTree","isDirty","transformAxes","createProjectionNode","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","elementId","animationId","isTreeAnimating","isProjectionDirty","updateManuallyBlocked","updateBlockedByResize","isSVG","needsReset","shouldResetTransform","eventHandlers","potentialNodes","checkUpdateFailed","clearAllSnapshots","updateProjection","propagateDirtyNodes","resolveTargetDelta","calcProjection","hasProjected","isVisible","animationProgress","sharedNodes","registerPotentialNode","notifyListeners","subscriptionManager","hasListeners","SVGElement","cancelDelay","resizeUnblockUpdate","finishAnimation","registerSharedNode","hasRelativeTargetChanged","newLayout","isTreeAnimationBlocked","relativeTarget","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","targetChanged","targetLayout","hasOnlyRelativeTargetChanged","setAnimationOrigin","animationOptions","preRender","blockUpdate","unblockUpdate","isUpdateBlocked","startUpdate","resetRotation","getTransformTemplate","shouldNotifyListeners","prevTransformTemplateValue","updateSnapshot","clearMeasurements","mountNodeEarly","resetTransformStyle","notifyLayoutUpdate","clearSnapshot","removeLeadSnapshots","scheduleUpdateProjection","measure","prevLayout","layoutCorrected","phase","needsMeasurement","isRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","removeElementScroll","roundAxis","measuredBox","boxWithoutScroll","rootScroll","applyTransform","transformOnly","withTransforms","boxWithoutTransform","setTargetDelta","targetDelta","getLead","attemptToResolveRelativeTarget","relativeParent","getClosestProjectingParent","relativeTargetOrigin","targetWithTransforms","isShared","canSkip","pendingAnimation","treePath","isSharedTransition","treeLength","applyTreeDeltas","projectionDeltaWithTransform","prevTreeScaleX","prevTreeScaleY","prevProjectionTransform","projectionTransform","notifyAll","snapshotLatestValues","mixedValues","relativeLayout","isSharedLayoutAnimation","isOnlyMember","shouldCrossfadeOpacity","hasOpacityCrossfade","mixTargetDelta","mixAxisDelta","mixAxis","follow","opacityExit","borderLabel","followRadius","leadRadius","mixValues","completeAnimation","applyTransformsToTarget","shouldAnimatePositionOnly","xLength","yLength","shouldPreserveFollowOpacity","getPrevLead","hasRotate","resetValues","styles","visibility","pointerEvents","emptyStyles","valuesToRender","corrected","num","resetTree","measuredLayout","axisSnapshot","layoutDelta","visualDelta","parentSnapshot","parentLayout","relativeSnapshot","onBeforeLayoutMeasure","searchNode","DocumentProjectionNode","scrollLeft","documentNode","featureBundle","isBrowser","useConstant","useIsomorphicLayoutEffect","useUnmountEffect","activeStyle","_location","defaultGetProps","IOSupported","abortPrefetch","handleRef","_prefetch","io","disconnect","intersectionRatio","onMouseEnter","self","didTimeout","timeRemaining","postHydrate","offMainThread","strategy","loadCallback","errorCallback","dangerouslySetInnerHTML","__html","onLoad","load","callbacks"],"sourceRoot":""}