{"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 ©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":""}