@mathwiz/ui-components 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/Button/Button.tsx","../node_modules/@heroui/react-utils/dist/chunk-3XT5V4LF.mjs","../node_modules/@heroui/react-utils/dist/chunk-BDGLNRCW.mjs","../node_modules/@heroui/shared-utils/dist/index.mjs","../node_modules/@heroui/react-utils/dist/chunk-6UBKM7F3.mjs","../node_modules/@heroui/react-rsc-utils/dist/chunk-RFWDHYLZ.mjs","../node_modules/@heroui/react-rsc-utils/dist/chunk-RJKRL3AU.mjs","../node_modules/@heroui/system/dist/chunk-Q3W45BN5.mjs","../node_modules/@react-aria/i18n/dist/utils.mjs","../node_modules/@react-aria/ssr/dist/SSRProvider.mjs","../node_modules/@react-aria/i18n/dist/useDefaultLocale.mjs","../node_modules/@react-aria/i18n/dist/context.mjs","../node_modules/@swc/helpers/esm/_check_private_redeclaration.js","../node_modules/@swc/helpers/esm/_class_private_field_init.js","../node_modules/@react-aria/utils/dist/useLayoutEffect.mjs","../node_modules/@react-aria/utils/dist/useEffectEvent.mjs","../node_modules/@react-aria/utils/dist/useId.mjs","../node_modules/@react-aria/utils/dist/chain.mjs","../node_modules/@react-aria/utils/dist/domHelpers.mjs","../node_modules/@react-stately/flags/dist/import.mjs","../node_modules/@react-aria/utils/dist/DOMFunctions.mjs","../node_modules/@react-aria/utils/node_modules/clsx/dist/clsx.mjs","../node_modules/@react-aria/utils/dist/mergeProps.mjs","../node_modules/@react-aria/utils/dist/filterDOMProps.mjs","../node_modules/@react-aria/utils/dist/focusWithoutScrolling.mjs","../node_modules/@react-aria/utils/dist/platform.mjs","../node_modules/@react-aria/utils/dist/openLink.mjs","../node_modules/@react-aria/utils/dist/runAfterTransition.mjs","../node_modules/@react-aria/utils/dist/useGlobalListeners.mjs","../node_modules/@react-aria/utils/dist/useLabels.mjs","../node_modules/@react-aria/utils/dist/useSyncRef.mjs","../node_modules/@react-aria/utils/dist/isVirtualEvent.mjs","../node_modules/@react-aria/utils/dist/isElementVisible.mjs","../node_modules/@react-aria/utils/dist/isFocusable.mjs","../node_modules/@react-stately/utils/dist/number.mjs","../node_modules/@internationalized/number/dist/NumberFormatter.mjs","../node_modules/@react-aria/i18n/dist/useNumberFormatter.mjs","../node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/utils/use-constant.mjs","../node_modules/framer-motion/dist/es/utils/is-browser.mjs","../node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../node_modules/motion-utils/dist/es/array.mjs","../node_modules/motion-utils/dist/es/clamp.mjs","../node_modules/motion-utils/dist/es/format-error-message.mjs","../node_modules/motion-utils/dist/es/errors.mjs","../node_modules/motion-utils/dist/es/global-config.mjs","../node_modules/motion-utils/dist/es/is-numerical-string.mjs","../node_modules/motion-utils/dist/es/is-object.mjs","../node_modules/motion-utils/dist/es/is-zero-value-string.mjs","../node_modules/motion-utils/dist/es/memo.mjs","../node_modules/motion-utils/dist/es/noop.mjs","../node_modules/motion-utils/dist/es/pipe.mjs","../node_modules/motion-utils/dist/es/progress.mjs","../node_modules/motion-utils/dist/es/subscription-manager.mjs","../node_modules/motion-utils/dist/es/time-conversion.mjs","../node_modules/motion-utils/dist/es/velocity-per-second.mjs","../node_modules/motion-utils/dist/es/warn-once.mjs","../node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs","../node_modules/motion-utils/dist/es/easing/modifiers/mirror.mjs","../node_modules/motion-utils/dist/es/easing/modifiers/reverse.mjs","../node_modules/motion-utils/dist/es/easing/back.mjs","../node_modules/motion-utils/dist/es/easing/anticipate.mjs","../node_modules/motion-utils/dist/es/easing/circ.mjs","../node_modules/motion-utils/dist/es/easing/ease.mjs","../node_modules/motion-utils/dist/es/easing/utils/is-easing-array.mjs","../node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.mjs","../node_modules/motion-utils/dist/es/easing/utils/map.mjs","../node_modules/motion-dom/dist/es/frameloop/order.mjs","../node_modules/motion-dom/dist/es/frameloop/render-step.mjs","../node_modules/motion-dom/dist/es/frameloop/batcher.mjs","../node_modules/motion-dom/dist/es/frameloop/frame.mjs","../node_modules/motion-dom/dist/es/frameloop/sync-time.mjs","../node_modules/motion-dom/dist/es/animation/utils/is-css-variable.mjs","../node_modules/motion-dom/dist/es/value/types/numbers/index.mjs","../node_modules/motion-dom/dist/es/value/types/utils/sanitize.mjs","../node_modules/motion-dom/dist/es/value/types/utils/float-regex.mjs","../node_modules/motion-dom/dist/es/value/types/utils/is-nullish.mjs","../node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.mjs","../node_modules/motion-dom/dist/es/value/types/color/utils.mjs","../node_modules/motion-dom/dist/es/value/types/color/rgba.mjs","../node_modules/motion-dom/dist/es/value/types/color/hex.mjs","../node_modules/motion-dom/dist/es/value/types/numbers/units.mjs","../node_modules/motion-dom/dist/es/value/types/color/hsla.mjs","../node_modules/motion-dom/dist/es/value/types/color/index.mjs","../node_modules/motion-dom/dist/es/value/types/utils/color-regex.mjs","../node_modules/motion-dom/dist/es/value/types/complex/index.mjs","../node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs","../node_modules/motion-dom/dist/es/utils/mix/immediate.mjs","../node_modules/motion-dom/dist/es/utils/mix/number.mjs","../node_modules/motion-dom/dist/es/utils/mix/color.mjs","../node_modules/motion-dom/dist/es/utils/mix/visibility.mjs","../node_modules/motion-dom/dist/es/utils/mix/complex.mjs","../node_modules/motion-dom/dist/es/utils/mix/index.mjs","../node_modules/motion-dom/dist/es/animation/drivers/frame.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs","../node_modules/motion-dom/dist/es/animation/generators/spring/defaults.mjs","../node_modules/motion-dom/dist/es/animation/generators/spring/find.mjs","../node_modules/motion-dom/dist/es/animation/generators/spring/index.mjs","../node_modules/motion-dom/dist/es/animation/generators/inertia.mjs","../node_modules/motion-dom/dist/es/utils/interpolate.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs","../node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs","../node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.mjs","../node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs","../node_modules/motion-dom/dist/es/animation/JSAnimation.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.mjs","../node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs","../node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs","../node_modules/motion-dom/dist/es/render/dom/is-css-var.mjs","../node_modules/motion-dom/dist/es/render/dom/style-set.mjs","../node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs","../node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs","../node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs","../node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs","../node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs","../node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs","../node_modules/motion-dom/dist/es/animation/utils/is-animatable.mjs","../node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs","../node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.mjs","../node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs","../node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs","../node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs","../node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../node_modules/motion-dom/dist/es/render/utils/keys-position.mjs","../node_modules/motion-dom/dist/es/value/types/auto.mjs","../node_modules/motion-dom/dist/es/value/types/test.mjs","../node_modules/motion-dom/dist/es/value/types/dimensions.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.mjs","../node_modules/motion-dom/dist/es/value/types/complex/filter.mjs","../node_modules/motion-dom/dist/es/value/types/int.mjs","../node_modules/motion-dom/dist/es/value/types/maps/number.mjs","../node_modules/motion-dom/dist/es/value/types/maps/transform.mjs","../node_modules/motion-dom/dist/es/value/types/maps/defaults.mjs","../node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs","../node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs","../node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../node_modules/motion-dom/dist/es/value/types/utils/get-as-type.mjs","../node_modules/motion-dom/dist/es/utils/is-html-element.mjs","../node_modules/motion-dom/dist/es/value/index.mjs","../node_modules/motion-dom/dist/es/frameloop/microtask.mjs","../node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../node_modules/motion-dom/dist/es/gestures/hover.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../node_modules/motion-dom/dist/es/gestures/press/index.mjs","../node_modules/motion-dom/dist/es/value/utils/is-motion-value.mjs","../node_modules/motion-dom/dist/es/value/types/utils/find.mjs","../node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-composed-ref.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../node_modules/framer-motion/dist/es/context/LazyContext.mjs","../node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../node_modules/framer-motion/dist/es/components/LazyMotion/index.mjs","../node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/html/use-props.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/html/use-html-visual-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.mjs","../node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../node_modules/framer-motion/dist/es/motion/index.mjs","../node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../node_modules/framer-motion/dist/es/render/components/m/proxy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../node_modules/framer-motion/dist/es/render/store.mjs","../node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../node_modules/framer-motion/dist/es/render/VisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../node_modules/framer-motion/dist/es/render/utils/setters.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../node_modules/framer-motion/dist/es/animation/utils/calc-child-stagger.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs","../node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../node_modules/framer-motion/dist/es/motion/features/animations.mjs","../node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../node_modules/framer-motion/dist/es/events/event-info.mjs","../node_modules/framer-motion/dist/es/gestures/hover.mjs","../node_modules/framer-motion/dist/es/gestures/focus.mjs","../node_modules/framer-motion/dist/es/gestures/press.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../node_modules/framer-motion/dist/es/render/dom/features-animation.mjs","../node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../node_modules/@react-aria/interactions/dist/utils.mjs","../node_modules/@react-aria/interactions/dist/textSelection.mjs","../node_modules/@react-aria/interactions/dist/context.mjs","../node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js","../node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js","../node_modules/@swc/helpers/esm/_class_private_field_get.js","../node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js","../node_modules/@swc/helpers/esm/_class_private_field_set.js","../node_modules/@react-aria/interactions/dist/usePress.mjs","../node_modules/@react-aria/interactions/dist/useFocusVisible.mjs","../node_modules/@react-aria/interactions/dist/focusSafely.mjs","../node_modules/@react-aria/interactions/dist/useFocus.mjs","../node_modules/@react-aria/interactions/dist/createEventHandler.mjs","../node_modules/@react-aria/interactions/dist/useKeyboard.mjs","../node_modules/@react-aria/interactions/dist/useFocusable.mjs","../node_modules/@react-aria/interactions/dist/useFocusWithin.mjs","../node_modules/@react-aria/interactions/dist/useHover.mjs","../node_modules/@react-aria/focus/dist/useFocusRing.mjs","../node_modules/@heroui/system-rsc/dist/chunk-YFAKJTDR.mjs","../node_modules/@heroui/theme/dist/chunk-GQT3YUX3.mjs","../node_modules/@heroui/theme/dist/chunk-POSTVCTR.mjs","../node_modules/@heroui/theme/dist/chunk-MPVWW3DX.mjs","../node_modules/@heroui/theme/dist/chunk-WH6SPIFG.mjs","../node_modules/@heroui/theme/dist/chunk-RUIUXVZ4.mjs","../node_modules/@heroui/theme/dist/chunk-GSRZWDGA.mjs","../node_modules/@heroui/theme/dist/chunk-6JJPIEK7.mjs","../node_modules/@heroui/theme/dist/chunk-UFVD3L5A.mjs","../node_modules/tailwind-variants/dist/chunk-LK3VBVBE.js","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../node_modules/tailwind-variants/dist/chunk-RFCF2RNL.js","../node_modules/tailwind-variants/dist/index.js","../node_modules/@heroui/theme/dist/chunk-TX3FPB7D.mjs","../node_modules/@heroui/theme/dist/chunk-SCJBZBCG.mjs","../node_modules/@heroui/theme/dist/chunk-JGY6VQQQ.mjs","../node_modules/@heroui/theme/dist/chunk-3HDE5SVQ.mjs","../node_modules/@heroui/theme/dist/chunk-ZQGNWTBN.mjs","../node_modules/@heroui/theme/dist/chunk-KGFOLKLU.mjs","../node_modules/@heroui/theme/dist/chunk-D2DWF4OD.mjs","../node_modules/@heroui/use-is-mounted/dist/index.mjs","../node_modules/@react-aria/label/dist/useLabel.mjs","../node_modules/@react-aria/progress/dist/useProgressBar.mjs","../node_modules/@heroui/progress/dist/chunk-Z2ODYSHN.mjs","../node_modules/@heroui/progress/dist/chunk-XVMALT6H.mjs","../node_modules/@heroui/card/dist/chunk-XHGGCEVJ.mjs","../node_modules/@heroui/card/dist/chunk-LGSBTEIA.mjs","../node_modules/@heroui/card/dist/chunk-TE6SZS6W.mjs","../node_modules/@heroui/use-aria-button/dist/index.mjs","../node_modules/@heroui/ripple/dist/chunk-QHRCZSEO.mjs","../node_modules/@heroui/ripple/dist/chunk-6VC6TS2O.mjs","../node_modules/@heroui/card/dist/chunk-DHMIPUUY.mjs","../node_modules/@heroui/card/dist/chunk-O24IAYCG.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../src/components/ContentAccordion/types.ts","../src/components/ContentAccordion/ContentAccordion.tsx","../node_modules/@heroui/avatar/dist/chunk-25E6VDTZ.mjs","../node_modules/@heroui/avatar/dist/chunk-JUJ53SJZ.mjs","../node_modules/@heroui/use-safe-layout-effect/dist/index.mjs","../node_modules/@heroui/use-image/dist/index.mjs","../node_modules/@heroui/avatar/dist/chunk-S5XC7GTZ.mjs","../node_modules/@heroui/avatar/dist/chunk-U3J33PF6.mjs","../node_modules/@heroui/button/dist/chunk-3SAWKTTV.mjs","../node_modules/@heroui/button/dist/chunk-REKYGLAJ.mjs","../node_modules/@heroui/spinner/dist/chunk-IKKYW34A.mjs","../node_modules/@heroui/spinner/dist/chunk-MSDKUXDP.mjs","../node_modules/@heroui/button/dist/chunk-WBUKVQRU.mjs","../src/components/Sidebar/types.ts","../src/components/Sidebar/Sidebar.tsx","../src/components/Submenu/Submenu.tsx","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../src/components/UserProfile/UserProfile.tsx","../src/components/MathWizHeader/MathWizHeader.tsx","../src/components/radarAbility/RadarChart/RadarChart.tsx","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/react.mjs","../src/services/radarAbilityService.ts","../src/store/radarAbilityStore.ts","../src/components/radarAbility/AbilityProgressBar/AbilityProgressBar.tsx","../src/components/radarAbility/PersonalizedAdvicePanel/PersonalizedAdvicePanel.tsx","../src/components/radarAbility/RecommendationCard/RecommendationCard.tsx","../src/components/radarAbility/AbilityAssessmentDashboard/AbilityAssessmentDashboard.tsx","../src/data/mockData.ts","../src/data/courseData.ts","../src/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.tsx","../src/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.tsx","../src/types/index.ts","../src/utils/geometryCore.js","../src/data/userCourseProgress.ts","../src/data/usergradeuintsnav.ts","../src/data/usergradeunitsProgressData.ts","../node_modules/@heroui/dom-animation/dist/index.mjs"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from 'react';\r\nimport './Button.css';\r\nimport type { ButtonProps } from './types';\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n progress,\r\n variant = 'solid',\r\n size = 'md',\r\n radius = 'md',\r\n children,\r\n className = '',\r\n ...props\r\n}) => {\r\n // Determine color based on progress\r\n const getColorClass = (progress: number): string => {\r\n if (progress === 0) return 'button--primary';\r\n if (progress === 100) return 'button--success';\r\n return 'button--secondary';\r\n };\r\n\r\n const colorClass = progress !== undefined ? getColorClass(progress) : 'button--primary';\r\n\r\n const buttonClasses = [\r\n 'button',\r\n `button--${size}`,\r\n `button--${variant}`,\r\n `button--radius-${radius}`,\r\n colorClass,\r\n className\r\n ].filter(Boolean).join(' ');\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={buttonClasses}\r\n data-progress={progress}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n};","\"use client\";\n\n// src/context.ts\nimport * as React from \"react\";\nfunction createContext2(options = {}) {\n const {\n strict = true,\n errorMessage = \"useContext: `context` is undefined. Seems you forgot to wrap component within the Provider\",\n name\n } = options;\n const Context = React.createContext(void 0);\n Context.displayName = name;\n function useContext2() {\n var _a;\n const context = React.useContext(Context);\n if (!context && strict) {\n const error = new Error(errorMessage);\n error.name = \"ContextError\";\n (_a = Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, useContext2);\n throw error;\n }\n return context;\n }\n return [Context.Provider, useContext2, Context];\n}\n\nexport {\n createContext2 as createContext\n};\n","\"use client\";\n\n// src/dom.ts\nimport { useImperativeHandle, useLayoutEffect, useRef } from \"react\";\nfunction canUseDOM() {\n return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n}\nvar isBrowser = canUseDOM();\nfunction getUserAgentBrowser(navigator) {\n const { userAgent: ua, vendor } = navigator;\n const android = /(android)/i.test(ua);\n switch (true) {\n case /CriOS/.test(ua):\n return \"Chrome for iOS\";\n case /Edg\\//.test(ua):\n return \"Edge\";\n case (android && /Silk\\//.test(ua)):\n return \"Silk\";\n case (/Chrome/.test(ua) && /Google Inc/.test(vendor)):\n return \"Chrome\";\n case /Firefox\\/\\d+\\.\\d+$/.test(ua):\n return \"Firefox\";\n case android:\n return \"AOSP\";\n case /MSIE|Trident/.test(ua):\n return \"IE\";\n case (/Safari/.test(navigator.userAgent) && /Apple Computer/.test(ua)):\n return \"Safari\";\n case /AppleWebKit/.test(ua):\n return \"WebKit\";\n default:\n return null;\n }\n}\nfunction getUserAgentOS(navigator) {\n const { userAgent: ua, platform } = navigator;\n switch (true) {\n case /Android/.test(ua):\n return \"Android\";\n case /iPhone|iPad|iPod/.test(platform):\n return \"iOS\";\n case /Win/.test(platform):\n return \"Windows\";\n case /Mac/.test(platform):\n return \"Mac\";\n case /CrOS/.test(ua):\n return \"Chrome OS\";\n case /Firefox/.test(ua):\n return \"Firefox OS\";\n default:\n return null;\n }\n}\nfunction detectDeviceType(navigator) {\n const { userAgent: ua } = navigator;\n if (/(tablet)|(iPad)|(Nexus 9)/i.test(ua)) return \"tablet\";\n if (/(mobi)/i.test(ua)) return \"phone\";\n return \"desktop\";\n}\nfunction detectOS(os) {\n if (!isBrowser) return false;\n return getUserAgentOS(window.navigator) === os;\n}\nfunction detectBrowser(browser) {\n if (!isBrowser) return false;\n return getUserAgentBrowser(window.navigator) === browser;\n}\nfunction detectTouch() {\n if (!isBrowser) return false;\n return window.ontouchstart === null && window.ontouchmove === null && window.ontouchend === null;\n}\nfunction createDOMRef(ref) {\n return {\n UNSAFE_getDOMNode() {\n return ref.current;\n }\n };\n}\nfunction createFocusableRef(domRef, focusableRef = domRef) {\n return {\n ...createDOMRef(domRef),\n focus() {\n if (focusableRef.current) {\n focusableRef.current.focus();\n }\n }\n };\n}\nfunction useDOMRef(ref) {\n const domRef = useRef(null);\n useImperativeHandle(ref, () => domRef.current);\n return domRef;\n}\nfunction useFocusableRef(ref, focusableRef) {\n const domRef = useRef(null);\n useImperativeHandle(ref, () => createFocusableRef(domRef, focusableRef));\n return domRef;\n}\nfunction useSyncRef(context, ref) {\n useLayoutEffect(() => {\n if (context && context.ref && ref && ref.current) {\n context.ref.current = ref.current;\n return () => {\n var _a;\n if ((_a = context.ref) == null ? void 0 : _a.current) {\n context.ref.current = null;\n }\n };\n }\n }, [context, ref]);\n}\nfunction areRectsIntersecting(rect1, rect2) {\n return rect1 && rect2 && rect1.x < rect2.x + rect2.width && rect1.x + rect1.width > rect2.x && rect1.y < rect2.y + rect2.height && rect1.y + rect1.height > rect2.y;\n}\n\nexport {\n canUseDOM,\n isBrowser,\n getUserAgentBrowser,\n getUserAgentOS,\n detectDeviceType,\n detectOS,\n detectBrowser,\n detectTouch,\n createDOMRef,\n createFocusableRef,\n useDOMRef,\n useFocusableRef,\n useSyncRef,\n areRectsIntersecting\n};\n","// src/demi/react19/getInertValue.ts\nvar getInertValue = (v) => {\n return v;\n};\n\n// src/common/assertion.ts\nvar __DEV__ = process.env.NODE_ENV !== \"production\";\nvar __TEST__ = process.env.NODE_ENV === \"test\";\nfunction isArray(value) {\n return Array.isArray(value);\n}\nfunction isEmptyArray(value) {\n return isArray(value) && value.length === 0;\n}\nfunction isObject(value) {\n const type = typeof value;\n return value != null && (type === \"object\" || type === \"function\") && !isArray(value);\n}\nfunction isEmptyObject(value) {\n return isObject(value) && Object.keys(value).length === 0;\n}\nfunction isEmpty(value) {\n if (isArray(value)) return isEmptyArray(value);\n if (isObject(value)) return isEmptyObject(value);\n if (value == null || value === \"\") return true;\n return false;\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nvar dataAttr = (condition) => condition ? \"true\" : void 0;\nvar isNumeric = (value) => value != null && parseInt(value.toString(), 10) > 0;\n\n// src/common/clsx.ts\nfunction toVal(mix) {\n var k, y, str = \"\";\n if (typeof mix === \"string\" || typeof mix === \"number\") {\n str += mix;\n } else if (typeof mix === \"object\") {\n if (Array.isArray(mix)) {\n for (k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (y = toVal(mix[k])) {\n str && (str += \" \");\n str += y;\n }\n }\n }\n } else {\n for (k in mix) {\n if (mix[k]) {\n str && (str += \" \");\n str += k;\n }\n }\n }\n }\n return str;\n}\nfunction clsx(...args) {\n var i = 0, tmp, x, str = \"\";\n while (i < args.length) {\n if (tmp = args[i++]) {\n if (x = toVal(tmp)) {\n str && (str += \" \");\n str += x;\n }\n }\n }\n return str;\n}\n\n// src/common/object.ts\nvar renameProp = (oldProp, newProp, { [oldProp]: old, ...others }) => ({\n [newProp]: old,\n ...others\n});\nvar copyObject = (obj) => {\n if (!isObject(obj)) return obj;\n if (obj instanceof Array) return [...obj];\n return { ...obj };\n};\nvar omitObject = (obj, omitKeys) => {\n if (!isObject(obj)) return obj;\n if (obj instanceof Array) return [...obj];\n const newObj = { ...obj };\n omitKeys.forEach((key) => newObj[key] && delete newObj[key]);\n return newObj;\n};\nvar cleanObject = (obj) => {\n if (!isObject(obj)) return obj;\n if (obj instanceof Array) return [...obj];\n const newObj = { ...obj };\n Object.keys(newObj).forEach((key) => {\n if (newObj[key] === void 0 || newObj[key] === null) {\n delete newObj[key];\n }\n });\n return newObj;\n};\nvar cleanObjectKeys = (obj, keys = []) => {\n if (!isObject(obj)) return obj;\n if (obj instanceof Array) return [...obj];\n const newObj = { ...obj };\n keys.forEach((key) => {\n if (newObj[key]) {\n delete newObj[key];\n }\n });\n return newObj;\n};\nvar getKeyValue = (obj, key) => {\n if (!isObject(obj)) return obj;\n if (obj instanceof Array) return [...obj];\n return obj[key];\n};\nvar getProp = (obj, path, fallback, index) => {\n const key = typeof path === \"string\" ? path.split(\".\") : [path];\n for (index = 0; index < key.length; index += 1) {\n if (!obj) break;\n obj = obj[key[index]];\n }\n return obj === void 0 ? fallback : obj;\n};\nvar arrayToObject = (arr) => {\n if (!arr.length || !Array.isArray(arr)) return {};\n return arr.reduce((acc, item) => {\n return { ...acc, ...item };\n }, {});\n};\nfunction compact(object) {\n const clone = Object.assign({}, object);\n for (let key in clone) {\n if (clone[key] === void 0) delete clone[key];\n }\n return clone;\n}\n\n// src/common/text.ts\nvar safeText = (text) => {\n if ((text == null ? void 0 : text.length) <= 4) return text;\n return text == null ? void 0 : text.slice(0, 3);\n};\nvar safeAriaLabel = (...texts) => {\n let ariaLabel = \" \";\n for (const text of texts) {\n if (typeof text === \"string\" && text.length > 0) {\n ariaLabel = text;\n break;\n }\n }\n return ariaLabel;\n};\n\n// src/common/dimensions.ts\nvar getMargin = (num) => {\n return `calc(${num * 15.25}pt + 1px * ${num - 1})`;\n};\n\n// src/common/functions.ts\nvar capitalize = (s) => {\n return s ? s.charAt(0).toUpperCase() + s.slice(1).toLowerCase() : \"\";\n};\nfunction callAllHandlers(...fns) {\n return function func(event) {\n fns.some((fn) => {\n fn == null ? void 0 : fn(event);\n return event == null ? void 0 : event.defaultPrevented;\n });\n };\n}\nfunction callAll(...fns) {\n return function mergedFn(arg) {\n fns.forEach((fn) => {\n fn == null ? void 0 : fn(arg);\n });\n };\n}\nfunction extractProperty(key, defaultValue, ...objs) {\n let result = defaultValue;\n for (const obj of objs) {\n if (obj && key in obj && !!obj[key]) {\n result = obj[key];\n }\n }\n return result;\n}\nfunction getUniqueID(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 1e6)}`;\n}\nfunction removeEvents(input) {\n for (const key in input) {\n if (key.startsWith(\"on\")) {\n delete input[key];\n }\n }\n return input;\n}\nfunction objectToDeps(obj) {\n if (!obj || typeof obj !== \"object\") {\n return \"\";\n }\n try {\n return JSON.stringify(obj);\n } catch {\n return \"\";\n }\n}\nfunction debounce(func, waitMilliseconds = 0) {\n let timeout;\n return function(...args) {\n const later = () => {\n timeout = void 0;\n func.apply(this, args);\n };\n if (timeout !== void 0) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(later, waitMilliseconds);\n };\n}\nfunction uniqBy(arr, iteratee) {\n if (typeof iteratee === \"string\") {\n iteratee = (item) => item[iteratee];\n }\n return arr.filter((x, i, self) => i === self.findIndex((y) => iteratee(x) === iteratee(y)));\n}\nvar omit = (obj, keys) => {\n const res = Object.assign({}, obj);\n keys.forEach((key) => {\n delete res[key];\n });\n return res;\n};\nvar kebabCase = (s) => {\n return s.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n};\nvar mapKeys = (obj, iteratee) => {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [iteratee(value, key), value])\n );\n};\nvar get = (object, path, defaultValue) => {\n const keys = Array.isArray(path) ? path : path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\n let res = object;\n for (const key of keys) {\n res = res == null ? void 0 : res[key];\n if (res === void 0) {\n return defaultValue;\n }\n }\n return res;\n};\nvar intersectionBy = (...args) => {\n if (args.length < 2) {\n throw new Error(\"intersectionBy requires at least two arrays and an iteratee\");\n }\n const iteratee = args[args.length - 1];\n const arrays = args.slice(0, -1);\n if (arrays.length === 0) {\n return [];\n }\n const getIterateeValue = (item) => {\n if (typeof iteratee === \"function\") {\n return iteratee(item);\n } else if (typeof iteratee === \"string\") {\n return item[iteratee];\n } else {\n throw new Error(\"Iteratee must be a function or a string key of the array elements\");\n }\n };\n const [first, ...rest] = arrays;\n const transformedFirst = first.map((item) => getIterateeValue(item));\n const transformedSets = rest.map(\n (array) => new Set(array.map((item) => getIterateeValue(item)))\n );\n const res = [];\n const seen = /* @__PURE__ */ new Set();\n for (let i = 0; i < first.length; i++) {\n const item = first[i];\n const transformed = transformedFirst[i];\n if (seen.has(transformed)) {\n continue;\n }\n const existsInAll = transformedSets.every((set) => set.has(transformed));\n if (existsInAll) {\n res.push(item);\n seen.add(transformed);\n }\n }\n return res;\n};\n\n// src/common/numbers.ts\nfunction range(start, end) {\n const length = end - start + 1;\n return Array.from({ length }, (_, index) => index + start);\n}\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nfunction clampPercentage(value, max = 100) {\n return Math.min(Math.max(value, 0), max);\n}\n\n// src/common/console.ts\nvar warningStack = {};\nfunction warn(message, component, ...args) {\n const tag = component ? ` [${component}]` : \" \";\n const log = `[Hero UI]${tag}: ${message}`;\n if (typeof console === \"undefined\") return;\n if (warningStack[log]) return;\n warningStack[log] = true;\n if (process.env.NODE_ENV !== \"production\") {\n return console.warn(log, args);\n }\n}\n\n// src/common/dates.ts\nfunction getGregorianYearOffset(identifier) {\n switch (identifier) {\n case \"buddhist\":\n return 543;\n case \"ethiopic\":\n case \"ethioaa\":\n return -8;\n case \"coptic\":\n return -284;\n case \"hebrew\":\n return 3760;\n case \"indian\":\n return -78;\n case \"islamic-civil\":\n case \"islamic-tbla\":\n case \"islamic-umalqura\":\n return -579;\n case \"persian\":\n return -600;\n case \"roc\":\n case \"japanese\":\n case \"gregory\":\n default:\n return 0;\n }\n}\n\n// src/common/regex.ts\nvar isPatternNumeric = (pattern) => {\n const numericPattern = /(^|\\W)[0-9](\\W|$)/;\n return numericPattern.test(pattern) && !/[^\\d\\^$\\[\\]\\(\\)\\*\\+\\-\\.\\|]/.test(pattern);\n};\n\n// src/common/ra.ts\nfunction chain(...callbacks) {\n return (...args) => {\n for (let callback of callbacks) {\n if (typeof callback === \"function\") {\n callback(...args);\n }\n }\n };\n}\nvar idsUpdaterMap = /* @__PURE__ */ new Map();\nfunction mergeIds(idA, idB) {\n if (idA === idB) {\n return idA;\n }\n let setIdsA = idsUpdaterMap.get(idA);\n if (setIdsA) {\n setIdsA.forEach((ref) => ref.current = idB);\n return idB;\n }\n let setIdsB = idsUpdaterMap.get(idB);\n if (setIdsB) {\n setIdsB.forEach((ref) => ref.current = idA);\n return idA;\n }\n return idB;\n}\nfunction mergeProps(...args) {\n let result = { ...args[0] };\n for (let i = 1; i < args.length; i++) {\n let props = args[i];\n for (let key in props) {\n let a = result[key];\n let b = props[key];\n if (typeof a === \"function\" && typeof b === \"function\" && // This is a lot faster than a regex.\n key[0] === \"o\" && key[1] === \"n\" && key.charCodeAt(2) >= /* 'A' */\n 65 && key.charCodeAt(2) <= /* 'Z' */\n 90) {\n result[key] = chain(a, b);\n } else if ((key === \"className\" || key === \"UNSAFE_className\") && typeof a === \"string\" && typeof b === \"string\") {\n result[key] = clsx(a, b);\n } else if (key === \"id\" && a && b) {\n result.id = mergeIds(a, b);\n } else {\n result[key] = b !== void 0 ? b : a;\n }\n }\n }\n return result;\n}\nfunction mergeRefs(...refs) {\n if (refs.length === 1 && refs[0]) {\n return refs[0];\n }\n return (value) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, value);\n hasCleanup || (hasCleanup = typeof cleanup == \"function\");\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n cleanups.forEach((cleanup, i) => {\n if (typeof cleanup === \"function\") {\n cleanup == null ? void 0 : cleanup();\n } else {\n setRef(refs[i], null);\n }\n });\n };\n }\n };\n}\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return () => ref(value);\n } else if (ref != null) {\n if (\"current\" in ref) {\n ref.current = value;\n }\n }\n}\nexport {\n __DEV__,\n __TEST__,\n arrayToObject,\n callAll,\n callAllHandlers,\n capitalize,\n chain,\n clamp,\n clampPercentage,\n cleanObject,\n cleanObjectKeys,\n clsx,\n compact,\n copyObject,\n dataAttr,\n debounce,\n extractProperty,\n get,\n getGregorianYearOffset,\n getInertValue,\n getKeyValue,\n getMargin,\n getProp,\n getUniqueID,\n idsUpdaterMap,\n intersectionBy,\n isArray,\n isEmpty,\n isEmptyArray,\n isEmptyObject,\n isFunction,\n isNumeric,\n isObject,\n isPatternNumeric,\n kebabCase,\n mapKeys,\n mergeIds,\n mergeProps,\n mergeRefs,\n objectToDeps,\n omit,\n omitObject,\n range,\n removeEvents,\n renameProp,\n safeAriaLabel,\n safeText,\n uniqBy,\n warn\n};\n","\"use client\";\n\n// src/use-is-hydrated.ts\nimport * as React from \"react\";\nfunction useIsHydrated() {\n const subscribe = () => () => {\n };\n return React.useSyncExternalStore(\n subscribe,\n () => true,\n () => false\n );\n}\n\nexport {\n useIsHydrated\n};\n","// src/dom-props.ts\nvar DOMPropNames = /* @__PURE__ */ new Set([\n \"id\",\n \"type\",\n \"style\",\n \"title\",\n \"role\",\n \"tabIndex\",\n \"htmlFor\",\n \"width\",\n \"height\",\n \"abbr\",\n \"accept\",\n \"acceptCharset\",\n \"accessKey\",\n \"action\",\n \"allowFullScreen\",\n \"allowTransparency\",\n \"alt\",\n \"async\",\n \"autoComplete\",\n \"autoFocus\",\n \"autoPlay\",\n \"cellPadding\",\n \"cellSpacing\",\n \"challenge\",\n \"charset\",\n \"checked\",\n \"cite\",\n \"class\",\n \"className\",\n \"cols\",\n \"colSpan\",\n \"command\",\n \"content\",\n \"contentEditable\",\n \"contextMenu\",\n \"controls\",\n \"coords\",\n \"crossOrigin\",\n \"data\",\n \"dateTime\",\n \"default\",\n \"defer\",\n \"dir\",\n \"disabled\",\n \"download\",\n \"draggable\",\n \"dropzone\",\n \"encType\",\n \"enterKeyHint\",\n \"for\",\n \"form\",\n \"formAction\",\n \"formEncType\",\n \"formMethod\",\n \"formNoValidate\",\n \"formTarget\",\n \"frameBorder\",\n \"headers\",\n \"hidden\",\n \"high\",\n \"href\",\n \"hrefLang\",\n \"httpEquiv\",\n \"icon\",\n \"inputMode\",\n \"isMap\",\n \"itemId\",\n \"itemProp\",\n \"itemRef\",\n \"itemScope\",\n \"itemType\",\n \"kind\",\n \"label\",\n \"lang\",\n \"list\",\n \"loop\",\n \"manifest\",\n \"max\",\n \"maxLength\",\n \"media\",\n \"mediaGroup\",\n \"method\",\n \"min\",\n \"minLength\",\n \"multiple\",\n \"muted\",\n \"name\",\n \"noValidate\",\n \"open\",\n \"optimum\",\n \"pattern\",\n \"ping\",\n \"placeholder\",\n \"poster\",\n \"preload\",\n \"radioGroup\",\n \"referrerPolicy\",\n \"readOnly\",\n \"rel\",\n \"required\",\n \"rows\",\n \"rowSpan\",\n \"sandbox\",\n \"scope\",\n \"scoped\",\n \"scrolling\",\n \"seamless\",\n \"selected\",\n \"shape\",\n \"size\",\n \"sizes\",\n \"slot\",\n \"sortable\",\n \"span\",\n \"spellCheck\",\n \"src\",\n \"srcDoc\",\n \"srcSet\",\n \"start\",\n \"step\",\n \"target\",\n \"translate\",\n \"typeMustMatch\",\n \"useMap\",\n \"value\",\n \"wmode\",\n \"wrap\"\n]);\nvar DOMEventNames = /* @__PURE__ */ new Set([\n \"onCopy\",\n \"onCut\",\n \"onPaste\",\n \"onLoad\",\n \"onError\",\n \"onWheel\",\n \"onScroll\",\n \"onCompositionEnd\",\n \"onCompositionStart\",\n \"onCompositionUpdate\",\n \"onKeyDown\",\n \"onKeyPress\",\n \"onKeyUp\",\n \"onFocus\",\n \"onBlur\",\n \"onChange\",\n \"onInput\",\n \"onSubmit\",\n \"onClick\",\n \"onContextMenu\",\n \"onDoubleClick\",\n \"onDrag\",\n \"onDragEnd\",\n \"onDragEnter\",\n \"onDragExit\",\n \"onDragLeave\",\n \"onDragOver\",\n \"onDragStart\",\n \"onDrop\",\n \"onMouseDown\",\n \"onMouseEnter\",\n \"onMouseLeave\",\n \"onMouseMove\",\n \"onMouseOut\",\n \"onMouseOver\",\n \"onMouseUp\",\n \"onPointerDown\",\n \"onPointerEnter\",\n \"onPointerLeave\",\n \"onPointerUp\",\n \"onSelect\",\n \"onTouchCancel\",\n \"onTouchEnd\",\n \"onTouchMove\",\n \"onTouchStart\",\n \"onAnimationStart\",\n \"onAnimationEnd\",\n \"onAnimationIteration\",\n \"onTransitionEnd\"\n]);\n\nexport {\n DOMPropNames,\n DOMEventNames\n};\n","import {\n DOMEventNames,\n DOMPropNames\n} from \"./chunk-RFWDHYLZ.mjs\";\n\n// src/filter-dom-props.ts\nvar propRe = /^(data-.*)$/;\nvar ariaRe = /^(aria-.*)$/;\nvar funcRe = /^(on[A-Z].*)$/;\nfunction filterDOMProps(props, opts = {}) {\n let {\n labelable = true,\n enabled = true,\n propNames,\n omitPropNames,\n omitEventNames,\n omitDataProps,\n omitEventProps\n } = opts;\n let filteredProps = {};\n if (!enabled) {\n return props;\n }\n for (const prop in props) {\n if (omitPropNames == null ? void 0 : omitPropNames.has(prop)) {\n continue;\n }\n if ((omitEventNames == null ? void 0 : omitEventNames.has(prop)) && funcRe.test(prop)) {\n continue;\n }\n if (funcRe.test(prop) && !DOMEventNames.has(prop)) {\n continue;\n }\n if (omitDataProps && propRe.test(prop)) {\n continue;\n }\n if (omitEventProps && funcRe.test(prop)) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(props, prop) && (DOMPropNames.has(prop) || labelable && ariaRe.test(prop) || (propNames == null ? void 0 : propNames.has(prop)) || propRe.test(prop)) || funcRe.test(prop)) {\n filteredProps[prop] = props[prop];\n }\n }\n return filteredProps;\n}\n\nexport {\n filterDOMProps\n};\n","\"use client\";\n\n// src/provider-context.ts\nimport { createContext } from \"@heroui/react-utils\";\nvar [ProviderContext, useProviderContext] = createContext({\n name: \"ProviderContext\",\n strict: false\n});\n\nexport {\n ProviderContext,\n useProviderContext\n};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // https://en.wikipedia.org/wiki/Right-to-left\nconst $148a7a147e38ea7f$var$RTL_SCRIPTS = new Set([\n 'Arab',\n 'Syrc',\n 'Samr',\n 'Mand',\n 'Thaa',\n 'Mend',\n 'Nkoo',\n 'Adlm',\n 'Rohg',\n 'Hebr'\n]);\nconst $148a7a147e38ea7f$var$RTL_LANGS = new Set([\n 'ae',\n 'ar',\n 'arc',\n 'bcc',\n 'bqi',\n 'ckb',\n 'dv',\n 'fa',\n 'glk',\n 'he',\n 'ku',\n 'mzn',\n 'nqo',\n 'pnb',\n 'ps',\n 'sd',\n 'ug',\n 'ur',\n 'yi'\n]);\nfunction $148a7a147e38ea7f$export$702d680b21cbd764(localeString) {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (Intl.Locale) {\n let locale = new Intl.Locale(localeString).maximize();\n // Use the text info object to get the direction if possible.\n // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n if (textInfo) return textInfo.direction === 'rtl';\n // Fallback: guess using the script.\n // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n if (locale.script) return $148a7a147e38ea7f$var$RTL_SCRIPTS.has(locale.script);\n }\n // If not, just guess by the language (first part of the locale)\n let lang = localeString.split('-')[0];\n return $148a7a147e38ea7f$var$RTL_LANGS.has(lang);\n}\n\n\nexport {$148a7a147e38ea7f$export$702d680b21cbd764 as isRTL};\n//# sourceMappingURL=utils.module.js.map\n","import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst $b5e257d569688ac6$var$defaultContext = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\nconst $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext);\nconst $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false);\n// This is only used in React < 18.\nfunction $b5e257d569688ac6$var$LegacySSRProvider(props) {\n let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext);\n let [isSSR, setIsSSR] = (0, $670gB$useState)(true);\n let value = (0, $670gB$useMemo)(()=>({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [\n cur,\n counter\n ]);\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, $670gB$useLayoutEffect)(()=>{\n setIsSSR(false);\n }, []);\n return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, {\n value: value\n }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, {\n value: isSSR\n }, props.children));\n}\nlet $b5e257d569688ac6$var$warnedAboutSSRProvider = false;\nfunction $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) {\n if (typeof (0, $670gB$react)['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n $b5e257d569688ac6$var$warnedAboutSSRProvider = true;\n }\n return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children);\n }\n return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props);\n}\nlet $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $b5e257d569688ac6$var$componentIds = new WeakMap();\nfunction $b5e257d569688ac6$var$useCounter(isDisabled = false) {\n let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n let ref = (0, $670gB$useRef)(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;\n if (currentOwner) {\n let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner);\n if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.\n $b5e257d569688ac6$var$componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n $b5e257d569688ac6$var$componentIds.delete(currentOwner);\n }\n }\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\nfunction $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) {\n let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n let counter = $b5e257d569688ac6$var$useCounter(!!defaultId);\n let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\nfunction $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) {\n let id = (0, $670gB$react).useId();\n let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\nconst $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId;\nfunction $b5e257d569688ac6$var$getSnapshot() {\n return false;\n}\nfunction $b5e257d569688ac6$var$getServerSnapshot() {\n return true;\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction $b5e257d569688ac6$var$subscribe(onStoreChange) {\n // noop\n return ()=>{};\n}\nfunction $b5e257d569688ac6$export$535bd6ca7f90a273() {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext);\n}\n\n\nexport {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId};\n//# sourceMappingURL=SSRProvider.module.js.map\n","import {isRTL as $148a7a147e38ea7f$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useState as $ffhGL$useState, useEffect as $ffhGL$useEffect} from \"react\";\nimport {useIsSSR as $ffhGL$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Locale passed from server by PackageLocalizationProvider.\nconst $1e5a04cdaf7d1af8$var$localeSymbol = Symbol.for('react-aria.i18n.locale');\nfunction $1e5a04cdaf7d1af8$export$f09106e7c6677ec5() {\n let locale = typeof window !== 'undefined' && window[$1e5a04cdaf7d1af8$var$localeSymbol] || typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\n try {\n Intl.DateTimeFormat.supportedLocalesOf([\n locale\n ]);\n } catch {\n locale = 'en-US';\n }\n return {\n locale: locale,\n direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n };\n}\nlet $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\nlet $1e5a04cdaf7d1af8$var$listeners = new Set();\nfunction $1e5a04cdaf7d1af8$var$updateLocale() {\n $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\n for (let listener of $1e5a04cdaf7d1af8$var$listeners)listener($1e5a04cdaf7d1af8$var$currentLocale);\n}\nfunction $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a() {\n let isSSR = (0, $ffhGL$useIsSSR)();\n let [defaultLocale, setDefaultLocale] = (0, $ffhGL$useState)($1e5a04cdaf7d1af8$var$currentLocale);\n (0, $ffhGL$useEffect)(()=>{\n if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.addEventListener('languagechange', $1e5a04cdaf7d1af8$var$updateLocale);\n $1e5a04cdaf7d1af8$var$listeners.add(setDefaultLocale);\n return ()=>{\n $1e5a04cdaf7d1af8$var$listeners.delete(setDefaultLocale);\n if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.removeEventListener('languagechange', $1e5a04cdaf7d1af8$var$updateLocale);\n };\n }, []);\n // We cannot determine the browser's language on the server, so default to\n // en-US. This will be updated after hydration on the client to the correct value.\n if (isSSR) return {\n locale: 'en-US',\n direction: 'ltr'\n };\n return defaultLocale;\n}\n\n\nexport {$1e5a04cdaf7d1af8$export$f09106e7c6677ec5 as getDefaultLocale, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a as useDefaultLocale};\n//# sourceMappingURL=useDefaultLocale.module.js.map\n","import {isRTL as $148a7a147e38ea7f$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useDefaultLocale as $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a} from \"./useDefaultLocale.mjs\";\nimport $h9FiU$react, {useContext as $h9FiU$useContext} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $18f2051aff69b9bf$var$I18nContext = /*#__PURE__*/ (0, $h9FiU$react).createContext(null);\nfunction $18f2051aff69b9bf$export$a54013f0d02a8f82(props) {\n let { locale: locale, children: children } = props;\n let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n let value = (0, $h9FiU$react).useMemo(()=>{\n if (!locale) return defaultLocale;\n return {\n locale: locale,\n direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n };\n }, [\n defaultLocale,\n locale\n ]);\n return /*#__PURE__*/ (0, $h9FiU$react).createElement($18f2051aff69b9bf$var$I18nContext.Provider, {\n value: value\n }, children);\n}\nfunction $18f2051aff69b9bf$export$43bb16f9c6d9e3f7() {\n let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n let context = (0, $h9FiU$useContext)($18f2051aff69b9bf$var$I18nContext);\n return context || defaultLocale;\n}\n\n\nexport {$18f2051aff69b9bf$export$a54013f0d02a8f82 as I18nProvider, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 as useLocale};\n//# sourceMappingURL=context.module.js.map\n","function _check_private_redeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\nexport { _check_private_redeclaration as _ };\n","import { _ as _check_private_redeclaration } from \"./_check_private_redeclaration.js\";\n\nfunction _class_private_field_init(obj, privateMap, value) {\n _check_private_redeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\nexport { _class_private_field_init as _ };\n","import $HgANd$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $HgANd$react).useLayoutEffect : ()=>{};\n\n\nexport {$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport $lmaYr$react, {useRef as $lmaYr$useRef, useCallback as $lmaYr$useCallback} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nvar $8ae05eaa5c114e9c$var$_React_useInsertionEffect;\n// Use the earliest effect type possible. useInsertionEffect runs during the mutation phase,\n// before all layout effects, but is available only in React 18 and later.\nconst $8ae05eaa5c114e9c$var$useEarlyEffect = ($8ae05eaa5c114e9c$var$_React_useInsertionEffect = (0, $lmaYr$react)['useInsertionEffect']) !== null && $8ae05eaa5c114e9c$var$_React_useInsertionEffect !== void 0 ? $8ae05eaa5c114e9c$var$_React_useInsertionEffect : (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c);\nfunction $8ae05eaa5c114e9c$export$7f54fc3180508a52(fn) {\n const ref = (0, $lmaYr$useRef)(null);\n $8ae05eaa5c114e9c$var$useEarlyEffect(()=>{\n ref.current = fn;\n }, [\n fn\n ]);\n // @ts-ignore\n return (0, $lmaYr$useCallback)((...args)=>{\n const f = ref.current;\n return f === null || f === void 0 ? void 0 : f(...args);\n }, []);\n}\n\n\nexport {$8ae05eaa5c114e9c$export$7f54fc3180508a52 as useEffectEvent};\n//# sourceMappingURL=useEffectEvent.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useValueEffect as $1dbecbe27a04f9af$export$14d238f342723f25} from \"./useValueEffect.mjs\";\nimport {useState as $eKkEp$useState, useRef as $eKkEp$useRef, useEffect as $eKkEp$useEffect, useCallback as $eKkEp$useCallback} from \"react\";\nimport {useSSRSafeId as $eKkEp$useSSRSafeId} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet $bdb11010cef70236$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $bdb11010cef70236$export$d41a04c74483c6ef = new Map();\n// This allows us to clean up the idsUpdaterMap when the id is no longer used.\n// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.\n// This can happen in suspended components where mount/unmount is not called.\nlet $bdb11010cef70236$var$registry;\nif (typeof FinalizationRegistry !== 'undefined') $bdb11010cef70236$var$registry = new FinalizationRegistry((heldValue)=>{\n $bdb11010cef70236$export$d41a04c74483c6ef.delete(heldValue);\n});\nfunction $bdb11010cef70236$export$f680877a34711e37(defaultId) {\n let [value, setValue] = (0, $eKkEp$useState)(defaultId);\n let nextId = (0, $eKkEp$useRef)(null);\n let res = (0, $eKkEp$useSSRSafeId)(value);\n let cleanupRef = (0, $eKkEp$useRef)(null);\n if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.register(cleanupRef, res);\n if ($bdb11010cef70236$var$canUseDOM) {\n const cacheIdRef = $bdb11010cef70236$export$d41a04c74483c6ef.get(res);\n if (cacheIdRef && !cacheIdRef.includes(nextId)) cacheIdRef.push(nextId);\n else $bdb11010cef70236$export$d41a04c74483c6ef.set(res, [\n nextId\n ]);\n }\n (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n let r = res;\n return ()=>{\n // In Suspense, the cleanup function may be not called\n // when it is though, also remove it from the finalization registry.\n if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.unregister(cleanupRef);\n $bdb11010cef70236$export$d41a04c74483c6ef.delete(r);\n };\n }, [\n res\n ]);\n // This cannot cause an infinite loop because the ref is always cleaned up.\n // eslint-disable-next-line\n (0, $eKkEp$useEffect)(()=>{\n let newId = nextId.current;\n if (newId) setValue(newId);\n return ()=>{\n if (newId) nextId.current = null;\n };\n });\n return res;\n}\nfunction $bdb11010cef70236$export$cd8c9cb68f842629(idA, idB) {\n if (idA === idB) return idA;\n let setIdsA = $bdb11010cef70236$export$d41a04c74483c6ef.get(idA);\n if (setIdsA) {\n setIdsA.forEach((ref)=>ref.current = idB);\n return idB;\n }\n let setIdsB = $bdb11010cef70236$export$d41a04c74483c6ef.get(idB);\n if (setIdsB) {\n setIdsB.forEach((ref)=>ref.current = idA);\n return idA;\n }\n return idB;\n}\nfunction $bdb11010cef70236$export$b4cc09c592e8fdb8(depArray = []) {\n let id = $bdb11010cef70236$export$f680877a34711e37();\n let [resolvedId, setResolvedId] = (0, $1dbecbe27a04f9af$export$14d238f342723f25)(id);\n let updateId = (0, $eKkEp$useCallback)(()=>{\n setResolvedId(function*() {\n yield id;\n yield document.getElementById(id) ? id : undefined;\n });\n }, [\n id,\n setResolvedId\n ]);\n (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(updateId, [\n id,\n updateId,\n ...depArray\n ]);\n return resolvedId;\n}\n\n\nexport {$bdb11010cef70236$export$d41a04c74483c6ef as idsUpdaterMap, $bdb11010cef70236$export$f680877a34711e37 as useId, $bdb11010cef70236$export$cd8c9cb68f842629 as mergeIds, $bdb11010cef70236$export$b4cc09c592e8fdb8 as useSlotId};\n//# sourceMappingURL=useId.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Calls all functions in the order they were chained with the same arguments.\n */ function $ff5963eb1fccf552$export$e08e3b67e392101e(...callbacks) {\n return (...args)=>{\n for (let callback of callbacks)if (typeof callback === 'function') callback(...args);\n };\n}\n\n\nexport {$ff5963eb1fccf552$export$e08e3b67e392101e as chain};\n//# sourceMappingURL=chain.module.js.map\n","const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{\n var _el_ownerDocument;\n return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;\n};\nconst $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{\n if (el && 'window' in el && el.window === el) return el;\n const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);\n return doc.defaultView || window;\n};\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */ function $431fbd86ca7dc216$var$isNode(value) {\n return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\nfunction $431fbd86ca7dc216$export$af51f0f06c0f328a(node) {\n return $431fbd86ca7dc216$var$isNode(node) && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\n\nexport {$431fbd86ca7dc216$export$b204af158042fbac as getOwnerDocument, $431fbd86ca7dc216$export$f21a1ffae260145a as getOwnerWindow, $431fbd86ca7dc216$export$af51f0f06c0f328a as isShadowRoot};\n//# sourceMappingURL=domHelpers.module.js.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $f4e2df6bd15f8569$var$_tableNestedRows = false;\nlet $f4e2df6bd15f8569$var$_shadowDOM = false;\nfunction $f4e2df6bd15f8569$export$d9d8a0f82de49530() {\n $f4e2df6bd15f8569$var$_tableNestedRows = true;\n}\nfunction $f4e2df6bd15f8569$export$1b00cb14a96194e6() {\n return $f4e2df6bd15f8569$var$_tableNestedRows;\n}\nfunction $f4e2df6bd15f8569$export$12b151d9882e9985() {\n $f4e2df6bd15f8569$var$_shadowDOM = true;\n}\nfunction $f4e2df6bd15f8569$export$98658e8c59125e6a() {\n return $f4e2df6bd15f8569$var$_shadowDOM;\n}\n\n\nexport {$f4e2df6bd15f8569$export$d9d8a0f82de49530 as enableTableNestedRows, $f4e2df6bd15f8569$export$1b00cb14a96194e6 as tableNestedRows, $f4e2df6bd15f8569$export$12b151d9882e9985 as enableShadowDOM, $f4e2df6bd15f8569$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=module.js.map\n","import {isShadowRoot as $431fbd86ca7dc216$export$af51f0f06c0f328a} from \"./domHelpers.mjs\";\nimport {shadowDOM as $lcSu5$shadowDOM} from \"@react-stately/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\n\nfunction $d4ee10de306f2510$export$4282f70798064fe0(node, otherNode) {\n if (!(0, $lcSu5$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n if (!node || !otherNode) return false;\n let currentNode = otherNode;\n while(currentNode !== null){\n if (currentNode === node) return true;\n if (currentNode.tagName === 'SLOT' && currentNode.assignedSlot) // Element is slotted\n currentNode = currentNode.assignedSlot.parentNode;\n else if ((0, $431fbd86ca7dc216$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n currentNode = currentNode.host;\n else currentNode = currentNode.parentNode;\n }\n return false;\n}\nconst $d4ee10de306f2510$export$cd4e5573fbe2b576 = (doc = document)=>{\n var _activeElement_shadowRoot;\n if (!(0, $lcSu5$shadowDOM)()) return doc.activeElement;\n let activeElement = doc.activeElement;\n while(activeElement && 'shadowRoot' in activeElement && ((_activeElement_shadowRoot = activeElement.shadowRoot) === null || _activeElement_shadowRoot === void 0 ? void 0 : _activeElement_shadowRoot.activeElement))activeElement = activeElement.shadowRoot.activeElement;\n return activeElement;\n};\nfunction $d4ee10de306f2510$export$e58f029f0fbfdb29(event) {\n if ((0, $lcSu5$shadowDOM)() && event.target.shadowRoot) {\n if (event.composedPath) return event.composedPath()[0];\n }\n return event.target;\n}\n\n\nexport {$d4ee10de306f2510$export$4282f70798064fe0 as nodeContains, $d4ee10de306f2510$export$cd4e5573fbe2b576 as getActiveElement, $d4ee10de306f2510$export$e58f029f0fbfdb29 as getEventTarget};\n//# sourceMappingURL=DOMFunctions.module.js.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import {chain as $ff5963eb1fccf552$export$e08e3b67e392101e} from \"./chain.mjs\";\nimport {mergeIds as $bdb11010cef70236$export$cd8c9cb68f842629} from \"./useId.mjs\";\nimport $7jXr9$clsx from \"clsx\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $3ef42575df84b30b$export$9d1611c77c2fe928(...args) {\n // Start with a base clone of the first argument. This is a lot faster than starting\n // with an empty object and adding properties as we go.\n let result = {\n ...args[0]\n };\n for(let i = 1; i < args.length; i++){\n let props = args[i];\n for(let key in props){\n let a = result[key];\n let b = props[key];\n // Chain events\n if (typeof a === 'function' && typeof b === 'function' && // This is a lot faster than a regex.\n key[0] === 'o' && key[1] === 'n' && key.charCodeAt(2) >= /* 'A' */ 65 && key.charCodeAt(2) <= /* 'Z' */ 90) result[key] = (0, $ff5963eb1fccf552$export$e08e3b67e392101e)(a, b);\n else if ((key === 'className' || key === 'UNSAFE_className') && typeof a === 'string' && typeof b === 'string') result[key] = (0, $7jXr9$clsx)(a, b);\n else if (key === 'id' && a && b) result.id = (0, $bdb11010cef70236$export$cd8c9cb68f842629)(a, b);\n else result[key] = b !== undefined ? b : a;\n }\n }\n return result;\n}\n\n\nexport {$3ef42575df84b30b$export$9d1611c77c2fe928 as mergeProps};\n//# sourceMappingURL=mergeProps.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $65484d02dcb7eb3e$var$DOMPropNames = new Set([\n 'id'\n]);\nconst $65484d02dcb7eb3e$var$labelablePropNames = new Set([\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-details'\n]);\n// See LinkDOMProps in dom.d.ts.\nconst $65484d02dcb7eb3e$var$linkPropNames = new Set([\n 'href',\n 'hrefLang',\n 'target',\n 'rel',\n 'download',\n 'ping',\n 'referrerPolicy'\n]);\nconst $65484d02dcb7eb3e$var$globalAttrs = new Set([\n 'dir',\n 'lang',\n 'hidden',\n 'inert',\n 'translate'\n]);\nconst $65484d02dcb7eb3e$var$globalEvents = new Set([\n 'onClick',\n 'onAuxClick',\n 'onContextMenu',\n 'onDoubleClick',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onTouchCancel',\n 'onTouchEnd',\n 'onTouchMove',\n 'onTouchStart',\n 'onPointerDown',\n 'onPointerMove',\n 'onPointerUp',\n 'onPointerCancel',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerOver',\n 'onPointerOut',\n 'onGotPointerCapture',\n 'onLostPointerCapture',\n 'onScroll',\n 'onWheel',\n 'onAnimationStart',\n 'onAnimationEnd',\n 'onAnimationIteration',\n 'onTransitionCancel',\n 'onTransitionEnd',\n 'onTransitionRun',\n 'onTransitionStart'\n]);\nconst $65484d02dcb7eb3e$var$propRe = /^(data-.*)$/;\nfunction $65484d02dcb7eb3e$export$457c3d6518dd4c6f(props, opts = {}) {\n let { labelable: labelable, isLink: isLink, global: global, events: events = global, propNames: propNames } = opts;\n let filteredProps = {};\n for(const prop in props)if (Object.prototype.hasOwnProperty.call(props, prop) && ($65484d02dcb7eb3e$var$DOMPropNames.has(prop) || labelable && $65484d02dcb7eb3e$var$labelablePropNames.has(prop) || isLink && $65484d02dcb7eb3e$var$linkPropNames.has(prop) || global && $65484d02dcb7eb3e$var$globalAttrs.has(prop) || events && $65484d02dcb7eb3e$var$globalEvents.has(prop) || prop.endsWith('Capture') && $65484d02dcb7eb3e$var$globalEvents.has(prop.slice(0, -7)) || (propNames === null || propNames === void 0 ? void 0 : propNames.has(prop)) || $65484d02dcb7eb3e$var$propRe.test(prop))) filteredProps[prop] = props[prop];\n return filteredProps;\n}\n\n\nexport {$65484d02dcb7eb3e$export$457c3d6518dd4c6f as filterDOMProps};\n//# sourceMappingURL=filterDOMProps.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {\n if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({\n preventScroll: true\n });\n else {\n let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);\n element.focus();\n $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);\n }\n}\nlet $7215afc6de606d6b$var$supportsPreventScrollCached = null;\nfunction $7215afc6de606d6b$var$supportsPreventScroll() {\n if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {\n $7215afc6de606d6b$var$supportsPreventScrollCached = false;\n try {\n let focusElem = document.createElement('div');\n focusElem.focus({\n get preventScroll () {\n $7215afc6de606d6b$var$supportsPreventScrollCached = true;\n return true;\n }\n });\n } catch {\n // Ignore\n }\n }\n return $7215afc6de606d6b$var$supportsPreventScrollCached;\n}\nfunction $7215afc6de606d6b$var$getScrollableElements(element) {\n let parent = element.parentNode;\n let scrollableElements = [];\n let rootScrollingElement = document.scrollingElement || document.documentElement;\n while(parent instanceof HTMLElement && parent !== rootScrollingElement){\n if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({\n element: parent,\n scrollTop: parent.scrollTop,\n scrollLeft: parent.scrollLeft\n });\n parent = parent.parentNode;\n }\n if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({\n element: rootScrollingElement,\n scrollTop: rootScrollingElement.scrollTop,\n scrollLeft: rootScrollingElement.scrollLeft\n });\n return scrollableElements;\n}\nfunction $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {\n for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){\n element.scrollTop = scrollTop;\n element.scrollLeft = scrollLeft;\n }\n}\n\n\nexport {$7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c87311424ea30a05$var$testUserAgent(re) {\n var _window_navigator_userAgentData;\n if (typeof window === 'undefined' || window.navigator == null) return false;\n let brands = (_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands;\n return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $c87311424ea30a05$var$testPlatform(re) {\n var _window_navigator_userAgentData;\n return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;\n}\nfunction $c87311424ea30a05$var$cached(fn) {\n if (process.env.NODE_ENV === 'test') return fn;\n let res = null;\n return ()=>{\n if (res == null) res = fn();\n return res;\n };\n}\nconst $c87311424ea30a05$export$9ac100e40613ea10 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^Mac/i);\n});\nconst $c87311424ea30a05$export$186c6964ca17d99 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPhone/i);\n});\nconst $c87311424ea30a05$export$7bef049ce92e4224 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $c87311424ea30a05$export$fedb369cb70207f1 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();\n});\nconst $c87311424ea30a05$export$e1865c3bedcd822b = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();\n});\nconst $c87311424ea30a05$export$78551043582a6a98 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();\n});\nconst $c87311424ea30a05$export$6446a186d09e379e = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Chrome/i);\n});\nconst $c87311424ea30a05$export$a11b0059900ceec8 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Android/i);\n});\nconst $c87311424ea30a05$export$b7d78993b74f766d = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Firefox/i);\n});\n\n\nexport {$c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $c87311424ea30a05$export$b7d78993b74f766d as isFirefox};\n//# sourceMappingURL=platform.module.js.map\n","import {focusWithoutScrolling as $7215afc6de606d6b$export$de79e2c695e052f3} from \"./focusWithoutScrolling.mjs\";\nimport {isMac as $c87311424ea30a05$export$9ac100e40613ea10, isWebKit as $c87311424ea30a05$export$78551043582a6a98, isFirefox as $c87311424ea30a05$export$b7d78993b74f766d, isIPad as $c87311424ea30a05$export$7bef049ce92e4224} from \"./platform.mjs\";\nimport $g3jFn$react, {createContext as $g3jFn$createContext, useMemo as $g3jFn$useMemo, useContext as $g3jFn$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $ea8dcbcb9ea1b556$var$RouterContext = /*#__PURE__*/ (0, $g3jFn$createContext)({\n isNative: true,\n open: $ea8dcbcb9ea1b556$var$openSyntheticLink,\n useHref: (href)=>href\n});\nfunction $ea8dcbcb9ea1b556$export$323e4fc2fa4753fb(props) {\n let { children: children, navigate: navigate, useHref: useHref } = props;\n let ctx = (0, $g3jFn$useMemo)(()=>({\n isNative: false,\n open: (target, modifiers, href, routerOptions)=>{\n $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>{\n if ($ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers)) navigate(href, routerOptions);\n else $ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers);\n });\n },\n useHref: useHref || ((href)=>href)\n }), [\n navigate,\n useHref\n ]);\n return /*#__PURE__*/ (0, $g3jFn$react).createElement($ea8dcbcb9ea1b556$var$RouterContext.Provider, {\n value: ctx\n }, children);\n}\nfunction $ea8dcbcb9ea1b556$export$9a302a45f65d0572() {\n return (0, $g3jFn$useContext)($ea8dcbcb9ea1b556$var$RouterContext);\n}\nfunction $ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers) {\n // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n let target = link.getAttribute('target');\n return (!target || target === '_self') && link.origin === location.origin && !link.hasAttribute('download') && !modifiers.metaKey && // open in new tab (mac)\n !modifiers.ctrlKey && // open in new tab (windows)\n !modifiers.altKey && // download\n !modifiers.shiftKey;\n}\nfunction $ea8dcbcb9ea1b556$export$95185d699e05d4d7(target, modifiers, setOpening = true) {\n var _window_event_type, _window_event;\n let { metaKey: metaKey, ctrlKey: ctrlKey, altKey: altKey, shiftKey: shiftKey } = modifiers;\n // Firefox does not recognize keyboard events as a user action by default, and the popup blocker\n // will prevent links with target=\"_blank\" from opening. However, it does allow the event if the\n // Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.\n if ((0, $c87311424ea30a05$export$b7d78993b74f766d)() && ((_window_event = window.event) === null || _window_event === void 0 ? void 0 : (_window_event_type = _window_event.type) === null || _window_event_type === void 0 ? void 0 : _window_event_type.startsWith('key')) && target.target === '_blank') {\n if ((0, $c87311424ea30a05$export$9ac100e40613ea10)()) metaKey = true;\n else ctrlKey = true;\n }\n // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n let event = (0, $c87311424ea30a05$export$78551043582a6a98)() && (0, $c87311424ea30a05$export$9ac100e40613ea10)() && !(0, $c87311424ea30a05$export$7bef049ce92e4224)() && process.env.NODE_ENV !== 'test' ? new KeyboardEvent('keydown', {\n keyIdentifier: 'Enter',\n metaKey: metaKey,\n ctrlKey: ctrlKey,\n altKey: altKey,\n shiftKey: shiftKey\n }) : new MouseEvent('click', {\n metaKey: metaKey,\n ctrlKey: ctrlKey,\n altKey: altKey,\n shiftKey: shiftKey,\n bubbles: true,\n cancelable: true\n });\n $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = setOpening;\n (0, $7215afc6de606d6b$export$de79e2c695e052f3)(target);\n target.dispatchEvent(event);\n $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\nfunction $ea8dcbcb9ea1b556$var$getSyntheticLink(target, open) {\n if (target instanceof HTMLAnchorElement) open(target);\n else if (target.hasAttribute('data-href')) {\n let link = document.createElement('a');\n link.href = target.getAttribute('data-href');\n if (target.hasAttribute('data-target')) link.target = target.getAttribute('data-target');\n if (target.hasAttribute('data-rel')) link.rel = target.getAttribute('data-rel');\n if (target.hasAttribute('data-download')) link.download = target.getAttribute('data-download');\n if (target.hasAttribute('data-ping')) link.ping = target.getAttribute('data-ping');\n if (target.hasAttribute('data-referrer-policy')) link.referrerPolicy = target.getAttribute('data-referrer-policy');\n target.appendChild(link);\n open(link);\n target.removeChild(link);\n }\n}\nfunction $ea8dcbcb9ea1b556$var$openSyntheticLink(target, modifiers) {\n $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>$ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers));\n}\nfunction $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6(props) {\n let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n var _props_href;\n const href = router.useHref((_props_href = props.href) !== null && _props_href !== void 0 ? _props_href : '');\n return {\n 'data-href': props.href ? href : undefined,\n 'data-target': props.target,\n 'data-rel': props.rel,\n 'data-download': props.download,\n 'data-ping': props.ping,\n 'data-referrer-policy': props.referrerPolicy\n };\n}\nfunction $ea8dcbcb9ea1b556$export$51437d503373d223(props) {\n return {\n 'data-href': props.href,\n 'data-target': props.target,\n 'data-rel': props.rel,\n 'data-download': props.download,\n 'data-ping': props.ping,\n 'data-referrer-policy': props.referrerPolicy\n };\n}\nfunction $ea8dcbcb9ea1b556$export$7e924b3091a3bd18(props) {\n let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n var _props_href;\n const href = router.useHref((_props_href = props === null || props === void 0 ? void 0 : props.href) !== null && _props_href !== void 0 ? _props_href : '');\n return {\n href: (props === null || props === void 0 ? void 0 : props.href) ? href : undefined,\n target: props === null || props === void 0 ? void 0 : props.target,\n rel: props === null || props === void 0 ? void 0 : props.rel,\n download: props === null || props === void 0 ? void 0 : props.download,\n ping: props === null || props === void 0 ? void 0 : props.ping,\n referrerPolicy: props === null || props === void 0 ? void 0 : props.referrerPolicy\n };\n}\nfunction $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f(e, router, href, routerOptions) {\n // If a custom router is provided, prevent default and forward if this link should client navigate.\n if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.\n !e.isDefaultPrevented() && $ea8dcbcb9ea1b556$export$efa8c9099e530235(e.currentTarget, e) && href) {\n e.preventDefault();\n router.open(e.currentTarget, e, href, routerOptions);\n }\n}\n\n\nexport {$ea8dcbcb9ea1b556$export$323e4fc2fa4753fb as RouterProvider, $ea8dcbcb9ea1b556$export$efa8c9099e530235 as shouldClientNavigate, $ea8dcbcb9ea1b556$export$95185d699e05d4d7 as openLink, $ea8dcbcb9ea1b556$export$9a302a45f65d0572 as useRouter, $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6 as useSyntheticLinkProps, $ea8dcbcb9ea1b556$export$51437d503373d223 as getSyntheticLinkProps, $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 as useLinkProps, $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f as handleLinkClick};\n//# sourceMappingURL=openLink.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet $bbed8b41f857bcc0$var$transitionsByElement = new Map();\n// A list of callbacks to call once there are no transitioning elements.\nlet $bbed8b41f857bcc0$var$transitionCallbacks = new Set();\nfunction $bbed8b41f857bcc0$var$setupGlobalEvents() {\n if (typeof window === 'undefined') return;\n function isTransitionEvent(event) {\n return 'propertyName' in event;\n }\n let onTransitionStart = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Add the transitioning property to the list for this element.\n let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!transitions) {\n transitions = new Set();\n $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);\n // The transitioncancel event must be registered on the element itself, rather than as a global\n // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n e.target.addEventListener('transitioncancel', onTransitionEnd, {\n once: true\n });\n }\n transitions.add(e.propertyName);\n };\n let onTransitionEnd = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Remove property from list of transitioning properties.\n let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!properties) return;\n properties.delete(e.propertyName);\n // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n if (properties.size === 0) {\n e.target.removeEventListener('transitioncancel', onTransitionEnd);\n $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);\n }\n // If no transitioning elements, call all of the queued callbacks.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {\n for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();\n $bbed8b41f857bcc0$var$transitionCallbacks.clear();\n }\n };\n document.body.addEventListener('transitionrun', onTransitionStart);\n document.body.addEventListener('transitionend', onTransitionEnd);\n}\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') $bbed8b41f857bcc0$var$setupGlobalEvents();\n else document.addEventListener('DOMContentLoaded', $bbed8b41f857bcc0$var$setupGlobalEvents);\n}\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */ function $bbed8b41f857bcc0$var$cleanupDetachedElements() {\n for (const [eventTarget] of $bbed8b41f857bcc0$var$transitionsByElement)// Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n // the explicit instanceof check, since it may be different in different contexts.\n if ('isConnected' in eventTarget && !eventTarget.isConnected) $bbed8b41f857bcc0$var$transitionsByElement.delete(eventTarget);\n}\nfunction $bbed8b41f857bcc0$export$24490316f764c430(fn) {\n // Wait one frame to see if an animation starts, e.g. a transition on mount.\n requestAnimationFrame(()=>{\n $bbed8b41f857bcc0$var$cleanupDetachedElements();\n // If no transitions are running, call the function immediately.\n // Otherwise, add it to a list of callbacks to run at the end of the animation.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();\n else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);\n });\n}\n\n\nexport {$bbed8b41f857bcc0$export$24490316f764c430 as runAfterTransition};\n//# sourceMappingURL=runAfterTransition.module.js.map\n","import {useRef as $lPAwt$useRef, useCallback as $lPAwt$useCallback, useEffect as $lPAwt$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $03deb23ff14920c4$export$4eaf04e54aa8eed6() {\n let globalListeners = (0, $lPAwt$useRef)(new Map());\n let addGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n // Make sure we remove the listener after it is called with the `once` option.\n let fn = (options === null || options === void 0 ? void 0 : options.once) ? (...args)=>{\n globalListeners.current.delete(listener);\n listener(...args);\n } : listener;\n globalListeners.current.set(listener, {\n type: type,\n eventTarget: eventTarget,\n fn: fn,\n options: options\n });\n eventTarget.addEventListener(type, fn, options);\n }, []);\n let removeGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n var _globalListeners_current_get;\n let fn = ((_globalListeners_current_get = globalListeners.current.get(listener)) === null || _globalListeners_current_get === void 0 ? void 0 : _globalListeners_current_get.fn) || listener;\n eventTarget.removeEventListener(type, fn, options);\n globalListeners.current.delete(listener);\n }, []);\n let removeAllGlobalListeners = (0, $lPAwt$useCallback)(()=>{\n globalListeners.current.forEach((value, key)=>{\n removeGlobalListener(value.eventTarget, value.type, key, value.options);\n });\n }, [\n removeGlobalListener\n ]);\n (0, $lPAwt$useEffect)(()=>{\n return removeAllGlobalListeners;\n }, [\n removeAllGlobalListeners\n ]);\n return {\n addGlobalListener: addGlobalListener,\n removeGlobalListener: removeGlobalListener,\n removeAllGlobalListeners: removeAllGlobalListeners\n };\n}\n\n\nexport {$03deb23ff14920c4$export$4eaf04e54aa8eed6 as useGlobalListeners};\n//# sourceMappingURL=useGlobalListeners.module.js.map\n","import {useId as $bdb11010cef70236$export$f680877a34711e37} from \"./useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $313b98861ee5dd6c$export$d6875122194c7b44(props, defaultLabel) {\n let { id: id, 'aria-label': label, 'aria-labelledby': labelledBy } = props;\n // If there is both an aria-label and aria-labelledby,\n // combine them by pointing to the element itself.\n id = (0, $bdb11010cef70236$export$f680877a34711e37)(id);\n if (labelledBy && label) {\n let ids = new Set([\n id,\n ...labelledBy.trim().split(/\\s+/)\n ]);\n labelledBy = [\n ...ids\n ].join(' ');\n } else if (labelledBy) labelledBy = labelledBy.trim().split(/\\s+/).join(' ');\n // If no labels are provided, use the default\n if (!label && !labelledBy && defaultLabel) label = defaultLabel;\n return {\n id: id,\n 'aria-label': label,\n 'aria-labelledby': labelledBy\n };\n}\n\n\nexport {$313b98861ee5dd6c$export$d6875122194c7b44 as useLabels};\n//# sourceMappingURL=useLabels.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $e7801be82b4b2a53$export$4debdb1a3f0fa79e(context, ref) {\n (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n if (context && context.ref && ref) {\n context.ref.current = ref.current;\n return ()=>{\n if (context.ref) context.ref.current = null;\n };\n }\n });\n}\n\n\nexport {$e7801be82b4b2a53$export$4debdb1a3f0fa79e as useSyncRef};\n//# sourceMappingURL=useSyncRef.module.js.map\n","import {isAndroid as $c87311424ea30a05$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $6a7db85432448f7f$export$60278871457622de(event) {\n // JAWS/NVDA with Firefox.\n if (event.mozInputSource === 0 && event.isTrusted) return true;\n // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n // to detect TalkBack virtual clicks.\n if ((0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n return event.detail === 0 && !event.pointerType;\n}\nfunction $6a7db85432448f7f$export$29bf1b5f2c56cf63(event) {\n // If the pointer size is zero, then we assume it's from a screen reader.\n // Android TalkBack double tap will sometimes return a event with width and height of 1\n // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n // Talkback double tap from Windows Firefox touch screen press\n return !(0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$6a7db85432448f7f$export$60278871457622de as isVirtualClick, $6a7db85432448f7f$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.module.js.map\n","import {getOwnerWindow as $431fbd86ca7dc216$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $7d2416ea0959daaa$var$supportsCheckVisibility = typeof Element !== 'undefined' && 'checkVisibility' in Element.prototype;\nfunction $7d2416ea0959daaa$var$isStyleVisible(element) {\n const windowObject = (0, $431fbd86ca7dc216$export$f21a1ffae260145a)(element);\n if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;\n let { display: display, visibility: visibility } = element.style;\n let isVisible = display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n if (isVisible) {\n const { getComputedStyle: getComputedStyle } = element.ownerDocument.defaultView;\n let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n isVisible = computedDisplay !== 'none' && computedVisibility !== 'hidden' && computedVisibility !== 'collapse';\n }\n return isVisible;\n}\nfunction $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) {\n return !element.hasAttribute('hidden') && // Ignore HiddenSelect when tree walking.\n !element.hasAttribute('data-react-aria-prevent-focus') && (element.nodeName === 'DETAILS' && childElement && childElement.nodeName !== 'SUMMARY' ? element.hasAttribute('open') : true);\n}\nfunction $7d2416ea0959daaa$export$e989c0fffaa6b27a(element, childElement) {\n if ($7d2416ea0959daaa$var$supportsCheckVisibility) return element.checkVisibility();\n return element.nodeName !== '#comment' && $7d2416ea0959daaa$var$isStyleVisible(element) && $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) && (!element.parentElement || $7d2416ea0959daaa$export$e989c0fffaa6b27a(element.parentElement, element));\n}\n\n\nexport {$7d2416ea0959daaa$export$e989c0fffaa6b27a as isElementVisible};\n//# sourceMappingURL=isElementVisible.module.js.map\n","import {isElementVisible as $7d2416ea0959daaa$export$e989c0fffaa6b27a} from \"./isElementVisible.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $b4b717babfbb907b$var$focusableElements = [\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable^=\"false\"])',\n 'permission'\n];\nconst $b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n$b4b717babfbb907b$var$focusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst $b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\nfunction $b4b717babfbb907b$export$4c063cf1350e6fed(element) {\n return element.matches($b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$export$bebd5a1431fec25d(element) {\n return element.matches($b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$var$isInert(element) {\n let node = element;\n while(node != null){\n if (node instanceof node.ownerDocument.defaultView.HTMLElement && node.inert) return true;\n node = node.parentElement;\n }\n return false;\n}\n\n\nexport {$b4b717babfbb907b$export$4c063cf1350e6fed as isFocusable, $b4b717babfbb907b$export$bebd5a1431fec25d as isTabbable};\n//# sourceMappingURL=isFocusable.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\nfunction $9446cca9a3875146$export$e1a7b8e69ef6c52f(value, step) {\n let roundedValue = value;\n let precision = 0;\n let stepString = step.toString();\n // Handle negative exponents in exponential notation (e.g., \"1e-7\" → precision 8)\n let eIndex = stepString.toLowerCase().indexOf('e-');\n if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;\n else {\n let pointIndex = stepString.indexOf('.');\n if (pointIndex >= 0) precision = stepString.length - pointIndex;\n }\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n roundedValue = Math.round(roundedValue * pow) / pow;\n }\n return roundedValue;\n}\nfunction $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {\n min = Number(min);\n max = Number(max);\n let remainder = (value - (isNaN(min) ? 0 : min)) % step;\n let snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);\n if (!isNaN(min)) {\n if (snappedValue < min) snappedValue = min;\n else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;\n } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f(max / step, step)) * step;\n // correct floating point behavior by rounding to step precision\n snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(snappedValue, step);\n return snappedValue;\n}\nfunction $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {\n const pow = Math.pow(base, digits);\n return Math.round(value * pow) / pow;\n}\n\n\nexport {$9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$e1a7b8e69ef6c52f as roundToStepPrecision, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};\n//# sourceMappingURL=number.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $488c6ddbf4ef74c2$var$formatterCache = new Map();\nlet $488c6ddbf4ef74c2$var$supportsSignDisplay = false;\ntry {\n $488c6ddbf4ef74c2$var$supportsSignDisplay = new Intl.NumberFormat('de-DE', {\n signDisplay: 'exceptZero'\n }).resolvedOptions().signDisplay === 'exceptZero';\n// eslint-disable-next-line no-empty\n} catch {}\nlet $488c6ddbf4ef74c2$var$supportsUnit = false;\ntry {\n $488c6ddbf4ef74c2$var$supportsUnit = new Intl.NumberFormat('de-DE', {\n style: 'unit',\n unit: 'degree'\n }).resolvedOptions().style === 'unit';\n// eslint-disable-next-line no-empty\n} catch {}\n// Polyfill for units since Safari doesn't support them yet. See https://bugs.webkit.org/show_bug.cgi?id=215438.\n// Currently only polyfilling the unit degree in narrow format for ColorSlider in our supported locales.\n// Values were determined by switching to each locale manually in Chrome.\nconst $488c6ddbf4ef74c2$var$UNITS = {\n degree: {\n narrow: {\n default: \"\\xb0\",\n 'ja-JP': \" \\u5EA6\",\n 'zh-TW': \"\\u5EA6\",\n 'sl-SI': \" \\xb0\"\n }\n }\n};\nclass $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5 {\n /** Formats a number value as a string, according to the locale and options provided to the constructor. */ format(value) {\n let res = '';\n if (!$488c6ddbf4ef74c2$var$supportsSignDisplay && this.options.signDisplay != null) res = $488c6ddbf4ef74c2$export$711b50b3c525e0f2(this.numberFormatter, this.options.signDisplay, value);\n else res = this.numberFormatter.format(value);\n if (this.options.style === 'unit' && !$488c6ddbf4ef74c2$var$supportsUnit) {\n var _UNITS_unit;\n let { unit: unit, unitDisplay: unitDisplay = 'short', locale: locale } = this.resolvedOptions();\n if (!unit) return res;\n let values = (_UNITS_unit = $488c6ddbf4ef74c2$var$UNITS[unit]) === null || _UNITS_unit === void 0 ? void 0 : _UNITS_unit[unitDisplay];\n res += values[locale] || values.default;\n }\n return res;\n }\n /** Formats a number to an array of parts such as separators, digits, punctuation, and more. */ formatToParts(value) {\n // TODO: implement signDisplay for formatToParts\n return this.numberFormatter.formatToParts(value);\n }\n /** Formats a number range as a string. */ formatRange(start, end) {\n if (typeof this.numberFormatter.formatRange === 'function') return this.numberFormatter.formatRange(start, end);\n if (end < start) throw new RangeError('End date must be >= start date');\n // Very basic fallback for old browsers.\n return `${this.format(start)} \\u{2013} ${this.format(end)}`;\n }\n /** Formats a number range as an array of parts. */ formatRangeToParts(start, end) {\n if (typeof this.numberFormatter.formatRangeToParts === 'function') return this.numberFormatter.formatRangeToParts(start, end);\n if (end < start) throw new RangeError('End date must be >= start date');\n let startParts = this.numberFormatter.formatToParts(start);\n let endParts = this.numberFormatter.formatToParts(end);\n return [\n ...startParts.map((p)=>({\n ...p,\n source: 'startRange'\n })),\n {\n type: 'literal',\n value: \" \\u2013 \",\n source: 'shared'\n },\n ...endParts.map((p)=>({\n ...p,\n source: 'endRange'\n }))\n ];\n }\n /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() {\n let options = this.numberFormatter.resolvedOptions();\n if (!$488c6ddbf4ef74c2$var$supportsSignDisplay && this.options.signDisplay != null) options = {\n ...options,\n signDisplay: this.options.signDisplay\n };\n if (!$488c6ddbf4ef74c2$var$supportsUnit && this.options.style === 'unit') options = {\n ...options,\n style: 'unit',\n unit: this.options.unit,\n unitDisplay: this.options.unitDisplay\n };\n return options;\n }\n constructor(locale, options = {}){\n this.numberFormatter = $488c6ddbf4ef74c2$var$getCachedNumberFormatter(locale, options);\n this.options = options;\n }\n}\nfunction $488c6ddbf4ef74c2$var$getCachedNumberFormatter(locale, options = {}) {\n let { numberingSystem: numberingSystem } = options;\n if (numberingSystem && locale.includes('-nu-')) {\n if (!locale.includes('-u-')) locale += '-u-';\n locale += `-nu-${numberingSystem}`;\n }\n if (options.style === 'unit' && !$488c6ddbf4ef74c2$var$supportsUnit) {\n var _UNITS_unit;\n let { unit: unit, unitDisplay: unitDisplay = 'short' } = options;\n if (!unit) throw new Error('unit option must be provided with style: \"unit\"');\n if (!((_UNITS_unit = $488c6ddbf4ef74c2$var$UNITS[unit]) === null || _UNITS_unit === void 0 ? void 0 : _UNITS_unit[unitDisplay])) throw new Error(`Unsupported unit ${unit} with unitDisplay = ${unitDisplay}`);\n options = {\n ...options,\n style: 'decimal'\n };\n }\n let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n if ($488c6ddbf4ef74c2$var$formatterCache.has(cacheKey)) return $488c6ddbf4ef74c2$var$formatterCache.get(cacheKey);\n let numberFormatter = new Intl.NumberFormat(locale, options);\n $488c6ddbf4ef74c2$var$formatterCache.set(cacheKey, numberFormatter);\n return numberFormatter;\n}\nfunction $488c6ddbf4ef74c2$export$711b50b3c525e0f2(numberFormat, signDisplay, num) {\n if (signDisplay === 'auto') return numberFormat.format(num);\n else if (signDisplay === 'never') return numberFormat.format(Math.abs(num));\n else {\n let needsPositiveSign = false;\n if (signDisplay === 'always') needsPositiveSign = num > 0 || Object.is(num, 0);\n else if (signDisplay === 'exceptZero') {\n if (Object.is(num, -0) || Object.is(num, 0)) num = Math.abs(num);\n else needsPositiveSign = num > 0;\n }\n if (needsPositiveSign) {\n let negative = numberFormat.format(-num);\n let noSign = numberFormat.format(num);\n // ignore RTL/LTR marker character\n let minus = negative.replace(noSign, '').replace(/\\u200e|\\u061C/, '');\n if ([\n ...minus\n ].length !== 1) console.warn('@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case');\n let positive = negative.replace(noSign, '!!!').replace(minus, '+').replace('!!!', noSign);\n return positive;\n } else return numberFormat.format(num);\n }\n}\n\n\nexport {$488c6ddbf4ef74c2$export$cc77c4ff7e8673c5 as NumberFormatter, $488c6ddbf4ef74c2$export$711b50b3c525e0f2 as numberFormatSignDisplayPolyfill};\n//# sourceMappingURL=NumberFormatter.module.js.map\n","import {useLocale as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7} from \"./context.mjs\";\nimport {NumberFormatter as $JFEdn$NumberFormatter} from \"@internationalized/number\";\nimport {useMemo as $JFEdn$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $a916eb452884faea$export$b7a616150fdb9f44(options = {}) {\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n return (0, $JFEdn$useMemo)(()=>new (0, $JFEdn$NumberFormatter)(locale, options), [\n locale,\n options\n ]);\n}\n\n\nexport {$a916eb452884faea$export$b7a616150fdb9f44 as useNumberFormatter};\n//# sourceMappingURL=useNumberFormatter.module.js.map\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","\"use client\";\nimport { 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","const isBrowser = typeof window !== \"undefined\";\n\nexport { isBrowser };\n","\"use client\";\nimport { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = \n/* @__PURE__ */ createContext(null);\n\nexport { PresenceContext };\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","const clamp = (min, max, v) => {\n if (v > max)\n return max;\n if (v < min)\n return min;\n return v;\n};\n\nexport { clamp };\n","function formatErrorMessage(message, errorCode) {\n return errorCode\n ? `${message}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${errorCode}`\n : message;\n}\n\nexport { formatErrorMessage };\n","import { formatErrorMessage } from './format-error-message.mjs';\n\nlet warning = () => { };\nlet invariant = () => { };\nif (process.env.NODE_ENV !== \"production\") {\n warning = (check, message, errorCode) => {\n if (!check && typeof console !== \"undefined\") {\n console.warn(formatErrorMessage(message, errorCode));\n }\n };\n invariant = (check, message, errorCode) => {\n if (!check) {\n throw new Error(formatErrorMessage(message, errorCode));\n }\n };\n}\n\nexport { invariant, warning };\n","const MotionGlobalConfig = {};\n\nexport { MotionGlobalConfig };\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n","function isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\n\nexport { isObject };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\nexport { memo };\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\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 Progress within given range\n\n Given a lower limit and an upper limit, we return the progress\n (expressed as a number 0-1) represented by the given value, and\n limit that progress to within 0-1.\n\n @param [number]: Lower limit\n @param [number]: Upper limit\n @param [number]: Value to find progress within given range\n @return [number]: Progress of value within range as expressed 0-1\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","import { 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 * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","/*\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 { formatErrorMessage } from './format-error-message.mjs';\n\nconst warned = new Set();\nfunction hasWarned(message) {\n return warned.has(message);\n}\nfunction warnOnce(condition, message, errorCode) {\n if (condition || warned.has(message))\n return;\n console.warn(formatErrorMessage(message, errorCode));\n warned.add(message);\n}\n\nexport { hasWarned, warnOnce };\n","import { noop } from '../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 noticeably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noop;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","const isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","import { invariant } from '../../errors.mjs';\nimport { noop } from '../../noop.mjs';\nimport { anticipate } from '../anticipate.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\nimport { isBezierDefinition } from './is-bezier-definition.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 isValidEasing = (easing) => {\n return typeof easing === \"string\";\n};\nconst easingDefinitionToFunction = (definition) => {\n if (isBezierDefinition(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`, \"cubic-bezier-length\");\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (isValidEasing(definition)) {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`, \"invalid-easing-type\");\n return easingLookup[definition];\n }\n return definition;\n};\n\nexport { easingDefinitionToFunction };\n","const stepsOrder = [\n \"setup\", // Compute\n \"read\", // Read\n \"resolveKeyframes\", // Write/Read/Write/Read\n \"preUpdate\", // Compute\n \"update\", // Compute\n \"preRender\", // Compute\n \"render\", // Write\n \"postRender\", // Compute\n];\n\nexport { stepsOrder };\n","import { statsBuffer } from '../stats/buffer.mjs';\n\nfunction createRenderStep(runNextFrame, stepName) {\n /**\n * We create and reuse two queues, one to queue jobs for the current frame\n * and one for the next. We reuse to avoid triggering GC after x frames.\n */\n let thisFrame = new Set();\n let nextFrame = new Set();\n /**\n * Track whether we're currently processing jobs in this step. This way\n * we can decide whether to schedule new jobs for this frame or next.\n */\n let isProcessing = false;\n let flushNextFrame = false;\n /**\n * A set of processes which were marked keepAlive when scheduled.\n */\n const toKeepAlive = new WeakSet();\n let latestFrameData = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n let numCalls = 0;\n function triggerCallback(callback) {\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n numCalls++;\n callback(latestFrameData);\n }\n const step = {\n /**\n * Schedule a process to run on the next frame.\n */\n schedule: (callback, keepAlive = false, immediate = false) => {\n const addToCurrentFrame = immediate && isProcessing;\n const queue = addToCurrentFrame ? thisFrame : nextFrame;\n if (keepAlive)\n toKeepAlive.add(callback);\n if (!queue.has(callback))\n queue.add(callback);\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.delete(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (frameData) => {\n latestFrameData = frameData;\n /**\n * If we're already processing we've probably been triggered by a flushSync\n * inside an existing process. Instead of executing, mark flushNextFrame\n * as true and ensure we flush the following frame at the end of this one.\n */\n if (isProcessing) {\n flushNextFrame = true;\n return;\n }\n isProcessing = true;\n [thisFrame, nextFrame] = [nextFrame, thisFrame];\n // Execute this frame\n thisFrame.forEach(triggerCallback);\n /**\n * If we're recording stats then\n */\n if (stepName && statsBuffer.value) {\n statsBuffer.value.frameloop[stepName].push(numCalls);\n }\n numCalls = 0;\n // Clear the frame so no callbacks remain. This is to avoid\n // memory leaks should this render step not run for a while.\n thisFrame.clear();\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { stepsOrder } from './order.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n const flagRunNextFrame = () => (runNextFrame = true);\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(flagRunNextFrame, allowKeepAlive ? key : undefined);\n return acc;\n }, {});\n const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } = steps;\n const processBatch = () => {\n const timestamp = MotionGlobalConfig.useManualTiming\n ? state.timestamp\n : performance.now();\n runNextFrame = false;\n if (!MotionGlobalConfig.useManualTiming) {\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n }\n state.timestamp = timestamp;\n state.isProcessing = true;\n // Unrolled render loop for better per-frame performance\n setup.process(state);\n read.process(state);\n resolveKeyframes.process(state);\n preUpdate.process(state);\n update.process(state);\n preRender.process(state);\n render.process(state);\n postRender.process(state);\n state.isProcessing = false;\n if (runNextFrame && allowKeepAlive) {\n useDefaultElapsed = false;\n scheduleNextBatch(processBatch);\n }\n };\n const wake = () => {\n runNextFrame = true;\n useDefaultElapsed = true;\n if (!state.isProcessing) {\n scheduleNextBatch(processBatch);\n }\n };\n const schedule = stepsOrder.reduce((acc, key) => {\n const step = steps[key];\n acc[key] = (process, keepAlive = false, immediate = false) => {\n if (!runNextFrame)\n wake();\n return step.schedule(process, keepAlive, immediate);\n };\n return acc;\n }, {});\n const cancel = (process) => {\n for (let i = 0; i < stepsOrder.length; i++) {\n steps[stepsOrder[i]].cancel(process);\n }\n };\n return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher };\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = /* @__PURE__ */ createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n now: () => {\n if (now === undefined) {\n time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n ? frameData.timestamp\n : performance.now());\n }\n return now;\n },\n set: (newTime) => {\n now = newTime;\n queueMicrotask(clearTime);\n },\n};\n\nexport { time };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n const startsWithToken = startsAsVariableToken(value);\n if (!startsWithToken)\n return false;\n // Ensure any comments are stripped from the value as this can harm performance of the regex.\n return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n\nexport { isCSSVariableName, isCSSVariableToken };\n","import { clamp } from 'motion-utils';\n\nconst number = {\n test: (v) => typeof v === \"number\",\n parse: parseFloat,\n transform: (v) => v,\n};\nconst alpha = {\n ...number,\n transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n ...number,\n default: 1,\n};\n\nexport { alpha, number, scale };\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n","function isNullish(v) {\n return v == null;\n}\n\nexport { isNullish };\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n return Boolean((typeof v === \"string\" &&\n singleColorRegex.test(v) &&\n v.startsWith(type)) ||\n (testProp &&\n !isNullish(v) &&\n Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (typeof v !== \"string\")\n return v;\n const [a, b, c, alpha] = v.match(floatRegex);\n return {\n [aName]: parseFloat(a),\n [bName]: parseFloat(b),\n [cName]: parseFloat(c),\n alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n };\n};\n\nexport { isColorString, splitColor };\n","import { clamp } from 'motion-utils';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n ...number,\n transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n rgbUnit.transform(red) +\n \", \" +\n rgbUnit.transform(green) +\n \", \" +\n rgbUnit.transform(blue) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\",\n};\n\nexport { rgbUnit, rgba };\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n let r = \"\";\n let g = \"\";\n let b = \"\";\n let a = \"\";\n // If we have 6 characters, ie #FF0000\n if (v.length > 5) {\n r = v.substring(1, 3);\n g = v.substring(3, 5);\n b = v.substring(5, 7);\n a = v.substring(7, 9);\n // Or we have 3 characters, ie #F00\n }\n else {\n r = v.substring(1, 2);\n g = v.substring(2, 3);\n b = v.substring(3, 4);\n a = v.substring(4, 5);\n r += r;\n g += g;\n b += b;\n a += a;\n }\n return {\n red: parseInt(r, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: a ? parseInt(a, 16) / 255 : 1,\n };\n}\nconst hex = {\n test: /*@__PURE__*/ isColorString(\"#\"),\n parse: parseHex,\n transform: rgba.transform,\n};\n\nexport { hex };\n","/*#__NO_SIDE_EFFECTS__*/\nconst createUnitType = (unit) => ({\n test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = /*@__PURE__*/ (() => ({\n ...percent,\n parse: (v) => percent.parse(v) / 100,\n transform: (v) => percent.transform(v * 100),\n}))();\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n return (\"hsla(\" +\n Math.round(hue) +\n \", \" +\n percent.transform(sanitize(saturation)) +\n \", \" +\n percent.transform(sanitize(lightness)) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\");\n },\n};\n\nexport { hsla };\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n parse: (v) => {\n if (rgba.test(v)) {\n return rgba.parse(v);\n }\n else if (hsla.test(v)) {\n return hsla.parse(v);\n }\n else {\n return hex.parse(v);\n }\n },\n transform: (v) => {\n return typeof v === \"string\"\n ? v\n : v.hasOwnProperty(\"red\")\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n getAnimatableNone: (v) => {\n const parsed = color.parse(v);\n parsed.alpha = 0;\n return color.transform(parsed);\n },\n};\n\nexport { color };\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\nfunction test(v) {\n return (isNaN(v) &&\n typeof v === \"string\" &&\n (v.match(floatRegex)?.length || 0) +\n (v.match(colorRegex)?.length || 0) >\n 0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const values = [];\n const indexes = {\n color: [],\n number: [],\n var: [],\n };\n const types = [];\n let i = 0;\n const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n if (color.test(parsedValue)) {\n indexes.color.push(i);\n types.push(COLOR_TOKEN);\n values.push(color.parse(parsedValue));\n }\n else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n indexes.var.push(i);\n types.push(VAR_TOKEN);\n values.push(parsedValue);\n }\n else {\n indexes.number.push(i);\n types.push(NUMBER_TOKEN);\n values.push(parseFloat(parsedValue));\n }\n ++i;\n return SPLIT_TOKEN;\n });\n const split = tokenised.split(SPLIT_TOKEN);\n return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n const { split, types } = analyseComplexValue(source);\n const numSections = split.length;\n return (v) => {\n let output = \"\";\n for (let i = 0; i < numSections; i++) {\n output += split[i];\n if (v[i] !== undefined) {\n const type = types[i];\n if (type === NUMBER_TOKEN) {\n output += sanitize(v[i]);\n }\n else if (type === COLOR_TOKEN) {\n output += color.transform(v[i]);\n }\n else {\n output += v[i];\n }\n }\n }\n return output;\n };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;\nfunction getAnimatableNone(v) {\n const parsed = parseComplexValue(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n hue /= 360;\n saturation /= 100;\n lightness /= 100;\n let red = 0;\n let green = 0;\n let blue = 0;\n if (!saturation) {\n red = green = blue = lightness;\n }\n else {\n const q = lightness < 0.5\n ? lightness * (1 + saturation)\n : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n red = hueToRgb(p, q, hue + 1 / 3);\n green = hueToRgb(p, q, hue);\n blue = hueToRgb(p, q, hue - 1 / 3);\n }\n return {\n red: Math.round(red * 255),\n green: Math.round(green * 255),\n blue: Math.round(blue * 255),\n alpha,\n };\n}\n\nexport { hslaToRgba };\n","function mixImmediate(a, b) {\n return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n","/*\n Value in range from progress\n\n Given a lower limit and an upper limit, we return the value within\n that range as expressed by progress (usually a number from 0 to 1)\n\n So progress = 0.5 would change\n\n from -------- to\n\n to\n\n from ---- to\n\n E.g. from = 10, to = 20, progress = 0.5 => 15\n\n @param [number]: Lower limit of range\n @param [number]: Upper limit of range\n @param [number]: The progress between lower and upper limits expressed 0-1\n @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n","import { warning } from 'motion-utils';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { hslaToRgba } from '../../value/types/color/hsla-to-rgba.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber } from './number.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n const fromExpo = from * from;\n const expo = v * (to * to - fromExpo) + fromExpo;\n return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`, \"color-not-animatable\");\n if (!Boolean(type))\n return false;\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Motion's stricter typing\n model = hslaToRgba(model);\n }\n return model;\n}\nconst mixColor = (from, to) => {\n const fromRGBA = asRGBA(from);\n const toRGBA = asRGBA(to);\n if (!fromRGBA || !toRGBA) {\n return mixImmediate(from, to);\n }\n const blended = { ...fromRGBA };\n return (v) => {\n blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n if (invisibleValues.has(origin)) {\n return (p) => (p <= 0 ? origin : target);\n }\n else {\n return (p) => (p >= 1 ? target : origin);\n }\n}\n\nexport { invisibleValues, mixVisibility };\n","import { pipe, warning } from 'motion-utils';\nimport { isCSSVariableToken } from '../../animation/utils/is-css-variable.mjs';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { mixColor } from './color.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber as mixNumber$1 } from './number.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\n\nfunction mixNumber(a, b) {\n return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n if (typeof a === \"number\") {\n return mixNumber;\n }\n else if (typeof a === \"string\") {\n return isCSSVariableToken(a)\n ? mixImmediate\n : color.test(a)\n ? mixColor\n : mixComplex;\n }\n else if (Array.isArray(a)) {\n return mixArray;\n }\n else if (typeof a === \"object\") {\n return color.test(a) ? mixColor : mixObject;\n }\n return mixImmediate;\n}\nfunction mixArray(a, b) {\n const output = [...a];\n const numValues = output.length;\n const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n return (p) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](p);\n }\n return output;\n };\n}\nfunction mixObject(a, b) {\n const output = { ...a, ...b };\n const blendValue = {};\n for (const key in output) {\n if (a[key] !== undefined && b[key] !== undefined) {\n blendValue[key] = getMixer(a[key])(a[key], b[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\n}\nfunction matchOrder(origin, target) {\n const orderedOrigin = [];\n const pointers = { color: 0, var: 0, number: 0 };\n for (let i = 0; i < target.values.length; i++) {\n const type = target.types[i];\n const originIndex = origin.indexes[type][pointers[type]];\n const originValue = origin.values[originIndex] ?? 0;\n orderedOrigin[i] = originValue;\n pointers[type]++;\n }\n return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n const template = complex.createTransformer(target);\n const originStats = analyseComplexValue(origin);\n const targetStats = analyseComplexValue(target);\n const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n originStats.indexes.color.length === targetStats.indexes.color.length &&\n originStats.indexes.number.length >= targetStats.indexes.number.length;\n if (canInterpolate) {\n if ((invisibleValues.has(origin) &&\n !targetStats.values.length) ||\n (invisibleValues.has(target) &&\n !originStats.values.length)) {\n return mixVisibility(origin, target);\n }\n return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n }\n else {\n warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`, \"complex-values-different\");\n return mixImmediate(origin, target);\n }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n if (typeof from === \"number\" &&\n typeof to === \"number\" &&\n typeof p === \"number\") {\n return mixNumber(from, to, p);\n }\n const mixer = getMixer(from);\n return mixer(from, to);\n}\n\nexport { mix };\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: (keepAlive = true) => frame.update(passTimestamp, keepAlive),\n stop: () => cancelFrame(passTimestamp),\n /**\n * If we're processing this frame we can use the\n * framelocked timestamp to keep things in sync.\n */\n now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n };\n};\n\nexport { frameloopDriver };\n","const generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n let points = \"\";\n const numPoints = Math.max(Math.round(duration / resolution), 2);\n for (let i = 0; i < numPoints; i++) {\n points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + \", \";\n }\n return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n let duration = 0;\n const timeStep = 50;\n let state = generator.next(duration);\n while (!state.done && duration < maxGeneratorDuration) {\n duration += timeStep;\n state = generator.next(duration);\n }\n return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n","import { millisecondsToSeconds } from 'motion-utils';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './calc-duration.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100, createGenerator) {\n const generator = createGenerator({ ...options, keyframes: [0, scale] });\n const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n return {\n type: \"keyframes\",\n ease: (progress) => {\n return generator.next(duration * progress).value / scale;\n },\n duration: millisecondsToSeconds(duration),\n };\n}\n\nexport { createGeneratorEasing };\n","import { velocityPerSecond } from 'motion-utils';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","const springDefaults = {\n // Default spring physics\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n velocity: 0.0,\n // Default duration/bounce-based options\n duration: 800, // in ms\n bounce: 0.3,\n visualDuration: 0.3, // in seconds\n // Rest thresholds\n restSpeed: {\n granular: 0.01,\n default: 2,\n },\n restDelta: {\n granular: 0.005,\n default: 0.5,\n },\n // Limits\n minDuration: 0.01, // in seconds\n maxDuration: 10.0, // in seconds\n minDamping: 0.05,\n maxDamping: 1,\n};\n\nexport { springDefaults };\n","import { warning, secondsToMilliseconds, clamp, millisecondsToSeconds } from 'motion-utils';\nimport { springDefaults } from './defaults.mjs';\n\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\", \"spring-duration-limit\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n if (dampingRatio < 1) {\n /**\n * Underdamped spring\n */\n envelope = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const a = exponentialDecay - velocity;\n const b = calcAngularFreq(undampedFreq, dampingRatio);\n const c = Math.exp(-delta);\n return safeMin - (a / b) * c;\n };\n derivative = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const d = delta * velocity + velocity;\n const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n const f = Math.exp(-delta);\n const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n return (factor * ((d - e) * f)) / g;\n };\n }\n else {\n /**\n * Critically-damped spring\n */\n envelope = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (undampedFreq - velocity) * duration + 1;\n return -safeMin + a * b;\n };\n derivative = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (velocity - undampedFreq) * (duration * duration);\n return a * b;\n };\n }\n const initialGuess = 5 / duration;\n const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n duration = secondsToMilliseconds(duration);\n if (isNaN(undampedFreq)) {\n return {\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n duration,\n };\n }\n else {\n const stiffness = Math.pow(undampedFreq, 2) * mass;\n return {\n stiffness,\n damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n duration,\n };\n }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n let result = initialGuess;\n for (let i = 1; i < rootIterations; i++) {\n result = result - envelope(result) / derivative(result);\n }\n return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring };\n","import { millisecondsToSeconds, secondsToMilliseconds, clamp } from 'motion-utils';\nimport { generateLinearEasing } from '../../waapi/utils/linear.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from '../utils/calc-duration.mjs';\nimport { createGeneratorEasing } from '../utils/create-generator-easing.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { springDefaults } from './defaults.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n let springOptions = {\n velocity: springDefaults.velocity,\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n mass: springDefaults.mass,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n if (options.visualDuration) {\n const visualDuration = options.visualDuration;\n const root = (2 * Math.PI) / (visualDuration * 1.2);\n const stiffness = root * root;\n const damping = 2 *\n clamp(0.05, 1, 1 - (options.bounce || 0)) *\n Math.sqrt(stiffness);\n springOptions = {\n ...springOptions,\n mass: springDefaults.mass,\n stiffness,\n damping,\n };\n }\n else {\n const derived = findSpring(options);\n springOptions = {\n ...springOptions,\n ...derived,\n mass: springDefaults.mass,\n };\n springOptions.isResolvedFromDuration = true;\n }\n }\n return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n const options = typeof optionsOrVisualDuration !== \"object\"\n ? {\n visualDuration: optionsOrVisualDuration,\n keyframes: [0, 1],\n bounce,\n }\n : optionsOrVisualDuration;\n let { restSpeed, restDelta } = options;\n const origin = options.keyframes[0];\n const target = options.keyframes[options.keyframes.length - 1];\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = { done: false, value: origin };\n const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n ...options,\n velocity: -millisecondsToSeconds(options.velocity || 0),\n });\n const initialVelocity = velocity || 0.0;\n const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n const initialDelta = target - origin;\n const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n /**\n * If we're working on a granular scale, use smaller defaults for determining\n * when the spring is finished.\n *\n * These defaults have been selected emprically based on what strikes a good\n * ratio between feeling good and finishing as soon as changes are imperceptible.\n */\n const isGranularScale = Math.abs(initialDelta) < 5;\n restSpeed || (restSpeed = isGranularScale\n ? springDefaults.restSpeed.granular\n : springDefaults.restSpeed.default);\n restDelta || (restDelta = isGranularScale\n ? springDefaults.restDelta.granular\n : springDefaults.restDelta.default);\n let resolveSpring;\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * Math.cos(angularFreq * t)));\n };\n }\n else if (dampingRatio === 1) {\n // Critically damped spring\n resolveSpring = (t) => target -\n Math.exp(-undampedAngularFreq * t) *\n (initialDelta +\n (initialVelocity + undampedAngularFreq * initialDelta) * t);\n }\n else {\n // Overdamped spring\n const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n // When performing sinh or cosh values can hit Infinity so we cap them here\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return (target -\n (envelope *\n ((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) *\n Math.sinh(freqForT) +\n dampedAngularFreq *\n initialDelta *\n Math.cosh(freqForT))) /\n dampedAngularFreq);\n };\n }\n const generator = {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n let currentVelocity = t === 0 ? initialVelocity : 0.0;\n /**\n * We only need to calculate velocity for under-damped springs\n * as over- and critically-damped springs can't overshoot, so\n * checking only for displacement is enough.\n */\n if (dampingRatio < 1) {\n currentVelocity =\n t === 0\n ? secondsToMilliseconds(initialVelocity)\n : calcGeneratorVelocity(resolveSpring, t, current);\n }\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n toString: () => {\n const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n return calculatedDuration + \"ms \" + easing;\n },\n toTransition: () => { },\n };\n return generator;\n}\nspring.applyToOptions = (options) => {\n const generatorOptions = createGeneratorEasing(options, 100, spring);\n options.ease = generatorOptions.ease;\n options.duration = secondsToMilliseconds(generatorOptions.duration);\n options.type = \"keyframes\";\n return options;\n};\n\nexport { spring };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n const origin = keyframes[0];\n const state = {\n done: false,\n value: origin,\n };\n const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n const nearestBoundary = (v) => {\n if (min === undefined)\n return max;\n if (max === undefined)\n return min;\n return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n };\n let amplitude = power * velocity;\n const ideal = origin + amplitude;\n const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n /**\n * If the target has changed we need to re-calculate the amplitude, otherwise\n * the animation will start from the wrong position.\n */\n if (target !== ideal)\n amplitude = target - origin;\n const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n const calcLatest = (t) => target + calcDelta(t);\n const applyFriction = (t) => {\n const delta = calcDelta(t);\n const latest = calcLatest(t);\n state.done = Math.abs(delta) <= restDelta;\n state.value = state.done ? target : latest;\n };\n /**\n * Ideally this would resolve for t in a stateless way, we could\n * do that by always precalculating the animation but as we know\n * this will be done anyway we can assume that spring will\n * be discovered during that.\n */\n let timeReachedBoundary;\n let spring$1;\n const checkCatchBoundary = (t) => {\n if (!isOutOfBounds(state.value))\n return;\n timeReachedBoundary = t;\n spring$1 = spring({\n keyframes: [state.value, nearestBoundary(state.value)],\n velocity: calcGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n damping: bounceDamping,\n stiffness: bounceStiffness,\n restDelta,\n restSpeed,\n });\n };\n checkCatchBoundary(0);\n return {\n calculatedDuration: null,\n next: (t) => {\n /**\n * We need to resolve the friction to figure out if we need a\n * spring but we don't want to do this twice per frame. So here\n * we flag if we updated for this frame and later if we did\n * we can skip doing it again.\n */\n let hasUpdatedFrame = false;\n if (!spring$1 && timeReachedBoundary === undefined) {\n hasUpdatedFrame = true;\n applyFriction(t);\n checkCatchBoundary(t);\n }\n /**\n * If we have a spring and the provided t is beyond the moment the friction\n * animation crossed the min/max boundary, use the spring.\n */\n if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n return spring$1.next(t - timeReachedBoundary);\n }\n else {\n !hasUpdatedFrame && applyFriction(t);\n return state;\n }\n },\n };\n}\n\nexport { inertia };\n","import { invariant, clamp, MotionGlobalConfig, noop, pipe, progress } from 'motion-utils';\nimport { mix } from './mix/index.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || MotionGlobalConfig.mix || mix;\n const numMixers = output.length - 1;\n for (let i = 0; i < numMixers; i++) {\n let mixer = mixerFactory(output[i], output[i + 1]);\n if (ease) {\n const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n mixer = pipe(easingFunction, mixer);\n }\n mixers.push(mixer);\n }\n return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n * - Numbers\n * - Colors (hex, hsl, hsla, rgb, rgba)\n * - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revisit 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\", \"range-length\");\n /**\n * If we're only provided a single input, we can just make a function\n * that returns the output.\n */\n if (inputLength === 1)\n return () => output[0];\n if (inputLength === 2 && output[0] === output[1])\n return () => output[1];\n const isZeroDeltaRange = input[0] === input[1];\n // If input runs highest -> lowest, reverse both arrays\n if (input[0] > input[inputLength - 1]) {\n input = [...input].reverse();\n output = [...output].reverse();\n }\n const mixers = createMixers(output, ease, mixer);\n const numMixers = mixers.length;\n const interpolator = (v) => {\n if (isZeroDeltaRange && v < input[0])\n return output[0];\n let i = 0;\n if (numMixers > 1) {\n for (; i < input.length - 2; i++) {\n if (v < input[i + 1])\n break;\n }\n }\n const progressInRange = progress(input[i], input[i + 1], v);\n return mixers[i](progressInRange);\n };\n return isClamp\n ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n : interpolator;\n}\n\nexport { interpolate };\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mixNumber(min, 1, offsetProgress));\n }\n}\n\nexport { fillOffset };\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n const offset = [0];\n fillOffset(offset, arr.length - 1);\n return offset;\n}\n\nexport { defaultOffset };\n","function convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { easeInOut, isEasingArray, easingDefinitionToFunction } from 'motion-utils';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../keyframes/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../keyframes/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n /**\n * Easing functions can be externally defined as strings. Here we convert them\n * into actual functions.\n */\n const easingFunctions = isEasingArray(ease)\n ? ease.map(easingDefinitionToFunction)\n : easingDefinitionToFunction(ease);\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = {\n done: false,\n value: keyframeValues[0],\n };\n /**\n * Create a times array based on the provided 0-1 offsets\n */\n const absoluteTimes = convertOffsetToTimes(\n // Only use the provided offsets if they're the correct length\n // TODO Maybe we should warn here if there's a length mismatch\n times && times.length === keyframeValues.length\n ? times\n : defaultOffset(keyframeValues), duration);\n const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n ease: Array.isArray(easingFunctions)\n ? easingFunctions\n : defaultEasing(keyframeValues, easingFunctions),\n });\n return {\n calculatedDuration: duration,\n next: (t) => {\n state.value = mapTimeToKeyframe(t);\n state.done = t >= duration;\n return state;\n },\n };\n}\n\nexport { defaultEasing, keyframes };\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe, speed = 1) {\n const resolvedKeyframes = keyframes.filter(isNotNull);\n const useFirstKeyframe = speed < 0 || (repeat && repeatType !== \"loop\" && repeat % 2 === 1);\n const index = useFirstKeyframe ? 0 : resolvedKeyframes.length - 1;\n return !index || finalKeyframe === undefined\n ? resolvedKeyframes[index]\n : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n","import { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring/index.mjs';\n\nconst transitionTypeMap = {\n decay: inertia,\n inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring,\n};\nfunction replaceTransitionType(transition) {\n if (typeof transition.type === \"string\") {\n transition.type = transitionTypeMap[transition.type];\n }\n}\n\nexport { replaceTransitionType };\n","class WithPromise {\n constructor() {\n this.updateFinished();\n }\n get finished() {\n return this._finished;\n }\n updateFinished() {\n this._finished = new Promise((resolve) => {\n this.resolve = resolve;\n });\n }\n notifyFinished() {\n this.resolve();\n }\n /**\n * Allows the animation to be awaited.\n *\n * @deprecated Use `finished` instead.\n */\n then(onResolve, onReject) {\n return this.finished.then(onResolve, onReject);\n }\n}\n\nexport { WithPromise };\n","import { invariant, pipe, clamp, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { activeAnimations } from '../stats/animation-count.mjs';\nimport { mix } from '../utils/mix/index.mjs';\nimport { frameloopDriver } from './drivers/frame.mjs';\nimport { inertia } from './generators/inertia.mjs';\nimport { keyframes } from './generators/keyframes.mjs';\nimport { calcGeneratorDuration } from './generators/utils/calc-duration.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\n\nconst percentToProgress = (percent) => percent / 100;\nclass JSAnimation extends WithPromise {\n constructor(options) {\n super();\n this.state = \"idle\";\n this.startTime = null;\n this.isStopped = false;\n /**\n * The current time of the animation.\n */\n this.currentTime = 0;\n /**\n * The time at which the animation was paused.\n */\n this.holdTime = null;\n /**\n * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n */\n this.playbackSpeed = 1;\n /**\n * This method is bound to the instance to fix a pattern where\n * animation.stop is returned as a reference from a useEffect.\n */\n this.stop = () => {\n const { motionValue } = this.options;\n if (motionValue && motionValue.updatedAt !== time.now()) {\n this.tick(time.now());\n }\n this.isStopped = true;\n if (this.state === \"idle\")\n return;\n this.teardown();\n this.options.onStop?.();\n };\n activeAnimations.mainThread++;\n this.options = options;\n this.initAnimation();\n this.play();\n if (options.autoplay === false)\n this.pause();\n }\n initAnimation() {\n const { options } = this;\n replaceTransitionType(options);\n const { type = keyframes, repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = options;\n let { keyframes: keyframes$1 } = options;\n const generatorFactory = type || keyframes;\n if (process.env.NODE_ENV !== \"production\" &&\n generatorFactory !== keyframes) {\n invariant(keyframes$1.length <= 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`, \"spring-two-frames\");\n }\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n this.mixKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n /**\n * If we have a mirror repeat type we need to create a second generator that outputs the\n * mirrored (not reversed) animation and later ping pong between the two generators.\n */\n if (repeatType === \"mirror\") {\n this.mirroredGenerator = generatorFactory({\n ...options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -velocity,\n });\n }\n /**\n * If duration is undefined and we have repeat options,\n * we need to calculate a duration from the generator.\n *\n * We set it to the generator itself to cache the duration.\n * Any timeline resolver will need to have already precalculated\n * the duration by this step.\n */\n if (generator.calculatedDuration === null) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n this.calculatedDuration = calculatedDuration;\n this.resolvedDuration = calculatedDuration + repeatDelay;\n this.totalDuration = this.resolvedDuration * (repeat + 1) - repeatDelay;\n this.generator = generator;\n }\n updateTime(timestamp) {\n const animationTime = Math.round(timestamp - this.startTime) * this.playbackSpeed;\n // Update currentTime\n if (this.holdTime !== null) {\n this.currentTime = this.holdTime;\n }\n else {\n // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n // example.\n this.currentTime = animationTime;\n }\n }\n tick(timestamp, sample = false) {\n const { generator, totalDuration, mixKeyframes, mirroredGenerator, resolvedDuration, calculatedDuration, } = this;\n if (this.startTime === null)\n return generator.next(0);\n const { delay = 0, keyframes, repeat, repeatType, repeatDelay, type, onUpdate, finalKeyframe, } = this.options;\n /**\n * requestAnimationFrame timestamps can come through as lower than\n * the startTime as set by performance.now(). Here we prevent this,\n * though in the future it could be possible to make setting startTime\n * a pending operation that gets resolved here.\n */\n if (this.speed > 0) {\n this.startTime = Math.min(this.startTime, timestamp);\n }\n else if (this.speed < 0) {\n this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n }\n if (sample) {\n this.currentTime = timestamp;\n }\n else {\n this.updateTime(timestamp);\n }\n // Rebase on delay\n const timeWithoutDelay = this.currentTime - delay * (this.playbackSpeed >= 0 ? 1 : -1);\n const isInDelayPhase = this.playbackSpeed >= 0\n ? timeWithoutDelay < 0\n : timeWithoutDelay > totalDuration;\n this.currentTime = Math.max(timeWithoutDelay, 0);\n // If this animation has finished, set the current time to the total duration.\n if (this.state === \"finished\" && this.holdTime === null) {\n this.currentTime = totalDuration;\n }\n let elapsed = this.currentTime;\n let frameGenerator = generator;\n if (repeat) {\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n iterationProgress === 1 && currentIteration--;\n currentIteration = Math.min(currentIteration, repeat + 1);\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const isOddIteration = Boolean(currentIteration % 2);\n if (isOddIteration) {\n if (repeatType === \"reverse\") {\n iterationProgress = 1 - iterationProgress;\n if (repeatDelay) {\n iterationProgress -= repeatDelay / resolvedDuration;\n }\n }\n else if (repeatType === \"mirror\") {\n frameGenerator = mirroredGenerator;\n }\n }\n elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n }\n /**\n * If we're in negative time, set state as the initial keyframe.\n * This prevents delay: x, duration: 0 animations from finishing\n * instantly.\n */\n const state = isInDelayPhase\n ? { done: false, value: keyframes[0] }\n : frameGenerator.next(elapsed);\n if (mixKeyframes) {\n state.value = mixKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done =\n this.playbackSpeed >= 0\n ? this.currentTime >= totalDuration\n : this.currentTime <= 0;\n }\n const isAnimationFinished = this.holdTime === null &&\n (this.state === \"finished\" || (this.state === \"running\" && done));\n // TODO: The exception for inertia could be cleaner here\n if (isAnimationFinished && type !== inertia) {\n state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n }\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n this.finish();\n }\n return state;\n }\n /**\n * Allows the returned animation to be awaited or promise-chained. Currently\n * resolves when the animation finishes at all but in a future update could/should\n * reject if its cancels.\n */\n then(resolve, reject) {\n return this.finished.then(resolve, reject);\n }\n get duration() {\n return millisecondsToSeconds(this.calculatedDuration);\n }\n get time() {\n return millisecondsToSeconds(this.currentTime);\n }\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n this.currentTime = newTime;\n if (this.startTime === null ||\n this.holdTime !== null ||\n this.playbackSpeed === 0) {\n this.holdTime = newTime;\n }\n else if (this.driver) {\n this.startTime = this.driver.now() - newTime / this.playbackSpeed;\n }\n this.driver?.start(false);\n }\n get speed() {\n return this.playbackSpeed;\n }\n set speed(newSpeed) {\n this.updateTime(time.now());\n const hasChanged = this.playbackSpeed !== newSpeed;\n this.playbackSpeed = newSpeed;\n if (hasChanged) {\n this.time = millisecondsToSeconds(this.currentTime);\n }\n }\n play() {\n if (this.isStopped)\n return;\n const { driver = frameloopDriver, startTime } = this.options;\n if (!this.driver) {\n this.driver = driver((timestamp) => this.tick(timestamp));\n }\n this.options.onPlay?.();\n const now = this.driver.now();\n if (this.state === \"finished\") {\n this.updateFinished();\n this.startTime = now;\n }\n else if (this.holdTime !== null) {\n this.startTime = now - this.holdTime;\n }\n else if (!this.startTime) {\n this.startTime = startTime ?? now;\n }\n if (this.state === \"finished\" && this.speed < 0) {\n this.startTime += this.calculatedDuration;\n }\n this.holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n this.state = \"running\";\n this.driver.start();\n }\n pause() {\n this.state = \"paused\";\n this.updateTime(time.now());\n this.holdTime = this.currentTime;\n }\n complete() {\n if (this.state !== \"running\") {\n this.play();\n }\n this.state = \"finished\";\n this.holdTime = null;\n }\n finish() {\n this.notifyFinished();\n this.teardown();\n this.state = \"finished\";\n this.options.onComplete?.();\n }\n cancel() {\n this.holdTime = null;\n this.startTime = 0;\n this.tick(0);\n this.teardown();\n this.options.onCancel?.();\n }\n teardown() {\n this.state = \"idle\";\n this.stopDriver();\n this.startTime = this.holdTime = null;\n activeAnimations.mainThread--;\n }\n stopDriver() {\n if (!this.driver)\n return;\n this.driver.stop();\n this.driver = undefined;\n }\n sample(sampleTime) {\n this.startTime = 0;\n return this.tick(sampleTime, true);\n }\n attachTimeline(timeline) {\n if (this.options.allowFlatten) {\n this.options.type = \"keyframes\";\n this.options.ease = \"linear\";\n this.initAnimation();\n }\n this.driver?.stop();\n return timeline.observe(this);\n }\n}\n// Legacy function support\nfunction animateValue(options) {\n return new JSAnimation(options);\n}\n\nexport { JSAnimation, animateValue };\n","function fillWildcards(keyframes) {\n for (let i = 1; i < keyframes.length; i++) {\n keyframes[i] ?? (keyframes[i] = keyframes[i - 1]);\n }\n}\n\nexport { fillWildcards };\n","const radToDeg = (rad) => (rad * 180) / Math.PI;\nconst rotate = (v) => {\n const angle = radToDeg(Math.atan2(v[1], v[0]));\n return rebaseAngle(angle);\n};\nconst matrix2dParsers = {\n x: 4,\n y: 5,\n translateX: 4,\n translateY: 5,\n scaleX: 0,\n scaleY: 3,\n scale: (v) => (Math.abs(v[0]) + Math.abs(v[3])) / 2,\n rotate,\n rotateZ: rotate,\n skewX: (v) => radToDeg(Math.atan(v[1])),\n skewY: (v) => radToDeg(Math.atan(v[2])),\n skew: (v) => (Math.abs(v[1]) + Math.abs(v[2])) / 2,\n};\nconst rebaseAngle = (angle) => {\n angle = angle % 360;\n if (angle < 0)\n angle += 360;\n return angle;\n};\nconst rotateZ = rotate;\nconst scaleX = (v) => Math.sqrt(v[0] * v[0] + v[1] * v[1]);\nconst scaleY = (v) => Math.sqrt(v[4] * v[4] + v[5] * v[5]);\nconst matrix3dParsers = {\n x: 12,\n y: 13,\n z: 14,\n translateX: 12,\n translateY: 13,\n translateZ: 14,\n scaleX,\n scaleY,\n scale: (v) => (scaleX(v) + scaleY(v)) / 2,\n rotateX: (v) => rebaseAngle(radToDeg(Math.atan2(v[6], v[5]))),\n rotateY: (v) => rebaseAngle(radToDeg(Math.atan2(-v[2], v[0]))),\n rotateZ,\n rotate: rotateZ,\n skewX: (v) => radToDeg(Math.atan(v[4])),\n skewY: (v) => radToDeg(Math.atan(v[1])),\n skew: (v) => (Math.abs(v[1]) + Math.abs(v[4])) / 2,\n};\nfunction defaultTransformValue(name) {\n return name.includes(\"scale\") ? 1 : 0;\n}\nfunction parseValueFromTransform(transform, name) {\n if (!transform || transform === \"none\") {\n return defaultTransformValue(name);\n }\n const matrix3dMatch = transform.match(/^matrix3d\\(([-\\d.e\\s,]+)\\)$/u);\n let parsers;\n let match;\n if (matrix3dMatch) {\n parsers = matrix3dParsers;\n match = matrix3dMatch;\n }\n else {\n const matrix2dMatch = transform.match(/^matrix\\(([-\\d.e\\s,]+)\\)$/u);\n parsers = matrix2dParsers;\n match = matrix2dMatch;\n }\n if (!match) {\n return defaultTransformValue(name);\n }\n const valueParser = parsers[name];\n const values = match[1].split(\",\").map(convertTransformToNumber);\n return typeof valueParser === \"function\"\n ? valueParser(values)\n : values[valueParser];\n}\nconst readTransformValue = (instance, name) => {\n const { transform = \"none\" } = getComputedStyle(instance);\n return parseValueFromTransform(transform, name);\n};\nfunction convertTransformToNumber(value) {\n return parseFloat(value.trim());\n}\n\nexport { defaultTransformValue, parseValueFromTransform, readTransformValue };\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 = /*@__PURE__*/ (() => new Set(transformPropOrder))();\n\nexport { transformPropOrder, transformProps };\n","import { parseValueFromTransform } from '../../../render/dom/parse-transform.mjs';\nimport { transformPropOrder } from '../../../render/utils/keys-transform.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n const removedTransforms = [];\n nonTranslationalTransformKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n });\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\n top: (_bbox, { top }) => parseFloat(top),\n left: (_bbox, { left }) => parseFloat(left),\n bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n // Transform\n x: (_bbox, { transform }) => parseValueFromTransform(transform, \"x\"),\n y: (_bbox, { transform }) => parseValueFromTransform(transform, \"y\"),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n","import { fillWildcards } from './utils/fill-wildcards.mjs';\nimport { removeNonTranslationalTransform } from './utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nlet isForced = false;\nfunction measureAllKeyframes() {\n if (anyNeedsMeasurement) {\n const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n const transformsToRestore = new Map();\n /**\n * Write pass\n * If we're measuring elements we want to remove bounding box-changing transforms.\n */\n elementsToMeasure.forEach((element) => {\n const removedTransforms = removeNonTranslationalTransform(element);\n if (!removedTransforms.length)\n return;\n transformsToRestore.set(element, removedTransforms);\n element.render();\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n // Write\n elementsToMeasure.forEach((element) => {\n element.render();\n const restore = transformsToRestore.get(element);\n if (restore) {\n restore.forEach(([key, value]) => {\n element.getValue(key)?.set(value);\n });\n }\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n // Write\n resolversToMeasure.forEach((resolver) => {\n if (resolver.suspendedScrollY !== undefined) {\n window.scrollTo(0, resolver.suspendedScrollY);\n }\n });\n }\n anyNeedsMeasurement = false;\n isScheduled = false;\n toResolve.forEach((resolver) => resolver.complete(isForced));\n toResolve.clear();\n}\nfunction readAllKeyframes() {\n toResolve.forEach((resolver) => {\n resolver.readKeyframes();\n if (resolver.needsMeasurement) {\n anyNeedsMeasurement = true;\n }\n });\n}\nfunction flushKeyframeResolvers() {\n isForced = true;\n readAllKeyframes();\n measureAllKeyframes();\n isForced = false;\n}\nclass KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n this.state = \"pending\";\n /**\n * Track whether this resolver is async. If it is, it'll be added to the\n * resolver queue and flushed in the next frame. Resolvers that aren't going\n * to trigger read/write thrashing don't need to be async.\n */\n this.isAsync = false;\n /**\n * Track whether this resolver needs to perform a measurement\n * to resolve its keyframes.\n */\n this.needsMeasurement = false;\n this.unresolvedKeyframes = [...unresolvedKeyframes];\n this.onComplete = onComplete;\n this.name = name;\n this.motionValue = motionValue;\n this.element = element;\n this.isAsync = isAsync;\n }\n scheduleResolve() {\n this.state = \"scheduled\";\n if (this.isAsync) {\n toResolve.add(this);\n if (!isScheduled) {\n isScheduled = true;\n frame.read(readAllKeyframes);\n frame.resolveKeyframes(measureAllKeyframes);\n }\n }\n else {\n this.readKeyframes();\n this.complete();\n }\n }\n readKeyframes() {\n const { unresolvedKeyframes, name, element, motionValue } = this;\n // If initial keyframe is null we need to read it from the DOM\n if (unresolvedKeyframes[0] === null) {\n const currentValue = motionValue?.get();\n // TODO: This doesn't work if the final keyframe is a wildcard\n const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (currentValue !== undefined) {\n unresolvedKeyframes[0] = currentValue;\n }\n else if (element && name) {\n const valueAsRead = element.readValue(name, finalKeyframe);\n if (valueAsRead !== undefined && valueAsRead !== null) {\n unresolvedKeyframes[0] = valueAsRead;\n }\n }\n if (unresolvedKeyframes[0] === undefined) {\n unresolvedKeyframes[0] = finalKeyframe;\n }\n if (motionValue && currentValue === undefined) {\n motionValue.set(unresolvedKeyframes[0]);\n }\n }\n fillWildcards(unresolvedKeyframes);\n }\n setFinalKeyframe() { }\n measureInitialState() { }\n renderEndStyles() { }\n measureEndState() { }\n complete(isForcedComplete = false) {\n this.state = \"complete\";\n this.onComplete(this.unresolvedKeyframes, this.finalKeyframe, isForcedComplete);\n toResolve.delete(this);\n }\n cancel() {\n if (this.state === \"scheduled\") {\n toResolve.delete(this);\n this.state = \"pending\";\n }\n }\n resume() {\n if (this.state === \"pending\")\n this.scheduleResolve();\n }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n","const isCSSVar = (name) => name.startsWith(\"--\");\n\nexport { isCSSVar };\n","import { isCSSVar } from './is-css-var.mjs';\n\nfunction setStyle(element, name, value) {\n isCSSVar(name)\n ? element.style.setProperty(name, value)\n : (element.style[name] = value);\n}\n\nexport { setStyle };\n","import { memo } from 'motion-utils';\n\nconst supportsScrollTimeline = /* @__PURE__ */ memo(() => window.ScrollTimeline !== undefined);\n\nexport { supportsScrollTimeline };\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {};\n\nexport { supportsFlags };\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n const memoized = memo(callback);\n return () => supportsFlags[supportsFlag] ?? memoized();\n}\n\nexport { memoSupports };\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n try {\n document\n .createElement(\"div\")\n .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n","const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { cubicBezierAsString };\n","import { cubicBezierAsString } from './cubic-bezier.mjs';\n\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\n\nexport { supportedWaapiEasing };\n","import { isBezierDefinition } from 'motion-utils';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from '../utils/linear.mjs';\nimport { cubicBezierAsString } from './cubic-bezier.mjs';\nimport { supportedWaapiEasing } from './supported.mjs';\n\nfunction mapEasingToNativeEasing(easing, duration) {\n if (!easing) {\n return undefined;\n }\n else if (typeof easing === \"function\") {\n return supportsLinearEasing()\n ? generateLinearEasing(easing, duration)\n : \"ease-out\";\n }\n else if (isBezierDefinition(easing)) {\n return cubicBezierAsString(easing);\n }\n else if (Array.isArray(easing)) {\n return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n supportedWaapiEasing.easeOut);\n }\n else {\n return supportedWaapiEasing[easing];\n }\n}\n\nexport { mapEasingToNativeEasing };\n","import { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { mapEasingToNativeEasing } from './easing/map-easing.mjs';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeOut\", times, } = {}, pseudoElement = undefined) {\n const keyframeOptions = {\n [valueName]: keyframes,\n };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease, duration);\n /**\n * If this is an easing array, apply to keyframes, not animation as a whole\n */\n if (Array.isArray(easing))\n keyframeOptions.easing = easing;\n if (statsBuffer.value) {\n activeAnimations.waapi++;\n }\n const options = {\n delay,\n duration,\n easing: !Array.isArray(easing) ? easing : \"linear\",\n fill: \"both\",\n iterations: repeat + 1,\n direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n };\n if (pseudoElement)\n options.pseudoElement = pseudoElement;\n const animation = element.animate(keyframeOptions, options);\n if (statsBuffer.value) {\n animation.finished.finally(() => {\n activeAnimations.waapi--;\n });\n }\n return animation;\n}\n\nexport { startWaapiAnimation };\n","function isGenerator(type) {\n return typeof type === \"function\" && \"applyToOptions\" in type;\n}\n\nexport { isGenerator };\n","import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { isGenerator } from '../../generators/utils/is-generator.mjs';\n\nfunction applyGeneratorOptions({ type, ...options }) {\n if (isGenerator(type) && supportsLinearEasing()) {\n return type.applyToOptions(options);\n }\n else {\n options.duration ?? (options.duration = 300);\n options.ease ?? (options.ease = \"easeOut\");\n }\n return options;\n}\n\nexport { applyGeneratorOptions };\n","import { invariant, millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { supportsScrollTimeline } from '../utils/supports/scroll-timeline.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { startWaapiAnimation } from './waapi/start-waapi-animation.mjs';\nimport { applyGeneratorOptions } from './waapi/utils/apply-generator.mjs';\n\n/**\n * NativeAnimation implements AnimationPlaybackControls for the browser's Web Animations API.\n */\nclass NativeAnimation extends WithPromise {\n constructor(options) {\n super();\n this.finishedTime = null;\n this.isStopped = false;\n if (!options)\n return;\n const { element, name, keyframes, pseudoElement, allowFlatten = false, finalKeyframe, onComplete, } = options;\n this.isPseudoElement = Boolean(pseudoElement);\n this.allowFlatten = allowFlatten;\n this.options = options;\n invariant(typeof options.type !== \"string\", `Mini animate() doesn't support \"type\" as a string.`, \"mini-spring\");\n const transition = applyGeneratorOptions(options);\n this.animation = startWaapiAnimation(element, name, keyframes, transition, pseudoElement);\n if (transition.autoplay === false) {\n this.animation.pause();\n }\n this.animation.onfinish = () => {\n this.finishedTime = this.time;\n if (!pseudoElement) {\n const keyframe = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n if (this.updateMotionValue) {\n this.updateMotionValue(keyframe);\n }\n else {\n /**\n * If we can, we want to commit the final style as set by the user,\n * rather than the computed keyframe value supplied by the animation.\n */\n setStyle(element, name, keyframe);\n }\n this.animation.cancel();\n }\n onComplete?.();\n this.notifyFinished();\n };\n }\n play() {\n if (this.isStopped)\n return;\n this.animation.play();\n if (this.state === \"finished\") {\n this.updateFinished();\n }\n }\n pause() {\n this.animation.pause();\n }\n complete() {\n this.animation.finish?.();\n }\n cancel() {\n try {\n this.animation.cancel();\n }\n catch (e) { }\n }\n stop() {\n if (this.isStopped)\n return;\n this.isStopped = true;\n const { state } = this;\n if (state === \"idle\" || state === \"finished\") {\n return;\n }\n if (this.updateMotionValue) {\n this.updateMotionValue();\n }\n else {\n this.commitStyles();\n }\n if (!this.isPseudoElement)\n this.cancel();\n }\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * In this method, we commit styles back to the DOM before cancelling\n * the animation.\n *\n * This is designed to be overridden by NativeAnimationExtended, which\n * will create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to also correctly calculate velocity for any subsequent animation\n * while deferring the commit until the next animation frame.\n */\n commitStyles() {\n if (!this.isPseudoElement) {\n this.animation.commitStyles?.();\n }\n }\n get duration() {\n const duration = this.animation.effect?.getComputedTiming?.().duration || 0;\n return millisecondsToSeconds(Number(duration));\n }\n get time() {\n return millisecondsToSeconds(Number(this.animation.currentTime) || 0);\n }\n set time(newTime) {\n this.finishedTime = null;\n this.animation.currentTime = secondsToMilliseconds(newTime);\n }\n /**\n * The playback speed of the animation.\n * 1 = normal speed, 2 = double speed, 0.5 = half speed.\n */\n get speed() {\n return this.animation.playbackRate;\n }\n set speed(newSpeed) {\n // Allow backwards playback after finishing\n if (newSpeed < 0)\n this.finishedTime = null;\n this.animation.playbackRate = newSpeed;\n }\n get state() {\n return this.finishedTime !== null\n ? \"finished\"\n : this.animation.playState;\n }\n get startTime() {\n return Number(this.animation.startTime);\n }\n set startTime(newStartTime) {\n this.animation.startTime = newStartTime;\n }\n /**\n * Attaches a timeline to the animation, for instance the `ScrollTimeline`.\n */\n attachTimeline({ timeline, observe }) {\n if (this.allowFlatten) {\n this.animation.effect?.updateTiming({ easing: \"linear\" });\n }\n this.animation.onfinish = null;\n if (timeline && supportsScrollTimeline()) {\n this.animation.timeline = timeline;\n return noop;\n }\n else {\n return observe(this);\n }\n }\n}\n\nexport { NativeAnimation };\n","import { anticipate, backInOut, circInOut } from 'motion-utils';\n\nconst unsupportedEasingFunctions = {\n anticipate,\n backInOut,\n circInOut,\n};\nfunction isUnsupportedEase(key) {\n return key in unsupportedEasingFunctions;\n}\nfunction replaceStringEasing(transition) {\n if (typeof transition.ease === \"string\" &&\n isUnsupportedEase(transition.ease)) {\n transition.ease = unsupportedEasingFunctions[transition.ease];\n }\n}\n\nexport { replaceStringEasing };\n","import { secondsToMilliseconds } from 'motion-utils';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { NativeAnimation } from './NativeAnimation.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { replaceStringEasing } from './waapi/utils/unsupported-easing.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\nclass NativeAnimationExtended extends NativeAnimation {\n constructor(options) {\n /**\n * The base NativeAnimation function only supports a subset\n * of Motion easings, and WAAPI also only supports some\n * easing functions via string/cubic-bezier definitions.\n *\n * This function replaces those unsupported easing functions\n * with a JS easing function. This will later get compiled\n * to a linear() easing function.\n */\n replaceStringEasing(options);\n /**\n * Ensure we replace the transition type with a generator function\n * before passing to WAAPI.\n *\n * TODO: Does this have a better home? It could be shared with\n * JSAnimation.\n */\n replaceTransitionType(options);\n super(options);\n if (options.startTime) {\n this.startTime = options.startTime;\n }\n this.options = options;\n }\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read commited styles back out of the DOM, we can\n * create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to calculate velocity for any subsequent animation.\n */\n updateMotionValue(value) {\n const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n if (!motionValue)\n return;\n if (value !== undefined) {\n motionValue.set(value);\n return;\n }\n const sampleAnimation = new JSAnimation({\n ...options,\n autoplay: false,\n });\n const sampleTime = secondsToMilliseconds(this.finishedTime ?? this.time);\n motionValue.setWithVelocity(sampleAnimation.sample(sampleTime - sampleDelta).value, sampleAnimation.sample(sampleTime).value, sampleDelta);\n sampleAnimation.stop();\n }\n}\n\nexport { NativeAnimationExtended };\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n // If the list of keys that might be non-animatable grows, replace with Set\n if (name === \"zIndex\")\n return false;\n // If it's a number or a keyframes array, we can animate it. We might at some point\n // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n // but for now lets leave it like this for performance reasons\n if (typeof value === \"number\" || Array.isArray(value))\n return true;\n if (typeof value === \"string\" && // It's animatable if we have a string\n (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n return false;\n};\n\nexport { isAnimatable };\n","import { warning } from 'motion-utils';\nimport { isGenerator } from '../generators/utils/is-generator.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n const current = keyframes[0];\n if (keyframes.length === 1)\n return true;\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] !== current)\n return true;\n }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n /**\n * Check if we're able to animate between the start and end keyframes,\n * and throw a warning if we're attempting to animate between one that's\n * animatable and another that isn't.\n */\n const originKeyframe = keyframes[0];\n if (originKeyframe === null)\n return false;\n /**\n * These aren't traditionally animatable but we do support them.\n * In future we could look into making this more generic or replacing\n * this function with mix() === mixImmediate\n */\n if (name === \"display\" || name === \"visibility\")\n return true;\n const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(originKeyframe, name);\n const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". \"${isOriginAnimatable ? targetKeyframe : originKeyframe}\" is not an animatable value.`, \"value-not-animatable\");\n // Always skip if any of these are true\n if (!isOriginAnimatable || !isTargetAnimatable) {\n return false;\n }\n return (hasKeyframesChanged(keyframes) ||\n ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n","function makeAnimationInstant(options) {\n options.duration = 0;\n options.type === \"keyframes\";\n}\n\nexport { makeAnimationInstant };\n","import { memo } from 'motion-utils';\n\n/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n \"opacity\",\n \"clipPath\",\n \"filter\",\n \"transform\",\n // TODO: Could be re-enabled now we have support for linear() easing\n // \"background-color\"\n]);\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\nfunction supportsBrowserAnimation(options) {\n const { motionValue, name, repeatDelay, repeatType, damping, type } = options;\n const subject = motionValue?.owner?.current;\n /**\n * We use this check instead of isHTMLElement() because we explicitly\n * **don't** want elements in different timing contexts (i.e. popups)\n * to be accelerated, as it's not possible to sync these animations\n * properly with those driven from the main window frameloop.\n */\n if (!(subject instanceof HTMLElement)) {\n return false;\n }\n const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n return (supportsWaapi() &&\n name &&\n acceleratedValues.has(name) &&\n (name !== \"transform\" || !transformTemplate) &&\n /**\n * If we're outputting values to onUpdate then we can't use WAAPI as there's\n * no way to read the value from WAAPI every frame.\n */\n !onUpdate &&\n !repeatDelay &&\n repeatType !== \"mirror\" &&\n damping !== 0 &&\n type !== \"inertia\");\n}\n\nexport { supportsBrowserAnimation };\n","import { MotionGlobalConfig, noop } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { KeyframeResolver, flushKeyframeResolvers } from './keyframes/KeyframesResolver.mjs';\nimport { NativeAnimationExtended } from './NativeAnimationExtended.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { makeAnimationInstant } from './utils/make-animation-instant.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { supportsBrowserAnimation } from './waapi/supports/waapi.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass AsyncMotionValueAnimation extends WithPromise {\n constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", keyframes, name, motionValue, element, ...options }) {\n super();\n /**\n * Bound to support return animation.stop pattern\n */\n this.stop = () => {\n if (this._animation) {\n this._animation.stop();\n this.stopTimeline?.();\n }\n this.keyframeResolver?.cancel();\n };\n this.createdAt = time.now();\n const optionsWithDefaults = {\n autoplay,\n delay,\n type,\n repeat,\n repeatDelay,\n repeatType,\n name,\n motionValue,\n element,\n ...options,\n };\n const KeyframeResolver$1 = element?.KeyframeResolver || KeyframeResolver;\n this.keyframeResolver = new KeyframeResolver$1(keyframes, (resolvedKeyframes, finalKeyframe, forced) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe, optionsWithDefaults, !forced), name, motionValue, element);\n this.keyframeResolver?.scheduleResolve();\n }\n onKeyframesResolved(keyframes, finalKeyframe, options, sync) {\n this.keyframeResolver = undefined;\n const { name, type, velocity, delay, isHandoff, onUpdate } = options;\n this.resolvedAt = time.now();\n /**\n * If we can't animate this value with the resolved keyframes\n * then we should complete it immediately.\n */\n if (!canAnimate(keyframes, name, type, velocity)) {\n if (MotionGlobalConfig.instantAnimations || !delay) {\n onUpdate?.(getFinalKeyframe(keyframes, options, finalKeyframe));\n }\n keyframes[0] = keyframes[keyframes.length - 1];\n makeAnimationInstant(options);\n options.repeat = 0;\n }\n /**\n * Resolve startTime for the animation.\n *\n * This method uses the createdAt and resolvedAt to calculate the\n * animation startTime. *Ideally*, we would use the createdAt time as t=0\n * as the following frame would then be the first frame of the animation in\n * progress, which would feel snappier.\n *\n * However, if there's a delay (main thread work) between the creation of\n * the animation and the first commited frame, we prefer to use resolvedAt\n * to avoid a sudden jump into the animation.\n */\n const startTime = sync\n ? !this.resolvedAt\n ? this.createdAt\n : this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n ? this.resolvedAt\n : this.createdAt\n : undefined;\n const resolvedOptions = {\n startTime,\n finalKeyframe,\n ...options,\n keyframes,\n };\n /**\n * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n * optimised animation.\n */\n const animation = !isHandoff && supportsBrowserAnimation(resolvedOptions)\n ? new NativeAnimationExtended({\n ...resolvedOptions,\n element: resolvedOptions.motionValue.owner.current,\n })\n : new JSAnimation(resolvedOptions);\n animation.finished.then(() => this.notifyFinished()).catch(noop);\n if (this.pendingTimeline) {\n this.stopTimeline = animation.attachTimeline(this.pendingTimeline);\n this.pendingTimeline = undefined;\n }\n this._animation = animation;\n }\n get finished() {\n if (!this._animation) {\n return this._finished;\n }\n else {\n return this.animation.finished;\n }\n }\n then(onResolve, _onReject) {\n return this.finished.finally(onResolve).then(() => { });\n }\n get animation() {\n if (!this._animation) {\n this.keyframeResolver?.resume();\n flushKeyframeResolvers();\n }\n return this._animation;\n }\n get duration() {\n return this.animation.duration;\n }\n get time() {\n return this.animation.time;\n }\n set time(newTime) {\n this.animation.time = newTime;\n }\n get speed() {\n return this.animation.speed;\n }\n get state() {\n return this.animation.state;\n }\n set speed(newSpeed) {\n this.animation.speed = newSpeed;\n }\n get startTime() {\n return this.animation.startTime;\n }\n attachTimeline(timeline) {\n if (this._animation) {\n this.stopTimeline = this.animation.attachTimeline(timeline);\n }\n else {\n this.pendingTimeline = timeline;\n }\n return () => this.stop();\n }\n play() {\n this.animation.play();\n }\n pause() {\n this.animation.pause();\n }\n complete() {\n this.animation.complete();\n }\n cancel() {\n if (this._animation) {\n this.animation.cancel();\n }\n this.keyframeResolver?.cancel();\n }\n}\n\nexport { AsyncMotionValueAnimation };\n","import { invariant, isNumericalString } from 'motion-utils';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token1, token2, fallback] = match;\n return [`--${token1 ?? token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`, \"max-css-var-depth\");\n const [token, fallback] = parseCSSVariable(current);\n // No CSS variable detected\n if (!token)\n return;\n // Attempt to read this CSS variable off the element\n const resolved = window.getComputedStyle(element).getPropertyValue(token);\n if (resolved) {\n const trimmed = resolved.trim();\n return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n }\n return isCSSVariableToken(fallback)\n ? getVariableValue(fallback, element, depth + 1)\n : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n","function getValueTransition(transition, key) {\n return (transition?.[key] ??\n transition?.[\"default\"] ??\n transition);\n}\n\nexport { getValueTransition };\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\nexport { auto };\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","import { auto } from './auto.mjs';\nimport { number } from './numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from './numbers/units.mjs';\nimport { testValueType } from './test.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","import { isZeroValueString } from 'motion-utils';\n\nfunction isNone(value) {\n if (typeof value === \"number\") {\n return value === 0;\n }\n else if (value !== null) {\n return value === \"none\" || value === \"0\" || isZeroValueString(value);\n }\n else {\n return true;\n }\n}\n\nexport { isNone };\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n const [name, value] = v.slice(0, -1).split(\"(\");\n if (name === \"drop-shadow\")\n return v;\n const [number] = value.match(floatRegex) || [];\n if (!number)\n return v;\n const unit = value.replace(number, \"\");\n let defaultValue = maxDefaults.has(name) ? 1 : 0;\n if (number !== value)\n defaultValue *= 100;\n return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n ...complex,\n getAnimatableNone: (v) => {\n const functions = v.match(functionRegex);\n return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n },\n};\n\nexport { filter };\n","import { number } from './numbers/index.mjs';\n\nconst int = {\n ...number,\n transform: Math.round,\n};\n\nexport { int };\n","import { int } from '../int.mjs';\nimport { alpha } from '../numbers/index.mjs';\nimport { px } from '../numbers/units.mjs';\nimport { transformValueTypes } from './transform.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 top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Misc\n backgroundPositionX: px,\n backgroundPositionY: px,\n ...transformValueTypes,\n zIndex: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { scale, alpha } from '../numbers/index.mjs';\nimport { degrees, px, progressPercentage } from '../numbers/units.mjs';\n\nconst transformValueTypes = {\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n transformPerspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n};\n\nexport { transformValueTypes };\n","import { color } from '../color/index.mjs';\nimport { filter } from '../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 '../complex/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { getDefaultValueType } from '../maps/defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (defaultValueType !== filter)\n defaultValueType = complex;\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n return defaultValueType.getAnimatableNone\n ? defaultValueType.getAnimatableNone(value)\n : undefined;\n}\n\nexport { getAnimatableNone };\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../../value/types/utils/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n let i = 0;\n let animatableTemplate = undefined;\n while (i < unresolvedKeyframes.length && !animatableTemplate) {\n const keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\" &&\n !invalidTemplates.has(keyframe) &&\n analyseComplexValue(keyframe).values.length) {\n animatableTemplate = unresolvedKeyframes[i];\n }\n i++;\n }\n if (animatableTemplate && name) {\n for (const noneIndex of noneKeyframeIndexes) {\n unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n }\n }\n}\n\nexport { makeNoneKeyframesAnimatable };\n","import { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { findDimensionValueType } from '../../value/types/dimensions.mjs';\nimport { getVariableValue } from '../utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken } from '../utils/is-css-variable.mjs';\nimport { KeyframeResolver } from './KeyframesResolver.mjs';\nimport { isNone } from './utils/is-none.mjs';\nimport { makeNoneKeyframesAnimatable } from './utils/make-none-animatable.mjs';\nimport { isNumOrPxType, positionalValues } from './utils/unit-conversion.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n }\n readKeyframes() {\n const { unresolvedKeyframes, element, name } = this;\n if (!element || !element.current)\n return;\n super.readKeyframes();\n /**\n * If any keyframe is a CSS variable, we need to find its value by sampling the element\n */\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n let keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\") {\n keyframe = keyframe.trim();\n if (isCSSVariableToken(keyframe)) {\n const resolved = getVariableValue(keyframe, element.current);\n if (resolved !== undefined) {\n unresolvedKeyframes[i] = resolved;\n }\n if (i === unresolvedKeyframes.length - 1) {\n this.finalKeyframe = keyframe;\n }\n }\n }\n }\n /**\n * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n * have a far bigger performance impact.\n */\n this.resolveNoneKeyframes();\n /**\n * Check to see if unit type has changed. If so schedule jobs that will\n * temporarily set styles to the destination keyframes.\n * Skip if we have more than two keyframes or this isn't a positional value.\n * TODO: We can throw if there are multiple keyframes and the value type changes.\n */\n if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n return;\n }\n const [origin, target] = unresolvedKeyframes;\n const originType = findDimensionValueType(origin);\n const targetType = findDimensionValueType(target);\n /**\n * Either we don't recognise these value types or we can animate between them.\n */\n if (originType === targetType)\n return;\n /**\n * If both values are numbers or pixels, we can animate between them by\n * converting them to numbers.\n */\n if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n const value = unresolvedKeyframes[i];\n if (typeof value === \"string\") {\n unresolvedKeyframes[i] = parseFloat(value);\n }\n }\n }\n else if (positionalValues[name]) {\n /**\n * Else, the only way to resolve this is by measuring the element.\n */\n this.needsMeasurement = true;\n }\n }\n resolveNoneKeyframes() {\n const { unresolvedKeyframes, name } = this;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n if (unresolvedKeyframes[i] === null ||\n isNone(unresolvedKeyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n }\n if (noneKeyframeIndexes.length) {\n makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n }\n }\n measureInitialState() {\n const { element, unresolvedKeyframes, name } = this;\n if (!element || !element.current)\n return;\n if (name === \"height\") {\n this.suspendedScrollY = window.pageYOffset;\n }\n this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n unresolvedKeyframes[0] = this.measuredOrigin;\n // Set final key frame to measure after next render\n const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (measureKeyframe !== undefined) {\n element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n }\n }\n measureEndState() {\n const { element, name, unresolvedKeyframes } = this;\n if (!element || !element.current)\n return;\n const value = element.getValue(name);\n value && value.jump(this.measuredOrigin, false);\n const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n this.finalKeyframe = finalKeyframe;\n }\n // If we removed transform values, reapply them before the next render\n if (this.removedTransforms?.length) {\n this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n element\n .getValue(unsetTransformName)\n .set(unsetTransformValue);\n });\n }\n this.resolveNoneKeyframes();\n }\n}\n\nexport { DOMKeyframesResolver };\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n if (elementOrSelector instanceof EventTarget) {\n return [elementOrSelector];\n }\n else if (typeof elementOrSelector === \"string\") {\n let root = document;\n if (scope) {\n root = scope.current;\n }\n const elements = selectorCache?.[elementOrSelector] ??\n root.querySelectorAll(elementOrSelector);\n return elements ? Array.from(elements) : [];\n }\n return Array.from(elementOrSelector);\n}\n\nexport { resolveElements };\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n return type && typeof value === \"number\"\n ? type.transform(value)\n : value;\n};\n\nexport { getValueAsType };\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an HTML element in a way\n * that works across iframes\n */\nfunction isHTMLElement(element) {\n return isObject(element) && \"offsetHeight\" in element;\n}\n\nexport { isHTMLElement };\n","import { warnOnce, SubscriptionManager, velocityPerSecond } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n /**\n * @param init - The initiating value\n * @param config - Optional configuration options\n *\n * - `transformer`: A function to transform incoming values with.\n */\n constructor(init, options = {}) {\n /**\n * Tracks whether this value can output a velocity. Currently this is only true\n * if the value is numerical, but we might be able to widen the scope here and support\n * other value types.\n *\n * @internal\n */\n this.canTrackVelocity = null;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v) => {\n const currentTime = time.now();\n /**\n * If we're updating the value during another frame or eventloop\n * than the previous frame, then the we set the previous frame value\n * to current.\n */\n if (this.updatedAt !== currentTime) {\n this.setPrevFrameValue();\n }\n this.prev = this.current;\n this.setCurrent(v);\n // Update update subscribers\n if (this.current !== this.prev) {\n this.events.change?.notify(this.current);\n if (this.dependents) {\n for (const dependent of this.dependents) {\n dependent.dirty();\n }\n }\n }\n };\n this.hasAnimated = false;\n this.setCurrent(init);\n this.owner = options.owner;\n }\n setCurrent(current) {\n this.current = current;\n this.updatedAt = time.now();\n if (this.canTrackVelocity === null && current !== undefined) {\n this.canTrackVelocity = isFloat(this.current);\n }\n }\n setPrevFrameValue(prevFrameValue = this.current) {\n this.prevFrameValue = prevFrameValue;\n this.prevUpdatedAt = this.updatedAt;\n }\n /**\n * Adds a function that will be notified when the `MotionValue` is updated.\n *\n * It returns a function that, when called, will cancel the subscription.\n *\n * When calling `onChange` inside a React component, it should be wrapped with the\n * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n * from the `useEffect` function to ensure you don't add duplicate subscribers..\n *\n * ```jsx\n * export const MyComponent = () => {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.on(\"change\", updateOpacity)\n * const unsubscribeY = y.on(\"change\", updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return <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 if (process.env.NODE_ENV !== \"production\") {\n warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n }\n return this.on(\"change\", subscription);\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n const unsubscribe = this.events[eventName].add(callback);\n if (eventName === \"change\") {\n return () => {\n unsubscribe();\n /**\n * If we have no more change listeners by the start\n * of the next frame, stop active animations.\n */\n frame.read(() => {\n if (!this.events.change.getSize()) {\n this.stop();\n }\n });\n };\n }\n return unsubscribe;\n }\n clearListeners() {\n for (const eventManagers in this.events) {\n this.events[eventManagers].clear();\n }\n }\n /**\n * Attaches a passive effect to the `MotionValue`.\n */\n 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) {\n if (!this.passiveEffect) {\n this.updateAndNotify(v);\n }\n else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n }\n setWithVelocity(prev, current, delta) {\n this.set(current);\n this.prev = undefined;\n this.prevFrameValue = prev;\n this.prevUpdatedAt = this.updatedAt - delta;\n }\n /**\n * Set the state of the `MotionValue`, stopping any active animations,\n * effects, and resets velocity to `0`.\n */\n jump(v, endAnimation = true) {\n this.updateAndNotify(v);\n this.prev = v;\n this.prevUpdatedAt = this.prevFrameValue = undefined;\n endAnimation && this.stop();\n if (this.stopPassiveEffect)\n this.stopPassiveEffect();\n }\n dirty() {\n this.events.change?.notify(this.current);\n }\n addDependent(dependent) {\n if (!this.dependents) {\n this.dependents = new Set();\n }\n this.dependents.add(dependent);\n }\n removeDependent(dependent) {\n if (this.dependents) {\n this.dependents.delete(dependent);\n }\n }\n /**\n * Returns the latest state of `MotionValue`\n *\n * @returns - The latest state of `MotionValue`\n *\n * @public\n */\n get() {\n if (collectMotionValues.current) {\n collectMotionValues.current.push(this);\n }\n return this.current;\n }\n /**\n * @public\n */\n getPrevious() {\n return this.prev;\n }\n /**\n * Returns the latest velocity of `MotionValue`\n *\n * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n *\n * @public\n */\n getVelocity() {\n const currentTime = time.now();\n if (!this.canTrackVelocity ||\n this.prevFrameValue === undefined ||\n currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n return 0;\n }\n const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n // Casts because of parseFloat's poor typing\n return velocityPerSecond(parseFloat(this.current) -\n parseFloat(this.prevFrameValue), delta);\n }\n /**\n * Registers a new animation to control this `MotionValue`. Only one\n * animation can drive a `MotionValue` at one time.\n *\n * ```jsx\n * value.start()\n * ```\n *\n * @param animation - A function that starts the provided animation\n */\n start(startAnimation) {\n this.stop();\n return new Promise((resolve) => {\n this.hasAnimated = true;\n this.animation = startAnimation(resolve);\n if (this.events.animationStart) {\n this.events.animationStart.notify();\n }\n }).then(() => {\n if (this.events.animationComplete) {\n this.events.animationComplete.notify();\n }\n this.clearAnimation();\n });\n }\n /**\n * Stop the currently active animation.\n *\n * @public\n */\n stop() {\n if (this.animation) {\n this.animation.stop();\n if (this.events.animationCancel) {\n this.events.animationCancel.notify();\n }\n }\n this.clearAnimation();\n }\n /**\n * Returns `true` if this value is currently animating.\n *\n * @public\n */\n isAnimating() {\n return !!this.animation;\n }\n clearAnimation() {\n delete this.animation;\n }\n /**\n * Destroy and clean up subscribers to this `MotionValue`.\n *\n * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n * created a `MotionValue` via the `motionValue` function.\n *\n * @public\n */\n destroy() {\n this.dependents?.clear();\n this.events.destroy?.notify();\n this.clearListeners();\n this.stop();\n if (this.stopPassiveEffect) {\n this.stopPassiveEffect();\n }\n }\n}\nfunction motionValue(init, options) {\n return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = \n/* @__PURE__ */ createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n","const isDragging = {\n x: false,\n y: false,\n};\nfunction isDragActive() {\n return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n const elements = resolveElements(elementOrSelector);\n const gestureAbortController = new AbortController();\n const eventOptions = {\n passive: true,\n ...options,\n signal: gestureAbortController.signal,\n };\n const cancel = () => gestureAbortController.abort();\n return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\nfunction isValidHover(event) {\n return !(event.pointerType === \"touch\" || isDragActive());\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n const onPointerEnter = (enterEvent) => {\n if (!isValidHover(enterEvent))\n return;\n const { target } = enterEvent;\n const onHoverEnd = onHoverStart(target, enterEvent);\n if (typeof onHoverEnd !== \"function\" || !target)\n return;\n const onPointerLeave = (leaveEvent) => {\n if (!isValidHover(leaveEvent))\n return;\n onHoverEnd(leaveEvent);\n target.removeEventListener(\"pointerleave\", onPointerLeave);\n };\n target.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n };\n elements.forEach((element) => {\n element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n });\n return cancel;\n}\n\nexport { hover };\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n if (!child) {\n return false;\n }\n else if (parent === child) {\n return true;\n }\n else {\n return isNodeOrChild(parent, child.parentElement);\n }\n};\n\nexport { isNodeOrChild };\n","const isPrimaryPointer = (event) => {\n if (event.pointerType === \"mouse\") {\n return typeof event.button !== \"number\" || event.button <= 0;\n }\n else {\n /**\n * isPrimary is true for all mice buttons, whereas every touch point\n * is regarded as its own input. So subsequent concurrent touch points\n * will be false.\n *\n * Specifically match against false here as incomplete versions of\n * PointerEvents in very old browser might have it set as undefined.\n */\n return event.isPrimary !== false;\n }\n};\n\nexport { isPrimaryPointer };\n","const focusableElements = new Set([\n \"BUTTON\",\n \"INPUT\",\n \"SELECT\",\n \"TEXTAREA\",\n \"A\",\n]);\nfunction isElementKeyboardAccessible(element) {\n return (focusableElements.has(element.tagName) ||\n element.tabIndex !== -1);\n}\n\nexport { isElementKeyboardAccessible };\n","const isPressing = new WeakSet();\n\nexport { isPressing };\n","import { isPressing } from './state.mjs';\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback) {\n return (event) => {\n if (event.key !== \"Enter\")\n return;\n callback(event);\n };\n}\nfunction firePointerEvent(target, type) {\n target.dispatchEvent(new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true }));\n}\nconst enableKeyboardPress = (focusEvent, eventOptions) => {\n const element = focusEvent.currentTarget;\n if (!element)\n return;\n const handleKeydown = filterEvents(() => {\n if (isPressing.has(element))\n return;\n firePointerEvent(element, \"down\");\n const handleKeyup = filterEvents(() => {\n firePointerEvent(element, \"up\");\n });\n const handleBlur = () => firePointerEvent(element, \"cancel\");\n element.addEventListener(\"keyup\", handleKeyup, eventOptions);\n element.addEventListener(\"blur\", handleBlur, eventOptions);\n });\n element.addEventListener(\"keydown\", handleKeydown, eventOptions);\n /**\n * Add an event listener that fires on blur to remove the keydown events.\n */\n element.addEventListener(\"blur\", () => element.removeEventListener(\"keydown\", handleKeydown), eventOptions);\n};\n\nexport { enableKeyboardPress };\n","import { isHTMLElement } from '../../utils/is-html-element.mjs';\nimport { isDragActive } from '../drag/state/is-active.mjs';\nimport { isNodeOrChild } from '../utils/is-node-or-child.mjs';\nimport { isPrimaryPointer } from '../utils/is-primary-pointer.mjs';\nimport { setupGesture } from '../utils/setup.mjs';\nimport { isElementKeyboardAccessible } from './utils/is-keyboard-accessible.mjs';\nimport { enableKeyboardPress } from './utils/keyboard.mjs';\nimport { isPressing } from './utils/state.mjs';\n\n/**\n * Filter out events that are not primary pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction isValidPressEvent(event) {\n return isPrimaryPointer(event) && !isDragActive();\n}\n/**\n * Create a press gesture.\n *\n * Press is different to `\"pointerdown\"`, `\"pointerup\"` in that it\n * automatically filters out secondary pointer events like right\n * click and multitouch.\n *\n * It also adds accessibility support for keyboards, where\n * an element with a press gesture will receive focus and\n * trigger on Enter `\"keydown\"` and `\"keyup\"` events.\n *\n * This is different to a browser's `\"click\"` event, which does\n * respond to keyboards but only for the `\"click\"` itself, rather\n * than the press start and end/cancel. The element also needs\n * to be focusable for this to work, whereas a press gesture will\n * make an element focusable by default.\n *\n * @public\n */\nfunction press(targetOrSelector, onPressStart, options = {}) {\n const [targets, eventOptions, cancelEvents] = setupGesture(targetOrSelector, options);\n const startPress = (startEvent) => {\n const target = startEvent.currentTarget;\n if (!isValidPressEvent(startEvent))\n return;\n isPressing.add(target);\n const onPressEnd = onPressStart(target, startEvent);\n const onPointerEnd = (endEvent, success) => {\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerCancel);\n if (isPressing.has(target)) {\n isPressing.delete(target);\n }\n if (!isValidPressEvent(endEvent)) {\n return;\n }\n if (typeof onPressEnd === \"function\") {\n onPressEnd(endEvent, { success });\n }\n };\n const onPointerUp = (upEvent) => {\n onPointerEnd(upEvent, target === window ||\n target === document ||\n options.useGlobalTarget ||\n isNodeOrChild(target, upEvent.target));\n };\n const onPointerCancel = (cancelEvent) => {\n onPointerEnd(cancelEvent, false);\n };\n window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n window.addEventListener(\"pointercancel\", onPointerCancel, eventOptions);\n };\n targets.forEach((target) => {\n const pointerDownTarget = options.useGlobalTarget ? window : target;\n pointerDownTarget.addEventListener(\"pointerdown\", startPress, eventOptions);\n if (isHTMLElement(target)) {\n target.addEventListener(\"focus\", (event) => enableKeyboardPress(event, eventOptions));\n if (!isElementKeyboardAccessible(target) &&\n !target.hasAttribute(\"tabindex\")) {\n target.tabIndex = 0;\n }\n }\n });\n return cancelEvents;\n}\n\nexport { press };\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n","import { color } from '../color/index.mjs';\nimport { complex } from '../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","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","import * as React from 'react';\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n }\n else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { useComposedRefs };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { isHTMLElement } from 'motion-dom';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { useComposedRefs } from './use-composed-ref.mjs';\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 parent = element.offsetParent;\n const parentWidth = isHTMLElement(parent)\n ? parent.offsetWidth || 0\n : 0;\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 size.right = parentWidth - size.width - size.left;\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, anchorX, root }) {\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 right: 0,\n });\n const { nonce } = useContext(MotionConfigContext);\n const composedRef = useComposedRefs(ref, children?.ref);\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, right } = size.current;\n if (isPresent || !ref.current || !width || !height)\n return;\n const x = anchorX === \"left\" ? `left: ${left}` : `right: ${right}`;\n ref.current.dataset.motionPopId = id;\n const style = document.createElement(\"style\");\n if (nonce)\n style.nonce = nonce;\n const parent = root ?? document.head;\n parent.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 ${x}px !important;\n top: ${top}px !important;\n }\n `);\n }\n return () => {\n if (parent.contains(style)) {\n parent.removeChild(style);\n }\n };\n }, [isPresent]);\n return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, children: React.cloneElement(children, { ref: composedRef }) }));\n}\n\nexport { PopChild };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport * 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, anchorX, root }) => {\n const presenceChildren = useConstant(newChildrenMap);\n const id = useId();\n let isReusedContext = true;\n let context = useMemo(() => {\n isReusedContext = false;\n return {\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 }, [isPresent, presenceChildren, onExitComplete]);\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 if (presenceAffectsLayout && isReusedContext) {\n context = { ...context };\n }\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 = (jsx(PopChild, { isPresent: isPresent, anchorX: anchorX, root: root, children: children }));\n }\n return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n return new Map();\n}\n\nexport { PresenceChild };\n","\"use client\";\nimport { useContext, useId, useEffect, useCallback } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n * const [isPresent, safeToRemove] = usePresence()\n *\n * useEffect(() => {\n * !isPresent && setTimeout(safeToRemove, 1000)\n * }, [isPresent])\n *\n * return <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(subscribe = true) {\n const context = useContext(PresenceContext);\n if (context === null)\n return [true, null];\n const { isPresent, onExitComplete, register } = context;\n // It's safe to call the following hooks conditionally (after an early return) because the context will always\n // either be null or non-null for the lifespan of the component.\n const id = useId();\n useEffect(() => {\n if (subscribe) {\n return register(id);\n }\n }, [subscribe]);\n const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n * const isPresent = useIsPresent()\n *\n * useEffect(() => {\n * !isPresent && console.log(\"I've been removed!\")\n * }, [isPresent])\n *\n * return <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","import { Children, isValidElement } from 'react';\n\nconst getChildKey = (child) => child.key || \"\";\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\nexport { getChildKey, onlyElements };\n","\"use client\";\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useMemo, useRef, useState, useContext } from 'react';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { usePresence } from './use-presence.mjs';\nimport { onlyElements, getChildKey } from './utils.mjs';\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, presenceAffectsLayout = true, mode = \"sync\", propagate = false, anchorX = \"left\", root }) => {\n const [isParentPresent, safeToRemove] = usePresence(propagate);\n /**\n * Filter any children that aren't ReactElements. We can only track components\n * between renders with a props.key.\n */\n const presentChildren = useMemo(() => onlyElements(children), [children]);\n /**\n * Track the keys of the currently rendered children. This is used to\n * determine which children are exiting.\n */\n const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);\n /**\n * If `initial={false}` we only want to pass this to components in the first render.\n */\n const isInitialRender = useRef(true);\n /**\n * A ref containing the currently present children. When all exit animations\n * are complete, we use this to re-render the component with the latest children\n * *committed* rather than the latest children *rendered*.\n */\n const pendingPresentChildren = useRef(presentChildren);\n /**\n * Track which exiting children have finished animating out.\n */\n const exitComplete = useConstant(() => new Map());\n /**\n * Save children to render as React state. To ensure this component is concurrent-safe,\n * we check for exiting children via an effect.\n */\n const [diffedChildren, setDiffedChildren] = useState(presentChildren);\n const [renderedChildren, setRenderedChildren] = useState(presentChildren);\n useIsomorphicLayoutEffect(() => {\n isInitialRender.current = false;\n pendingPresentChildren.current = presentChildren;\n /**\n * Update complete status of exiting children.\n */\n for (let i = 0; i < renderedChildren.length; i++) {\n const key = getChildKey(renderedChildren[i]);\n if (!presentKeys.includes(key)) {\n if (exitComplete.get(key) !== true) {\n exitComplete.set(key, false);\n }\n }\n else {\n exitComplete.delete(key);\n }\n }\n }, [renderedChildren, presentKeys.length, presentKeys.join(\"-\")]);\n const exitingChildren = [];\n if (presentChildren !== diffedChildren) {\n let nextChildren = [...presentChildren];\n /**\n * Loop through all the currently rendered components and decide which\n * are exiting.\n */\n for (let i = 0; i < renderedChildren.length; i++) {\n const child = renderedChildren[i];\n const key = getChildKey(child);\n if (!presentKeys.includes(key)) {\n nextChildren.splice(i, 0, child);\n exitingChildren.push(child);\n }\n }\n /**\n * If we're in \"wait\" mode, and we have exiting children, we want to\n * only render these until they've all exited.\n */\n if (mode === \"wait\" && exitingChildren.length) {\n nextChildren = exitingChildren;\n }\n setRenderedChildren(onlyElements(nextChildren));\n setDiffedChildren(presentChildren);\n /**\n * Early return to ensure once we've set state with the latest diffed\n * children, we can immediately re-render.\n */\n return null;\n }\n if (process.env.NODE_ENV !== \"production\" &&\n mode === \"wait\" &&\n renderedChildren.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 /**\n * If we've been provided a forceRender function by the LayoutGroupContext,\n * we can use it to force a re-render amongst all surrounding components once\n * all components have finished animating out.\n */\n const { forceRender } = useContext(LayoutGroupContext);\n return (jsx(Fragment, { children: renderedChildren.map((child) => {\n const key = getChildKey(child);\n const isPresent = propagate && !isParentPresent\n ? false\n : presentChildren === renderedChildren ||\n presentKeys.includes(key);\n const onExit = () => {\n if (exitComplete.has(key)) {\n exitComplete.set(key, true);\n }\n else {\n return;\n }\n let isEveryExitComplete = true;\n exitComplete.forEach((isExitComplete) => {\n if (!isExitComplete)\n isEveryExitComplete = false;\n });\n if (isEveryExitComplete) {\n forceRender?.();\n setRenderedChildren(pendingPresentChildren.current);\n propagate && safeToRemove?.();\n onExitComplete && onExitComplete();\n }\n };\n return (jsx(PresenceChild, { isPresent: isPresent, initial: !isInitialRender.current || initial\n ? undefined\n : false, custom: custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, root: root, onExitComplete: isPresent ? undefined : onExit, anchorX: anchorX, children: child }, key));\n }) }));\n};\n\nexport { AnimatePresence };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","const featureProps = {\n animation: [\n \"animate\",\n \"variants\",\n \"whileHover\",\n \"whileTap\",\n \"exit\",\n \"whileInView\",\n \"whileFocus\",\n \"whileDrag\",\n ],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n featureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n}\n\nexport { featureDefinitions };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n}\n\nexport { loadFeatures };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { useState, useRef, useEffect } from 'react';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { loadFeatures } from '../../motion/features/load-features.mjs';\n\n/**\n * Used in conjunction with the `m` component to reduce bundle size.\n *\n * `m` is a version of the `motion` component that only loads functionality\n * critical for the initial render.\n *\n * `LazyMotion` can then be used to either synchronously or asynchronously\n * load animation and gesture support.\n *\n * ```jsx\n * // Synchronous loading\n * import { LazyMotion, m, domAnimation } from \"framer-motion\"\n *\n * function App() {\n * return (\n * <LazyMotion features={domAnimation}>\n * <m.div animate={{ scale: 2 }} />\n * </LazyMotion>\n * )\n * }\n *\n * // Asynchronous loading\n * import { LazyMotion, m } from \"framer-motion\"\n *\n * function App() {\n * return (\n * <LazyMotion features={() => import('./path/to/domAnimation')}>\n * <m.div animate={{ scale: 2 }} />\n * </LazyMotion>\n * )\n * }\n * ```\n *\n * @public\n */\nfunction LazyMotion({ children, features, strict = false }) {\n const [, setIsLoaded] = useState(!isLazyBundle(features));\n const loadedRenderer = useRef(undefined);\n /**\n * If this is a synchronous load, load features immediately\n */\n if (!isLazyBundle(features)) {\n const { renderer, ...loadedFeatures } = features;\n loadedRenderer.current = renderer;\n loadFeatures(loadedFeatures);\n }\n useEffect(() => {\n if (isLazyBundle(features)) {\n features().then(({ renderer, ...loadedFeatures }) => {\n loadFeatures(loadedFeatures);\n loadedRenderer.current = renderer;\n setIsLoaded(true);\n });\n }\n }, []);\n return (jsx(LazyContext.Provider, { value: { renderer: loadedRenderer.current, strict }, children: children }));\n}\nfunction isLazyBundle(features) {\n return typeof features === \"function\";\n}\n\nexport { LazyMotion };\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"variants\",\n \"transition\",\n \"transformTemplate\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"ignoreStrict\",\n \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n return (key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n if (typeof isValidProp !== \"function\")\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 {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n const filteredProps = {};\n for (const key in props) {\n /**\n * values is considered a valid prop by Emotion, so if it's present\n * this will be rendered out to the DOM unless explicitly filtered.\n *\n * We check the type as it could be used with the `feColorMatrix`\n * element, which we support.\n */\n if (key === \"values\" && typeof props.values === \"object\")\n continue;\n if (shouldForward(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n // If trying to use native HTML drag events, forward drag listeners\n (props[\"draggable\"] &&\n key.startsWith(\"onDrag\"))) {\n filteredProps[key] =\n props[key];\n }\n }\n return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","\"use client\";\nimport { createContext } from 'react';\n\nconst MotionContext = /* @__PURE__ */ createContext({});\n\nexport { MotionContext };\n","function isAnimationControls(v) {\n return (v !== null &&\n typeof v === \"object\" &&\n typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n","const variantPriorityOrder = [\n \"animate\",\n \"whileInView\",\n \"whileFocus\",\n \"whileHover\",\n \"whileTap\",\n \"whileDrag\",\n \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n return (isAnimationControls(props.animate) ||\n variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n","import { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\n\nfunction getCurrentTreeVariants(props, context) {\n if (isControllingVariants(props)) {\n const { initial, animate } = props;\n return {\n initial: initial === false || isVariantLabel(initial)\n ? initial\n : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n };\n }\n return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n","\"use client\";\nimport { 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 { isCSSVariableName } from 'motion-dom';\n\nconst scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n for (const key in correctors) {\n scaleCorrectors[key] = correctors[key];\n if (isCSSVariableName(key)) {\n scaleCorrectors[key].isCSSVariable = true;\n }\n }\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n","import { transformProps } from 'motion-dom';\nimport { scaleCorrectors } from '../../projection/styles/scale-correction.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","import { transformPropOrder, getValueAsType, numberValueTypes } from 'motion-dom';\n\nconst translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(latestValues, transform, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\n let transformIsDefault = true;\n /**\n * Loop over all possible transforms in order, adding the ones that\n * are present to the transform string.\n */\n for (let i = 0; i < numTransforms; i++) {\n const key = transformPropOrder[i];\n const value = latestValues[key];\n if (value === undefined)\n continue;\n let valueIsDefault = true;\n if (typeof value === \"number\") {\n valueIsDefault = value === (key.startsWith(\"scale\") ? 1 : 0);\n }\n else {\n valueIsDefault = parseFloat(value) === 0;\n }\n if (!valueIsDefault || transformTemplate) {\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (!valueIsDefault) {\n transformIsDefault = false;\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${valueAsType}) `;\n }\n if (transformTemplate) {\n transform[key] = valueAsType;\n }\n }\n }\n transformString = transformString.trim();\n // If we have a custom `transform` template, pass our transform values and\n // generated transformString to that before returning\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n }\n else if (transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\nexport { buildTransform };\n","import { transformProps, isCSSVariableName, getValueAsType, numberValueTypes } from 'motion-dom';\nimport { buildTransform } from './build-transform.mjs';\n\nfunction buildHTMLStyles(state, latestValues, transformTemplate) {\n const { style, vars, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable.\n *\n * Transforms and transform origins are kept separately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n continue;\n }\n else if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n else {\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] =\n valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(latestValues, state.transform, transformTemplate);\n }\n else if (style.transform) {\n /**\n * If we have previously created a transform but currently don't have any,\n * reset transform style to none.\n */\n style.transform = \"none\";\n }\n }\n /**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n if (hasTransformOrigin) {\n const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n style.transformOrigin = `${originX} ${originY} ${originZ}`;\n }\n}\n\nexport { buildHTMLStyles };\n","const createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n\nexport { createHtmlRenderState };\n","\"use client\";\nimport { isMotionValue } from 'motion-dom';\nimport { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key];\n }\n }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState) {\n return useMemo(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState) {\n const styleProp = props.style || {};\n const style = {};\n /**\n * Copy non-Motion Values straight into style\n */\n copyRawValuesOnly(style, styleProp, props);\n Object.assign(style, useInitialMotionValues(props, visualState));\n return style;\n}\nfunction useHTMLProps(props, visualState) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState);\n if (props.drag && props.dragListener !== false) {\n // Disable the ghost element when a user drags\n htmlProps.draggable = false;\n // Disable text selection\n style.userSelect =\n style.WebkitUserSelect =\n style.WebkitTouchCallout =\n \"none\";\n // Disable scrolling on the draggable direction\n style.touchAction =\n props.drag === true\n ? \"none\"\n : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n }\n if (props.tabIndex === undefined &&\n (props.onTap || props.onTapStart || props.whileTap)) {\n htmlProps.tabIndex = 0;\n }\n htmlProps.style = style;\n return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n","import { px } from 'motion-dom';\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 { buildSVGPath } from './path.mjs';\n\n/**\n * Build SVG visual attributes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate, styleProp) {\n buildHTMLStyles(state, latest, transformTemplate);\n /**\n * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n * as normal HTML tags.\n */\n if (isSVGTag) {\n if (state.style.viewBox) {\n state.attrs.viewBox = state.style.viewBox;\n }\n return;\n }\n state.attrs = state.style;\n state.style = {};\n const { attrs, style } = state;\n /**\n * However, we apply transforms as CSS transforms.\n * So if we detect a transform, transformOrigin we take it from attrs and copy it into style.\n */\n if (attrs.transform) {\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n if (style.transform || attrs.transformOrigin) {\n style.transformOrigin = attrs.transformOrigin ?? \"50% 50%\";\n delete attrs.transformOrigin;\n }\n if (style.transform) {\n /**\n * SVG's element transform-origin uses its own median as a reference.\n * Therefore, transformBox becomes a fill-box\n */\n style.transformBox = styleProp?.transformBox ?? \"fill-box\";\n delete attrs.transformBox;\n }\n // Render attrX/attrY/attrScale as attributes\n if (attrX !== undefined)\n attrs.x = attrX;\n if (attrY !== undefined)\n attrs.y = attrY;\n if (attrScale !== undefined)\n attrs.scale = attrScale;\n // Build SVG path if one has been defined\n if (pathLength !== undefined) {\n buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n }\n}\n\nexport { buildSVGAttrs };\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n\nexport { createSvgRenderState };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","\"use client\";\nimport { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = useMemo(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate, props.style);\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","/**\n * We keep these listed separately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n];\n\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n if (\n /**\n * If it's not a string, it's a custom React component. Currently we only support\n * HTML custom React components.\n */\n typeof Component !== \"string\" ||\n /**\n * If it contains a dash, the element is a custom HTML webcomponent.\n */\n Component.includes(\"-\")) {\n return false;\n }\n else if (\n /**\n * If it's in our list of lowercase SVG tags, it's an SVG component\n */\n lowercaseSVGElements.indexOf(Component) > -1 ||\n /**\n * If it contains a capital letter, it's an SVG component\n */\n /[A-Z]/u.test(Component)) {\n return true;\n }\n return false;\n}\n\nexport { isSVGComponent };\n","\"use client\";\nimport { isMotionValue } from 'motion-dom';\nimport { Fragment, useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nfunction useRender(Component, props, ref, { latestValues, }, isStatic, forwardMotionProps = false) {\n const useVisualProps = isSVGComponent(Component)\n ? useSVGProps\n : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = Component !== Fragment ? { ...filteredProps, ...visualProps, ref } : {};\n /**\n * If component has been handed a motion value as its child,\n * memoise its initial value and render that. Subsequent updates\n * will be handled by the onChange handler\n */\n const { children } = props;\n const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n return createElement(Component, {\n ...elementProps,\n children: renderedChildren,\n });\n}\n\nexport { useRender };\n","function getValueState(visualElement) {\n const state = [{}, {}];\n visualElement?.values.forEach((value, key) => {\n state[0][key] = value.get();\n state[1][key] = value.getVelocity();\n });\n return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n /**\n * If the variant definition is a variant label, or\n * the function returned a variant label, resolve.\n */\n if (typeof definition === \"string\") {\n definition = props.variants && props.variants[definition];\n }\n /**\n * At this point we've resolved both functions and variant labels,\n * but the resolved variant label might itself have been a function.\n * If so, resolve. This can only have returned a valid target object.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n return definition;\n}\n\nexport { resolveVariantFromProps };\n","import { isMotionValue } from 'motion-dom';\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 return isMotionValue(value) ? value.get() : value;\n}\n\nexport { resolveMotionValue };\n","\"use client\";\nimport { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n return state;\n}\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n const values = {};\n const motionValues = scrapeMotionValues(props, {});\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key]);\n }\n let { initial, animate } = props;\n const isControllingVariants$1 = isControllingVariants(props);\n const isVariantNode$1 = isVariantNode(props);\n if (context &&\n isVariantNode$1 &&\n !isControllingVariants$1 &&\n props.inherit !== false) {\n if (initial === undefined)\n initial = context.initial;\n if (animate === undefined)\n animate = context.animate;\n }\n let isInitialAnimationBlocked = presenceContext\n ? presenceContext.initial === false\n : false;\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n const variantToSet = isInitialAnimationBlocked ? animate : initial;\n if (variantToSet &&\n typeof variantToSet !== \"boolean\" &&\n !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n for (let i = 0; i < list.length; i++) {\n const resolved = resolveVariantFromProps(props, list[i]);\n if (resolved) {\n const { transitionEnd, transition, ...target } = resolved;\n for (const key in target) {\n let valueTarget = target[key];\n if (Array.isArray(valueTarget)) {\n /**\n * Take final keyframe if the initial animation is blocked because\n * we want to initialise at the end of that blocked animation.\n */\n const index = isInitialAnimationBlocked\n ? valueTarget.length - 1\n : 0;\n valueTarget = valueTarget[index];\n }\n if (valueTarget !== null) {\n values[key] = valueTarget;\n }\n }\n for (const key in transitionEnd) {\n values[key] = transitionEnd[key];\n }\n }\n }\n }\n return values;\n}\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};\n\nexport { makeUseVisualState };\n","import { isMotionValue } from 'motion-dom';\nimport { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n const { style } = props;\n const newValues = {};\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevProps.style &&\n isMotionValue(prevProps.style[key])) ||\n isForcedMotionValue(key, props) ||\n visualElement?.getValue(key)?.liveStyle !== undefined) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","\"use client\";\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nconst useHTMLVisualState = /*@__PURE__*/ makeUseVisualState({\n scrapeMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n});\n\nexport { useHTMLVisualState };\n","import { isMotionValue, transformPropOrder } from 'motion-dom';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n for (const key in props) {\n if (isMotionValue(props[key]) ||\n isMotionValue(prevProps[key])) {\n const targetKey = transformPropOrder.indexOf(key) !== -1\n ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n : key;\n newValues[targetKey] = props[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","\"use client\";\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nconst useSVGVisualState = /*@__PURE__*/ makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n});\n\nexport { useSVGVisualState };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","function isRefObject(ref) {\n return (ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","\"use client\";\nimport { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n return useCallback((instance) => {\n if (instance) {\n visualState.onMount && visualState.onMount(instance);\n }\n if (visualElement) {\n if (instance) {\n visualElement.mount(instance);\n }\n else {\n visualElement.unmount();\n }\n }\n if (externalRef) {\n if (typeof externalRef === \"function\") {\n externalRef(instance);\n }\n else if (isRefObject(externalRef)) {\n externalRef.current = instance;\n }\n }\n }, \n /**\n * Include externalRef in dependencies to ensure the callback updates\n * when the ref changes, allowing proper ref forwarding.\n */\n [visualElement]);\n}\n\nexport { useMotionRef };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","\"use client\";\nimport { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","\"use client\";\nimport { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor) {\n const { visualElement: parent } = useContext(MotionContext);\n const lazyContext = useContext(LazyContext);\n const presenceContext = useContext(PresenceContext);\n const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n const visualElementRef = useRef(null);\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement =\n createVisualElement ||\n lazyContext.renderer;\n if (!visualElementRef.current && createVisualElement) {\n visualElementRef.current = createVisualElement(Component, {\n visualState,\n parent,\n props,\n presenceContext,\n blockInitialAnimation: presenceContext\n ? presenceContext.initial === false\n : false,\n reducedMotionConfig,\n });\n }\n const visualElement = visualElementRef.current;\n /**\n * Load Motion gesture and animation features. These are rendered as renderless\n * components so each feature can optionally make use of React lifecycle methods.\n */\n const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n if (visualElement &&\n !visualElement.projection &&\n ProjectionNodeConstructor &&\n (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n }\n const isMounted = useRef(false);\n useInsertionEffect(() => {\n /**\n * Check the component has already mounted before calling\n * `update` unnecessarily. This ensures we skip the initial update.\n */\n if (visualElement && isMounted.current) {\n visualElement.update(props, presenceContext);\n }\n });\n /**\n * Cache this value as we want to know whether HandoffAppearAnimations\n * was present on initial render - it will be deleted after this.\n */\n const optimisedAppearId = props[optimizedAppearDataAttribute];\n const wantsHandoff = useRef(Boolean(optimisedAppearId) &&\n !window.MotionHandoffIsComplete?.(optimisedAppearId) &&\n window.MotionHasOptimisedAnimation?.(optimisedAppearId));\n useIsomorphicLayoutEffect(() => {\n if (!visualElement)\n return;\n isMounted.current = true;\n window.MotionIsMounted = true;\n visualElement.updateFeatures();\n visualElement.scheduleRenderMicrotask();\n /**\n * Ideally this function would always run in a useEffect.\n *\n * However, if we have optimised appear animations to handoff from,\n * it needs to happen synchronously to ensure there's no flash of\n * incorrect styles in the event of a hydration error.\n *\n * So if we detect a situtation where optimised appear animations\n * are running, we use useLayoutEffect to trigger animations.\n */\n if (wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n useEffect(() => {\n if (!visualElement)\n return;\n if (!wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n if (wantsHandoff.current) {\n // This ensures all future calls to animateChanges() in this component will run in useEffect\n queueMicrotask(() => {\n window.MotionHandoffMarkAsComplete?.(optimisedAppearId);\n });\n wantsHandoff.current = false;\n }\n /**\n * Now we've finished triggering animations for this element we\n * can wipe the enteringChildren set for the next render.\n */\n visualElement.enteringChildren = undefined;\n });\n return visualElement;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, layoutCrossfade, } = props;\n visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n ? undefined\n : getClosestProjectingNode(visualElement.parent));\n visualElement.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n visualElement,\n /**\n * TODO: Update options in an effect. This could be tricky as it'll be too late\n * to update by the time layout animations run.\n * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n * ensuring it gets called if there's no potential layout animations.\n *\n */\n animationType: typeof layout === \"string\" ? layout : \"both\",\n initialPromotionConfig,\n crossfade: layoutCrossfade,\n layoutScroll,\n layoutRoot,\n });\n}\nfunction getClosestProjectingNode(visualElement) {\n if (!visualElement)\n return undefined;\n return visualElement.options.allowProjection !== false\n ? visualElement.projection\n : getClosestProjectingNode(visualElement.parent);\n}\n\nexport { useVisualElement };\n","\"use client\";\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { warning, invariant } from 'motion-utils';\nimport { forwardRef, useContext } from 'react';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { useRender } from '../render/dom/use-render.mjs';\nimport { isSVGComponent } from '../render/dom/utils/is-svg-component.mjs';\nimport { useHTMLVisualState } from '../render/html/use-html-visual-state.mjs';\nimport { useSVGVisualState } from '../render/svg/use-svg-visual-state.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { featureDefinitions } from './features/definitions.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createMotionComponent(Component, { forwardMotionProps = false } = {}, preloadedFeatures, createVisualElement) {\n preloadedFeatures && loadFeatures(preloadedFeatures);\n const useVisualState = isSVGComponent(Component)\n ? useSVGVisualState\n : useHTMLVisualState;\n function MotionDOMComponent(props, externalRef) {\n /**\n * If we need to measure the element we load this functionality in a\n * separate class component in order to gain access to getSnapshotBeforeUpdate.\n */\n let MeasureLayout;\n const configAndProps = {\n ...useContext(MotionConfigContext),\n ...props,\n layoutId: useLayoutId(props),\n };\n const { isStatic } = configAndProps;\n const context = useCreateMotionContext(props);\n const visualState = useVisualState(props, isStatic);\n if (!isStatic && isBrowser) {\n useStrictMode(configAndProps, preloadedFeatures);\n const layoutProjection = getProjectionFunctionality(configAndProps);\n MeasureLayout = layoutProjection.MeasureLayout;\n /**\n * Create a VisualElement for this component. A VisualElement provides a common\n * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n * providing a way of rendering to these APIs outside of the React render loop\n * for more performant animations and interactions\n */\n context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode);\n }\n /**\n * The mount order and hierarchy is specific to ensure our element ref\n * is hydrated by the time features fire their effects.\n */\n return (jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, forwardMotionProps)] }));\n }\n MotionDOMComponent.displayName = `motion.${typeof Component === \"string\"\n ? Component\n : `create(${Component.displayName ?? Component.name ?? \"\"})`}`;\n const ForwardRefMotionComponent = forwardRef(MotionDOMComponent);\n ForwardRefMotionComponent[motionComponentSymbol] = Component;\n return ForwardRefMotionComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = useContext(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n const isStrict = useContext(LazyContext).strict;\n /**\n * If we're in development mode, check to make sure we're not rendering a motion component\n * as a child of LazyMotion, as this will break the file-size benefits of using it.\n */\n if (process.env.NODE_ENV !== \"production\" &&\n preloadedFeatures &&\n isStrict) {\n const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n configAndProps.ignoreStrict\n ? warning(false, strictMessage, \"lazy-strict-mode\")\n : invariant(false, strictMessage, \"lazy-strict-mode\");\n }\n}\nfunction getProjectionFunctionality(props) {\n const { drag, layout } = featureDefinitions;\n if (!drag && !layout)\n return {};\n const combined = { ...drag, ...layout };\n return {\n MeasureLayout: drag?.isEnabled(props) || layout?.isEnabled(props)\n ? combined.MeasureLayout\n : undefined,\n ProjectionNode: combined.ProjectionNode,\n };\n}\n\nexport { createMotionComponent };\n","import { warnOnce } from 'motion-utils';\nimport { createMotionComponent } from '../../motion/index.mjs';\n\nfunction createMotionProxy(preloadedFeatures, createVisualElement) {\n if (typeof Proxy === \"undefined\") {\n return createMotionComponent;\n }\n /**\n * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n * Rather than generating them anew every render.\n */\n const componentCache = new Map();\n const factory = (Component, options) => {\n return createMotionComponent(Component, options, preloadedFeatures, createVisualElement);\n };\n /**\n * Support for deprecated`motion(Component)` pattern\n */\n const deprecatedFactoryFunction = (Component, options) => {\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(false, \"motion() is deprecated. Use motion.create() instead.\");\n }\n return factory(Component, options);\n };\n return new Proxy(deprecatedFactoryFunction, {\n /**\n * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n * The prop name is passed through as `key` and we can use that to generate a `motion`\n * DOM component with that name.\n */\n get: (_target, key) => {\n if (key === \"create\")\n return factory;\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, createMotionComponent(key, undefined, preloadedFeatures, createVisualElement));\n }\n return componentCache.get(key);\n },\n });\n}\n\nexport { createMotionProxy };\n","import { createMotionProxy } from '../create-proxy.mjs';\n\nconst m = /*@__PURE__*/ createMotionProxy();\n\nexport { m };\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","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","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","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\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.addEventListener(\"change\", setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\nexport { initPrefersReducedMotion };\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { isMotionValue, motionValue } from 'motion-dom';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n for (const key in next) {\n const nextValue = next[key];\n const prevValue = prev[key];\n if (isMotionValue(nextValue)) {\n /**\n * If this is a motion value found in props or style, we want to add it\n * to our visual element's motion value map.\n */\n element.addValue(key, nextValue);\n }\n else if (isMotionValue(prevValue)) {\n /**\n * If we're swapping from a motion value to a static value,\n * create a new motion value from that\n */\n element.addValue(key, motionValue(nextValue, { owner: element }));\n }\n else if (prevValue !== nextValue) {\n /**\n * If this is a flat value that has changed, update the motion value\n * or create one if it doesn't exist. We only want to do this if we're\n * not handling the value with our animation state.\n */\n if (element.hasValue(key)) {\n const existingValue = element.getValue(key);\n if (existingValue.liveStyle === true) {\n existingValue.jump(nextValue);\n }\n else if (!existingValue.hasAnimated) {\n existingValue.set(nextValue);\n }\n }\n else {\n const latestValue = element.getStaticValue(key);\n element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n }\n }\n }\n // Handle removed values\n for (const key in prev) {\n if (next[key] === undefined)\n element.removeValue(key);\n }\n return next;\n}\n\nexport { updateMotionValuesFromProps };\n","import { KeyframeResolver, time, frame, isMotionValue, cancelFrame, transformProps, motionValue, findValueType, complex, getAnimatableNone, microtask } from 'motion-dom';\nimport { warnOnce, isNumericalString, isZeroValueString, SubscriptionManager } from 'motion-utils';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\n\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n /**\n * This method takes React props and returns found MotionValues. For example, HTML\n * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n *\n * This isn't an abstract method as it needs calling in the constructor, but it is\n * intended to be one.\n */\n scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n return {};\n }\n constructor({ parent, props, presenceContext, reducedMotionConfig, blockInitialAnimation, visualState, }, options = {}) {\n /**\n * A reference to the current underlying Instance, e.g. a HTMLElement\n * or Three.Mesh etc.\n */\n this.current = null;\n /**\n * A set containing references to this VisualElement's children.\n */\n this.children = new Set();\n /**\n * Determine what role this visual element should take in the variant tree.\n */\n this.isVariantNode = false;\n this.isControllingVariants = false;\n /**\n * Decides whether this VisualElement should animate in reduced motion\n * mode.\n *\n * TODO: This is currently set on every individual VisualElement but feels\n * like it could be set globally.\n */\n this.shouldReduceMotion = null;\n /**\n * A map of all motion values attached to this visual element. Motion\n * values are source of truth for any given animated value. A motion\n * value might be provided externally by the component via props.\n */\n this.values = new Map();\n this.KeyframeResolver = KeyframeResolver;\n /**\n * Cleanup functions for active features (hover/tap/exit etc)\n */\n this.features = {};\n /**\n * A map of every subscription that binds the provided or generated\n * motion values onChange listeners to this visual element.\n */\n this.valueSubscriptions = new Map();\n /**\n * A reference to the previously-provided motion values as returned\n * from scrapeMotionValuesFromProps. We use the keys in here to determine\n * if any motion values need to be removed after props are updated.\n */\n this.prevMotionValues = {};\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n /**\n * An object containing an unsubscribe function for each prop event subscription.\n * For example, every \"Update\" event can have multiple subscribers via\n * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n */\n this.propEventSubscriptions = {};\n this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n this.render = () => {\n if (!this.current)\n return;\n this.triggerBuild();\n this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n };\n this.renderScheduledAt = 0.0;\n this.scheduleRender = () => {\n const now = time.now();\n if (this.renderScheduledAt < now) {\n this.renderScheduledAt = now;\n frame.render(this.render, false, true);\n }\n };\n const { latestValues, renderState } = 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.presenceContext = presenceContext;\n this.depth = parent ? parent.depth + 1 : 0;\n this.reducedMotionConfig = reducedMotionConfig;\n this.options = options;\n this.blockInitialAnimation = Boolean(blockInitialAnimation);\n this.isControllingVariants = isControllingVariants(props);\n this.isVariantNode = isVariantNode(props);\n if (this.isVariantNode) {\n this.variantChildren = new Set();\n }\n this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n /**\n * Any motion values that are provided to the element when created\n * aren't yet bound to the element, as this would technically be impure.\n * However, we iterate through the motion values and set them to the\n * initial values for this component.\n *\n * TODO: This is impure and we should look at changing this to run on mount.\n * Doing so will break some tests but this isn't necessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key]);\n }\n }\n }\n mount(instance) {\n this.current = instance;\n visualElementStore.set(instance, this);\n if (this.projection && !this.projection.instance) {\n this.projection.mount(instance);\n }\n if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n this.removeFromVariantTree = this.parent.addVariantChild(this);\n }\n this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion =\n this.reducedMotionConfig === \"never\"\n ? false\n : this.reducedMotionConfig === \"always\"\n ? true\n : prefersReducedMotion.current;\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\", \"reduced-motion-disabled\");\n }\n this.parent?.addChild(this);\n this.update(this.props, this.presenceContext);\n }\n unmount() {\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.valueSubscriptions.clear();\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent?.removeChild(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n const feature = this.features[key];\n if (feature) {\n feature.unmount();\n feature.isMounted = false;\n }\n }\n this.current = null;\n }\n addChild(child) {\n this.children.add(child);\n this.enteringChildren ?? (this.enteringChildren = new Set());\n this.enteringChildren.add(child);\n }\n removeChild(child) {\n this.children.delete(child);\n this.enteringChildren && this.enteringChildren.delete(child);\n }\n bindToMotionValue(key, value) {\n if (this.valueSubscriptions.has(key)) {\n this.valueSubscriptions.get(key)();\n }\n const valueIsTransform = transformProps.has(key);\n if (valueIsTransform && this.onBindTransform) {\n this.onBindTransform();\n }\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate && frame.preRender(this.notifyUpdate);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n this.scheduleRender();\n });\n let removeSyncCheck;\n if (window.MotionCheckAppearSync) {\n removeSyncCheck = window.MotionCheckAppearSync(this, key, value);\n }\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n if (removeSyncCheck)\n removeSyncCheck();\n if (value.owner)\n value.stop();\n });\n }\n sortNodePosition(other) {\n /**\n * If these nodes aren't even of the same type we can't compare their depth.\n */\n if (!this.current ||\n !this.sortInstanceNodePosition ||\n this.type !== other.type) {\n return 0;\n }\n return this.sortInstanceNodePosition(this.current, other.current);\n }\n updateFeatures() {\n let key = \"animation\";\n for (key in featureDefinitions) {\n const featureDefinition = featureDefinitions[key];\n if (!featureDefinition)\n continue;\n const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n /**\n * If this feature is enabled but not active, make a new instance.\n */\n if (!this.features[key] &&\n FeatureConstructor &&\n isEnabled(this.props)) {\n this.features[key] = new FeatureConstructor(this);\n }\n /**\n * If we have a feature, mount or update it.\n */\n if (this.features[key]) {\n const feature = this.features[key];\n if (feature.isMounted) {\n feature.update();\n }\n else {\n feature.mount();\n feature.isMounted = true;\n }\n }\n }\n }\n triggerBuild() {\n this.build(this.renderState, this.latestValues, this.props);\n }\n /**\n * Measure the current viewport box with or without transforms.\n * Only measures axis-aligned boxes, rotate and skew must be manually\n * removed with a re-render to work.\n */\n measureViewportBox() {\n return this.current\n ? this.measureInstanceViewportBox(this.current, this.props)\n : createBox();\n }\n getStaticValue(key) {\n return this.latestValues[key];\n }\n setStaticValue(key, value) {\n this.latestValues[key] = value;\n }\n /**\n * Update the provided props. Ensure any newly-added motion values are\n * added to our map, old ones removed, and listeners updated.\n */\n update(props, presenceContext) {\n if (props.transformTemplate || this.props.transformTemplate) {\n this.scheduleRender();\n }\n this.prevProps = this.props;\n this.props = props;\n this.prevPresenceContext = this.presenceContext;\n this.presenceContext = presenceContext;\n /**\n * Update prop event handlers ie onAnimationStart, onAnimationComplete\n */\n for (let i = 0; i < propEventHandlers.length; i++) {\n const key = propEventHandlers[i];\n if (this.propEventSubscriptions[key]) {\n this.propEventSubscriptions[key]();\n delete this.propEventSubscriptions[key];\n }\n const listenerName = (\"on\" + key);\n const listener = props[listenerName];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps, this), this.prevMotionValues);\n if (this.handleChildMotionValue) {\n this.handleChildMotionValue();\n }\n }\n getProps() {\n return this.props;\n }\n /**\n * Returns the variant definition with a given name.\n */\n getVariant(name) {\n return this.props.variants ? this.props.variants[name] : undefined;\n }\n /**\n * Returns the defined default transition on this component.\n */\n getDefaultTransition() {\n return this.props.transition;\n }\n getTransformPagePoint() {\n return this.props.transformPagePoint;\n }\n getClosestVariantNode() {\n return this.isVariantNode\n ? this\n : this.parent\n ? this.parent.getClosestVariantNode()\n : undefined;\n }\n /**\n * Add a child visual element to our set of children.\n */\n addVariantChild(child) {\n const closestVariantNode = this.getClosestVariantNode();\n if (closestVariantNode) {\n closestVariantNode.variantChildren &&\n closestVariantNode.variantChildren.add(child);\n return () => closestVariantNode.variantChildren.delete(child);\n }\n }\n /**\n * Add a motion value and bind it to this visual element.\n */\n addValue(key, value) {\n // Remove existing value if it exists\n const existingValue = this.values.get(key);\n if (value !== existingValue) {\n if (existingValue)\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n this.values.set(key, value);\n this.latestValues[key] = value.get();\n }\n }\n /**\n * Remove a motion value and unbind any active subscriptions.\n */\n removeValue(key) {\n this.values.delete(key);\n const unsubscribe = this.valueSubscriptions.get(key);\n if (unsubscribe) {\n unsubscribe();\n this.valueSubscriptions.delete(key);\n }\n delete this.latestValues[key];\n this.removeValueFromRenderState(key, this.renderState);\n }\n /**\n * Check whether we have a motion value for this key\n */\n hasValue(key) {\n return this.values.has(key);\n }\n getValue(key, defaultValue) {\n if (this.props.values && this.props.values[key]) {\n return this.props.values[key];\n }\n let value = this.values.get(key);\n if (value === undefined && defaultValue !== undefined) {\n value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n this.addValue(key, value);\n }\n return value;\n }\n /**\n * If we're trying to animate to a previously unencountered value,\n * we need to check for it in our state and as a last resort read it\n * directly from the instance (which might have performance implications).\n */\n readValue(key, target) {\n let value = this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : this.getBaseTargetFromProps(this.props, key) ??\n this.readValueFromInstance(this.current, key, this.options);\n if (value !== undefined && value !== null) {\n if (typeof value === \"string\" &&\n (isNumericalString(value) || isZeroValueString(value))) {\n // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n value = parseFloat(value);\n }\n else if (!findValueType(value) && complex.test(target)) {\n value = getAnimatableNone(key, target);\n }\n this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n }\n return isMotionValue(value) ? value.get() : value;\n }\n /**\n * Set the base target to later animate back to. This is currently\n * only hydrated on creation and when we first read a value.\n */\n setBaseTarget(key, value) {\n this.baseTarget[key] = value;\n }\n /**\n * Find the base target for a value thats been removed from all animation\n * props.\n */\n getBaseTarget(key) {\n const { initial } = this.props;\n let valueFromInitial;\n if (typeof initial === \"string\" || typeof initial === \"object\") {\n const variant = resolveVariantFromProps(this.props, initial, this.presenceContext?.custom);\n if (variant) {\n valueFromInitial = variant[key];\n }\n }\n /**\n * If this value still exists in the current initial variant, read that.\n */\n if (initial && valueFromInitial !== undefined) {\n return valueFromInitial;\n }\n /**\n * Alternatively, if this VisualElement config has defined a getBaseTarget\n * so we can read the value from an alternative source, try that.\n */\n const target = this.getBaseTargetFromProps(this.props, key);\n if (target !== undefined && !isMotionValue(target))\n return target;\n /**\n * If the value was initially defined on initial, but it doesn't any more,\n * return undefined. Otherwise return the value as initially read from the DOM.\n */\n return this.initialValues[key] !== undefined &&\n valueFromInitial === undefined\n ? undefined\n : this.baseTarget[key];\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n return this.events[eventName].add(callback);\n }\n notify(eventName, ...args) {\n if (this.events[eventName]) {\n this.events[eventName].notify(...args);\n }\n }\n scheduleRenderMicrotask() {\n microtask.render(this.render);\n }\n}\n\nexport { VisualElement };\n","import { DOMKeyframesResolver, isMotionValue } from 'motion-dom';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\n constructor() {\n super(...arguments);\n this.KeyframeResolver = DOMKeyframesResolver;\n }\n sortInstanceNodePosition(a, b) {\n /**\n * compareDocumentPosition returns a bitmask, by using the bitwise &\n * we're returning true if 2 in that bitmask is set to true. 2 is set\n * to true if b preceeds a.\n */\n return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n }\n getBaseTargetFromProps(props, key) {\n return props.style\n ? props.style[key]\n : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n handleChildMotionValue() {\n if (this.childSubscription) {\n this.childSubscription();\n delete this.childSubscription;\n }\n const { children } = this.props;\n if (isMotionValue(children)) {\n this.childSubscription = children.on(\"change\", (latest) => {\n if (this.current) {\n this.current.textContent = `${latest}`;\n }\n });\n }\n }\n}\n\nexport { DOMVisualElement };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n const elementStyle = element.style;\n let key;\n for (key in style) {\n // CSSStyleDeclaration has [index: number]: string; in the types, so we use that as key type.\n elementStyle[key] = style[key];\n }\n // Write projection styles directly to element style\n projection?.applyProjectionStyles(elementStyle, styleProp);\n for (key in vars) {\n // Loop over any CSS variables and assign those.\n // They can only be assigned using `setProperty`.\n elementStyle.setProperty(key, vars[key]);\n }\n}\n\nexport { renderHTML };\n","import { transformProps, defaultTransformValue, readTransformValue, isCSSVariableName } from 'motion-dom';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"html\";\n this.renderInstance = renderHTML;\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n return this.projection?.isProjecting\n ? defaultTransformValue(key)\n : readTransformValue(instance, key);\n }\n else {\n const computedStyle = getComputedStyle(instance);\n const value = (isCSSVariableName(key)\n ? computedStyle.getPropertyValue(key)\n : computedStyle[key]) || 0;\n return typeof value === \"string\" ? value.trim() : value;\n }\n }\n measureInstanceViewportBox(instance, { transformPagePoint }) {\n return measureViewportBox(instance, transformPagePoint);\n }\n build(renderState, latestValues, props) {\n buildHTMLStyles(renderState, latestValues, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","/**\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 { transformProps, getDefaultValueType } from 'motion-dom';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"svg\";\n this.isSVGTag = false;\n this.measureInstanceViewportBox = createBox;\n }\n getBaseTargetFromProps(props, key) {\n return props[key];\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return instance.getAttribute(key);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n build(renderState, latestValues, props) {\n buildSVGAttrs(renderState, latestValues, this.isSVGTag, props.transformTemplate, props.style);\n }\n renderInstance(instance, renderState, styleProp, projection) {\n renderSVG(instance, renderState, styleProp, projection);\n }\n mount(instance) {\n this.isSVGTag = isSVGTag(instance.tagName);\n super.mount(instance);\n }\n}\n\nexport { SVGVisualElement };\n","import { Fragment } from 'react';\nimport { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n return isSVGComponent(Component)\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options, {\n allowProjection: Component !== Fragment,\n });\n};\n\nexport { createDomVisualElement };\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n","const isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","import { motionValue } from 'motion-dom';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.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 resolveFinalValueInKeyframes(v) {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n}\nfunction setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\n\nexport { setTarget };\n","import { isMotionValue } from 'motion-dom';\n\nfunction isWillChangeMotionValue(value) {\n return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { isWillChangeMotionValue } from './is.mjs';\n\nfunction addValueToWillChange(visualElement, key) {\n const willChange = visualElement.getValue(\"willChange\");\n /**\n * It could be that a user has set willChange to a regular MotionValue,\n * in which case we can't add the value to it.\n */\n if (isWillChangeMotionValue(willChange)) {\n return willChange.add(key);\n }\n else if (!willChange && MotionGlobalConfig.WillChange) {\n const newWillChange = new MotionGlobalConfig.WillChange(\"auto\");\n visualElement.addValue(\"willChange\", newWillChange);\n newWillChange.add(key);\n }\n}\n\nexport { addValueToWillChange };\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n return visualElement.props[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe) {\n const resolvedKeyframes = keyframes.filter(isNotNull);\n const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n ? 0\n : resolvedKeyframes.length - 1;\n return !index || finalKeyframe === undefined\n ? resolvedKeyframes[index]\n : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n","import { transformProps } from 'motion-dom';\n\nconst underDampedSpring = {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n type: \"spring\",\n stiffness: 550,\n damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n restSpeed: 10,\n});\nconst keyframesTransition = {\n type: \"keyframes\",\n duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n type: \"keyframes\",\n ease: [0.25, 0.1, 0.35, 1],\n duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n if (keyframes.length > 2) {\n return keyframesTransition;\n }\n else if (transformProps.has(valueKey)) {\n return valueKey.startsWith(\"scale\")\n ? criticallyDampedSpring(keyframes[1])\n : underDampedSpring;\n }\n return ease;\n};\n\nexport { getDefaultTransition };\n","/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n return !!Object.keys(transition).length;\n}\n\nexport { isTransitionDefined };\n","import { getValueTransition, makeAnimationInstant, frame, JSAnimation, AsyncMotionValueAnimation } from 'motion-dom';\nimport { secondsToMilliseconds, MotionGlobalConfig } from 'motion-utils';\nimport { getFinalKeyframe } from '../animators/waapi/utils/get-final-keyframe.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n const valueTransition = getValueTransition(transition, name) || {};\n /**\n * Most transition values are currently completely overwritten by value-specific\n * transitions. In the future it'd be nicer to blend these transitions. But for now\n * delay actually does inherit from the root transition if not value-specific.\n */\n const delay = valueTransition.delay || transition.delay || 0;\n /**\n * Elapsed isn't a public transition option but can be passed through from\n * optimized appear effects in milliseconds.\n */\n let { elapsed = 0 } = transition;\n elapsed = elapsed - secondsToMilliseconds(delay);\n const options = {\n keyframes: Array.isArray(target) ? target : [null, target],\n ease: \"easeOut\",\n velocity: value.getVelocity(),\n ...valueTransition,\n delay: -elapsed,\n onUpdate: (v) => {\n value.set(v);\n valueTransition.onUpdate && valueTransition.onUpdate(v);\n },\n onComplete: () => {\n onComplete();\n valueTransition.onComplete && valueTransition.onComplete();\n },\n name,\n motionValue: value,\n element: isHandoff ? undefined : element,\n };\n /**\n * If there's no transition defined for this value, we can generate\n * unique transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n Object.assign(options, getDefaultTransition(name, options));\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 options.duration && (options.duration = secondsToMilliseconds(options.duration));\n options.repeatDelay && (options.repeatDelay = secondsToMilliseconds(options.repeatDelay));\n /**\n * Support deprecated way to set initial value. Prefer keyframe syntax.\n */\n if (options.from !== undefined) {\n options.keyframes[0] = options.from;\n }\n let shouldSkip = false;\n if (options.type === false ||\n (options.duration === 0 && !options.repeatDelay)) {\n makeAnimationInstant(options);\n if (options.delay === 0) {\n shouldSkip = true;\n }\n }\n if (MotionGlobalConfig.instantAnimations ||\n MotionGlobalConfig.skipAnimations) {\n shouldSkip = true;\n makeAnimationInstant(options);\n options.delay = 0;\n }\n /**\n * If the transition type or easing has been explicitly set by the user\n * then we don't want to allow flattening the animation.\n */\n options.allowFlatten = !valueTransition.type && !valueTransition.ease;\n /**\n * If we can or must skip creating the animation, and apply only\n * the final keyframe, do so. We also check once keyframes are resolved but\n * this early check prevents the need to create an animation at all.\n */\n if (shouldSkip && !isHandoff && value.get() !== undefined) {\n const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n if (finalKeyframe !== undefined) {\n frame.update(() => {\n options.onUpdate(finalKeyframe);\n options.onComplete();\n });\n return;\n }\n }\n return valueTransition.isSync\n ? new JSAnimation(options)\n : new AsyncMotionValueAnimation(options);\n};\n\nexport { animateMotionValue };\n","import { getValueTransition, frame, positionalKeys } from 'motion-dom';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n needsAnimating[key] = false;\n return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = targetAndTransition;\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n for (const key in target) {\n const value = visualElement.getValue(key, visualElement.latestValues[key] ?? null);\n const valueTarget = target[key];\n if (valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n ...getValueTransition(transition || {}, key),\n };\n /**\n * If the value is already at the defined target, skip the animation.\n */\n const currentValue = value.get();\n if (currentValue !== undefined &&\n !value.isAnimating &&\n !Array.isArray(valueTarget) &&\n valueTarget === currentValue &&\n !valueTransition.velocity) {\n continue;\n }\n /**\n * If this is the first time a value is being animated, check\n * to see if we're handling off from an existing animation.\n */\n let isHandoff = false;\n if (window.MotionHandoffAnimation) {\n const appearId = getOptimisedAppearId(visualElement);\n if (appearId) {\n const startTime = window.MotionHandoffAnimation(appearId, key, frame);\n if (startTime !== null) {\n valueTransition.startTime = startTime;\n isHandoff = true;\n }\n }\n }\n addValueToWillChange(visualElement, key);\n value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && positionalKeys.has(key)\n ? { type: false }\n : valueTransition, visualElement, isHandoff));\n const animation = value.animation;\n if (animation) {\n animations.push(animation);\n }\n }\n if (transitionEnd) {\n Promise.all(animations).then(() => {\n frame.update(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n });\n }\n return animations;\n}\n\nexport { animateTarget };\n","function calcChildStagger(children, child, delayChildren, staggerChildren = 0, staggerDirection = 1) {\n const index = Array.from(children)\n .sort((a, b) => a.sortNodePosition(b))\n .indexOf(child);\n const numChildren = children.size;\n const maxStaggerDuration = (numChildren - 1) * staggerChildren;\n const delayIsFunction = typeof delayChildren === \"function\";\n return delayIsFunction\n ? delayChildren(index, numChildren)\n : staggerDirection === 1\n ? index * staggerChildren\n : maxStaggerDuration - index * staggerChildren;\n}\n\nexport { calcChildStagger };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { calcChildStagger } from '../utils/calc-child-stagger.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n ? visualElement.presenceContext?.custom\n : undefined);\n let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n if (options.transitionOverride) {\n transition = options.transitionOverride;\n }\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getAnimation = resolved\n ? () => Promise.all(animateTarget(visualElement, resolved, options))\n : () => Promise.resolve();\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n ? (forwardDelay = 0) => {\n const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n return animateChildren(visualElement, variant, forwardDelay, delayChildren, staggerChildren, staggerDirection, options);\n }\n : () => Promise.resolve();\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n const { when } = transition;\n if (when) {\n const [first, last] = when === \"beforeChildren\"\n ? [getAnimation, getChildAnimations]\n : [getChildAnimations, getAnimation];\n return first().then(() => last());\n }\n else {\n return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n }\n}\nfunction animateChildren(visualElement, variant, delay = 0, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n for (const child of visualElement.variantChildren) {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delay +\n (typeof delayChildren === \"function\" ? 0 : delayChildren) +\n calcChildStagger(visualElement.variantChildren, child, delayChildren, staggerChildren, staggerDirection),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n }\n return Promise.all(animations);\n}\n\nexport { animateVariant };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n visualElement.notify(\"AnimationStart\", definition);\n let animation;\n if (Array.isArray(definition)) {\n const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n animation = Promise.all(animations);\n }\n else if (typeof definition === \"string\") {\n animation = animateVariant(visualElement, definition, options);\n }\n else {\n const resolvedDefinition = typeof definition === \"function\"\n ? resolveVariant(visualElement, definition, options.custom)\n : definition;\n animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n }\n return animation.then(() => {\n visualElement.notify(\"AnimationComplete\", definition);\n });\n}\n\nexport { animateVisualElement };\n","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","import { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nconst numVariantProps = variantProps.length;\nfunction getVariantContext(visualElement) {\n if (!visualElement)\n return undefined;\n if (!visualElement.isControllingVariants) {\n const context = visualElement.parent\n ? getVariantContext(visualElement.parent) || {}\n : {};\n if (visualElement.props.initial !== undefined) {\n context.initial = visualElement.props.initial;\n }\n return context;\n }\n const context = {};\n for (let i = 0; i < numVariantProps; i++) {\n const name = variantProps[i];\n const prop = visualElement.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\n}\n\nexport { getVariantContext };\n","import { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\nimport { calcChildStagger } from '../../animation/utils/calc-child-stagger.mjs';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { getVariantContext } from './get-variant-context.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n let animate = animateList(visualElement);\n let state = createState();\n let isInitialRender = true;\n /**\n * This function will be used to reduce the animation definitions for\n * each active animation type into an object of resolved values for it.\n */\n const buildResolvedTypeValues = (type) => (acc, definition) => {\n const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n ? visualElement.presenceContext?.custom\n : undefined);\n if (resolved) {\n const { transition, transitionEnd, ...target } = resolved;\n acc = { ...acc, ...target, ...transitionEnd };\n }\n return acc;\n };\n /**\n * This just allows us to inject mocked animation functions\n * @internal\n */\n function setAnimateFunction(makeAnimator) {\n animate = makeAnimator(visualElement);\n }\n /**\n * When we receive new props, we need to:\n * 1. Create a list of protected keys for each type. This is a directory of\n * value keys that are currently being \"handled\" by types of a higher priority\n * so that whenever an animation is played of a given type, these values are\n * protected from being animated.\n * 2. Determine if an animation type needs animating.\n * 3. Determine if any values have been removed from a type and figure out\n * what to animate those to.\n */\n function animateChanges(changedActiveType) {\n const { props } = visualElement;\n const context = getVariantContext(visualElement.parent) || {};\n /**\n * A list of animations that we'll build into as we iterate through the animation\n * types. This will get executed at the end of the function.\n */\n const animations = [];\n /**\n * Keep track of which values have been removed. Then, as we hit lower priority\n * animation types, we can check if they contain removed values and animate to that.\n */\n const removedKeys = new Set();\n /**\n * A dictionary of all encountered keys. This is an object to let us build into and\n * copy it without iteration. Each time we hit an animation type we set its protected\n * keys - the keys its not allowed to animate - to the latest version of this object.\n */\n let encounteredKeys = {};\n /**\n * If a variant has been removed at a given index, and this component is controlling\n * variant animations, we want to ensure lower-priority variants are forced to animate.\n */\n let removedVariantIndex = Infinity;\n /**\n * Iterate through all animation types in reverse priority order. For each, we want to\n * detect which values it's handling and whether or not they've changed (and therefore\n * need to be animated). If any values have been removed, we want to detect those in\n * lower priority props and flag for animation.\n */\n for (let i = 0; i < numAnimationTypes; i++) {\n const type = reversePriorityOrder[i];\n const typeState = state[type];\n const prop = props[type] !== undefined\n ? props[type]\n : context[type];\n const propIsVariant = isVariantLabel(prop);\n /**\n * If this type has *just* changed isActive status, set activeDelta\n * to that status. Otherwise set to null.\n */\n const activeDelta = type === changedActiveType ? typeState.isActive : null;\n if (activeDelta === false)\n removedVariantIndex = i;\n /**\n * If this prop is an inherited variant, rather than been set directly on the\n * component itself, we want to make sure we allow the parent to trigger animations.\n *\n * TODO: Can probably change this to a !isControllingVariants check\n */\n let isInherited = prop === context[type] &&\n prop !== props[type] &&\n propIsVariant;\n if (isInherited &&\n isInitialRender &&\n visualElement.manuallyAnimateOnMount) {\n isInherited = false;\n }\n /**\n * Set all encountered keys so far as the protected keys for this type. This will\n * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n */\n typeState.protectedKeys = { ...encounteredKeys };\n // Check if we can skip analysing this prop early\n if (\n // If it isn't active and hasn't *just* been set as inactive\n (!typeState.isActive && activeDelta === null) ||\n // If we didn't and don't have any defined prop for this animation type\n (!prop && !typeState.prevProp) ||\n // Or if the prop doesn't define an animation\n isAnimationControls(prop) ||\n typeof prop === \"boolean\") {\n continue;\n }\n /**\n * As we go look through the values defined on this type, if we detect\n * a changed value or a value that was removed in a higher priority, we set\n * this to true and add this prop to the animation list.\n */\n const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n let shouldAnimateType = variantDidChange ||\n // If we're making this variant active, we want to always make it active\n (type === changedActiveType &&\n typeState.isActive &&\n !isInherited &&\n propIsVariant) ||\n // If we removed a higher-priority variant (i is in reverse order)\n (i > removedVariantIndex && propIsVariant);\n let handledRemovedValues = false;\n /**\n * As animations can be set as variant lists, variants or target objects, we\n * coerce everything to an array if it isn't one already\n */\n const definitionList = Array.isArray(prop) ? prop : [prop];\n /**\n * Build an object of all the resolved values. We'll use this in the subsequent\n * animateChanges calls to determine whether a value has changed.\n */\n let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n if (activeDelta === false)\n resolvedValues = {};\n /**\n * Now we need to loop through all the keys in the prev prop and this prop,\n * and decide:\n * 1. If the value has changed, and needs animating\n * 2. If it has been removed, and needs adding to the removedKeys set\n * 3. If it has been removed in a higher priority type and needs animating\n * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n * needs adding to the type's protectedKeys list.\n */\n const { prevResolvedValues = {} } = typeState;\n const allKeys = {\n ...prevResolvedValues,\n ...resolvedValues,\n };\n const markToAnimate = (key) => {\n shouldAnimateType = true;\n if (removedKeys.has(key)) {\n handledRemovedValues = true;\n removedKeys.delete(key);\n }\n typeState.needsAnimating[key] = true;\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = false;\n };\n for (const key in allKeys) {\n const next = resolvedValues[key];\n const prev = prevResolvedValues[key];\n // If we've already handled this we can just skip ahead\n if (encounteredKeys.hasOwnProperty(key))\n continue;\n /**\n * If the value has changed, we probably want to animate it.\n */\n let valueHasChanged = false;\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n valueHasChanged = !shallowCompare(next, prev);\n }\n else {\n valueHasChanged = next !== prev;\n }\n if (valueHasChanged) {\n if (next !== undefined && next !== null) {\n // If next is defined and doesn't equal prev, it needs animating\n markToAnimate(key);\n }\n else {\n // If it's undefined, it's been removed.\n removedKeys.add(key);\n }\n }\n else if (next !== undefined && removedKeys.has(key)) {\n /**\n * If next hasn't changed and it isn't undefined, we want to check if it's\n * been removed by a higher priority\n */\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we add it to the list of protected values\n * to ensure it doesn't get animated.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n /**\n * Update the typeState so next time animateChanges is called we can compare the\n * latest prop and resolvedValues to these.\n */\n typeState.prevProp = prop;\n typeState.prevResolvedValues = resolvedValues;\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if (isInitialRender && visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to skip this animation\n * unless the inherited variants haven't changed on this render.\n */\n const willAnimateViaParent = isInherited && variantDidChange;\n const needsAnimating = !willAnimateViaParent || handledRemovedValues;\n if (shouldAnimateType && needsAnimating) {\n animations.push(...definitionList.map((animation) => {\n const options = { type };\n /**\n * If we're performing the initial animation, but we're not\n * rendering at the same time as the variant-controlling parent,\n * we want to use the parent's transition to calculate the stagger.\n */\n if (typeof animation === \"string\" &&\n isInitialRender &&\n !willAnimateViaParent &&\n visualElement.manuallyAnimateOnMount &&\n visualElement.parent) {\n const { parent } = visualElement;\n const parentVariant = resolveVariant(parent, animation);\n if (parent.enteringChildren && parentVariant) {\n const { delayChildren } = parentVariant.transition || {};\n options.delay = calcChildStagger(parent.enteringChildren, visualElement, delayChildren);\n }\n }\n return {\n animation: animation,\n options,\n };\n }));\n }\n }\n /**\n * If there are some removed value that haven't been dealt with,\n * we need to create a new animation that falls back either to the value\n * defined in the style prop, or the last read value.\n */\n if (removedKeys.size) {\n const fallbackAnimation = {};\n /**\n * If the initial prop contains a transition we can use that, otherwise\n * allow the animation function to use the visual element's default.\n */\n if (typeof props.initial !== \"boolean\") {\n const initialTransition = resolveVariant(visualElement, Array.isArray(props.initial)\n ? props.initial[0]\n : props.initial);\n if (initialTransition && initialTransition.transition) {\n fallbackAnimation.transition = initialTransition.transition;\n }\n }\n removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = true;\n // @ts-expect-error - @mattgperry to figure if we should do something here\n fallbackAnimation[key] = fallbackTarget ?? null;\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n (props.initial === false || props.initial === props.animate) &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = false;\n return shouldAnimate ? animate(animations) : Promise.resolve();\n }\n /**\n * Change whether a certain animation type is active.\n */\n function setActive(type, isActive) {\n // 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 visualElement.variantChildren?.forEach((child) => child.animationState?.setActive(type, isActive));\n state[type].isActive = isActive;\n const animations = animateChanges(type);\n for (const key in state) {\n state[key].protectedKeys = {};\n }\n return animations;\n }\n return {\n animateChanges,\n setActive,\n setAnimateFunction,\n getState: () => state,\n reset: () => {\n state = createState();\n isInitialRender = true;\n },\n };\n}\nfunction checkVariantsDidChange(prev, next) {\n if (typeof next === \"string\") {\n return next !== prev;\n }\n else if (Array.isArray(next)) {\n return !shallowCompare(next, prev);\n }\n return false;\n}\nfunction createTypeState(isActive = false) {\n return {\n isActive,\n protectedKeys: {},\n needsAnimating: {},\n prevResolvedValues: {},\n };\n}\nfunction createState() {\n return {\n animate: createTypeState(true),\n whileInView: createTypeState(),\n whileHover: createTypeState(),\n whileTap: createTypeState(),\n whileDrag: createTypeState(),\n whileFocus: createTypeState(),\n exit: createTypeState(),\n };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n","class Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\nexport { Feature };\n","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass AnimationFeature extends Feature {\n /**\n * We dynamically generate the AnimationState manager as it contains a reference\n * to the underlying animation library. We only want to load that if we load this,\n * so people can optionally code split it out using the `m` component.\n */\n constructor(node) {\n super(node);\n node.animationState || (node.animationState = createAnimationState(node));\n }\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps();\n if (isAnimationControls(animate)) {\n this.unmountControls = animate.subscribe(this.node);\n }\n }\n /**\n * Subscribe any provided AnimationControls to the component's VisualElement\n */\n mount() {\n this.updateAnimationControlsSubscription();\n }\n update() {\n const { animate } = this.node.getProps();\n const { animate: prevAnimate } = this.node.prevProps || {};\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription();\n }\n }\n unmount() {\n this.node.animationState.reset();\n this.unmountControls?.();\n }\n}\n\nexport { AnimationFeature };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => {\n onExitComplete(this.id);\n });\n }\n }\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {};\n if (onExitComplete) {\n onExitComplete(this.id);\n }\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n\nexport { animations };\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n target.addEventListener(eventName, handler, options);\n return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n","import { isPrimaryPointer } from 'motion-dom';\n\nfunction extractEventInfo(event) {\n return {\n point: {\n x: event.pageX,\n y: event.pageY,\n },\n };\n}\nconst addPointerInfo = (handler) => {\n return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { hover, frame } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\n\nfunction handleHoverEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", lifecycle === \"Start\");\n }\n const eventName = (\"onHover\" + lifecycle);\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nclass HoverGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n this.unmount = hover(current, (_element, startEvent) => {\n handleHoverEvent(this.node, startEvent, \"Start\");\n return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\");\n });\n }\n unmount() { }\n}\n\nexport { HoverGesture };\n","import { pipe } from 'motion-utils';\nimport { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\n\nclass FocusGesture extends Feature {\n constructor() {\n super(...arguments);\n this.isActive = false;\n }\n onFocus() {\n let isFocusVisible = false;\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current.matches(\":focus-visible\");\n }\n catch (e) {\n isFocusVisible = true;\n }\n if (!isFocusVisible || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", true);\n this.isActive = true;\n }\n onBlur() {\n if (!this.isActive || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", false);\n this.isActive = false;\n }\n mount() {\n this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n }\n unmount() { }\n}\n\nexport { FocusGesture };\n","import { press, frame } from 'motion-dom';\nimport { extractEventInfo } from '../events/event-info.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\n\nfunction handlePressEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n return;\n }\n if (node.animationState && props.whileTap) {\n node.animationState.setActive(\"whileTap\", lifecycle === \"Start\");\n }\n const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle));\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nclass PressGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n this.unmount = press(current, (_element, startEvent) => {\n handlePressEvent(this.node, startEvent, \"Start\");\n return (endEvent, { success }) => handlePressEvent(this.node, endEvent, success ? \"End\" : \"Cancel\");\n }, { useGlobalTarget: this.node.props.globalTapTarget });\n }\n unmount() { }\n}\n\nexport { PressGesture };\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n const callback = observerCallbacks.get(entry.target);\n callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n const lookupRoot = root || document;\n /**\n * If we don't have an observer lookup map for this root, create one.\n */\n if (!observers.has(lookupRoot)) {\n observers.set(lookupRoot, {});\n }\n const rootObservers = observers.get(lookupRoot);\n const key = JSON.stringify(options);\n /**\n * If we don't have an observer for this combination of root and settings,\n * create one.\n */\n if (!rootObservers[key]) {\n rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n }\n return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n const rootInteresectionObserver = initIntersectionObserver(options);\n observerCallbacks.set(element, callback);\n rootInteresectionObserver.observe(element);\n return () => {\n observerCallbacks.delete(element);\n rootInteresectionObserver.unobserve(element);\n };\n}\n\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nclass InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.unmount();\n const { viewport = {} } = this.node.getProps();\n const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n const options = {\n root: root ? root.current : undefined,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n };\n const onIntersectionUpdate = (entry) => {\n const { isIntersecting } = entry;\n /**\n * If there's been no change in the viewport state, early return.\n */\n if (this.isInView === isIntersecting)\n return;\n this.isInView = isIntersecting;\n /**\n * Handle hasEnteredView. If this is only meant to run once, and\n * element isn't visible, early return. Otherwise set hasEnteredView to true.\n */\n if (once && !isIntersecting && this.hasEnteredView) {\n return;\n }\n else if (isIntersecting) {\n this.hasEnteredView = true;\n }\n if (this.node.animationState) {\n this.node.animationState.setActive(\"whileInView\", isIntersecting);\n }\n /**\n * Use the latest committed props rather than the ones in scope\n * when this observer is created\n */\n const { onViewportEnter, onViewportLeave } = this.node.getProps();\n const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n callback && callback(entry);\n };\n return observeIntersection(this.node.current, options, onIntersectionUpdate);\n }\n mount() {\n this.startObserver();\n }\n update() {\n if (typeof IntersectionObserver === \"undefined\")\n return;\n const { props, prevProps } = this.node;\n const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n if (hasOptionsChanged) {\n this.startObserver();\n }\n }\n unmount() { }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","\"use client\";\nimport { animations } from '../../motion/features/animations.mjs';\nimport { gestureAnimations } from '../../motion/features/gestures.mjs';\nimport { createDomVisualElement } from './create-visual-element.mjs';\n\n/**\n * @public\n */\nconst domAnimation = {\n renderer: createDomVisualElement,\n ...animations,\n ...gestureAnimations,\n};\n\nexport { domAnimation };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n inView: {\n Feature: InViewFeature,\n },\n tap: {\n Feature: PressGesture,\n },\n focus: {\n Feature: FocusGesture,\n },\n hover: {\n Feature: HoverGesture,\n },\n};\n\nexport { gestureAnimations };\n","import {useLayoutEffect as $6dfIe$useLayoutEffect, useEffectEvent as $6dfIe$useEffectEvent, isFocusable as $6dfIe$isFocusable, getOwnerWindow as $6dfIe$getOwnerWindow, focusWithoutScrolling as $6dfIe$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $8a9cb279dc87e130$export$525bc4921d56d4a(nativeEvent) {\n let event = nativeEvent;\n event.nativeEvent = nativeEvent;\n event.isDefaultPrevented = ()=>event.defaultPrevented;\n // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n event.isPropagationStopped = ()=>event.cancelBubble;\n event.persist = ()=>{};\n return event;\n}\nfunction $8a9cb279dc87e130$export$c2b7abe5d61ec696(event, target) {\n Object.defineProperty(event, 'target', {\n value: target\n });\n Object.defineProperty(event, 'currentTarget', {\n value: target\n });\n}\nfunction $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {\n let stateRef = (0, $6dfIe$useRef)({\n isFocused: false,\n observer: null\n });\n // Clean up MutationObserver on unmount. See below.\n (0, $6dfIe$useLayoutEffect)(()=>{\n const state = stateRef.current;\n return ()=>{\n if (state.observer) {\n state.observer.disconnect();\n state.observer = null;\n }\n };\n }, []);\n let dispatchBlur = (0, $6dfIe$useEffectEvent)((e)=>{\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n });\n // This function is called during a React onFocus event.\n return (0, $6dfIe$useCallback)((e)=>{\n // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {\n stateRef.current.isFocused = true;\n let target = e.target;\n let onBlurHandler = (e)=>{\n stateRef.current.isFocused = false;\n if (target.disabled) {\n // For backward compatibility, dispatch a (fake) React synthetic event.\n let event = $8a9cb279dc87e130$export$525bc4921d56d4a(e);\n dispatchBlur(event);\n }\n // We no longer need the MutationObserver once the target is blurred.\n if (stateRef.current.observer) {\n stateRef.current.observer.disconnect();\n stateRef.current.observer = null;\n }\n };\n target.addEventListener('focusout', onBlurHandler, {\n once: true\n });\n stateRef.current.observer = new MutationObserver(()=>{\n if (stateRef.current.isFocused && target.disabled) {\n var _stateRef_current_observer;\n (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();\n let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n target.dispatchEvent(new FocusEvent('blur', {\n relatedTarget: relatedTargetEl\n }));\n target.dispatchEvent(new FocusEvent('focusout', {\n bubbles: true,\n relatedTarget: relatedTargetEl\n }));\n }\n });\n stateRef.current.observer.observe(target, {\n attributes: true,\n attributeFilter: [\n 'disabled'\n ]\n });\n }\n }, [\n dispatchBlur\n ]);\n}\nlet $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\nfunction $8a9cb279dc87e130$export$cabe61c495ee3649(target) {\n // The browser will focus the nearest focusable ancestor of our target.\n while(target && !(0, $6dfIe$isFocusable)(target))target = target.parentElement;\n let window = (0, $6dfIe$getOwnerWindow)(target);\n let activeElement = window.document.activeElement;\n if (!activeElement || activeElement === target) return;\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = true;\n let isRefocusing = false;\n let onBlur = (e)=>{\n if (e.target === activeElement || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusOut = (e)=>{\n if (e.target === activeElement || isRefocusing) {\n e.stopImmediatePropagation();\n // If there was no focusable ancestor, we don't expect a focus event.\n // Re-focus the original active element here.\n if (!target && !isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n let onFocus = (e)=>{\n if (e.target === target || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusIn = (e)=>{\n if (e.target === target || isRefocusing) {\n e.stopImmediatePropagation();\n if (!isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n window.addEventListener('blur', onBlur, true);\n window.addEventListener('focusout', onFocusOut, true);\n window.addEventListener('focusin', onFocusIn, true);\n window.addEventListener('focus', onFocus, true);\n let cleanup = ()=>{\n cancelAnimationFrame(raf);\n window.removeEventListener('blur', onBlur, true);\n window.removeEventListener('focusout', onFocusOut, true);\n window.removeEventListener('focusin', onFocusIn, true);\n window.removeEventListener('focus', onFocus, true);\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\n isRefocusing = false;\n };\n let raf = requestAnimationFrame(cleanup);\n return cleanup;\n}\n\n\nexport {$8a9cb279dc87e130$export$525bc4921d56d4a as createSyntheticEvent, $8a9cb279dc87e130$export$c2b7abe5d61ec696 as setEventTarget, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent, $8a9cb279dc87e130$export$fda7da73ab5d4c48 as ignoreFocusEvent, $8a9cb279dc87e130$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.module.js.map\n","import {isIOS as $7R18e$isIOS, getOwnerDocument as $7R18e$getOwnerDocument, runAfterTransition as $7R18e$runAfterTransition} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet $14c0b72509d70225$var$state = 'default';\nlet $14c0b72509d70225$var$savedUserSelect = '';\nlet $14c0b72509d70225$var$modifiedElementMap = new WeakMap();\nfunction $14c0b72509d70225$export$16a4697467175487(target) {\n if ((0, $7R18e$isIOS)()) {\n if ($14c0b72509d70225$var$state === 'default') {\n const documentObject = (0, $7R18e$getOwnerDocument)(target);\n $14c0b72509d70225$var$savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n documentObject.documentElement.style.webkitUserSelect = 'none';\n }\n $14c0b72509d70225$var$state = 'disabled';\n } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n // If not iOS, store the target's original user-select and change to user-select: none\n // Ignore state since it doesn't apply for non iOS\n let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n $14c0b72509d70225$var$modifiedElementMap.set(target, target.style[property]);\n target.style[property] = 'none';\n }\n}\nfunction $14c0b72509d70225$export$b0d6fa1ab32e3295(target) {\n if ((0, $7R18e$isIOS)()) {\n // If the state is already default, there's nothing to do.\n // If it is restoring, then there's no need to queue a second restore.\n if ($14c0b72509d70225$var$state !== 'disabled') return;\n $14c0b72509d70225$var$state = 'restoring';\n // There appears to be a delay on iOS where selection still might occur\n // after pointer up, so wait a bit before removing user-select.\n setTimeout(()=>{\n // Wait for any CSS transitions to complete so we don't recompute style\n // for the whole page in the middle of the animation and cause jank.\n (0, $7R18e$runAfterTransition)(()=>{\n // Avoid race conditions\n if ($14c0b72509d70225$var$state === 'restoring') {\n const documentObject = (0, $7R18e$getOwnerDocument)(target);\n if (documentObject.documentElement.style.webkitUserSelect === 'none') documentObject.documentElement.style.webkitUserSelect = $14c0b72509d70225$var$savedUserSelect || '';\n $14c0b72509d70225$var$savedUserSelect = '';\n $14c0b72509d70225$var$state = 'default';\n }\n });\n }, 300);\n } else if (target instanceof HTMLElement || target instanceof SVGElement) // If not iOS, restore the target's original user-select if any\n // Ignore state since it doesn't apply for non iOS\n {\n if (target && $14c0b72509d70225$var$modifiedElementMap.has(target)) {\n let targetOldUserSelect = $14c0b72509d70225$var$modifiedElementMap.get(target);\n let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n if (target.style[property] === 'none') target.style[property] = targetOldUserSelect;\n if (target.getAttribute('style') === '') target.removeAttribute('style');\n $14c0b72509d70225$var$modifiedElementMap.delete(target);\n }\n }\n}\n\n\nexport {$14c0b72509d70225$export$16a4697467175487 as disableTextSelection, $14c0b72509d70225$export$b0d6fa1ab32e3295 as restoreTextSelection};\n//# sourceMappingURL=textSelection.module.js.map\n","import $3aeG1$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $ae1eeba8b9eafd08$export$5165eccb35aaadb5 = (0, $3aeG1$react).createContext({\n register: ()=>{}\n});\n$ae1eeba8b9eafd08$export$5165eccb35aaadb5.displayName = 'PressResponderContext';\n\n\nexport {$ae1eeba8b9eafd08$export$5165eccb35aaadb5 as PressResponderContext};\n//# sourceMappingURL=context.module.js.map\n","function _class_apply_descriptor_get(receiver, descriptor) {\n if (descriptor.get) return descriptor.get.call(receiver);\n\n return descriptor.value;\n}\nexport { _class_apply_descriptor_get as _ };\n","function _class_extract_field_descriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n\n return privateMap.get(receiver);\n}\nexport { _class_extract_field_descriptor as _ };\n","import { _ as _class_apply_descriptor_get } from \"./_class_apply_descriptor_get.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_get(receiver, privateMap) {\n var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"get\");\n return _class_apply_descriptor_get(receiver, descriptor);\n}\nexport { _class_private_field_get as _ };\n","function _class_apply_descriptor_set(receiver, descriptor, value) {\n if (descriptor.set) descriptor.set.call(receiver, value);\n else {\n if (!descriptor.writable) {\n // This should only throw in strict mode, but class bodies are\n // always strict and private fields can only be used inside\n // class bodies.\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n}\nexport { _class_apply_descriptor_set as _ };\n","import { _ as _class_apply_descriptor_set } from \"./_class_apply_descriptor_set.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_set(receiver, privateMap, value) {\n var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"set\");\n _class_apply_descriptor_set(receiver, descriptor, value);\n return value;\n}\nexport { _class_private_field_set as _ };\n","import {createSyntheticEvent as $8a9cb279dc87e130$export$525bc4921d56d4a, preventFocus as $8a9cb279dc87e130$export$cabe61c495ee3649, setEventTarget as $8a9cb279dc87e130$export$c2b7abe5d61ec696} from \"./utils.mjs\";\nimport {disableTextSelection as $14c0b72509d70225$export$16a4697467175487, restoreTextSelection as $14c0b72509d70225$export$b0d6fa1ab32e3295} from \"./textSelection.mjs\";\nimport {PressResponderContext as $ae1eeba8b9eafd08$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {_ as $7mdmh$_} from \"@swc/helpers/_/_class_private_field_get\";\nimport {_ as $7mdmh$_1} from \"@swc/helpers/_/_class_private_field_init\";\nimport {_ as $7mdmh$_2} from \"@swc/helpers/_/_class_private_field_set\";\nimport {mergeProps as $7mdmh$mergeProps, useSyncRef as $7mdmh$useSyncRef, useGlobalListeners as $7mdmh$useGlobalListeners, useEffectEvent as $7mdmh$useEffectEvent, nodeContains as $7mdmh$nodeContains, getEventTarget as $7mdmh$getEventTarget, getOwnerDocument as $7mdmh$getOwnerDocument, chain as $7mdmh$chain, isMac as $7mdmh$isMac, openLink as $7mdmh$openLink, isVirtualClick as $7mdmh$isVirtualClick, isVirtualPointerEvent as $7mdmh$isVirtualPointerEvent, focusWithoutScrolling as $7mdmh$focusWithoutScrolling, getOwnerWindow as $7mdmh$getOwnerWindow} from \"@react-aria/utils\";\nimport {flushSync as $7mdmh$flushSync} from \"react-dom\";\nimport {useContext as $7mdmh$useContext, useState as $7mdmh$useState, useRef as $7mdmh$useRef, useMemo as $7mdmh$useMemo, useEffect as $7mdmh$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\n\n\n\n\nfunction $f6c31cce2adf654f$var$usePressResponderContext(props) {\n // Consume context from <PressResponder> and merge with props.\n let context = (0, $7mdmh$useContext)((0, $ae1eeba8b9eafd08$export$5165eccb35aaadb5));\n if (context) {\n let { register: register, ...contextProps } = context;\n props = (0, $7mdmh$mergeProps)(contextProps, props);\n register();\n }\n (0, $7mdmh$useSyncRef)(context, props.ref);\n return props;\n}\nvar $f6c31cce2adf654f$var$_shouldStopPropagation = /*#__PURE__*/ new WeakMap();\nclass $f6c31cce2adf654f$var$PressEvent {\n continuePropagation() {\n (0, $7mdmh$_2)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, false);\n }\n get shouldStopPropagation() {\n return (0, $7mdmh$_)(this, $f6c31cce2adf654f$var$_shouldStopPropagation);\n }\n constructor(type, pointerType, originalEvent, state){\n (0, $7mdmh$_1)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, {\n writable: true,\n value: void 0\n });\n (0, $7mdmh$_2)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, true);\n var _state_target;\n let currentTarget = (_state_target = state === null || state === void 0 ? void 0 : state.target) !== null && _state_target !== void 0 ? _state_target : originalEvent.currentTarget;\n const rect = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.getBoundingClientRect();\n let x, y = 0;\n let clientX, clientY = null;\n if (originalEvent.clientX != null && originalEvent.clientY != null) {\n clientX = originalEvent.clientX;\n clientY = originalEvent.clientY;\n }\n if (rect) {\n if (clientX != null && clientY != null) {\n x = clientX - rect.left;\n y = clientY - rect.top;\n } else {\n x = rect.width / 2;\n y = rect.height / 2;\n }\n }\n this.type = type;\n this.pointerType = pointerType;\n this.target = originalEvent.currentTarget;\n this.shiftKey = originalEvent.shiftKey;\n this.metaKey = originalEvent.metaKey;\n this.ctrlKey = originalEvent.ctrlKey;\n this.altKey = originalEvent.altKey;\n this.x = x;\n this.y = y;\n }\n}\nconst $f6c31cce2adf654f$var$LINK_CLICKED = Symbol('linkClicked');\nconst $f6c31cce2adf654f$var$STYLE_ID = 'react-aria-pressable-style';\nconst $f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE = 'data-react-aria-pressable';\nfunction $f6c31cce2adf654f$export$45712eceda6fad21(props) {\n let { onPress: onPress, onPressChange: onPressChange, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onClick: onClick, isDisabled: isDisabled, isPressed: isPressedProp, preventFocusOnPress: preventFocusOnPress, shouldCancelOnPointerExit: shouldCancelOnPointerExit, allowTextSelectionOnPress: allowTextSelectionOnPress, ref: domRef, ...domProps } = $f6c31cce2adf654f$var$usePressResponderContext(props);\n let [isPressed, setPressed] = (0, $7mdmh$useState)(false);\n let ref = (0, $7mdmh$useRef)({\n isPressed: false,\n ignoreEmulatedMouseEvents: false,\n didFirePressStart: false,\n isTriggeringEvent: false,\n activePointerId: null,\n target: null,\n isOverTarget: false,\n pointerType: null,\n disposables: []\n });\n let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $7mdmh$useGlobalListeners)();\n let triggerPressStart = (0, $7mdmh$useEffectEvent)((originalEvent, pointerType)=>{\n let state = ref.current;\n if (isDisabled || state.didFirePressStart) return false;\n let shouldStopPropagation = true;\n state.isTriggeringEvent = true;\n if (onPressStart) {\n let event = new $f6c31cce2adf654f$var$PressEvent('pressstart', pointerType, originalEvent);\n onPressStart(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n if (onPressChange) onPressChange(true);\n state.isTriggeringEvent = false;\n state.didFirePressStart = true;\n setPressed(true);\n return shouldStopPropagation;\n });\n let triggerPressEnd = (0, $7mdmh$useEffectEvent)((originalEvent, pointerType, wasPressed = true)=>{\n let state = ref.current;\n if (!state.didFirePressStart) return false;\n state.didFirePressStart = false;\n state.isTriggeringEvent = true;\n let shouldStopPropagation = true;\n if (onPressEnd) {\n let event = new $f6c31cce2adf654f$var$PressEvent('pressend', pointerType, originalEvent);\n onPressEnd(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n if (onPressChange) onPressChange(false);\n setPressed(false);\n if (onPress && wasPressed && !isDisabled) {\n let event = new $f6c31cce2adf654f$var$PressEvent('press', pointerType, originalEvent);\n onPress(event);\n shouldStopPropagation && (shouldStopPropagation = event.shouldStopPropagation);\n }\n state.isTriggeringEvent = false;\n return shouldStopPropagation;\n });\n let triggerPressUp = (0, $7mdmh$useEffectEvent)((originalEvent, pointerType)=>{\n let state = ref.current;\n if (isDisabled) return false;\n if (onPressUp) {\n state.isTriggeringEvent = true;\n let event = new $f6c31cce2adf654f$var$PressEvent('pressup', pointerType, originalEvent);\n onPressUp(event);\n state.isTriggeringEvent = false;\n return event.shouldStopPropagation;\n }\n return true;\n });\n let cancel = (0, $7mdmh$useEffectEvent)((e)=>{\n let state = ref.current;\n if (state.isPressed && state.target) {\n if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType, false);\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)(state.target);\n for (let dispose of state.disposables)dispose();\n state.disposables = [];\n }\n });\n let cancelOnPointerExit = (0, $7mdmh$useEffectEvent)((e)=>{\n if (shouldCancelOnPointerExit) cancel(e);\n });\n let triggerClick = (0, $7mdmh$useEffectEvent)((e)=>{\n onClick === null || onClick === void 0 ? void 0 : onClick(e);\n });\n let triggerSyntheticClick = (0, $7mdmh$useEffectEvent)((e, target)=>{\n // Some third-party libraries pass in onClick instead of onPress.\n // Create a fake mouse event and trigger onClick as well.\n // This matches the browser's native activation behavior for certain elements (e.g. button).\n // https://html.spec.whatwg.org/#activation\n // https://html.spec.whatwg.org/#fire-a-synthetic-pointer-event\n if (onClick) {\n let event = new MouseEvent('click', e);\n (0, $8a9cb279dc87e130$export$c2b7abe5d61ec696)(event, target);\n onClick((0, $8a9cb279dc87e130$export$525bc4921d56d4a)(event));\n }\n });\n let pressProps = (0, $7mdmh$useMemo)(()=>{\n let state = ref.current;\n let pressProps = {\n onKeyDown (e) {\n if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && (0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) {\n var _state_metaKeyEvents;\n if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard((0, $7mdmh$getEventTarget)(e.nativeEvent), e.key)) e.preventDefault();\n // If the event is repeating, it may have started on a different element\n // after which focus moved to the current element. Ignore these events and\n // only handle the first key down event.\n let shouldStopPropagation = true;\n if (!state.isPressed && !e.repeat) {\n state.target = e.currentTarget;\n state.isPressed = true;\n state.pointerType = 'keyboard';\n shouldStopPropagation = triggerPressStart(e, 'keyboard');\n // Focus may move before the key up event, so register the event on the document\n // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n let originalTarget = e.currentTarget;\n let pressUp = (e)=>{\n if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $7mdmh$nodeContains)(originalTarget, (0, $7mdmh$getEventTarget)(e)) && state.target) triggerPressUp($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard');\n };\n addGlobalListener((0, $7mdmh$getOwnerDocument)(e.currentTarget), 'keyup', (0, $7mdmh$chain)(pressUp, onKeyUp), true);\n }\n if (shouldStopPropagation) e.stopPropagation();\n // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n // macOS has a bug where keyup events are not fired while the Meta key is down.\n // When the Meta key itself is released we will get an event for that, and we'll act as if\n // all of these other keys were released as well.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n // https://bugs.webkit.org/show_bug.cgi?id=55291\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n if (e.metaKey && (0, $7mdmh$isMac)()) (_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.set(e.key, e.nativeEvent);\n } else if (e.key === 'Meta') state.metaKeyEvents = new Map();\n },\n onClick (e) {\n if (e && !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (e && e.button === 0 && !state.isTriggeringEvent && !(0, $7mdmh$openLink).isOpening) {\n let shouldStopPropagation = true;\n if (isDisabled) e.preventDefault();\n // If triggered from a screen reader or by using element.click(),\n // trigger as if it were a keyboard click.\n if (!state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || (0, $7mdmh$isVirtualClick)(e.nativeEvent))) {\n let stopPressStart = triggerPressStart(e, 'virtual');\n let stopPressUp = triggerPressUp(e, 'virtual');\n let stopPressEnd = triggerPressEnd(e, 'virtual');\n triggerClick(e);\n shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n } else if (state.isPressed && state.pointerType !== 'keyboard') {\n let pointerType = state.pointerType || e.nativeEvent.pointerType || 'virtual';\n let stopPressUp = triggerPressUp($f6c31cce2adf654f$var$createEvent(e.currentTarget, e), pointerType);\n let stopPressEnd = triggerPressEnd($f6c31cce2adf654f$var$createEvent(e.currentTarget, e), pointerType, true);\n shouldStopPropagation = stopPressUp && stopPressEnd;\n state.isOverTarget = false;\n triggerClick(e);\n cancel(e);\n }\n state.ignoreEmulatedMouseEvents = false;\n if (shouldStopPropagation) e.stopPropagation();\n }\n }\n };\n let onKeyUp = (e)=>{\n var _state_metaKeyEvents;\n if (state.isPressed && state.target && $f6c31cce2adf654f$var$isValidKeyboardEvent(e, state.target)) {\n var _state_metaKeyEvents1;\n if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard((0, $7mdmh$getEventTarget)(e), e.key)) e.preventDefault();\n let target = (0, $7mdmh$getEventTarget)(e);\n let wasPressed = (0, $7mdmh$nodeContains)(state.target, (0, $7mdmh$getEventTarget)(e));\n triggerPressEnd($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard', wasPressed);\n if (wasPressed) triggerSyntheticClick(e, state.target);\n removeAllGlobalListeners();\n // If a link was triggered with a key other than Enter, open the URL ourselves.\n // This means the link has a role override, and the default browser behavior\n // only applies when using the Enter key.\n if (e.key !== 'Enter' && $f6c31cce2adf654f$var$isHTMLAnchorLink(state.target) && (0, $7mdmh$nodeContains)(state.target, target) && !e[$f6c31cce2adf654f$var$LINK_CLICKED]) {\n // Store a hidden property on the event so we only trigger link click once,\n // even if there are multiple usePress instances attached to the element.\n e[$f6c31cce2adf654f$var$LINK_CLICKED] = true;\n (0, $7mdmh$openLink)(state.target, e, false);\n }\n state.isPressed = false;\n (_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);\n } else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {\n var _state_target;\n // If we recorded keydown events that occurred while the Meta key was pressed,\n // and those haven't received keyup events already, fire keyup events ourselves.\n // See comment above for more info about the macOS bug causing this.\n let events = state.metaKeyEvents;\n state.metaKeyEvents = undefined;\n for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));\n }\n };\n if (typeof PointerEvent !== 'undefined') {\n pressProps.onPointerDown = (e)=>{\n // Only handle left clicks, and ignore events that bubbled through portals.\n if (e.button !== 0 || !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n // Ignore and let the onClick handler take care of it instead.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n if ((0, $7mdmh$isVirtualPointerEvent)(e.nativeEvent)) {\n state.pointerType = 'virtual';\n return;\n }\n state.pointerType = e.pointerType;\n let shouldStopPropagation = true;\n if (!state.isPressed) {\n state.isPressed = true;\n state.isOverTarget = true;\n state.activePointerId = e.pointerId;\n state.target = e.currentTarget;\n if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$16a4697467175487)(state.target);\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n // Release pointer capture so that touch interactions can leave the original target.\n // This enables onPointerLeave and onPointerEnter to fire.\n let target = (0, $7mdmh$getEventTarget)(e.nativeEvent);\n if ('releasePointerCapture' in target) target.releasePointerCapture(e.pointerId);\n addGlobalListener((0, $7mdmh$getOwnerDocument)(e.currentTarget), 'pointerup', onPointerUp, false);\n addGlobalListener((0, $7mdmh$getOwnerDocument)(e.currentTarget), 'pointercancel', onPointerCancel, false);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseDown = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (e.button === 0) {\n if (preventFocusOnPress) {\n let dispose = (0, $8a9cb279dc87e130$export$cabe61c495ee3649)(e.target);\n if (dispose) state.disposables.push(dispose);\n }\n e.stopPropagation();\n }\n };\n pressProps.onPointerUp = (e)=>{\n // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent)) || state.pointerType === 'virtual') return;\n // Only handle left clicks. If isPressed is true, delay until onClick.\n if (e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || e.pointerType);\n };\n pressProps.onPointerEnter = (e)=>{\n if (e.pointerId === state.activePointerId && state.target && !state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n triggerPressStart($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType);\n }\n };\n pressProps.onPointerLeave = (e)=>{\n if (e.pointerId === state.activePointerId && state.target && state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n triggerPressEnd($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType, false);\n cancelOnPointerExit(e);\n }\n };\n let onPointerUp = (e)=>{\n if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n if ((0, $7mdmh$nodeContains)(state.target, (0, $7mdmh$getEventTarget)(e)) && state.pointerType != null) {\n // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n // is mutated between onPointerUp and onClick, and is more compatible with third party libraries.\n // https://github.com/adobe/react-spectrum/issues/1513\n // https://issues.chromium.org/issues/40732224\n // However, iOS and Android do not focus or fire onClick after a long press.\n // We work around this by triggering a click ourselves after a timeout.\n // This timeout is canceled during the click event in case the real one fires first.\n // The timeout must be at least 32ms, because Safari on iOS delays the click event on\n // non-form elements without certain ARIA roles (for hover emulation).\n // https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892\n let clicked = false;\n let timeout = setTimeout(()=>{\n if (state.isPressed && state.target instanceof HTMLElement) {\n if (clicked) cancel(e);\n else {\n (0, $7mdmh$focusWithoutScrolling)(state.target);\n state.target.click();\n }\n }\n }, 80);\n // Use a capturing listener to track if a click occurred.\n // If stopPropagation is called it may never reach our handler.\n addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);\n state.disposables.push(()=>clearTimeout(timeout));\n } else cancel(e);\n // Ignore subsequent onPointerLeave event before onClick on touch devices.\n state.isOverTarget = false;\n }\n };\n let onPointerCancel = (e)=>{\n cancel(e);\n };\n pressProps.onDragStart = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n cancel(e);\n };\n } else if (process.env.NODE_ENV === 'test') {\n // NOTE: this fallback branch is entirely used by unit tests.\n // All browsers now support pointer events, but JSDOM still does not.\n pressProps.onMouseDown = (e)=>{\n // Only handle left clicks\n if (e.button !== 0 || !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (state.ignoreEmulatedMouseEvents) {\n e.stopPropagation();\n return;\n }\n state.isPressed = true;\n state.isOverTarget = true;\n state.target = e.currentTarget;\n state.pointerType = (0, $7mdmh$isVirtualClick)(e.nativeEvent) ? 'virtual' : 'mouse';\n // Flush sync so that focus moved during react re-renders occurs before we yield back to the browser.\n let shouldStopPropagation = (0, $7mdmh$flushSync)(()=>triggerPressStart(e, state.pointerType));\n if (shouldStopPropagation) e.stopPropagation();\n if (preventFocusOnPress) {\n let dispose = (0, $8a9cb279dc87e130$export$cabe61c495ee3649)(e.target);\n if (dispose) state.disposables.push(dispose);\n }\n addGlobalListener((0, $7mdmh$getOwnerDocument)(e.currentTarget), 'mouseup', onMouseUp, false);\n };\n pressProps.onMouseEnter = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseLeave = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = false;\n shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n cancelOnPointerExit(e);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseUp = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || 'mouse');\n };\n let onMouseUp = (e)=>{\n // Only handle left clicks\n if (e.button !== 0) return;\n if (state.ignoreEmulatedMouseEvents) {\n state.ignoreEmulatedMouseEvents = false;\n return;\n }\n if (state.target && state.target.contains(e.target) && state.pointerType != null) ;\n else cancel(e);\n state.isOverTarget = false;\n };\n pressProps.onTouchStart = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n let touch = $f6c31cce2adf654f$var$getTouchFromEvent(e.nativeEvent);\n if (!touch) return;\n state.activePointerId = touch.identifier;\n state.ignoreEmulatedMouseEvents = true;\n state.isOverTarget = true;\n state.isPressed = true;\n state.target = e.currentTarget;\n state.pointerType = 'touch';\n if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$16a4697467175487)(state.target);\n let shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n if (shouldStopPropagation) e.stopPropagation();\n addGlobalListener((0, $7mdmh$getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true);\n };\n pressProps.onTouchMove = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n let touch = $f6c31cce2adf654f$var$getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && $f6c31cce2adf654f$var$isOverTarget(touch, e.currentTarget)) {\n if (!state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n }\n } else if (state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false);\n cancelOnPointerExit($f6c31cce2adf654f$var$createTouchEvent(state.target, e));\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onTouchEnd = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n let touch = $f6c31cce2adf654f$var$getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && $f6c31cce2adf654f$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n triggerPressUp($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n triggerSyntheticClick(e.nativeEvent, state.target);\n } else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false);\n if (shouldStopPropagation) e.stopPropagation();\n state.isPressed = false;\n state.activePointerId = null;\n state.isOverTarget = false;\n state.ignoreEmulatedMouseEvents = true;\n if (state.target && !allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)(state.target);\n removeAllGlobalListeners();\n };\n pressProps.onTouchCancel = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n e.stopPropagation();\n if (state.isPressed) cancel($f6c31cce2adf654f$var$createTouchEvent(state.target, e));\n };\n let onScroll = (e)=>{\n if (state.isPressed && (0, $7mdmh$nodeContains)((0, $7mdmh$getEventTarget)(e), state.target)) cancel({\n currentTarget: state.target,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false,\n altKey: false\n });\n };\n pressProps.onDragStart = (e)=>{\n if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n cancel(e);\n };\n }\n return pressProps;\n }, [\n addGlobalListener,\n isDisabled,\n preventFocusOnPress,\n removeAllGlobalListeners,\n allowTextSelectionOnPress,\n cancel,\n cancelOnPointerExit,\n triggerPressEnd,\n triggerPressStart,\n triggerPressUp,\n triggerClick,\n triggerSyntheticClick\n ]);\n // Avoid onClick delay for double tap to zoom by default.\n (0, $7mdmh$useEffect)(()=>{\n if (!domRef || process.env.NODE_ENV === 'test') return;\n const ownerDocument = (0, $7mdmh$getOwnerDocument)(domRef.current);\n if (!ownerDocument || !ownerDocument.head || ownerDocument.getElementById($f6c31cce2adf654f$var$STYLE_ID)) return;\n const style = ownerDocument.createElement('style');\n style.id = $f6c31cce2adf654f$var$STYLE_ID;\n // touchAction: 'manipulation' is supposed to be equivalent, but in\n // Safari it causes onPointerCancel not to fire on scroll.\n // https://bugs.webkit.org/show_bug.cgi?id=240917\n style.textContent = `\n@layer {\n [${$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE}] {\n touch-action: pan-x pan-y pinch-zoom;\n }\n}\n `.trim();\n ownerDocument.head.prepend(style);\n }, [\n domRef\n ]);\n // Remove user-select: none in case component unmounts immediately after pressStart\n (0, $7mdmh$useEffect)(()=>{\n let state = ref.current;\n return ()=>{\n var _state_target;\n if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)((_state_target = state.target) !== null && _state_target !== void 0 ? _state_target : undefined);\n for (let dispose of state.disposables)dispose();\n state.disposables = [];\n };\n }, [\n allowTextSelectionOnPress\n ]);\n return {\n isPressed: isPressedProp || isPressed,\n pressProps: (0, $7mdmh$mergeProps)(domProps, pressProps, {\n [$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE]: true\n })\n };\n}\nfunction $f6c31cce2adf654f$var$isHTMLAnchorLink(target) {\n return target.tagName === 'A' && target.hasAttribute('href');\n}\nfunction $f6c31cce2adf654f$var$isValidKeyboardEvent(event, currentTarget) {\n const { key: key, code: code } = event;\n const element = currentTarget;\n const role = element.getAttribute('role');\n // Accessibility for keyboards. Space and Enter only.\n // \"Spacebar\" is for IE 11\n return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof (0, $7mdmh$getOwnerWindow)(element).HTMLInputElement && !$f6c31cce2adf654f$var$isValidInputKey(element, key) || element instanceof (0, $7mdmh$getOwnerWindow)(element).HTMLTextAreaElement || element.isContentEditable) && // Links should only trigger with Enter key\n !((role === 'link' || !role && $f6c31cce2adf654f$var$isHTMLAnchorLink(element)) && key !== 'Enter');\n}\nfunction $f6c31cce2adf654f$var$getTouchFromEvent(event) {\n const { targetTouches: targetTouches } = event;\n if (targetTouches.length > 0) return targetTouches[0];\n return null;\n}\nfunction $f6c31cce2adf654f$var$getTouchById(event, pointerId) {\n const changedTouches = event.changedTouches;\n for(let i = 0; i < changedTouches.length; i++){\n const touch = changedTouches[i];\n if (touch.identifier === pointerId) return touch;\n }\n return null;\n}\nfunction $f6c31cce2adf654f$var$createTouchEvent(target, e) {\n let clientX = 0;\n let clientY = 0;\n if (e.targetTouches && e.targetTouches.length === 1) {\n clientX = e.targetTouches[0].clientX;\n clientY = e.targetTouches[0].clientY;\n }\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n clientX: clientX,\n clientY: clientY\n };\n}\nfunction $f6c31cce2adf654f$var$createEvent(target, e) {\n let clientX = e.clientX;\n let clientY = e.clientY;\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n clientX: clientX,\n clientY: clientY\n };\n}\nfunction $f6c31cce2adf654f$var$getPointClientRect(point) {\n let offsetX = 0;\n let offsetY = 0;\n if (point.width !== undefined) offsetX = point.width / 2;\n else if (point.radiusX !== undefined) offsetX = point.radiusX;\n if (point.height !== undefined) offsetY = point.height / 2;\n else if (point.radiusY !== undefined) offsetY = point.radiusY;\n return {\n top: point.clientY - offsetY,\n right: point.clientX + offsetX,\n bottom: point.clientY + offsetY,\n left: point.clientX - offsetX\n };\n}\nfunction $f6c31cce2adf654f$var$areRectanglesOverlapping(a, b) {\n // check if they cannot overlap on x axis\n if (a.left > b.right || b.left > a.right) return false;\n // check if they cannot overlap on y axis\n if (a.top > b.bottom || b.top > a.bottom) return false;\n return true;\n}\nfunction $f6c31cce2adf654f$var$isOverTarget(point, target) {\n let rect = target.getBoundingClientRect();\n let pointRect = $f6c31cce2adf654f$var$getPointClientRect(point);\n return $f6c31cce2adf654f$var$areRectanglesOverlapping(rect, pointRect);\n}\nfunction $f6c31cce2adf654f$var$shouldPreventDefaultUp(target) {\n if (target instanceof HTMLInputElement) return false;\n if (target instanceof HTMLButtonElement) return target.type !== 'submit' && target.type !== 'reset';\n if ($f6c31cce2adf654f$var$isHTMLAnchorLink(target)) return false;\n return true;\n}\nfunction $f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(target, key) {\n if (target instanceof HTMLInputElement) return !$f6c31cce2adf654f$var$isValidInputKey(target, key);\n return $f6c31cce2adf654f$var$shouldPreventDefaultUp(target);\n}\nconst $f6c31cce2adf654f$var$nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\nfunction $f6c31cce2adf654f$var$isValidInputKey(target, key) {\n // Only space should toggle checkboxes and radios, not enter.\n return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $f6c31cce2adf654f$var$nonTextInputTypes.has(target.type);\n}\n\n\nexport {$f6c31cce2adf654f$export$45712eceda6fad21 as usePress};\n//# sourceMappingURL=usePress.module.js.map\n","import {ignoreFocusEvent as $8a9cb279dc87e130$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $28AnR$isMac, isVirtualClick as $28AnR$isVirtualClick, getOwnerWindow as $28AnR$getOwnerWindow, getOwnerDocument as $28AnR$getOwnerDocument} from \"@react-aria/utils\";\nimport {useState as $28AnR$useState, useEffect as $28AnR$useEffect} from \"react\";\nimport {useIsSSR as $28AnR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nlet $507fabe10e71c6fb$var$currentModality = null;\nlet $507fabe10e71c6fb$var$changeHandlers = new Set();\nlet $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\nlet $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS = {\n Tab: true,\n Escape: true\n};\nfunction $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {\n for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */ function $507fabe10e71c6fb$var$isValidKey(e) {\n // Control and Shift keys trigger when navigating back to the tab with keyboard.\n return !(e.metaKey || !(0, $28AnR$isMac)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $507fabe10e71c6fb$var$handleKeyboardEvent(e) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n if ($507fabe10e71c6fb$var$isValidKey(e)) {\n $507fabe10e71c6fb$var$currentModality = 'keyboard';\n $507fabe10e71c6fb$var$triggerChangeHandlers('keyboard', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handlePointerEvent(e) {\n $507fabe10e71c6fb$var$currentModality = 'pointer';\n if (e.type === 'mousedown' || e.type === 'pointerdown') {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$triggerChangeHandlers('pointer', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handleClickEvent(e) {\n if ((0, $28AnR$isVirtualClick)(e)) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n }\n}\nfunction $507fabe10e71c6fb$var$handleFocusEvent(e) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document || (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) || !e.isTrusted) return;\n // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n $507fabe10e71c6fb$var$triggerChangeHandlers('virtual', e);\n }\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n}\nfunction $507fabe10e71c6fb$var$handleWindowBlur() {\n if (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) return;\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {\n if (typeof window === 'undefined' || typeof document === 'undefined' || $507fabe10e71c6fb$export$d90243b58daecda7.get((0, $28AnR$getOwnerWindow)(element))) return;\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n let focus = windowObject.HTMLElement.prototype.focus;\n windowObject.HTMLElement.prototype.focus = function() {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n focus.apply(this, arguments);\n };\n documentObject.addEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n windowObject.addEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.addEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.addEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.addEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n // Add unmount handler\n windowObject.addEventListener('beforeunload', ()=>{\n $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);\n }, {\n once: true\n });\n $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {\n focus: focus\n });\n}\nconst $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;\n windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;\n documentObject.removeEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n windowObject.removeEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.removeEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.removeEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.removeEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $507fabe10e71c6fb$export$2f1888112f558a7d(element) {\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n let loadListener;\n if (documentObject.readyState !== 'loading') $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n else {\n loadListener = ()=>{\n $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener('DOMContentLoaded', loadListener);\n }\n return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $507fabe10e71c6fb$export$2f1888112f558a7d();\nfunction $507fabe10e71c6fb$export$b9b3dfddab17db27() {\n return $507fabe10e71c6fb$var$currentModality !== 'pointer';\n}\nfunction $507fabe10e71c6fb$export$630ff653c5ada6a9() {\n return $507fabe10e71c6fb$var$currentModality;\n}\nfunction $507fabe10e71c6fb$export$8397ddfc504fdb9a(modality) {\n $507fabe10e71c6fb$var$currentModality = modality;\n $507fabe10e71c6fb$var$triggerChangeHandlers(modality, null);\n}\nfunction $507fabe10e71c6fb$export$98e20ec92f614cfe() {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n let [modality, setModality] = (0, $28AnR$useState)($507fabe10e71c6fb$var$currentModality);\n (0, $28AnR$useEffect)(()=>{\n let handler = ()=>{\n setModality($507fabe10e71c6fb$var$currentModality);\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n }, []);\n return (0, $28AnR$useIsSSR)() ? null : modality;\n}\nconst $507fabe10e71c6fb$var$nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */ function $507fabe10e71c6fb$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n let document1 = (0, $28AnR$getOwnerDocument)(e === null || e === void 0 ? void 0 : e.target);\n const IHTMLInputElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLInputElement : HTMLInputElement;\n const IHTMLTextAreaElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLTextAreaElement : HTMLTextAreaElement;\n const IHTMLElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLElement : HTMLElement;\n const IKeyboardEvent = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).KeyboardEvent : KeyboardEvent;\n // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n isTextInput = isTextInput || document1.activeElement instanceof IHTMLInputElement && !$507fabe10e71c6fb$var$nonTextInputTypes.has(document1.activeElement.type) || document1.activeElement instanceof IHTMLTextAreaElement || document1.activeElement instanceof IHTMLElement && document1.activeElement.isContentEditable;\n return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $507fabe10e71c6fb$export$ffd9e5021c1fb2d6(props = {}) {\n let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n let [isFocusVisibleState, setFocusVisible] = (0, $28AnR$useState)(autoFocus || $507fabe10e71c6fb$export$b9b3dfddab17db27());\n $507fabe10e71c6fb$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n setFocusVisible(isFocusVisible);\n }, [\n isTextInput\n ], {\n isTextInput: isTextInput\n });\n return {\n isFocusVisible: isFocusVisibleState\n };\n}\nfunction $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n (0, $28AnR$useEffect)(()=>{\n let handler = (modality, e)=>{\n // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n if (!$507fabe10e71c6fb$var$isKeyboardFocusEvent(!!(opts === null || opts === void 0 ? void 0 : opts.isTextInput), modality, e)) return;\n fn($507fabe10e71c6fb$export$b9b3dfddab17db27());\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\n\nexport {$507fabe10e71c6fb$export$d90243b58daecda7 as hasSetupGlobalListeners, $507fabe10e71c6fb$export$2f1888112f558a7d as addWindowFocusTracking, $507fabe10e71c6fb$export$b9b3dfddab17db27 as isFocusVisible, $507fabe10e71c6fb$export$630ff653c5ada6a9 as getInteractionModality, $507fabe10e71c6fb$export$8397ddfc504fdb9a as setInteractionModality, $507fabe10e71c6fb$export$98e20ec92f614cfe as useInteractionModality, $507fabe10e71c6fb$export$ffd9e5021c1fb2d6 as useFocusVisible, $507fabe10e71c6fb$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.module.js.map\n","import {getInteractionModality as $507fabe10e71c6fb$export$630ff653c5ada6a9} from \"./useFocusVisible.mjs\";\nimport {getOwnerDocument as $k50bp$getOwnerDocument, getActiveElement as $k50bp$getActiveElement, runAfterTransition as $k50bp$runAfterTransition, focusWithoutScrolling as $k50bp$focusWithoutScrolling} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3ad3f6e1647bc98d$export$80f3e147d781571c(element) {\n // If the user is interacting with a virtual cursor, e.g. screen reader, then\n // wait until after any animated transitions that are currently occurring on\n // the page before shifting focus. This avoids issues with VoiceOver on iOS\n // causing the page to scroll when moving focus if the element is transitioning\n // from off the screen.\n const ownerDocument = (0, $k50bp$getOwnerDocument)(element);\n const activeElement = (0, $k50bp$getActiveElement)(ownerDocument);\n if ((0, $507fabe10e71c6fb$export$630ff653c5ada6a9)() === 'virtual') {\n let lastFocusedElement = activeElement;\n (0, $k50bp$runAfterTransition)(()=>{\n // If focus did not move and the element is still in the document, focus it.\n if ((0, $k50bp$getActiveElement)(ownerDocument) === lastFocusedElement && element.isConnected) (0, $k50bp$focusWithoutScrolling)(element);\n });\n } else (0, $k50bp$focusWithoutScrolling)(element);\n}\n\n\nexport {$3ad3f6e1647bc98d$export$80f3e147d781571c as focusSafely};\n//# sourceMappingURL=focusSafely.module.js.map\n","import {useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useCallback as $hf0lj$useCallback} from \"react\";\nimport {getOwnerDocument as $hf0lj$getOwnerDocument, getActiveElement as $hf0lj$getActiveElement, getEventTarget as $hf0lj$getEventTarget} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $a1ea59d68270f0dd$export$f8168d8dd8fd66e6(props) {\n let { isDisabled: isDisabled, onFocus: onFocusProp, onBlur: onBlurProp, onFocusChange: onFocusChange } = props;\n const onBlur = (0, $hf0lj$useCallback)((e)=>{\n if (e.target === e.currentTarget) {\n if (onBlurProp) onBlurProp(e);\n if (onFocusChange) onFocusChange(false);\n return true;\n }\n }, [\n onBlurProp,\n onFocusChange\n ]);\n const onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n const onFocus = (0, $hf0lj$useCallback)((e)=>{\n // Double check that document.activeElement actually matches e.target in case a previously chained\n // focus handler already moved focus somewhere else.\n const ownerDocument = (0, $hf0lj$getOwnerDocument)(e.target);\n const activeElement = ownerDocument ? (0, $hf0lj$getActiveElement)(ownerDocument) : (0, $hf0lj$getActiveElement)();\n if (e.target === e.currentTarget && activeElement === (0, $hf0lj$getEventTarget)(e.nativeEvent)) {\n if (onFocusProp) onFocusProp(e);\n if (onFocusChange) onFocusChange(true);\n onSyntheticFocus(e);\n }\n }, [\n onFocusChange,\n onFocusProp,\n onSyntheticFocus\n ]);\n return {\n focusProps: {\n onFocus: !isDisabled && (onFocusProp || onFocusChange || onBlurProp) ? onFocus : undefined,\n onBlur: !isDisabled && (onBlurProp || onFocusChange) ? onBlur : undefined\n }\n };\n}\n\n\nexport {$a1ea59d68270f0dd$export$f8168d8dd8fd66e6 as useFocus};\n//# sourceMappingURL=useFocus.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $93925083ecbb358c$export$48d1ea6320830260(handler) {\n if (!handler) return undefined;\n let shouldStopPropagation = true;\n return (e)=>{\n let event = {\n ...e,\n preventDefault () {\n e.preventDefault();\n },\n isDefaultPrevented () {\n return e.isDefaultPrevented();\n },\n stopPropagation () {\n if (shouldStopPropagation && process.env.NODE_ENV !== 'production') console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n else shouldStopPropagation = true;\n },\n continuePropagation () {\n shouldStopPropagation = false;\n },\n isPropagationStopped () {\n return shouldStopPropagation;\n }\n };\n handler(event);\n if (shouldStopPropagation) e.stopPropagation();\n };\n}\n\n\nexport {$93925083ecbb358c$export$48d1ea6320830260 as createEventHandler};\n//# sourceMappingURL=createEventHandler.module.js.map\n","import {createEventHandler as $93925083ecbb358c$export$48d1ea6320830260} from \"./createEventHandler.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $46d819fcbaf35654$export$8f71654801c2f7cd(props) {\n return {\n keyboardProps: props.isDisabled ? {} : {\n onKeyDown: (0, $93925083ecbb358c$export$48d1ea6320830260)(props.onKeyDown),\n onKeyUp: (0, $93925083ecbb358c$export$48d1ea6320830260)(props.onKeyUp)\n }\n };\n}\n\n\nexport {$46d819fcbaf35654$export$8f71654801c2f7cd as useKeyboard};\n//# sourceMappingURL=useKeyboard.module.js.map\n","import {focusSafely as $3ad3f6e1647bc98d$export$80f3e147d781571c} from \"./focusSafely.mjs\";\nimport {useFocus as $a1ea59d68270f0dd$export$f8168d8dd8fd66e6} from \"./useFocus.mjs\";\nimport {useKeyboard as $46d819fcbaf35654$export$8f71654801c2f7cd} from \"./useKeyboard.mjs\";\nimport {useSyncRef as $fcPuG$useSyncRef, useObjectRef as $fcPuG$useObjectRef, mergeProps as $fcPuG$mergeProps, getOwnerWindow as $fcPuG$getOwnerWindow, isFocusable as $fcPuG$isFocusable, mergeRefs as $fcPuG$mergeRefs} from \"@react-aria/utils\";\nimport $fcPuG$react, {useContext as $fcPuG$useContext, useRef as $fcPuG$useRef, useEffect as $fcPuG$useEffect, forwardRef as $fcPuG$forwardRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nlet $f645667febf57a63$export$f9762fab77588ecb = /*#__PURE__*/ (0, $fcPuG$react).createContext(null);\nfunction $f645667febf57a63$var$useFocusableContext(ref) {\n let context = (0, $fcPuG$useContext)($f645667febf57a63$export$f9762fab77588ecb) || {};\n (0, $fcPuG$useSyncRef)(context, ref);\n // eslint-disable-next-line\n let { ref: _, ...otherProps } = context;\n return otherProps;\n}\nconst $f645667febf57a63$export$13f3202a3e5ddd5 = /*#__PURE__*/ (0, $fcPuG$react).forwardRef(function FocusableProvider(props, ref) {\n let { children: children, ...otherProps } = props;\n let objRef = (0, $fcPuG$useObjectRef)(ref);\n let context = {\n ...otherProps,\n ref: objRef\n };\n return /*#__PURE__*/ (0, $fcPuG$react).createElement($f645667febf57a63$export$f9762fab77588ecb.Provider, {\n value: context\n }, children);\n});\nfunction $f645667febf57a63$export$4c014de7c8940b4c(props, domRef) {\n let { focusProps: focusProps } = (0, $a1ea59d68270f0dd$export$f8168d8dd8fd66e6)(props);\n let { keyboardProps: keyboardProps } = (0, $46d819fcbaf35654$export$8f71654801c2f7cd)(props);\n let interactions = (0, $fcPuG$mergeProps)(focusProps, keyboardProps);\n let domProps = $f645667febf57a63$var$useFocusableContext(domRef);\n let interactionProps = props.isDisabled ? {} : domProps;\n let autoFocusRef = (0, $fcPuG$useRef)(props.autoFocus);\n (0, $fcPuG$useEffect)(()=>{\n if (autoFocusRef.current && domRef.current) (0, $3ad3f6e1647bc98d$export$80f3e147d781571c)(domRef.current);\n autoFocusRef.current = false;\n }, [\n domRef\n ]);\n // Always set a tabIndex so that Safari allows focusing native buttons and inputs.\n let tabIndex = props.excludeFromTabOrder ? -1 : 0;\n if (props.isDisabled) tabIndex = undefined;\n return {\n focusableProps: (0, $fcPuG$mergeProps)({\n ...interactions,\n tabIndex: tabIndex\n }, interactionProps)\n };\n}\nconst $f645667febf57a63$export$35a3bebf7ef2d934 = /*#__PURE__*/ (0, $fcPuG$forwardRef)(({ children: children, ...props }, ref)=>{\n ref = (0, $fcPuG$useObjectRef)(ref);\n let { focusableProps: focusableProps } = $f645667febf57a63$export$4c014de7c8940b4c(props, ref);\n let child = (0, $fcPuG$react).Children.only(children);\n (0, $fcPuG$useEffect)(()=>{\n if (process.env.NODE_ENV === 'production') return;\n let el = ref.current;\n if (!el || !(el instanceof (0, $fcPuG$getOwnerWindow)(el).Element)) {\n console.error('<Focusable> child must forward its ref to a DOM element.');\n return;\n }\n if (!props.isDisabled && !(0, $fcPuG$isFocusable)(el)) {\n console.warn('<Focusable> child must be focusable. Please ensure the tabIndex prop is passed through.');\n return;\n }\n if (el.localName !== 'button' && el.localName !== 'input' && el.localName !== 'select' && el.localName !== 'textarea' && el.localName !== 'a' && el.localName !== 'area' && el.localName !== 'summary' && el.localName !== 'img' && el.localName !== 'svg') {\n let role = el.getAttribute('role');\n if (!role) console.warn('<Focusable> child must have an interactive ARIA role.');\n else if (// https://w3c.github.io/aria/#widget_roles\n role !== 'application' && role !== 'button' && role !== 'checkbox' && role !== 'combobox' && role !== 'gridcell' && role !== 'link' && role !== 'menuitem' && role !== 'menuitemcheckbox' && role !== 'menuitemradio' && role !== 'option' && role !== 'radio' && role !== 'searchbox' && role !== 'separator' && role !== 'slider' && role !== 'spinbutton' && role !== 'switch' && role !== 'tab' && role !== 'tabpanel' && role !== 'textbox' && role !== 'treeitem' && // aria-describedby is also announced on these roles\n role !== 'img' && role !== 'meter' && role !== 'progressbar') console.warn(`<Focusable> child must have an interactive ARIA role. Got \"${role}\".`);\n }\n }, [\n ref,\n props.isDisabled\n ]);\n // @ts-ignore\n let childRef = parseInt((0, $fcPuG$react).version, 10) < 19 ? child.ref : child.props.ref;\n return /*#__PURE__*/ (0, $fcPuG$react).cloneElement(child, {\n ...(0, $fcPuG$mergeProps)(focusableProps, child.props),\n // @ts-ignore\n ref: (0, $fcPuG$mergeRefs)(childRef, ref)\n });\n});\n\n\nexport {$f645667febf57a63$export$f9762fab77588ecb as FocusableContext, $f645667febf57a63$export$13f3202a3e5ddd5 as FocusableProvider, $f645667febf57a63$export$4c014de7c8940b4c as useFocusable, $f645667febf57a63$export$35a3bebf7ef2d934 as Focusable};\n//# sourceMappingURL=useFocusable.module.js.map\n","import {createSyntheticEvent as $8a9cb279dc87e130$export$525bc4921d56d4a, setEventTarget as $8a9cb279dc87e130$export$c2b7abe5d61ec696, useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useRef as $3b9Q0$useRef, useCallback as $3b9Q0$useCallback} from \"react\";\nimport {useGlobalListeners as $3b9Q0$useGlobalListeners, getOwnerDocument as $3b9Q0$getOwnerDocument, getActiveElement as $3b9Q0$getActiveElement, getEventTarget as $3b9Q0$getEventTarget, nodeContains as $3b9Q0$nodeContains} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $9ab94262bd0047c7$export$420e68273165f4ec(props) {\n let { isDisabled: isDisabled, onBlurWithin: onBlurWithin, onFocusWithin: onFocusWithin, onFocusWithinChange: onFocusWithinChange } = props;\n let state = (0, $3b9Q0$useRef)({\n isFocusWithin: false\n });\n let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $3b9Q0$useGlobalListeners)();\n let onBlur = (0, $3b9Q0$useCallback)((e)=>{\n // Ignore events bubbling through portals.\n if (!e.currentTarget.contains(e.target)) return;\n // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n // when moving focus inside the element. Only trigger if the currentTarget doesn't\n // include the relatedTarget (where focus is moving).\n if (state.current.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {\n state.current.isFocusWithin = false;\n removeAllGlobalListeners();\n if (onBlurWithin) onBlurWithin(e);\n if (onFocusWithinChange) onFocusWithinChange(false);\n }\n }, [\n onBlurWithin,\n onFocusWithinChange,\n state,\n removeAllGlobalListeners\n ]);\n let onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n let onFocus = (0, $3b9Q0$useCallback)((e)=>{\n // Ignore events bubbling through portals.\n if (!e.currentTarget.contains(e.target)) return;\n // Double check that document.activeElement actually matches e.target in case a previously chained\n // focus handler already moved focus somewhere else.\n const ownerDocument = (0, $3b9Q0$getOwnerDocument)(e.target);\n const activeElement = (0, $3b9Q0$getActiveElement)(ownerDocument);\n if (!state.current.isFocusWithin && activeElement === (0, $3b9Q0$getEventTarget)(e.nativeEvent)) {\n if (onFocusWithin) onFocusWithin(e);\n if (onFocusWithinChange) onFocusWithinChange(true);\n state.current.isFocusWithin = true;\n onSyntheticFocus(e);\n // Browsers don't fire blur events when elements are removed from the DOM.\n // However, if a focus event occurs outside the element we're tracking, we\n // can manually fire onBlur.\n let currentTarget = e.currentTarget;\n addGlobalListener(ownerDocument, 'focus', (e)=>{\n if (state.current.isFocusWithin && !(0, $3b9Q0$nodeContains)(currentTarget, e.target)) {\n let nativeEvent = new ownerDocument.defaultView.FocusEvent('blur', {\n relatedTarget: e.target\n });\n (0, $8a9cb279dc87e130$export$c2b7abe5d61ec696)(nativeEvent, currentTarget);\n let event = (0, $8a9cb279dc87e130$export$525bc4921d56d4a)(nativeEvent);\n onBlur(event);\n }\n }, {\n capture: true\n });\n }\n }, [\n onFocusWithin,\n onFocusWithinChange,\n onSyntheticFocus,\n addGlobalListener,\n onBlur\n ]);\n if (isDisabled) return {\n focusWithinProps: {\n // These cannot be null, that would conflict in mergeProps\n onFocus: undefined,\n onBlur: undefined\n }\n };\n return {\n focusWithinProps: {\n onFocus: onFocus,\n onBlur: onBlur\n }\n };\n}\n\n\nexport {$9ab94262bd0047c7$export$420e68273165f4ec as useFocusWithin};\n//# sourceMappingURL=useFocusWithin.module.js.map\n","import {useGlobalListeners as $AWxnT$useGlobalListeners, getOwnerDocument as $AWxnT$getOwnerDocument, nodeContains as $AWxnT$nodeContains} from \"@react-aria/utils\";\nimport {useState as $AWxnT$useState, useRef as $AWxnT$useRef, useEffect as $AWxnT$useEffect, useMemo as $AWxnT$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\nlet $6179b936705e76d3$var$hoverCount = 0;\nfunction $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents() {\n $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = true;\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n // the distant future because a user previously touched the element.\n setTimeout(()=>{\n $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\nfunction $6179b936705e76d3$var$handleGlobalPointerEvent(e) {\n if (e.pointerType === 'touch') $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents();\n}\nfunction $6179b936705e76d3$var$setupGlobalTouchEvents() {\n if (typeof document === 'undefined') return;\n if ($6179b936705e76d3$var$hoverCount === 0) {\n if (typeof PointerEvent !== 'undefined') document.addEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n else if (process.env.NODE_ENV === 'test') document.addEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n }\n $6179b936705e76d3$var$hoverCount++;\n return ()=>{\n $6179b936705e76d3$var$hoverCount--;\n if ($6179b936705e76d3$var$hoverCount > 0) return;\n if (typeof PointerEvent !== 'undefined') document.removeEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n else if (process.env.NODE_ENV === 'test') document.removeEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n };\n}\nfunction $6179b936705e76d3$export$ae780daf29e6d456(props) {\n let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, isDisabled: isDisabled } = props;\n let [isHovered, setHovered] = (0, $AWxnT$useState)(false);\n let state = (0, $AWxnT$useRef)({\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: '',\n target: null\n }).current;\n (0, $AWxnT$useEffect)($6179b936705e76d3$var$setupGlobalTouchEvents, []);\n let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $AWxnT$useGlobalListeners)();\n let { hoverProps: hoverProps, triggerHoverEnd: triggerHoverEnd } = (0, $AWxnT$useMemo)(()=>{\n let triggerHoverStart = (event, pointerType)=>{\n state.pointerType = pointerType;\n if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) return;\n state.isHovered = true;\n let target = event.currentTarget;\n state.target = target;\n // When an element that is hovered over is removed, no pointerleave event is fired by the browser,\n // even though the originally hovered target may have shrunk in size so it is no longer hovered.\n // However, a pointerover event will be fired on the new target the mouse is over.\n // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.\n addGlobalListener((0, $AWxnT$getOwnerDocument)(event.target), 'pointerover', (e)=>{\n if (state.isHovered && state.target && !(0, $AWxnT$nodeContains)(state.target, e.target)) triggerHoverEnd(e, e.pointerType);\n }, {\n capture: true\n });\n if (onHoverStart) onHoverStart({\n type: 'hoverstart',\n target: target,\n pointerType: pointerType\n });\n if (onHoverChange) onHoverChange(true);\n setHovered(true);\n };\n let triggerHoverEnd = (event, pointerType)=>{\n let target = state.target;\n state.pointerType = '';\n state.target = null;\n if (pointerType === 'touch' || !state.isHovered || !target) return;\n state.isHovered = false;\n removeAllGlobalListeners();\n if (onHoverEnd) onHoverEnd({\n type: 'hoverend',\n target: target,\n pointerType: pointerType\n });\n if (onHoverChange) onHoverChange(false);\n setHovered(false);\n };\n let hoverProps = {};\n if (typeof PointerEvent !== 'undefined') {\n hoverProps.onPointerEnter = (e)=>{\n if ($6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;\n triggerHoverStart(e, e.pointerType);\n };\n hoverProps.onPointerLeave = (e)=>{\n if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, e.pointerType);\n };\n } else if (process.env.NODE_ENV === 'test') {\n hoverProps.onTouchStart = ()=>{\n state.ignoreEmulatedMouseEvents = true;\n };\n hoverProps.onMouseEnter = (e)=>{\n if (!state.ignoreEmulatedMouseEvents && !$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');\n state.ignoreEmulatedMouseEvents = false;\n };\n hoverProps.onMouseLeave = (e)=>{\n if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, 'mouse');\n };\n }\n return {\n hoverProps: hoverProps,\n triggerHoverEnd: triggerHoverEnd\n };\n }, [\n onHoverStart,\n onHoverChange,\n onHoverEnd,\n isDisabled,\n state,\n addGlobalListener,\n removeAllGlobalListeners\n ]);\n (0, $AWxnT$useEffect)(()=>{\n // Call the triggerHoverEnd as soon as isDisabled changes to true\n // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n if (isDisabled) triggerHoverEnd({\n currentTarget: state.target\n }, state.pointerType);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isDisabled\n ]);\n return {\n hoverProps: hoverProps,\n isHovered: isHovered\n };\n}\n\n\nexport {$6179b936705e76d3$export$ae780daf29e6d456 as useHover};\n//# sourceMappingURL=useHover.module.js.map\n","import {isFocusVisible as $isWE5$isFocusVisible, useFocusVisibleListener as $isWE5$useFocusVisibleListener, useFocus as $isWE5$useFocus, useFocusWithin as $isWE5$useFocusWithin} from \"@react-aria/interactions\";\nimport {useRef as $isWE5$useRef, useState as $isWE5$useState, useCallback as $isWE5$useCallback} from \"react\";\n\n\n\nfunction $f7dceffc5ad7768b$export$4e328f61c538687f(props = {}) {\n let { autoFocus: autoFocus = false, isTextInput: isTextInput, within: within } = props;\n let state = (0, $isWE5$useRef)({\n isFocused: false,\n isFocusVisible: autoFocus || (0, $isWE5$isFocusVisible)()\n });\n let [isFocused, setFocused] = (0, $isWE5$useState)(false);\n let [isFocusVisibleState, setFocusVisible] = (0, $isWE5$useState)(()=>state.current.isFocused && state.current.isFocusVisible);\n let updateState = (0, $isWE5$useCallback)(()=>setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n let onFocusChange = (0, $isWE5$useCallback)((isFocused)=>{\n state.current.isFocused = isFocused;\n setFocused(isFocused);\n updateState();\n }, [\n updateState\n ]);\n (0, $isWE5$useFocusVisibleListener)((isFocusVisible)=>{\n state.current.isFocusVisible = isFocusVisible;\n updateState();\n }, [], {\n isTextInput: isTextInput\n });\n let { focusProps: focusProps } = (0, $isWE5$useFocus)({\n isDisabled: within,\n onFocusChange: onFocusChange\n });\n let { focusWithinProps: focusWithinProps } = (0, $isWE5$useFocusWithin)({\n isDisabled: !within,\n onFocusWithinChange: onFocusChange\n });\n return {\n isFocused: isFocused,\n isFocusVisible: isFocusVisibleState,\n focusProps: within ? focusWithinProps : focusProps\n };\n}\n\n\nexport {$f7dceffc5ad7768b$export$4e328f61c538687f as useFocusRing};\n//# sourceMappingURL=useFocusRing.module.js.map\n","// src/utils.ts\nimport { forwardRef as baseForwardRef } from \"react\";\nfunction forwardRef(component) {\n return baseForwardRef(component);\n}\nvar toIterator = (obj) => {\n return {\n ...obj,\n [Symbol.iterator]: function() {\n const keys = Object.keys(this);\n let index = 0;\n return {\n next: () => {\n if (index >= keys.length) {\n return { done: true };\n }\n const key = keys[index];\n const value = this[key];\n index++;\n return { value: { key, value }, done: false };\n }\n };\n }\n };\n};\nvar mapPropsVariants = (props, variantKeys, removeVariantProps = true) => {\n if (!variantKeys) {\n return [props, {}];\n }\n const picked = variantKeys.reduce((acc, key) => {\n if (key in props) {\n return { ...acc, [key]: props[key] };\n } else {\n return acc;\n }\n }, {});\n if (removeVariantProps) {\n const omitted = Object.keys(props).filter((key) => !variantKeys.includes(key)).reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n return [omitted, picked];\n } else {\n return [props, picked];\n }\n};\nvar mapPropsVariantsWithCommon = (originalProps, variantKeys, commonKeys) => {\n const props = Object.keys(originalProps).filter((key) => !variantKeys.includes(key) || (commonKeys == null ? void 0 : commonKeys.includes(key))).reduce((acc, key) => ({ ...acc, [key]: originalProps[key] }), {});\n const variants = variantKeys.reduce(\n (acc, key) => ({ ...acc, [key]: originalProps[key] }),\n {}\n );\n return [props, variants];\n};\nvar isHeroUIEl = (component) => {\n var _a, _b, _c;\n return !!((_c = (_b = (_a = component.type) == null ? void 0 : _a.render) == null ? void 0 : _b.displayName) == null ? void 0 : _c.includes(\"HeroUI\"));\n};\n\nexport {\n forwardRef,\n toIterator,\n mapPropsVariants,\n mapPropsVariantsWithCommon,\n isHeroUIEl\n};\n","// src/utils/variants.ts\nvar solid = {\n default: \"bg-default text-default-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n success: \"bg-success text-success-foreground\",\n warning: \"bg-warning text-warning-foreground\",\n danger: \"bg-danger text-danger-foreground\",\n foreground: \"bg-foreground text-background\"\n};\nvar shadow = {\n default: \"shadow-lg shadow-default/50 bg-default text-default-foreground\",\n primary: \"shadow-lg shadow-primary/40 bg-primary text-primary-foreground\",\n secondary: \"shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground\",\n success: \"shadow-lg shadow-success/40 bg-success text-success-foreground\",\n warning: \"shadow-lg shadow-warning/40 bg-warning text-warning-foreground\",\n danger: \"shadow-lg shadow-danger/40 bg-danger text-danger-foreground\",\n foreground: \"shadow-lg shadow-foreground/40 bg-foreground text-background\"\n};\nvar bordered = {\n default: \"bg-transparent border-default text-foreground\",\n primary: \"bg-transparent border-primary text-primary\",\n secondary: \"bg-transparent border-secondary text-secondary\",\n success: \"bg-transparent border-success text-success\",\n warning: \"bg-transparent border-warning text-warning\",\n danger: \"bg-transparent border-danger text-danger\",\n foreground: \"bg-transparent border-foreground text-foreground\"\n};\nvar flat = {\n default: \"bg-default/40 text-default-700\",\n primary: \"bg-primary/20 text-primary-600\",\n secondary: \"bg-secondary/20 text-secondary-600\",\n success: \"bg-success/20 text-success-700 dark:text-success\",\n warning: \"bg-warning/20 text-warning-700 dark:text-warning\",\n danger: \"bg-danger/20 text-danger-600 dark:text-danger-500\",\n foreground: \"bg-foreground/10 text-foreground\"\n};\nvar faded = {\n default: \"border-default bg-default-100 text-default-foreground\",\n primary: \"border-default bg-default-100 text-primary\",\n secondary: \"border-default bg-default-100 text-secondary\",\n success: \"border-default bg-default-100 text-success\",\n warning: \"border-default bg-default-100 text-warning\",\n danger: \"border-default bg-default-100 text-danger\",\n foreground: \"border-default bg-default-100 text-foreground\"\n};\nvar light = {\n default: \"bg-transparent text-default-foreground\",\n primary: \"bg-transparent text-primary\",\n secondary: \"bg-transparent text-secondary\",\n success: \"bg-transparent text-success\",\n warning: \"bg-transparent text-warning\",\n danger: \"bg-transparent text-danger\",\n foreground: \"bg-transparent text-foreground\"\n};\nvar ghost = {\n default: \"border-default text-default-foreground\",\n primary: \"border-primary text-primary\",\n secondary: \"border-secondary text-secondary\",\n success: \"border-success text-success\",\n warning: \"border-warning text-warning\",\n danger: \"border-danger text-danger\",\n foreground: \"border-foreground text-foreground hover:!bg-foreground\"\n};\nvar colorVariants = {\n solid,\n shadow,\n bordered,\n flat,\n faded,\n light,\n ghost\n};\n\nexport {\n colorVariants\n};\n","// src/utilities/animation.ts\nvar animation_default = {\n /** Animation Utilities */\n \".spinner-bar-animation\": {\n \"animation-delay\": \"calc(-1.2s + (0.1s * var(--bar-index)))\",\n transform: \"rotate(calc(30deg * var(--bar-index)))translate(140%)\"\n },\n \".spinner-dot-animation\": {\n \"animation-delay\": \"calc(250ms * var(--dot-index))\"\n },\n \".spinner-dot-blink-animation\": {\n \"animation-delay\": \"calc(200ms * var(--dot-index))\"\n }\n};\n\nexport {\n animation_default\n};\n","// src/utilities/custom.ts\nvar custom_default = {\n /**\n * Custom utilities\n */\n \".leading-inherit\": {\n \"line-height\": \"inherit\"\n },\n \".bg-img-inherit\": {\n \"background-image\": \"inherit\"\n },\n \".bg-clip-inherit\": {\n \"background-clip\": \"inherit\"\n },\n \".text-fill-inherit\": {\n \"-webkit-text-fill-color\": \"inherit\"\n },\n \".tap-highlight-transparent\": {\n \"-webkit-tap-highlight-color\": \"transparent\"\n },\n \".input-search-cancel-button-none\": {\n \"&::-webkit-search-cancel-button\": {\n \"-webkit-appearance\": \"none\"\n }\n }\n};\n\nexport {\n custom_default\n};\n","// src/utilities/scrollbar-hide.ts\nvar scrollbar_hide_default = {\n /**\n * Scroll Hide\n */\n \".scrollbar-hide\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"none\",\n /* Firefox */\n \"scrollbar-width\": \"none\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"none\"\n }\n },\n \".scrollbar-default\": {\n /* IE and Edge */\n \"-ms-overflow-style\": \"auto\",\n /* Firefox */\n \"scrollbar-width\": \"auto\",\n /* Safari and Chrome */\n \"&::-webkit-scrollbar\": {\n display: \"block\"\n }\n }\n};\n\nexport {\n scrollbar_hide_default\n};\n","// src/utilities/text.ts\nvar text_default = {\n /**\n * Text utilities\n */\n \".text-tiny\": {\n \"font-size\": \"var(--heroui-font-size-tiny)\",\n \"line-height\": \"var(--heroui-line-height-tiny)\"\n },\n \".text-small\": {\n \"font-size\": \"var(--heroui-font-size-small)\",\n \"line-height\": \"var(--heroui-line-height-small)\"\n },\n \".text-medium\": {\n \"font-size\": \"var(--heroui-font-size-medium)\",\n \"line-height\": \"var(--heroui-line-height-medium)\"\n },\n \".text-large\": {\n \"font-size\": \"var(--heroui-font-size-large)\",\n \"line-height\": \"var(--heroui-line-height-large)\"\n }\n};\n\nexport {\n text_default\n};\n","// src/utilities/transition.ts\nvar DEFAULT_TRANSITION_DURATION = \"250ms\";\nvar transition_default = {\n /**\n * Transition utilities\n */\n \".transition-background\": {\n \"transition-property\": \"background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-colors-opacity\": {\n \"transition-property\": \"color, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-width\": {\n \"transition-property\": \"width\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-height\": {\n \"transition-property\": \"height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-size\": {\n \"transition-property\": \"width, height\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-left\": {\n \"transition-property\": \"left\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-transform-opacity\": {\n \"transition-property\": \"transform, scale, opacity rotate\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-transform-background\": {\n \"transition-property\": \"transform, scale, background\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-transform-colors\": {\n \"transition-property\": \"transform, scale, color, background, background-color, border-color, text-decoration-color, fill, stroke\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n },\n \".transition-transform-colors-opacity\": {\n \"transition-property\": \"transform, scale, color, background, background-color, border-color, text-decoration-color, fill, stroke, opacity\",\n \"transition-timing-function\": \"ease\",\n \"transition-duration\": DEFAULT_TRANSITION_DURATION\n }\n};\n\nexport {\n DEFAULT_TRANSITION_DURATION,\n transition_default\n};\n","import {\n animation_default\n} from \"./chunk-POSTVCTR.mjs\";\nimport {\n custom_default\n} from \"./chunk-MPVWW3DX.mjs\";\nimport {\n scrollbar_hide_default\n} from \"./chunk-WH6SPIFG.mjs\";\nimport {\n text_default\n} from \"./chunk-RUIUXVZ4.mjs\";\nimport {\n transition_default\n} from \"./chunk-GSRZWDGA.mjs\";\n\n// src/utilities/index.ts\nvar utilities = {\n ...custom_default,\n ...transition_default,\n ...scrollbar_hide_default,\n ...text_default,\n ...animation_default\n};\n\nexport {\n utilities\n};\n","import {\n utilities\n} from \"./chunk-6JJPIEK7.mjs\";\n\n// src/utils/tw-merge-config.ts\nvar COMMON_UNITS = [\"small\", \"medium\", \"large\"];\nvar twMergeConfig = {\n theme: {\n spacing: [\"divider\"],\n radius: COMMON_UNITS\n },\n classGroups: {\n shadow: [{ shadow: COMMON_UNITS }],\n opacity: [{ opacity: [\"disabled\"] }],\n \"font-size\": [{ text: [\"tiny\", ...COMMON_UNITS] }],\n \"border-w\": [{ border: COMMON_UNITS }],\n \"bg-image\": [\n \"bg-stripe-gradient-default\",\n \"bg-stripe-gradient-primary\",\n \"bg-stripe-gradient-secondary\",\n \"bg-stripe-gradient-success\",\n \"bg-stripe-gradient-warning\",\n \"bg-stripe-gradient-danger\"\n ],\n transition: Object.keys(utilities).filter((key) => key.includes(\".transition\")).map((key) => key.replace(\".\", \"\"))\n // remove the dot from the key, .transition-background -> transition-background\n }\n};\n\nexport {\n COMMON_UNITS,\n twMergeConfig\n};\n","var u=e=>e===false?\"false\":e===true?\"true\":e===0?\"0\":e,a=e=>{if(!e||typeof e!=\"object\")return true;for(let r in e)return false;return true},y=(e,r)=>{if(e===r)return true;if(!e||!r)return false;let n=Object.keys(e),t=Object.keys(r);if(n.length!==t.length)return false;for(let s=0;s<n.length;s++){let f=n[s];if(!t.includes(f)||e[f]!==r[f])return false}return true},p=e=>e===true||e===false;function o(e,r){for(let n=0;n<e.length;n++){let t=e[n];Array.isArray(t)?o(t,r):r.push(t);}}function g(e){let r=[];return o(e,r),r}var i=(...e)=>{let r=[];o(e,r);let n=[];for(let t=0;t<r.length;t++)r[t]&&n.push(r[t]);return n},c=(e,r)=>{let n={};for(let t in e){let s=e[t];if(t in r){let f=r[t];Array.isArray(s)||Array.isArray(f)?n[t]=i(f,s):typeof s==\"object\"&&typeof f==\"object\"&&s&&f?n[t]=c(s,f):n[t]=f+\" \"+s;}else n[t]=s;}for(let t in r)t in e||(n[t]=r[t]);return n},l=/\\s+/g,x=e=>!e||typeof e!=\"string\"?e:e.replace(l,\" \").trim();export{u as a,a as b,y as c,p as d,g as e,i as f,c as g,x as h};","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import {b}from'./chunk-LK3VBVBE.js';import {twMerge,extendTailwindMerge}from'tailwind-merge';var p=s=>b(s)?twMerge:extendTailwindMerge({...s,extend:{theme:s.theme,classGroups:s.classGroups,conflictingClassGroupModifiers:s.conflictingClassGroupModifiers,conflictingClassGroups:s.conflictingClassGroups,...s.extend}});export{p as a};","import {a}from'./chunk-RFCF2RNL.js';import {b,g,c,f,a as a$1,h}from'./chunk-LK3VBVBE.js';var st={twMerge:true,twMergeConfig:{},responsiveVariants:false},x=(...l)=>{let u=[];X(l,u);let t=\"\";for(let d=0;d<u.length;d++)u[d]&&(t&&(t+=\" \"),t+=u[d]);return t||void 0};function X(l,u){for(let t=0;t<l.length;t++){let d=l[t];Array.isArray(d)?X(d,u):d&&u.push(d);}}var P=null,B={},F=false,S=(...l)=>u=>{let t=x(l);return !t||!u.twMerge?t:((!P||F)&&(F=false,P=a(B)),P(t)||void 0)},Q=(l,u)=>{for(let t in u)t in l?l[t]=x(l[t],u[t]):l[t]=u[t];return l},rt=(l,u)=>{let{extend:t=null,slots:d={},variants:R={},compoundVariants:q=[],compoundSlots:A=[],defaultVariants:L={}}=l,m={...st,...u},M=t?.base?x(t.base,l?.base):l?.base,y=t?.variants&&!b(t.variants)?g(R,t.variants):R,T=t?.defaultVariants&&!b(t.defaultVariants)?{...t.defaultVariants,...L}:L;!b(m.twMergeConfig)&&!c(m.twMergeConfig,B)&&(F=true,B=m.twMergeConfig);let j=b(t?.slots),$=b(d)?{}:{base:x(l?.base,j&&t?.base),...d},N=j?$:Q({...t?.slots},b($)?{base:l?.base}:$),w=b(t?.compoundVariants)?q:f(t?.compoundVariants,q),V=b$1=>{if(b(y)&&b(d)&&j)return S(M,b$1?.class,b$1?.className)(m);if(w&&!Array.isArray(w))throw new TypeError(`The \"compoundVariants\" prop must be an array. Received: ${typeof w}`);if(A&&!Array.isArray(A))throw new TypeError(`The \"compoundSlots\" prop must be an array. Received: ${typeof A}`);let Z=(n,e,s=[],o)=>{let a=s;if(typeof e==\"string\"){let c=h(e).split(\" \");for(let f=0;f<c.length;f++)a.push(`${n}:${c[f]}`);}else if(Array.isArray(e))for(let r=0;r<e.length;r++)a.push(`${n}:${e[r]}`);else if(typeof e==\"object\"&&typeof o==\"string\"&&o in e){let r=e[o];if(r&&typeof r==\"string\"){let f=h(r).split(\" \"),p=[];for(let i=0;i<f.length;i++)p.push(`${n}:${f[i]}`);a[o]=a[o]?a[o].concat(p):p;}else if(Array.isArray(r)&&r.length>0){let c=[];for(let f=0;f<r.length;f++)c.push(`${n}:${r[f]}`);a[o]=c;}}return a},U=(n,e=y,s=null,o=null)=>{let a=e[n];if(!a||b(a))return null;let r=o?.[n]??b$1?.[n];if(r===null)return null;let c=a$1(r),f=Array.isArray(m.responsiveVariants)&&m.responsiveVariants.length>0||m.responsiveVariants===true,p=T?.[n],i=[];if(typeof c==\"object\"&&f)for(let[C,G]of Object.entries(c)){let nt=a[G];if(C===\"initial\"){p=G;continue}Array.isArray(m.responsiveVariants)&&!m.responsiveVariants.includes(C)||(i=Z(C,nt,i,s));}let v=c!=null&&typeof c!=\"object\"?c:a$1(p),h=a[v||\"false\"];return typeof i==\"object\"&&typeof s==\"string\"&&i[s]?Q(i,h):i.length>0?(i.push(h),s===\"base\"?i.join(\" \"):i):h},_=()=>{if(!y)return null;let n=Object.keys(y),e=[];for(let s=0;s<n.length;s++){let o=U(n[s],y);o&&e.push(o);}return e},K=(n,e)=>{if(!y||typeof y!=\"object\")return null;let s=[];for(let o in y){let a=U(o,y,n,e),r=n===\"base\"&&typeof a==\"string\"?a:a&&a[n];r&&s.push(r);}return s},W={};for(let n in b$1){let e=b$1[n];e!==void 0&&(W[n]=e);}let z=(n,e)=>{let s=typeof b$1?.[n]==\"object\"?{[n]:b$1[n]?.initial}:{};return {...T,...W,...s,...e}},D=(n=[],e)=>{let s=[],o=n.length;for(let a=0;a<o;a++){let{class:r,className:c,...f}=n[a],p=true,i=z(null,e);for(let v in f){let h=f[v],C=i[v];if(Array.isArray(h)){if(!h.includes(C)){p=false;break}}else {if((h==null||h===false)&&(C==null||C===false))continue;if(C!==h){p=false;break}}}p&&(r&&s.push(r),c&&s.push(c));}return s},tt=n=>{let e=D(w,n);if(!Array.isArray(e))return e;let s={},o=S;for(let a=0;a<e.length;a++){let r=e[a];if(typeof r==\"string\")s.base=o(s.base,r)(m);else if(typeof r==\"object\")for(let c in r)s[c]=o(s[c],r[c])(m);}return s},et=n=>{if(A.length<1)return null;let e={},s=z(null,n);for(let o=0;o<A.length;o++){let{slots:a=[],class:r,className:c,...f}=A[o];if(!b(f)){let p=true;for(let i in f){let v=s[i],h=f[i];if(v===void 0||(Array.isArray(h)?!h.includes(v):h!==v)){p=false;break}}if(!p)continue}for(let p=0;p<a.length;p++){let i=a[p];e[i]||(e[i]=[]),e[i].push([r,c]);}}return e};if(!b(d)||!j){let n={};if(typeof N==\"object\"&&!b(N)){let e=S;for(let s in N)n[s]=o=>{let a=tt(o),r=et(o);return e(N[s],K(s,o),a?a[s]:void 0,r?r[s]:void 0,o?.class,o?.className)(m)};}return n}return S(M,_(),D(w),b$1?.class,b$1?.className)(m)},Y=()=>{if(!(!y||typeof y!=\"object\"))return Object.keys(y)};return V.variantKeys=Y(),V.extend=t,V.base=M,V.slots=N,V.variants=y,V.defaultVariants=T,V.compoundSlots=A,V.compoundVariants=w,V},it=l=>(u,t)=>rt(u,t?g(l,t):l);export{S as cn,x as cnBase,it as createTV,st as defaultConfig,rt as tv};","import {\n twMergeConfig\n} from \"./chunk-UFVD3L5A.mjs\";\n\n// src/utils/tv.ts\nimport { tv as tvBase } from \"tailwind-variants\";\nvar tv = (options, config) => {\n var _a, _b, _c;\n return tvBase(options, {\n ...config,\n twMerge: (_a = config == null ? void 0 : config.twMerge) != null ? _a : true,\n twMergeConfig: {\n ...config == null ? void 0 : config.twMergeConfig,\n theme: {\n ...(_b = config == null ? void 0 : config.twMergeConfig) == null ? void 0 : _b.theme,\n ...twMergeConfig.theme\n },\n classGroups: {\n ...(_c = config == null ? void 0 : config.twMergeConfig) == null ? void 0 : _c.classGroups,\n ...twMergeConfig.classGroups\n }\n }\n });\n};\n\nexport {\n tv\n};\n","import {\n tv\n} from \"./chunk-TX3FPB7D.mjs\";\n\n// src/components/spinner.ts\nvar spinner = tv({\n slots: {\n base: \"relative inline-flex flex-col gap-2 items-center justify-center\",\n wrapper: \"relative flex\",\n label: \"text-foreground dark:text-foreground-dark font-regular\",\n circle1: \"absolute w-full h-full rounded-full\",\n circle2: \"absolute w-full h-full rounded-full\",\n dots: \"relative rounded-full mx-auto\",\n spinnerBars: [\n \"absolute\",\n \"animate-fade-out\",\n \"rounded-full\",\n \"w-[25%]\",\n \"h-[8%]\",\n \"left-[calc(37.5%)]\",\n \"top-[calc(46%)]\",\n \"spinner-bar-animation\"\n ]\n },\n variants: {\n size: {\n sm: {\n wrapper: \"w-5 h-5\",\n circle1: \"border-2\",\n circle2: \"border-2\",\n dots: \"size-1\",\n label: \"text-small\"\n },\n md: {\n wrapper: \"w-8 h-8\",\n circle1: \"border-3\",\n circle2: \"border-3\",\n dots: \"size-1.5\",\n label: \"text-medium\"\n },\n lg: {\n wrapper: \"w-10 h-10\",\n circle1: \"border-3\",\n circle2: \"border-3\",\n dots: \"size-2\",\n label: \"text-large\"\n }\n },\n color: {\n current: {\n circle1: \"border-b-current\",\n circle2: \"border-b-current\",\n dots: \"bg-current\",\n spinnerBars: \"bg-current\"\n },\n white: {\n circle1: \"border-b-white\",\n circle2: \"border-b-white\",\n dots: \"bg-white\",\n spinnerBars: \"bg-white\"\n },\n default: {\n circle1: \"border-b-default\",\n circle2: \"border-b-default\",\n dots: \"bg-default\",\n spinnerBars: \"bg-default\"\n },\n primary: {\n circle1: \"border-b-primary\",\n circle2: \"border-b-primary\",\n dots: \"bg-primary\",\n spinnerBars: \"bg-primary\"\n },\n secondary: {\n circle1: \"border-b-secondary\",\n circle2: \"border-b-secondary\",\n dots: \"bg-secondary\",\n spinnerBars: \"bg-secondary\"\n },\n success: {\n circle1: \"border-b-success\",\n circle2: \"border-b-success\",\n dots: \"bg-success\",\n spinnerBars: \"bg-success\"\n },\n warning: {\n circle1: \"border-b-warning\",\n circle2: \"border-b-warning\",\n dots: \"bg-warning\",\n spinnerBars: \"bg-warning\"\n },\n danger: {\n circle1: \"border-b-danger\",\n circle2: \"border-b-danger\",\n dots: \"bg-danger\",\n spinnerBars: \"bg-danger\"\n }\n },\n labelColor: {\n foreground: {\n label: \"text-foreground\"\n },\n primary: {\n label: \"text-primary\"\n },\n secondary: {\n label: \"text-secondary\"\n },\n success: {\n label: \"text-success\"\n },\n warning: {\n label: \"text-warning\"\n },\n danger: {\n label: \"text-danger\"\n }\n },\n variant: {\n default: {\n circle1: [\n \"animate-spinner-ease-spin\",\n \"border-solid\",\n \"border-t-transparent\",\n \"border-l-transparent\",\n \"border-r-transparent\"\n ],\n circle2: [\n \"opacity-75\",\n \"animate-spinner-linear-spin\",\n \"border-dotted\",\n \"border-t-transparent\",\n \"border-l-transparent\",\n \"border-r-transparent\"\n ]\n },\n gradient: {\n circle1: [\n \"border-0\",\n \"bg-gradient-to-b\",\n \"from-transparent\",\n \"via-transparent\",\n \"to-primary\",\n \"animate-spinner-linear-spin\",\n \"[animation-duration:1s]\",\n \"[-webkit-mask:radial-gradient(closest-side,rgba(0,0,0,0.0)calc(100%-3px),rgba(0,0,0,1)calc(100%-3px))]\"\n ],\n circle2: [\"hidden\"]\n },\n wave: {\n wrapper: \"translate-y-3/4\",\n dots: [\"animate-sway\", \"spinner-dot-animation\"]\n },\n dots: {\n wrapper: \"translate-y-2/4\",\n dots: [\"animate-blink\", \"spinner-dot-blink-animation\"]\n },\n spinner: {},\n simple: {\n wrapper: \"text-foreground h-5 w-5 animate-spin\",\n circle1: \"opacity-25\",\n circle2: \"opacity-75\"\n }\n }\n },\n defaultVariants: {\n size: \"md\",\n color: \"primary\",\n labelColor: \"foreground\",\n variant: \"default\"\n },\n compoundVariants: [\n { variant: \"gradient\", color: \"current\", class: { circle1: \"to-current\" } },\n { variant: \"gradient\", color: \"white\", class: { circle1: \"to-white\" } },\n { variant: \"gradient\", color: \"default\", class: { circle1: \"to-default\" } },\n { variant: \"gradient\", color: \"primary\", class: { circle1: \"to-primary\" } },\n { variant: \"gradient\", color: \"secondary\", class: { circle1: \"to-secondary\" } },\n { variant: \"gradient\", color: \"success\", class: { circle1: \"to-success\" } },\n { variant: \"gradient\", color: \"warning\", class: { circle1: \"to-warning\" } },\n { variant: \"gradient\", color: \"danger\", class: { circle1: \"to-danger\" } },\n {\n variant: \"wave\",\n size: \"sm\",\n class: {\n wrapper: \"w-5 h-5\"\n }\n },\n {\n variant: \"wave\",\n size: \"md\",\n class: {\n wrapper: \"w-8 h-8\"\n }\n },\n {\n variant: \"wave\",\n size: \"lg\",\n class: {\n wrapper: \"w-12 h-12\"\n }\n },\n {\n variant: \"dots\",\n size: \"sm\",\n class: {\n wrapper: \"w-5 h-5\"\n }\n },\n {\n variant: \"dots\",\n size: \"md\",\n class: {\n wrapper: \"w-8 h-8\"\n }\n },\n {\n variant: \"dots\",\n size: \"lg\",\n class: {\n wrapper: \"w-12 h-12\"\n }\n },\n // Simple variants\n // Size\n {\n variant: \"simple\",\n size: \"sm\",\n class: {\n wrapper: \"w-5 h-5\"\n }\n },\n {\n variant: \"simple\",\n size: \"md\",\n class: {\n wrapper: \"w-8 h-8\"\n }\n },\n {\n variant: \"simple\",\n size: \"lg\",\n class: {\n wrapper: \"w-12 h-12\"\n }\n },\n // Color\n {\n variant: \"simple\",\n color: \"current\",\n class: {\n wrapper: \"text-current\"\n }\n },\n {\n variant: \"simple\",\n color: \"white\",\n class: {\n wrapper: \"text-white\"\n }\n },\n {\n variant: \"simple\",\n color: \"default\",\n class: {\n wrapper: \"text-default\"\n }\n },\n {\n variant: \"simple\",\n color: \"primary\",\n class: {\n wrapper: \"text-primary\"\n }\n },\n {\n variant: \"simple\",\n color: \"secondary\",\n class: {\n wrapper: \"text-secondary\"\n }\n },\n {\n variant: \"simple\",\n color: \"success\",\n class: {\n wrapper: \"text-success\"\n }\n },\n {\n variant: \"simple\",\n color: \"warning\",\n class: {\n wrapper: \"text-warning\"\n }\n },\n {\n variant: \"simple\",\n color: \"danger\",\n class: {\n wrapper: \"text-danger\"\n }\n }\n ]\n});\n\nexport {\n spinner\n};\n","// src/utils/classes.ts\nvar baseStyles = (prefix) => ({\n color: `hsl(var(--${prefix}-foreground))`,\n backgroundColor: `hsl(var(--${prefix}-background))`\n});\nvar focusVisibleClasses = [\n \"focus-visible:z-10\",\n \"focus-visible:outline-2\",\n \"focus-visible:outline-focus\",\n \"focus-visible:outline-offset-2\"\n];\nvar dataFocusVisibleClasses = [\n \"outline-solid outline-transparent\",\n \"data-[focus-visible=true]:z-10\",\n \"data-[focus-visible=true]:outline-2\",\n \"data-[focus-visible=true]:outline-focus\",\n \"data-[focus-visible=true]:outline-offset-2\"\n];\nvar groupDataFocusVisibleClasses = [\n \"outline-solid outline-transparent\",\n \"group-data-[focus-visible=true]:z-10\",\n \"group-data-[focus-visible=true]:ring-2\",\n \"group-data-[focus-visible=true]:ring-focus\",\n \"group-data-[focus-visible=true]:ring-offset-2\",\n \"group-data-[focus-visible=true]:ring-offset-background\"\n];\nvar ringClasses = [\n \"outline-solid outline-transparent\",\n \"ring-2\",\n \"ring-focus\",\n \"ring-offset-2\",\n \"ring-offset-background\"\n];\nvar translateCenterClasses = [\n \"absolute\",\n \"top-1/2\",\n \"left-1/2\",\n \"-translate-x-1/2\",\n \"-translate-y-1/2\"\n];\nvar absoluteFullClasses = [\"absolute\", \"inset-0\"];\nvar collapseAdjacentVariantBorders = {\n default: [\"[&+.border-medium.border-default]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"],\n primary: [\"[&+.border-medium.border-primary]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"],\n secondary: [\n \"[&+.border-medium.border-secondary]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"\n ],\n success: [\"[&+.border-medium.border-success]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"],\n warning: [\"[&+.border-medium.border-warning]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"],\n danger: [\"[&+.border-medium.border-danger]:ms-[calc(var(--heroui-border-width-medium)*-1)]\"]\n};\nvar hiddenInputClasses = [\n // Font styles\n \"font-inherit\",\n \"text-[100%]\",\n \"leading-[1.15]\",\n // Reset margins and padding\n \"m-0\",\n \"p-0\",\n // Overflow and box-sizing\n \"overflow-visible\",\n \"box-border\",\n // Positioning & Hit area\n \"absolute\",\n \"top-0\",\n \"w-full\",\n \"h-full\",\n // Opacity and z-index\n \"opacity-[0.0001]\",\n \"z-[1]\",\n // Cursor\n \"cursor-pointer\",\n // Disabled state\n \"disabled:cursor-default\"\n];\n\nexport {\n baseStyles,\n focusVisibleClasses,\n dataFocusVisibleClasses,\n groupDataFocusVisibleClasses,\n ringClasses,\n translateCenterClasses,\n absoluteFullClasses,\n collapseAdjacentVariantBorders,\n hiddenInputClasses\n};\n","import {\n tv\n} from \"./chunk-TX3FPB7D.mjs\";\n\n// src/components/progress.ts\nvar progress = tv(\n {\n slots: {\n base: \"flex flex-col gap-2 w-full\",\n label: \"\",\n labelWrapper: \"flex justify-between\",\n value: \"\",\n track: \"z-0 relative bg-default-300/50 overflow-hidden rtl:rotate-180\",\n indicator: \"h-full\"\n },\n variants: {\n color: {\n default: {\n indicator: \"bg-default-400\"\n },\n primary: {\n indicator: \"bg-primary\"\n },\n secondary: {\n indicator: \"bg-secondary\"\n },\n success: {\n indicator: \"bg-success\"\n },\n warning: {\n indicator: \"bg-warning\"\n },\n danger: {\n indicator: \"bg-danger\"\n }\n },\n size: {\n sm: {\n label: \"text-small\",\n value: \"text-small\",\n track: \"h-1\"\n },\n md: {\n label: \"text-medium\",\n value: \"text-medium\",\n track: \"h-3\"\n },\n lg: {\n label: \"text-large\",\n value: \"text-large\",\n track: \"h-5\"\n }\n },\n radius: {\n none: {\n track: \"rounded-none\",\n indicator: \"rounded-none\"\n },\n sm: {\n track: \"rounded-small\",\n indicator: \"rounded-small\"\n },\n md: {\n track: \"rounded-medium\",\n indicator: \"rounded-medium\"\n },\n lg: {\n track: \"rounded-large\",\n indicator: \"rounded-large\"\n },\n full: {\n track: \"rounded-full\",\n indicator: \"rounded-full\"\n }\n },\n isStriped: {\n true: {\n indicator: \"bg-stripe-gradient-default bg-stripe-size\"\n }\n },\n isIndeterminate: {\n true: {\n indicator: [\"absolute\", \"w-full\", \"origin-left\", \"animate-indeterminate-bar\"]\n }\n },\n isDisabled: {\n true: {\n base: \"opacity-disabled cursor-not-allowed\"\n }\n },\n disableAnimation: {\n true: {},\n false: {\n indicator: \"transition-transform !duration-500\"\n }\n }\n },\n defaultVariants: {\n color: \"primary\",\n size: \"md\",\n radius: \"full\",\n isStriped: false,\n isIndeterminate: false,\n isDisabled: false\n },\n compoundVariants: [\n // disableAnimation && !isIndeterminate\n {\n disableAnimation: true,\n isIndeterminate: false,\n class: {\n indicator: \"!transition-none motion-reduce:transition-none\"\n }\n },\n {\n color: \"primary\",\n isStriped: true,\n class: {\n indicator: \"bg-stripe-gradient-primary bg-stripe-size\"\n }\n },\n {\n color: \"secondary\",\n isStriped: true,\n class: {\n indicator: \"bg-stripe-gradient-secondary bg-stripe-size\"\n }\n },\n {\n color: \"success\",\n isStriped: true,\n class: {\n indicator: \"bg-stripe-gradient-success bg-stripe-size\"\n }\n },\n {\n color: \"warning\",\n isStriped: true,\n class: {\n indicator: \"bg-stripe-gradient-warning bg-stripe-size\"\n }\n },\n {\n color: \"danger\",\n isStriped: true,\n class: {\n indicator: \"bg-stripe-gradient-danger bg-stripe-size\"\n }\n }\n ]\n },\n {\n twMerge: true\n }\n);\nvar circularProgress = tv({\n slots: {\n base: \"flex flex-col justify-center gap-1 max-w-fit items-center\",\n label: \"\",\n svgWrapper: \"relative block\",\n svg: \"z-0 relative overflow-hidden\",\n track: \"h-full stroke-default-300/50\",\n indicator: \"h-full stroke-current\",\n value: \"absolute font-normal inset-0 flex items-center justify-center\"\n },\n variants: {\n color: {\n default: {\n svg: \"text-default-400\"\n },\n primary: {\n svg: \"text-primary\"\n },\n secondary: {\n svg: \"text-secondary\"\n },\n success: {\n svg: \"text-success\"\n },\n warning: {\n svg: \"text-warning\"\n },\n danger: {\n svg: \"text-danger\"\n }\n },\n size: {\n sm: {\n svg: \"w-8 h-8\",\n label: \"text-small\",\n value: \"text-[0.5rem]\"\n },\n md: {\n svg: \"w-10 h-10\",\n label: \"text-small\",\n value: \"text-[0.55rem]\"\n },\n lg: {\n svg: \"w-12 h-12\",\n label: \"text-medium\",\n value: \"text-[0.6rem]\"\n }\n },\n isIndeterminate: {\n true: {\n svg: \"animate-spinner-ease-spin\"\n }\n },\n isDisabled: {\n true: {\n base: \"opacity-disabled cursor-not-allowed\"\n }\n },\n disableAnimation: {\n true: {},\n false: {\n indicator: \"transition-all !duration-500\"\n }\n }\n },\n defaultVariants: {\n color: \"primary\",\n size: \"md\",\n isDisabled: false\n },\n compoundVariants: [\n // disableAnimation && !isIndeterminate\n {\n disableAnimation: true,\n isIndeterminate: false,\n class: {\n svg: \"!transition-none motion-reduce:transition-none\"\n }\n }\n ]\n});\n\nexport {\n progress,\n circularProgress\n};\n","import {\n colorVariants\n} from \"./chunk-GQT3YUX3.mjs\";\nimport {\n tv\n} from \"./chunk-TX3FPB7D.mjs\";\nimport {\n collapseAdjacentVariantBorders,\n dataFocusVisibleClasses\n} from \"./chunk-JGY6VQQQ.mjs\";\n\n// src/components/button.ts\nvar button = tv({\n base: [\n \"z-0\",\n \"group\",\n \"relative\",\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n \"box-border\",\n \"appearance-none\",\n \"outline-solid outline-transparent\",\n \"select-none\",\n \"whitespace-nowrap\",\n \"min-w-max\",\n \"font-normal\",\n \"subpixel-antialiased\",\n \"overflow-hidden\",\n \"tap-highlight-transparent\",\n \"transform-gpu data-[pressed=true]:scale-[0.97]\",\n \"cursor-pointer\",\n // focus ring\n ...dataFocusVisibleClasses\n ],\n variants: {\n variant: {\n solid: \"\",\n bordered: \"border-medium bg-transparent\",\n light: \"bg-transparent\",\n flat: \"\",\n faded: \"border-medium\",\n shadow: \"\",\n ghost: \"border-medium bg-transparent\"\n },\n size: {\n sm: \"px-3 min-w-16 h-8 text-tiny gap-2 rounded-small\",\n md: \"px-4 min-w-20 h-10 text-small gap-2 rounded-medium\",\n lg: \"px-6 min-w-24 h-12 text-medium gap-3 rounded-large\"\n },\n color: {\n default: \"\",\n primary: \"\",\n secondary: \"\",\n success: \"\",\n warning: \"\",\n danger: \"\"\n },\n radius: {\n none: \"rounded-none\",\n sm: \"rounded-small\",\n md: \"rounded-medium\",\n lg: \"rounded-large\",\n full: \"rounded-full\"\n },\n fullWidth: {\n true: \"w-full\"\n },\n isDisabled: {\n true: \"opacity-disabled pointer-events-none\"\n },\n isInGroup: {\n true: \"[&:not(:first-child):not(:last-child)]:rounded-none\"\n },\n isIconOnly: {\n true: \"px-0 !gap-0\",\n false: \"[&>svg]:max-w-[theme(spacing.8)]\"\n },\n disableAnimation: {\n true: \"!transition-none data-[pressed=true]:scale-100\",\n false: \"transition-transform-colors-opacity motion-reduce:transition-none\"\n }\n },\n defaultVariants: {\n size: \"md\",\n variant: \"solid\",\n color: \"default\",\n fullWidth: false,\n isDisabled: false,\n isInGroup: false\n },\n compoundVariants: [\n // solid / color\n {\n variant: \"solid\",\n color: \"default\",\n class: colorVariants.solid.default\n },\n {\n variant: \"solid\",\n color: \"primary\",\n class: colorVariants.solid.primary\n },\n {\n variant: \"solid\",\n color: \"secondary\",\n class: colorVariants.solid.secondary\n },\n {\n variant: \"solid\",\n color: \"success\",\n class: colorVariants.solid.success\n },\n {\n variant: \"solid\",\n color: \"warning\",\n class: colorVariants.solid.warning\n },\n {\n variant: \"solid\",\n color: \"danger\",\n class: colorVariants.solid.danger\n },\n // shadow / color\n {\n variant: \"shadow\",\n color: \"default\",\n class: colorVariants.shadow.default\n },\n {\n variant: \"shadow\",\n color: \"primary\",\n class: colorVariants.shadow.primary\n },\n {\n variant: \"shadow\",\n color: \"secondary\",\n class: colorVariants.shadow.secondary\n },\n {\n variant: \"shadow\",\n color: \"success\",\n class: colorVariants.shadow.success\n },\n {\n variant: \"shadow\",\n color: \"warning\",\n class: colorVariants.shadow.warning\n },\n {\n variant: \"shadow\",\n color: \"danger\",\n class: colorVariants.shadow.danger\n },\n // bordered / color\n {\n variant: \"bordered\",\n color: \"default\",\n class: colorVariants.bordered.default\n },\n {\n variant: \"bordered\",\n color: \"primary\",\n class: colorVariants.bordered.primary\n },\n {\n variant: \"bordered\",\n color: \"secondary\",\n class: colorVariants.bordered.secondary\n },\n {\n variant: \"bordered\",\n color: \"success\",\n class: colorVariants.bordered.success\n },\n {\n variant: \"bordered\",\n color: \"warning\",\n class: colorVariants.bordered.warning\n },\n {\n variant: \"bordered\",\n color: \"danger\",\n class: colorVariants.bordered.danger\n },\n // flat / color\n {\n variant: \"flat\",\n color: \"default\",\n class: colorVariants.flat.default\n },\n {\n variant: \"flat\",\n color: \"primary\",\n class: colorVariants.flat.primary\n },\n {\n variant: \"flat\",\n color: \"secondary\",\n class: colorVariants.flat.secondary\n },\n {\n variant: \"flat\",\n color: \"success\",\n class: colorVariants.flat.success\n },\n {\n variant: \"flat\",\n color: \"warning\",\n class: colorVariants.flat.warning\n },\n {\n variant: \"flat\",\n color: \"danger\",\n class: colorVariants.flat.danger\n },\n // faded / color\n {\n variant: \"faded\",\n color: \"default\",\n class: colorVariants.faded.default\n },\n {\n variant: \"faded\",\n color: \"primary\",\n class: colorVariants.faded.primary\n },\n {\n variant: \"faded\",\n color: \"secondary\",\n class: colorVariants.faded.secondary\n },\n {\n variant: \"faded\",\n color: \"success\",\n class: colorVariants.faded.success\n },\n {\n variant: \"faded\",\n color: \"warning\",\n class: colorVariants.faded.warning\n },\n {\n variant: \"faded\",\n color: \"danger\",\n class: colorVariants.faded.danger\n },\n // light / color\n {\n variant: \"light\",\n color: \"default\",\n class: [colorVariants.light.default, \"data-[hover=true]:bg-default/40\"]\n },\n {\n variant: \"light\",\n color: \"primary\",\n class: [colorVariants.light.primary, \"data-[hover=true]:bg-primary/20\"]\n },\n {\n variant: \"light\",\n color: \"secondary\",\n class: [colorVariants.light.secondary, \"data-[hover=true]:bg-secondary/20\"]\n },\n {\n variant: \"light\",\n color: \"success\",\n class: [colorVariants.light.success, \"data-[hover=true]:bg-success/20\"]\n },\n {\n variant: \"light\",\n color: \"warning\",\n class: [colorVariants.light.warning, \"data-[hover=true]:bg-warning/20\"]\n },\n {\n variant: \"light\",\n color: \"danger\",\n class: [colorVariants.light.danger, \"data-[hover=true]:bg-danger/20\"]\n },\n // ghost / color\n {\n variant: \"ghost\",\n color: \"default\",\n class: [colorVariants.ghost.default, \"data-[hover=true]:!bg-default\"]\n },\n {\n variant: \"ghost\",\n color: \"primary\",\n class: [\n colorVariants.ghost.primary,\n \"data-[hover=true]:!bg-primary data-[hover=true]:!text-primary-foreground\"\n ]\n },\n {\n variant: \"ghost\",\n color: \"secondary\",\n class: [\n colorVariants.ghost.secondary,\n \"data-[hover=true]:!bg-secondary data-[hover=true]:!text-secondary-foreground\"\n ]\n },\n {\n variant: \"ghost\",\n color: \"success\",\n class: [\n colorVariants.ghost.success,\n \"data-[hover=true]:!bg-success data-[hover=true]:!text-success-foreground\"\n ]\n },\n {\n variant: \"ghost\",\n color: \"warning\",\n class: [\n colorVariants.ghost.warning,\n \"data-[hover=true]:!bg-warning data-[hover=true]:!text-warning-foreground\"\n ]\n },\n {\n variant: \"ghost\",\n color: \"danger\",\n class: [\n colorVariants.ghost.danger,\n \"data-[hover=true]:!bg-danger data-[hover=true]:!text-danger-foreground\"\n ]\n },\n // isInGroup / radius / size <-- radius not provided\n {\n isInGroup: true,\n class: \"rounded-none first:rounded-s-medium last:rounded-e-medium\"\n },\n {\n isInGroup: true,\n size: \"sm\",\n class: \"rounded-none first:rounded-s-small last:rounded-e-small\"\n },\n {\n isInGroup: true,\n size: \"md\",\n class: \"rounded-none first:rounded-s-medium last:rounded-e-medium\"\n },\n {\n isInGroup: true,\n size: \"lg\",\n class: \"rounded-none first:rounded-s-large last:rounded-e-large\"\n },\n {\n isInGroup: true,\n isRounded: true,\n class: \"rounded-none first:rounded-s-full last:rounded-e-full\"\n },\n // isInGroup / radius <-- radius provided\n {\n isInGroup: true,\n radius: \"none\",\n class: \"rounded-none first:rounded-s-none last:rounded-e-none\"\n },\n {\n isInGroup: true,\n radius: \"sm\",\n class: \"rounded-none first:rounded-s-small last:rounded-e-small\"\n },\n {\n isInGroup: true,\n radius: \"md\",\n class: \"rounded-none first:rounded-s-medium last:rounded-e-medium\"\n },\n {\n isInGroup: true,\n radius: \"lg\",\n class: \"rounded-none first:rounded-s-large last:rounded-e-large\"\n },\n {\n isInGroup: true,\n radius: \"full\",\n class: \"rounded-none first:rounded-s-full last:rounded-e-full\"\n },\n // isInGroup / bordered / ghost\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"default\",\n className: collapseAdjacentVariantBorders.default\n },\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"primary\",\n className: collapseAdjacentVariantBorders.primary\n },\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"secondary\",\n className: collapseAdjacentVariantBorders.secondary\n },\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"success\",\n className: collapseAdjacentVariantBorders.success\n },\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"warning\",\n className: collapseAdjacentVariantBorders.warning\n },\n {\n isInGroup: true,\n variant: [\"ghost\", \"bordered\"],\n color: \"danger\",\n className: collapseAdjacentVariantBorders.danger\n },\n {\n isIconOnly: true,\n size: \"sm\",\n class: \"min-w-8 w-8 h-8\"\n },\n {\n isIconOnly: true,\n size: \"md\",\n class: \"min-w-10 w-10 h-10\"\n },\n {\n isIconOnly: true,\n size: \"lg\",\n class: \"min-w-12 w-12 h-12\"\n },\n // variant / hover\n {\n variant: [\"solid\", \"faded\", \"flat\", \"bordered\", \"shadow\"],\n class: \"data-[hover=true]:opacity-hover\"\n }\n ]\n});\nvar buttonGroup = tv({\n base: \"inline-flex items-center justify-center h-auto\",\n variants: {\n fullWidth: {\n true: \"w-full\"\n }\n },\n defaultVariants: {\n fullWidth: false\n }\n});\n\nexport {\n button,\n buttonGroup\n};\n","import {\n tv\n} from \"./chunk-TX3FPB7D.mjs\";\nimport {\n dataFocusVisibleClasses\n} from \"./chunk-JGY6VQQQ.mjs\";\n\n// src/components/card.ts\nvar card = tv({\n slots: {\n base: [\n \"flex\",\n \"flex-col\",\n \"relative\",\n \"overflow-hidden\",\n \"h-auto\",\n \"outline-solid outline-transparent\",\n \"text-foreground\",\n \"box-border\",\n \"bg-content1\",\n // focus ring\n ...dataFocusVisibleClasses\n ],\n header: [\n \"flex\",\n \"p-3\",\n \"z-10\",\n \"w-full\",\n \"justify-start\",\n \"items-center\",\n \"shrink-0\",\n \"overflow-inherit\",\n \"color-inherit\",\n \"subpixel-antialiased\"\n ],\n body: [\n \"relative\",\n \"flex\",\n \"flex-1\",\n \"w-full\",\n \"p-3\",\n \"flex-auto\",\n \"flex-col\",\n \"place-content-inherit\",\n \"align-items-inherit\",\n \"h-auto\",\n \"break-words\",\n \"text-left\",\n \"overflow-y-auto\",\n \"subpixel-antialiased\"\n ],\n footer: [\n \"p-3\",\n \"h-auto\",\n \"flex\",\n \"w-full\",\n \"items-center\",\n \"overflow-hidden\",\n \"color-inherit\",\n \"subpixel-antialiased\"\n ]\n },\n variants: {\n shadow: {\n none: {\n base: \"shadow-none\"\n },\n sm: {\n base: \"shadow-small\"\n },\n md: {\n base: \"shadow-medium\"\n },\n lg: {\n base: \"shadow-large\"\n }\n },\n radius: {\n none: {\n base: \"rounded-none\",\n header: \"rounded-none\",\n footer: \"rounded-none\"\n },\n sm: {\n base: \"rounded-small\",\n header: \"rounded-t-small\",\n footer: \"rounded-b-small\"\n },\n md: {\n base: \"rounded-medium\",\n header: \"rounded-t-medium\",\n footer: \"rounded-b-medium\"\n },\n lg: {\n base: \"rounded-large\",\n header: \"rounded-t-large\",\n footer: \"rounded-b-large\"\n }\n },\n fullWidth: {\n true: {\n base: \"w-full\"\n }\n },\n isHoverable: {\n true: {\n base: \"data-[hover=true]:bg-content2 dark:data-[hover=true]:bg-content2\"\n }\n },\n isPressable: {\n true: { base: \"cursor-pointer\" }\n },\n isBlurred: {\n true: {\n base: [\n \"bg-background/80\",\n \"dark:bg-background/20\",\n \"backdrop-blur-md\",\n \"backdrop-saturate-150\"\n ]\n }\n },\n isFooterBlurred: {\n true: {\n footer: [\"bg-background/10\", \"backdrop-blur\", \"backdrop-saturate-150\"]\n }\n },\n isDisabled: {\n true: {\n base: \"opacity-disabled cursor-not-allowed\"\n }\n },\n disableAnimation: {\n true: \"\",\n false: { base: \"transition-transform-background motion-reduce:transition-none\" }\n }\n },\n compoundVariants: [\n {\n isPressable: true,\n class: \"data-[pressed=true]:scale-[0.97] tap-highlight-transparent\"\n }\n ],\n defaultVariants: {\n radius: \"lg\",\n shadow: \"md\",\n fullWidth: false,\n isHoverable: false,\n isPressable: false,\n isDisabled: false,\n isFooterBlurred: false\n }\n});\n\nexport {\n card\n};\n","import {\n colorVariants\n} from \"./chunk-GQT3YUX3.mjs\";\nimport {\n tv\n} from \"./chunk-TX3FPB7D.mjs\";\nimport {\n dataFocusVisibleClasses,\n translateCenterClasses\n} from \"./chunk-JGY6VQQQ.mjs\";\n\n// src/components/avatar.ts\nvar avatar = tv({\n slots: {\n base: [\n \"flex\",\n \"relative\",\n \"justify-center\",\n \"items-center\",\n \"box-border\",\n \"overflow-hidden\",\n \"align-middle\",\n \"text-white\",\n \"z-0\",\n // focus ring\n ...dataFocusVisibleClasses\n ],\n img: [\n \"flex\",\n \"object-cover\",\n \"w-full\",\n \"h-full\",\n \"transition-opacity\",\n \"!duration-500\",\n \"opacity-0\",\n \"data-[loaded=true]:opacity-100\"\n ],\n fallback: [...translateCenterClasses, \"flex\", \"items-center\", \"justify-center\"],\n name: [...translateCenterClasses, \"font-normal\", \"text-center\", \"text-inherit\"],\n icon: [\n ...translateCenterClasses,\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"text-inherit\",\n \"w-full\",\n \"h-full\"\n ]\n },\n variants: {\n size: {\n sm: {\n base: \"w-8 h-8 text-tiny\"\n },\n md: {\n base: \"w-10 h-10 text-tiny\"\n },\n lg: {\n base: \"w-14 h-14 text-small\"\n }\n },\n color: {\n default: {\n base: colorVariants.solid.default\n },\n primary: {\n base: colorVariants.solid.primary\n },\n secondary: {\n base: colorVariants.solid.secondary\n },\n success: {\n base: colorVariants.solid.success\n },\n warning: {\n base: colorVariants.solid.warning\n },\n danger: {\n base: colorVariants.solid.danger\n }\n },\n radius: {\n none: {\n base: \"rounded-none\"\n },\n sm: {\n base: \"rounded-small\"\n },\n md: {\n base: \"rounded-medium\"\n },\n lg: {\n base: \"rounded-large\"\n },\n full: {\n base: \"rounded-full\"\n }\n },\n isBordered: {\n true: {\n base: \"ring-2 ring-offset-2 ring-offset-background dark:ring-offset-background-dark\"\n }\n },\n isDisabled: {\n true: {\n base: \"opacity-disabled\"\n }\n },\n isInGroup: {\n true: {\n base: [\n \"-ms-2 data-[hover=true]:-translate-x-3 rtl:data-[hover=true]:translate-x-3 transition-transform\",\n \"data-[focus-visible=true]:-translate-x-3 rtl:data-[focus-visible=true]:translate-x-3\"\n ]\n }\n },\n isInGridGroup: {\n true: {\n base: \"m-0 data-[hover=true]:translate-x-0\"\n }\n },\n disableAnimation: {\n true: {\n base: \"transition-none\",\n img: \"transition-none\"\n },\n false: {}\n }\n },\n defaultVariants: {\n size: \"md\",\n color: \"default\",\n radius: \"full\"\n },\n compoundVariants: [\n {\n color: \"default\",\n isBordered: true,\n class: {\n base: \"ring-default\"\n }\n },\n {\n color: \"primary\",\n isBordered: true,\n class: {\n base: \"ring-primary\"\n }\n },\n {\n color: \"secondary\",\n isBordered: true,\n class: {\n base: \"ring-secondary\"\n }\n },\n {\n color: \"success\",\n isBordered: true,\n class: {\n base: \"ring-success\"\n }\n },\n {\n color: \"warning\",\n isBordered: true,\n class: {\n base: \"ring-warning\"\n }\n },\n {\n color: \"danger\",\n isBordered: true,\n class: {\n base: \"ring-danger\"\n }\n }\n ]\n});\nvar avatarGroup = tv({\n slots: {\n base: \"flex items-center justify-center h-auto w-max\",\n count: \"hover:-translate-x-0\"\n },\n variants: {\n isGrid: {\n true: \"inline-grid grid-cols-4 gap-3\"\n }\n }\n});\n\nexport {\n avatar,\n avatarGroup\n};\n","// src/index.ts\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nfunction useIsMounted(props = {}) {\n const { rerender = false, delay = 0 } = props;\n const isMountedRef = useRef(false);\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n isMountedRef.current = true;\n let timer = null;\n if (rerender) {\n if (delay > 0) {\n timer = setTimeout(() => {\n setIsMounted(true);\n }, delay);\n } else {\n setIsMounted(true);\n }\n }\n return () => {\n isMountedRef.current = false;\n if (rerender) {\n setIsMounted(false);\n }\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [rerender]);\n return [useCallback(() => isMountedRef.current, []), isMounted];\n}\nexport {\n useIsMounted\n};\n","import {useId as $83Elw$useId, useLabels as $83Elw$useLabels} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $d191a55c9702f145$export$8467354a121f1b9f(props) {\n let { id: id, label: label, 'aria-labelledby': ariaLabelledby, 'aria-label': ariaLabel, labelElementType: labelElementType = 'label' } = props;\n id = (0, $83Elw$useId)(id);\n let labelId = (0, $83Elw$useId)();\n let labelProps = {};\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === 'label' ? id : undefined\n };\n } else if (!ariaLabelledby && !ariaLabel && process.env.NODE_ENV !== 'production') console.warn('If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility');\n let fieldProps = (0, $83Elw$useLabels)({\n id: id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby\n });\n return {\n labelProps: labelProps,\n fieldProps: fieldProps\n };\n}\n\n\nexport {$d191a55c9702f145$export$8467354a121f1b9f as useLabel};\n//# sourceMappingURL=useLabel.module.js.map\n","import {filterDOMProps as $2xLm1$filterDOMProps, clamp as $2xLm1$clamp, mergeProps as $2xLm1$mergeProps} from \"@react-aria/utils\";\nimport {useLabel as $2xLm1$useLabel} from \"@react-aria/label\";\nimport {useNumberFormatter as $2xLm1$useNumberFormatter} from \"@react-aria/i18n\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $204d9ebcedfb8806$export$ed5abd763a836edc(props) {\n let { value: value = 0, minValue: minValue = 0, maxValue: maxValue = 100, valueLabel: valueLabel, isIndeterminate: isIndeterminate, formatOptions: formatOptions = {\n style: 'percent'\n } } = props;\n let domProps = (0, $2xLm1$filterDOMProps)(props, {\n labelable: true\n });\n let { labelProps: labelProps, fieldProps: fieldProps } = (0, $2xLm1$useLabel)({\n ...props,\n // Progress bar is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: 'span'\n });\n value = (0, $2xLm1$clamp)(value, minValue, maxValue);\n let percentage = (value - minValue) / (maxValue - minValue);\n let formatter = (0, $2xLm1$useNumberFormatter)(formatOptions);\n if (!isIndeterminate && !valueLabel) {\n let valueToFormat = formatOptions.style === 'percent' ? percentage : value;\n valueLabel = formatter.format(valueToFormat);\n }\n return {\n progressBarProps: (0, $2xLm1$mergeProps)(domProps, {\n ...fieldProps,\n 'aria-valuenow': isIndeterminate ? undefined : value,\n 'aria-valuemin': minValue,\n 'aria-valuemax': maxValue,\n 'aria-valuetext': isIndeterminate ? undefined : valueLabel,\n role: 'progressbar'\n }),\n labelProps: labelProps\n };\n}\n\n\nexport {$204d9ebcedfb8806$export$ed5abd763a836edc as useProgressBar};\n//# sourceMappingURL=useProgressBar.module.js.map\n","\"use client\";\n\n// src/use-progress.ts\nimport { mapPropsVariants, useProviderContext } from \"@heroui/system\";\nimport { progress } from \"@heroui/theme\";\nimport { useDOMRef } from \"@heroui/react-utils\";\nimport { clampPercentage, clsx, dataAttr, objectToDeps, mergeProps } from \"@heroui/shared-utils\";\nimport { useMemo, useCallback } from \"react\";\nimport { useIsMounted } from \"@heroui/use-is-mounted\";\nimport { useProgressBar as useAriaProgress } from \"@react-aria/progress\";\nfunction useProgress(originalProps) {\n var _a, _b;\n const globalContext = useProviderContext();\n const [props, variantProps] = mapPropsVariants(originalProps, progress.variantKeys);\n const {\n ref,\n as,\n id,\n className,\n classNames,\n label,\n valueLabel,\n value = 0,\n minValue = 0,\n maxValue = 100,\n showValueLabel = false,\n formatOptions = {\n style: \"percent\"\n },\n ...otherProps\n } = props;\n const Component = as || \"div\";\n const domRef = useDOMRef(ref);\n const baseStyles = clsx(classNames == null ? void 0 : classNames.base, className);\n const [, isMounted] = useIsMounted({\n rerender: true,\n delay: 100\n });\n const isIndeterminate = originalProps.isIndeterminate;\n const disableAnimation = (_b = (_a = originalProps.disableAnimation) != null ? _a : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _b : false;\n const { progressBarProps, labelProps } = useAriaProgress({\n id,\n label,\n value,\n minValue,\n maxValue,\n valueLabel,\n formatOptions,\n isIndeterminate,\n \"aria-labelledby\": originalProps[\"aria-labelledby\"],\n \"aria-label\": originalProps[\"aria-label\"]\n });\n const slots = useMemo(\n () => progress({\n ...variantProps,\n disableAnimation\n }),\n [objectToDeps(variantProps), disableAnimation]\n );\n const selfMounted = disableAnimation ? true : isMounted;\n const percentage = useMemo(\n () => isIndeterminate || !selfMounted ? void 0 : clampPercentage((value - minValue) / (maxValue - minValue) * 100),\n [selfMounted, isIndeterminate, value, minValue, maxValue]\n );\n const getProgressBarProps = useCallback(\n (props2 = {}) => ({\n ref: domRef,\n \"data-indeterminate\": dataAttr(isIndeterminate),\n \"data-disabled\": dataAttr(originalProps.isDisabled),\n className: slots.base({ class: baseStyles }),\n ...mergeProps(progressBarProps, otherProps, props2)\n }),\n [\n domRef,\n slots,\n isIndeterminate,\n originalProps.isDisabled,\n baseStyles,\n progressBarProps,\n otherProps\n ]\n );\n const getLabelProps = useCallback(\n (props2 = {}) => ({\n className: slots.label({ class: classNames == null ? void 0 : classNames.label }),\n ...mergeProps(labelProps, props2)\n }),\n [slots, classNames, labelProps]\n );\n return {\n Component,\n domRef,\n slots,\n classNames,\n label,\n percentage,\n showValueLabel,\n getProgressBarProps,\n getLabelProps\n };\n}\n\nexport {\n useProgress\n};\n","\"use client\";\nimport {\n useProgress\n} from \"./chunk-Z2ODYSHN.mjs\";\n\n// src/progress.tsx\nimport { forwardRef } from \"@heroui/system\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar Progress = forwardRef((props, ref) => {\n const {\n Component,\n slots,\n classNames,\n label,\n percentage,\n showValueLabel,\n getProgressBarProps,\n getLabelProps\n } = useProgress({ ...props, ref });\n const progressBarProps = getProgressBarProps();\n const shouldShowLabelWrapper = label || showValueLabel;\n return /* @__PURE__ */ jsxs(Component, { ...progressBarProps, children: [\n shouldShowLabelWrapper ? /* @__PURE__ */ jsxs(\"div\", { className: slots.labelWrapper({ class: classNames == null ? void 0 : classNames.labelWrapper }), children: [\n label && /* @__PURE__ */ jsx(\"span\", { ...getLabelProps(), children: label }),\n showValueLabel && /* @__PURE__ */ jsx(\"span\", { className: slots.value({ class: classNames == null ? void 0 : classNames.value }), children: progressBarProps[\"aria-valuetext\"] })\n ] }) : null,\n /* @__PURE__ */ jsx(\"div\", { className: slots.track({ class: classNames == null ? void 0 : classNames.track }), children: /* @__PURE__ */ jsx(\n \"div\",\n {\n className: slots.indicator({ class: classNames == null ? void 0 : classNames.indicator }),\n style: {\n transform: `translateX(-${100 - (percentage || 0)}%)`\n }\n }\n ) })\n ] });\n});\nProgress.displayName = \"HeroUI.Progress\";\nvar progress_default = Progress;\n\nexport {\n progress_default\n};\n","\"use client\";\n\n// src/card-context.ts\nimport { createContext } from \"@heroui/react-utils\";\nvar [CardProvider, useCardContext] = createContext({\n name: \"CardContext\",\n strict: true,\n errorMessage: \"useCardContext: `context` is undefined. Seems you forgot to wrap component within <Card />\"\n});\n\nexport {\n CardProvider,\n useCardContext\n};\n","\"use client\";\nimport {\n useCardContext\n} from \"./chunk-XHGGCEVJ.mjs\";\n\n// src/card-body.tsx\nimport { forwardRef } from \"@heroui/system\";\nimport { useDOMRef } from \"@heroui/react-utils\";\nimport { clsx } from \"@heroui/shared-utils\";\nimport { jsx } from \"react/jsx-runtime\";\nvar CardBody = forwardRef((props, ref) => {\n var _a;\n const { as, className, children, ...otherProps } = props;\n const Component = as || \"div\";\n const domRef = useDOMRef(ref);\n const { slots, classNames } = useCardContext();\n const bodyStyles = clsx(classNames == null ? void 0 : classNames.body, className);\n return /* @__PURE__ */ jsx(Component, { ref: domRef, className: (_a = slots.body) == null ? void 0 : _a.call(slots, { class: bodyStyles }), ...otherProps, children });\n});\nCardBody.displayName = \"HeroUI.CardBody\";\nvar card_body_default = CardBody;\n\nexport {\n card_body_default\n};\n","\"use client\";\nimport {\n useCardContext\n} from \"./chunk-XHGGCEVJ.mjs\";\n\n// src/card-footer.tsx\nimport { forwardRef } from \"@heroui/system\";\nimport { useDOMRef } from \"@heroui/react-utils\";\nimport { clsx } from \"@heroui/shared-utils\";\nimport { jsx } from \"react/jsx-runtime\";\nvar CardFooter = forwardRef((props, ref) => {\n var _a;\n const { as, className, children, ...otherProps } = props;\n const Component = as || \"div\";\n const domRef = useDOMRef(ref);\n const { slots, classNames } = useCardContext();\n const footerStyles = clsx(classNames == null ? void 0 : classNames.footer, className);\n return /* @__PURE__ */ jsx(Component, { ref: domRef, className: (_a = slots.footer) == null ? void 0 : _a.call(slots, { class: footerStyles }), ...otherProps, children });\n});\nCardFooter.displayName = \"HeroUI.CardFooter\";\nvar card_footer_default = CardFooter;\n\nexport {\n card_footer_default\n};\n","// src/index.ts\nimport { filterDOMProps, mergeProps } from \"@react-aria/utils\";\nimport { useFocusable } from \"@react-aria/focus\";\nimport { usePress } from \"@react-aria/interactions\";\nfunction useAriaButton(props, ref) {\n let {\n elementType = \"button\",\n isDisabled,\n onPress,\n onPressStart,\n onPressEnd,\n onPressUp,\n onPressChange,\n // @ts-ignore - undocumented\n preventFocusOnPress,\n // @ts-ignore - undocumented\n allowFocusWhenDisabled,\n onClick,\n href,\n target,\n rel,\n type = \"button\",\n allowTextSelectionOnPress\n } = props;\n let additionalProps;\n if (elementType === \"button\") {\n additionalProps = {\n type,\n disabled: isDisabled\n };\n } else {\n additionalProps = {\n role: \"button\",\n href: elementType === \"a\" && !isDisabled ? href : void 0,\n target: elementType === \"a\" ? target : void 0,\n type: elementType === \"input\" ? type : void 0,\n disabled: elementType === \"input\" ? isDisabled : void 0,\n \"aria-disabled\": !isDisabled || elementType === \"input\" ? void 0 : isDisabled,\n rel: elementType === \"a\" ? rel : void 0\n };\n }\n let { pressProps, isPressed } = usePress({\n onClick,\n onPressStart,\n onPressEnd,\n onPressUp,\n onPressChange,\n onPress,\n isDisabled,\n preventFocusOnPress,\n allowTextSelectionOnPress,\n ref\n });\n let { focusableProps } = useFocusable(props, ref);\n if (allowFocusWhenDisabled) {\n focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n }\n let buttonProps = mergeProps(\n focusableProps,\n pressProps,\n filterDOMProps(props, { labelable: true })\n );\n return {\n isPressed,\n // Used to indicate press state for visual\n buttonProps: mergeProps(additionalProps, buttonProps, {\n \"aria-haspopup\": props[\"aria-haspopup\"],\n \"aria-expanded\": props[\"aria-expanded\"],\n \"aria-controls\": props[\"aria-controls\"],\n \"aria-pressed\": props[\"aria-pressed\"],\n \"aria-current\": props[\"aria-current\"]\n })\n };\n}\nexport {\n useAriaButton\n};\n","\"use client\";\n\n// src/ripple.tsx\nimport { AnimatePresence, m, LazyMotion } from \"framer-motion\";\nimport { clamp } from \"@heroui/shared-utils\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar domAnimation = () => import(\"@heroui/dom-animation\").then((res) => res.default);\nvar Ripple = (props) => {\n const { ripples = [], motionProps, color = \"currentColor\", style, onClear } = props;\n return /* @__PURE__ */ jsx(Fragment, { children: ripples.map((ripple) => {\n const duration = clamp(0.01 * ripple.size, 0.2, ripple.size > 100 ? 0.75 : 0.5);\n return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(AnimatePresence, { mode: \"popLayout\", children: /* @__PURE__ */ jsx(\n m.span,\n {\n animate: { transform: \"scale(2)\", opacity: 0 },\n className: \"heroui-ripple\",\n exit: { opacity: 0 },\n initial: { transform: \"scale(0)\", opacity: 0.35 },\n style: {\n position: \"absolute\",\n backgroundColor: color,\n borderRadius: \"100%\",\n transformOrigin: \"center\",\n pointerEvents: \"none\",\n overflow: \"hidden\",\n inset: 0,\n zIndex: 0,\n top: ripple.y,\n left: ripple.x,\n width: `${ripple.size}px`,\n height: `${ripple.size}px`,\n ...style\n },\n transition: { duration },\n onAnimationComplete: () => {\n onClear(ripple.key);\n },\n ...motionProps\n }\n ) }) }, ripple.key);\n }) });\n};\nRipple.displayName = \"HeroUI.Ripple\";\nvar ripple_default = Ripple;\n\nexport {\n ripple_default\n};\n","\"use client\";\n\n// src/use-ripple.ts\nimport { getUniqueID } from \"@heroui/shared-utils\";\nimport { useCallback, useState } from \"react\";\nfunction useRipple(props = {}) {\n const [ripples, setRipples] = useState([]);\n const onPress = useCallback((event) => {\n const trigger = event.target;\n const size = Math.max(trigger.clientWidth, trigger.clientHeight);\n setRipples((prevRipples) => [\n ...prevRipples,\n {\n key: getUniqueID(prevRipples.length.toString()),\n size,\n x: event.x - size / 2,\n y: event.y - size / 2\n }\n ]);\n }, []);\n const onClear = useCallback((key) => {\n setRipples((prevState) => prevState.filter((ripple) => ripple.key !== key));\n }, []);\n return { ripples, onClear, onPress, ...props };\n}\n\nexport {\n useRipple\n};\n","\"use client\";\n\n// src/use-card.ts\nimport { card } from \"@heroui/theme\";\nimport { useCallback, useMemo } from \"react\";\nimport { useFocusRing } from \"@react-aria/focus\";\nimport { useHover } from \"@react-aria/interactions\";\nimport { useAriaButton } from \"@heroui/use-aria-button\";\nimport { mapPropsVariants, useProviderContext } from \"@heroui/system\";\nimport { clsx, dataAttr, objectToDeps, chain, mergeProps } from \"@heroui/shared-utils\";\nimport { filterDOMProps } from \"@heroui/react-utils\";\nimport { useDOMRef } from \"@heroui/react-utils\";\nimport { useRipple } from \"@heroui/ripple\";\nfunction useCard(originalProps) {\n var _a, _b, _c, _d;\n const globalContext = useProviderContext();\n const [props, variantProps] = mapPropsVariants(originalProps, card.variantKeys);\n const {\n ref,\n as,\n children,\n onClick,\n onPress,\n autoFocus,\n className,\n classNames,\n allowTextSelectionOnPress = true,\n ...otherProps\n } = props;\n const domRef = useDOMRef(ref);\n const Component = as || (originalProps.isPressable ? \"button\" : \"div\");\n const shouldFilterDOMProps = typeof Component === \"string\";\n const disableAnimation = (_b = (_a = originalProps.disableAnimation) != null ? _a : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _b : false;\n const disableRipple = (_d = (_c = originalProps.disableRipple) != null ? _c : globalContext == null ? void 0 : globalContext.disableRipple) != null ? _d : false;\n const baseStyles = clsx(classNames == null ? void 0 : classNames.base, className);\n const { onClear: onClearRipple, onPress: onRipplePressHandler, ripples } = useRipple();\n const handlePress = useCallback(\n (e) => {\n if (disableRipple || disableAnimation) return;\n domRef.current && onRipplePressHandler(e);\n },\n [disableRipple, disableAnimation, domRef, onRipplePressHandler]\n );\n const { buttonProps, isPressed } = useAriaButton(\n {\n onPress: chain(onPress, handlePress),\n elementType: as,\n isDisabled: !originalProps.isPressable,\n onClick,\n allowTextSelectionOnPress,\n ...otherProps\n },\n domRef\n );\n const { hoverProps, isHovered } = useHover({\n isDisabled: !originalProps.isHoverable,\n ...otherProps\n });\n const { isFocusVisible, isFocused, focusProps } = useFocusRing({\n autoFocus\n });\n const slots = useMemo(\n () => card({\n ...variantProps,\n disableAnimation\n }),\n [objectToDeps(variantProps), disableAnimation]\n );\n const context = useMemo(\n () => ({\n slots,\n classNames,\n disableAnimation,\n isDisabled: originalProps.isDisabled,\n isFooterBlurred: originalProps.isFooterBlurred,\n fullWidth: originalProps.fullWidth\n }),\n [\n slots,\n classNames,\n originalProps.isDisabled,\n originalProps.isFooterBlurred,\n disableAnimation,\n originalProps.fullWidth\n ]\n );\n const getCardProps = useCallback(\n (props2 = {}) => {\n return {\n ref: domRef,\n className: slots.base({ class: baseStyles }),\n tabIndex: originalProps.isPressable ? 0 : -1,\n \"data-hover\": dataAttr(isHovered),\n \"data-pressed\": dataAttr(isPressed),\n \"data-focus\": dataAttr(isFocused),\n \"data-focus-visible\": dataAttr(isFocusVisible),\n \"data-disabled\": dataAttr(originalProps.isDisabled),\n ...mergeProps(\n originalProps.isPressable ? { ...buttonProps, ...focusProps, role: \"button\" } : {},\n originalProps.isHoverable ? hoverProps : {},\n filterDOMProps(otherProps, {\n enabled: shouldFilterDOMProps\n }),\n filterDOMProps(props2)\n )\n };\n },\n [\n domRef,\n slots,\n baseStyles,\n shouldFilterDOMProps,\n originalProps.isPressable,\n originalProps.isHoverable,\n originalProps.isDisabled,\n isHovered,\n isPressed,\n isFocusVisible,\n buttonProps,\n focusProps,\n hoverProps,\n otherProps\n ]\n );\n const getRippleProps = useCallback(\n () => ({ ripples, onClear: onClearRipple }),\n [ripples, onClearRipple]\n );\n return {\n context,\n domRef,\n Component,\n classNames,\n children,\n isHovered,\n isPressed,\n disableAnimation,\n isPressable: originalProps.isPressable,\n isHoverable: originalProps.isHoverable,\n disableRipple,\n handlePress,\n isFocusVisible,\n getCardProps,\n getRippleProps\n };\n}\n\nexport {\n useCard\n};\n","\"use client\";\nimport {\n CardProvider\n} from \"./chunk-XHGGCEVJ.mjs\";\nimport {\n useCard\n} from \"./chunk-DHMIPUUY.mjs\";\n\n// src/card.tsx\nimport { forwardRef } from \"@heroui/system\";\nimport { Ripple } from \"@heroui/ripple\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar Card = forwardRef((props, ref) => {\n const {\n children,\n context,\n Component,\n isPressable,\n disableAnimation,\n disableRipple,\n getCardProps,\n getRippleProps\n } = useCard({ ...props, ref });\n return /* @__PURE__ */ jsxs(Component, { ...getCardProps(), children: [\n /* @__PURE__ */ jsx(CardProvider, { value: context, children }),\n isPressable && !disableAnimation && !disableRipple && /* @__PURE__ */ jsx(Ripple, { ...getRippleProps() })\n ] });\n});\nCard.displayName = \"HeroUI.Card\";\nvar card_default = Card;\n\nexport {\n card_default\n};\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","// 内容手风琴组件类型定义\r\nimport type { KnowledgeItem, Lesson, Unit } from '../../types';\r\n\r\nexport interface ContentAccordionProps {\r\n /** 当前学习单元数据 */\r\n unit: Unit | null;\r\n /** 激活的课程ID列表 */\r\n activeLessonIds: string[];\r\n /** 切换课程激活状态的函数 */\r\n onToggleLesson: (lessonId: string) => void;\r\n /** 点击学习按钮的回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n /** 加载状态 */\r\n loading?: boolean;\r\n /** 自定义类名 */\r\n className?: string;\r\n /** 空状态显示内容 */\r\n emptyState?: React.ReactNode;\r\n}\r\n\r\nexport interface ContentAccordionState {\r\n /** 内部展开状态管理 */\r\n expandedLessons: Set<string>;\r\n /** 动画状态 */\r\n isAnimating: boolean;\r\n}\r\n\r\nexport interface LessonItemProps {\r\n /** 课程数据 */\r\n lesson: Lesson;\r\n /** 是否展开状态 */\r\n isExpanded: boolean;\r\n /** 切换展开状态回调 */\r\n onToggle: (lessonId: string) => void;\r\n /** 学习按钮点击回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n}\r\n\r\nexport interface KnowledgeCardProps {\r\n /** 知识点数据 */\r\n knowledgeItem: KnowledgeItem;\r\n /** 学习按钮点击回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n}\r\n\r\n// 工具函数类型\r\nexport type GetButtonTextFn = (progress: number) => string;\r\nexport type CalculateLessonProgressFn = (knowledgeItems: KnowledgeItem[]) => number;\r\n\r\n// 进度按钮文本生成算法\r\nexport const getButtonText: GetButtonTextFn = (progress: number): string => {\r\n if (progress === 0) return '开始学习';\r\n if (progress === 100) return '复习';\r\n return '继续学习';\r\n};\r\n\r\n// 课程进度计算算法\r\nexport const calculateLessonProgress: CalculateLessonProgressFn = (knowledgeItems: KnowledgeItem[]): number => {\r\n if (knowledgeItems.length === 0) return 0;\r\n const totalProgress = knowledgeItems.reduce((sum, item) => sum + item.progress, 0);\r\n return Math.round(totalProgress / knowledgeItems.length);\r\n};","import React from 'react';\r\nimport { Progress } from '@heroui/progress';\r\nimport { Card, CardBody, CardFooter } from '@heroui/card';\r\nimport { Button } from '../Button';\r\nimport { ChevronDown, ChevronRight } from 'lucide-react';\r\nimport type { ContentAccordionProps, LessonItemProps, KnowledgeCardProps } from './types';\r\nimport { getButtonText, calculateLessonProgress } from './types';\r\nimport './ContentAccordion.css';\r\n\r\nconst KnowledgeCard: React.FC<KnowledgeCardProps> = ({ knowledgeItem, onLearnAction }) => {\r\n const handleLearnClick = () => {\r\n onLearnAction(knowledgeItem);\r\n };\r\n\r\n // 调试信息\r\n console.log('KnowledgeCard render:', {\r\n progress: knowledgeItem.progress,\r\n text: getButtonText(knowledgeItem.progress)\r\n });\r\n\r\n return (\r\n <Card className=\"content-accordion__knowledge-card\">\r\n <CardBody>\r\n <h3 className=\"content-accordion__knowledge-title\">{knowledgeItem.title}</h3>\r\n <p className=\"content-accordion__knowledge-description\">{knowledgeItem.description}</p>\r\n </CardBody>\r\n <CardFooter className=\"content-accordion__knowledge-actions\">\r\n <div className=\"content-accordion__progress-container\">\r\n <Progress\r\n value={knowledgeItem.progress}\r\n size=\"sm\"\r\n aria-label={`${knowledgeItem.title} 进度`}\r\n className=\"content-accordion__progress-bar\"\r\n />\r\n <span className=\"content-accordion__progress-text\">{knowledgeItem.progress}%</span>\r\n </div>\r\n <Button\r\n size=\"sm\"\r\n radius=\"md\"\r\n onClick={handleLearnClick}\r\n progress={knowledgeItem.progress}\r\n variant={knowledgeItem.progress === 100 ? 'light' : knowledgeItem.progress === 0 ? 'solid' : 'bordered'}\r\n className=\"content-accordion__learn-button\"\r\n >\r\n {getButtonText(knowledgeItem.progress)}\r\n </Button>\r\n </CardFooter>\r\n </Card>\r\n );\r\n};\r\n\r\nconst LessonItem: React.FC<LessonItemProps> = ({ lesson, isExpanded, onToggle, onLearnAction }) => {\r\n const handleToggle = () => {\r\n onToggle(lesson.id);\r\n };\r\n\r\n const lessonProgress = calculateLessonProgress(lesson.knowledgeItems);\r\n\r\n return (\r\n <div className={`content-accordion__lesson-item ${isExpanded ? 'content-accordion__lesson-item--expanded' : ''}`}>\r\n <div\r\n className=\"content-accordion__lesson-header\"\r\n onClick={handleToggle}\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-expanded={isExpanded}\r\n aria-label={`${lesson.title},点击${isExpanded ? '收起' : '展开'}`}\r\n >\r\n <div className=\"content-accordion__lesson-header-content\">\r\n <h2 className=\"content-accordion__lesson-title\">{lesson.title}</h2>\r\n <span className=\"content-accordion__lesson-duration\">约 {lesson.duration} 分钟</span>\r\n </div>\r\n <div className=\"content-accordion__lesson-actions\">\r\n <span className=\"content-accordion__lesson-progress\">{lessonProgress}%</span>\r\n {isExpanded ? (\r\n <ChevronDown className=\"content-accordion__lesson-icon\" />\r\n ) : (\r\n <ChevronRight className=\"content-accordion__lesson-icon\" />\r\n )}\r\n </div>\r\n </div>\r\n\r\n {isExpanded && (\r\n <div className=\"content-accordion__knowledge-list\">\r\n {lesson.knowledgeItems.map((item) => (\r\n <KnowledgeCard\r\n key={item.id}\r\n knowledgeItem={item}\r\n onLearnAction={onLearnAction}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport const ContentAccordion: React.FC<ContentAccordionProps> = ({\r\n unit,\r\n activeLessonIds,\r\n onToggleLesson,\r\n onLearnAction,\r\n loading = false,\r\n className = '',\r\n emptyState\r\n}) => {\r\n if (loading) {\r\n return (\r\n <div className=\"content-accordion content-accordion--loading\">\r\n <div className=\"content-accordion__loading\">加载中...</div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!unit) {\r\n return (\r\n <div className=\"content-accordion content-accordion--empty\">\r\n {emptyState || <div className=\"content-accordion__empty\">暂无学习内容</div>}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`content-accordion ${className}`}>\r\n {/* 单元头部信息 */}\r\n <header className=\"content-accordion__header\">\r\n <h1 className=\"content-accordion__unit-title\">{unit.title}</h1>\r\n <p className=\"content-accordion__unit-description\">{unit.description}</p>\r\n <div className=\"content-accordion__unit-meta\">\r\n <span>总共 {unit.totalLessons} 节课</span>\r\n <span>•</span>\r\n <span>预计学习 {unit.estimatedDuration}</span>\r\n </div>\r\n </header>\r\n\r\n {/* 课程列表 */}\r\n <div className=\"content-accordion__lessons\">\r\n {unit.lessons.map((lesson) => (\r\n <LessonItem\r\n key={lesson.id}\r\n lesson={lesson}\r\n isExpanded={activeLessonIds.includes(lesson.id)}\r\n onToggle={onToggleLesson}\r\n onLearnAction={onLearnAction}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};","\"use client\";\n\n// src/avatar-icon.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar AvatarIcon = () => /* @__PURE__ */ jsxs(\n \"svg\",\n {\n \"aria-hidden\": \"true\",\n fill: \"none\",\n height: \"80%\",\n role: \"presentation\",\n viewBox: \"0 0 24 24\",\n width: \"80%\",\n children: [\n /* @__PURE__ */ jsx(\n \"path\",\n {\n d: \"M12 2C9.38 2 7.25 4.13 7.25 6.75C7.25 9.32 9.26 11.4 11.88 11.49C11.96 11.48 12.04 11.48 12.1 11.49C12.12 11.49 12.13 11.49 12.15 11.49C12.16 11.49 12.16 11.49 12.17 11.49C14.73 11.4 16.74 9.32 16.75 6.75C16.75 4.13 14.62 2 12 2Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"path\",\n {\n d: \"M17.0809 14.1489C14.2909 12.2889 9.74094 12.2889 6.93094 14.1489C5.66094 14.9989 4.96094 16.1489 4.96094 17.3789C4.96094 18.6089 5.66094 19.7489 6.92094 20.5889C8.32094 21.5289 10.1609 21.9989 12.0009 21.9989C13.8409 21.9989 15.6809 21.5289 17.0809 20.5889C18.3409 19.7389 19.0409 18.5989 19.0409 17.3589C19.0309 16.1289 18.3409 14.9889 17.0809 14.1489Z\",\n fill: \"currentColor\"\n }\n )\n ]\n }\n);\n\nexport {\n AvatarIcon\n};\n","\"use client\";\n\n// src/avatar-group-context.ts\nimport { createContext } from \"@heroui/react-utils\";\nvar [AvatarGroupProvider, useAvatarGroupContext] = createContext({\n name: \"AvatarGroupContext\",\n strict: false\n});\n\nexport {\n AvatarGroupProvider,\n useAvatarGroupContext\n};\n","// src/index.ts\nimport { useEffect, useLayoutEffect } from \"react\";\nvar useSafeLayoutEffect = Boolean(globalThis == null ? void 0 : globalThis.document) ? useLayoutEffect : useEffect;\nexport {\n useSafeLayoutEffect\n};\n","// src/index.ts\nimport { useRef, useState, useEffect, useCallback } from \"react\";\nimport { useIsHydrated } from \"@heroui/react-utils\";\nimport { useSafeLayoutEffect } from \"@heroui/use-safe-layout-effect\";\nfunction useImage(props = {}) {\n const {\n onLoad,\n onError,\n ignoreFallback,\n src,\n crossOrigin,\n srcSet,\n sizes,\n loading,\n shouldBypassImageLoad = false\n } = props;\n const isHydrated = useIsHydrated();\n const imageRef = useRef(isHydrated ? new Image() : null);\n const [status, setStatus] = useState(\"pending\");\n useEffect(() => {\n if (!imageRef.current) return;\n imageRef.current.onload = (event) => {\n flush();\n setStatus(\"loaded\");\n onLoad == null ? void 0 : onLoad(event);\n };\n imageRef.current.onerror = (error) => {\n flush();\n setStatus(\"failed\");\n onError == null ? void 0 : onError(error);\n };\n }, [imageRef.current]);\n const flush = () => {\n if (imageRef.current) {\n imageRef.current.onload = null;\n imageRef.current.onerror = null;\n imageRef.current = null;\n }\n };\n const load = useCallback(() => {\n if (!src) return \"pending\";\n if (ignoreFallback || shouldBypassImageLoad) return \"loaded\";\n const img = new Image();\n img.src = src;\n if (crossOrigin) img.crossOrigin = crossOrigin;\n if (srcSet) img.srcset = srcSet;\n if (sizes) img.sizes = sizes;\n if (loading) img.loading = loading;\n imageRef.current = img;\n if (img.complete && img.naturalWidth) {\n return \"loaded\";\n }\n return \"loading\";\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError, loading, shouldBypassImageLoad]);\n useSafeLayoutEffect(() => {\n if (isHydrated) {\n setStatus(load());\n }\n }, [isHydrated, load]);\n return ignoreFallback ? \"loaded\" : status;\n}\nvar shouldShowFallbackImage = (status, fallbackStrategy) => status !== \"loaded\" && fallbackStrategy === \"beforeLoadOrError\" || status === \"failed\" && fallbackStrategy === \"onError\";\nexport {\n shouldShowFallbackImage,\n useImage\n};\n","\"use client\";\nimport {\n useAvatarGroupContext\n} from \"./chunk-JUJ53SJZ.mjs\";\n\n// src/use-avatar.ts\nimport { avatar } from \"@heroui/theme\";\nimport { useProviderContext } from \"@heroui/system\";\nimport { useDOMRef, filterDOMProps } from \"@heroui/react-utils\";\nimport { clsx, safeText, dataAttr, mergeProps } from \"@heroui/shared-utils\";\nimport { useFocusRing } from \"@react-aria/focus\";\nimport { useMemo, useCallback } from \"react\";\nimport { useImage } from \"@heroui/use-image\";\nimport { useHover } from \"@react-aria/interactions\";\nfunction useAvatar(originalProps = {}) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const globalContext = useProviderContext();\n const groupContext = useAvatarGroupContext();\n const isInGroup = !!groupContext;\n const {\n as,\n ref,\n src,\n name,\n icon,\n classNames,\n fallback,\n alt = name || \"avatar\",\n imgRef: imgRefProp,\n color = (_a = groupContext == null ? void 0 : groupContext.color) != null ? _a : \"default\",\n radius = (_b = groupContext == null ? void 0 : groupContext.radius) != null ? _b : \"full\",\n size = (_c = groupContext == null ? void 0 : groupContext.size) != null ? _c : \"md\",\n isBordered = (_d = groupContext == null ? void 0 : groupContext.isBordered) != null ? _d : false,\n isDisabled = (_e = groupContext == null ? void 0 : groupContext.isDisabled) != null ? _e : false,\n isFocusable = false,\n getInitials = safeText,\n ignoreFallback = false,\n showFallback: showFallbackProp = false,\n ImgComponent = \"img\",\n imgProps,\n className,\n onError,\n disableAnimation: disableAnimationProp,\n ...otherProps\n } = originalProps;\n const Component = as || \"span\";\n const domRef = useDOMRef(ref);\n const imgRef = useDOMRef(imgRefProp);\n const { isFocusVisible, isFocused, focusProps } = useFocusRing();\n const { isHovered, hoverProps } = useHover({ isDisabled });\n const disableAnimation = (_f = disableAnimationProp != null ? disableAnimationProp : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _f : false;\n const isHeroImage = (_h = typeof ImgComponent === \"object\" && ((_g = ImgComponent == null ? void 0 : ImgComponent.displayName) == null ? void 0 : _g.includes(\"HeroUI\"))) != null ? _h : false;\n const imageStatus = useImage({\n src,\n onError,\n ignoreFallback,\n shouldBypassImageLoad: as !== void 0 || ImgComponent !== \"img\" && !isHeroImage\n });\n const isImgLoaded = imageStatus === \"loaded\";\n const shouldFilterDOMProps = !isHeroImage;\n const showFallback = (!src || !isImgLoaded) && showFallbackProp;\n const slots = useMemo(\n () => {\n var _a2;\n return avatar({\n color,\n radius,\n size,\n isBordered,\n isDisabled,\n isInGroup,\n disableAnimation,\n isInGridGroup: (_a2 = groupContext == null ? void 0 : groupContext.isGrid) != null ? _a2 : false\n });\n },\n [\n color,\n radius,\n size,\n isBordered,\n isDisabled,\n disableAnimation,\n isInGroup,\n groupContext == null ? void 0 : groupContext.isGrid\n ]\n );\n const baseStyles = clsx(classNames == null ? void 0 : classNames.base, className);\n const canBeFocused = useMemo(() => {\n return isFocusable || as === \"button\";\n }, [isFocusable, as]);\n const getAvatarProps = useCallback(\n (props = {}) => ({\n ref: domRef,\n tabIndex: canBeFocused ? 0 : -1,\n \"data-hover\": dataAttr(isHovered),\n \"data-focus\": dataAttr(isFocused),\n \"data-focus-visible\": dataAttr(isFocusVisible),\n className: slots.base({\n class: clsx(baseStyles, props == null ? void 0 : props.className)\n }),\n ...mergeProps(otherProps, hoverProps, canBeFocused ? focusProps : {})\n }),\n [canBeFocused, slots, baseStyles, focusProps, otherProps]\n );\n const getImageProps = useCallback(\n (props = {}) => ({\n ref: imgRef,\n src,\n \"data-loaded\": dataAttr(isImgLoaded),\n className: slots.img({ class: classNames == null ? void 0 : classNames.img }),\n ...mergeProps(\n imgProps,\n props,\n filterDOMProps({ disableAnimation }, {\n enabled: shouldFilterDOMProps\n })\n )\n }),\n [slots, isImgLoaded, imgProps, disableAnimation, src, imgRef, shouldFilterDOMProps]\n );\n return {\n Component,\n ImgComponent,\n src,\n alt,\n icon,\n name,\n imgRef,\n slots,\n classNames,\n fallback,\n isImgLoaded,\n showFallback,\n ignoreFallback,\n getInitials,\n getAvatarProps,\n getImageProps\n };\n}\n\nexport {\n useAvatar\n};\n","\"use client\";\nimport {\n AvatarIcon\n} from \"./chunk-25E6VDTZ.mjs\";\nimport {\n useAvatar\n} from \"./chunk-S5XC7GTZ.mjs\";\n\n// src/avatar.tsx\nimport { useMemo } from \"react\";\nimport { forwardRef } from \"@heroui/system\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar Avatar = forwardRef((props, ref) => {\n const {\n Component,\n ImgComponent,\n src,\n icon = /* @__PURE__ */ jsx(AvatarIcon, {}),\n alt,\n classNames,\n slots,\n name,\n showFallback,\n fallback: fallbackComponent,\n getInitials,\n getAvatarProps,\n getImageProps\n } = useAvatar({\n ...props,\n ref\n });\n const fallback = useMemo(() => {\n if (!showFallback && src) return null;\n if (fallbackComponent) {\n return /* @__PURE__ */ jsx(\"div\", { \"aria-label\": alt, className: slots.fallback({ class: classNames == null ? void 0 : classNames.fallback }), role: \"img\", children: fallbackComponent });\n }\n return name ? /* @__PURE__ */ jsx(\"span\", { \"aria-label\": alt, className: slots.name({ class: classNames == null ? void 0 : classNames.name }), role: \"img\", children: getInitials(name) }) : /* @__PURE__ */ jsx(\"span\", { \"aria-label\": alt, className: slots.icon({ class: classNames == null ? void 0 : classNames.icon }), role: \"img\", children: icon });\n }, [showFallback, src, fallbackComponent, name, classNames]);\n return /* @__PURE__ */ jsxs(Component, { ...getAvatarProps(), children: [\n src && /* @__PURE__ */ jsx(ImgComponent, { ...getImageProps(), alt }),\n fallback\n ] });\n});\nAvatar.displayName = \"HeroUI.Avatar\";\nvar avatar_default = Avatar;\n\nexport {\n avatar_default\n};\n","\"use client\";\n\n// src/button-group-context.ts\nimport { createContext } from \"@heroui/react-utils\";\nvar [ButtonGroupProvider, useButtonGroupContext] = createContext({\n name: \"ButtonGroupContext\",\n strict: false\n});\n\nexport {\n ButtonGroupProvider,\n useButtonGroupContext\n};\n","\"use client\";\nimport {\n useButtonGroupContext\n} from \"./chunk-3SAWKTTV.mjs\";\n\n// src/use-button.ts\nimport { useProviderContext } from \"@heroui/system\";\nimport { dataAttr, chain, mergeProps } from \"@heroui/shared-utils\";\nimport { useCallback } from \"react\";\nimport { useFocusRing } from \"@react-aria/focus\";\nimport { useDOMRef, filterDOMProps } from \"@heroui/react-utils\";\nimport { button } from \"@heroui/theme\";\nimport { isValidElement, cloneElement, useMemo } from \"react\";\nimport { useAriaButton } from \"@heroui/use-aria-button\";\nimport { useHover } from \"@react-aria/interactions\";\nimport { useRipple } from \"@heroui/ripple\";\nfunction useButton(props) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n const groupContext = useButtonGroupContext();\n const globalContext = useProviderContext();\n const isInGroup = !!groupContext;\n const {\n ref,\n as,\n children,\n startContent: startContentProp,\n endContent: endContentProp,\n autoFocus,\n className,\n spinner,\n isLoading = false,\n disableRipple: disableRippleProp = false,\n fullWidth = (_a = groupContext == null ? void 0 : groupContext.fullWidth) != null ? _a : false,\n radius = groupContext == null ? void 0 : groupContext.radius,\n size = (_b = groupContext == null ? void 0 : groupContext.size) != null ? _b : \"md\",\n color = (_c = groupContext == null ? void 0 : groupContext.color) != null ? _c : \"default\",\n variant = (_d = groupContext == null ? void 0 : groupContext.variant) != null ? _d : \"solid\",\n disableAnimation = (_f = (_e = groupContext == null ? void 0 : groupContext.disableAnimation) != null ? _e : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _f : false,\n isDisabled: isDisabledProp = (_g = groupContext == null ? void 0 : groupContext.isDisabled) != null ? _g : false,\n isIconOnly = (_h = groupContext == null ? void 0 : groupContext.isIconOnly) != null ? _h : false,\n spinnerPlacement = \"start\",\n onPress,\n onClick,\n ...otherProps\n } = props;\n const Component = as || \"button\";\n const shouldFilterDOMProps = typeof Component === \"string\";\n const domRef = useDOMRef(ref);\n const disableRipple = (_i = disableRippleProp || (globalContext == null ? void 0 : globalContext.disableRipple)) != null ? _i : disableAnimation;\n const { isFocusVisible, isFocused, focusProps } = useFocusRing({\n autoFocus\n });\n const isDisabled = isDisabledProp || isLoading;\n const styles = useMemo(\n () => button({\n size,\n color,\n variant,\n radius,\n fullWidth,\n isDisabled,\n isInGroup,\n disableAnimation,\n isIconOnly,\n className\n }),\n [\n size,\n color,\n variant,\n radius,\n fullWidth,\n isDisabled,\n isInGroup,\n isIconOnly,\n disableAnimation,\n className\n ]\n );\n const { onPress: onRipplePressHandler, onClear: onClearRipple, ripples } = useRipple();\n const handlePress = useCallback(\n (e) => {\n if (disableRipple || isDisabled || disableAnimation) return;\n domRef.current && onRipplePressHandler(e);\n },\n [disableRipple, isDisabled, disableAnimation, domRef, onRipplePressHandler]\n );\n const { buttonProps: ariaButtonProps, isPressed } = useAriaButton(\n {\n elementType: as,\n isDisabled,\n onPress: chain(onPress, handlePress),\n onClick,\n ...otherProps\n },\n domRef\n );\n const { isHovered, hoverProps } = useHover({ isDisabled });\n const getButtonProps = useCallback(\n (props2 = {}) => ({\n \"data-disabled\": dataAttr(isDisabled),\n \"data-focus\": dataAttr(isFocused),\n \"data-pressed\": dataAttr(isPressed),\n \"data-focus-visible\": dataAttr(isFocusVisible),\n \"data-hover\": dataAttr(isHovered),\n \"data-loading\": dataAttr(isLoading),\n ...mergeProps(\n ariaButtonProps,\n focusProps,\n hoverProps,\n filterDOMProps(otherProps, {\n enabled: shouldFilterDOMProps\n }),\n filterDOMProps(props2)\n ),\n className: styles\n }),\n [\n isLoading,\n isDisabled,\n isFocused,\n isPressed,\n shouldFilterDOMProps,\n isFocusVisible,\n isHovered,\n ariaButtonProps,\n focusProps,\n hoverProps,\n otherProps,\n styles\n ]\n );\n const getIconClone = (icon) => isValidElement(icon) ? cloneElement(icon, {\n // @ts-ignore\n \"aria-hidden\": true,\n focusable: false\n }) : null;\n const startContent = getIconClone(startContentProp);\n const endContent = getIconClone(endContentProp);\n const spinnerSize = useMemo(() => {\n const buttonSpinnerSizeMap = {\n sm: \"sm\",\n md: \"sm\",\n lg: \"md\"\n };\n return buttonSpinnerSizeMap[size];\n }, [size]);\n const getRippleProps = useCallback(\n () => ({ ripples, onClear: onClearRipple }),\n [ripples, onClearRipple]\n );\n return {\n Component,\n children,\n domRef,\n spinner,\n styles,\n startContent,\n endContent,\n isLoading,\n spinnerPlacement,\n spinnerSize,\n disableRipple,\n getButtonProps,\n getRippleProps,\n isIconOnly\n };\n}\n\nexport {\n useButton\n};\n","\"use client\";\n\n// src/use-spinner.ts\nimport { mapPropsVariants } from \"@heroui/system-rsc\";\nimport { spinner } from \"@heroui/theme\";\nimport { clsx, objectToDeps } from \"@heroui/shared-utils\";\nimport { useMemo, useCallback } from \"react\";\nimport { useProviderContext } from \"@heroui/system\";\nfunction useSpinner(originalProps) {\n var _a, _b;\n const [props, variantProps] = mapPropsVariants(originalProps, spinner.variantKeys);\n const globalContext = useProviderContext();\n const variant = (_b = (_a = originalProps == null ? void 0 : originalProps.variant) != null ? _a : globalContext == null ? void 0 : globalContext.spinnerVariant) != null ? _b : \"default\";\n const { children, className, classNames, label: labelProp, ...otherProps } = props;\n const slots = useMemo(() => spinner({ ...variantProps }), [objectToDeps(variantProps)]);\n const baseStyles = clsx(classNames == null ? void 0 : classNames.base, className);\n const label = labelProp || children;\n const ariaLabel = useMemo(() => {\n if (label && typeof label === \"string\") {\n return label;\n }\n return !otherProps[\"aria-label\"] ? \"Loading\" : \"\";\n }, [children, label, otherProps[\"aria-label\"]]);\n const getSpinnerProps = useCallback(\n () => ({\n \"aria-label\": ariaLabel,\n className: slots.base({\n class: baseStyles\n }),\n ...otherProps\n }),\n [ariaLabel, slots, baseStyles, otherProps]\n );\n return { label, slots, classNames, variant, getSpinnerProps };\n}\n\nexport {\n useSpinner\n};\n","\"use client\";\nimport {\n useSpinner\n} from \"./chunk-IKKYW34A.mjs\";\n\n// src/spinner.tsx\nimport { forwardRef } from \"@heroui/system-rsc\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar Spinner = forwardRef((props, ref) => {\n const { slots, classNames, label, variant, getSpinnerProps } = useSpinner({ ...props });\n if (variant === \"wave\" || variant === \"dots\") {\n return /* @__PURE__ */ jsxs(\"div\", { ref, ...getSpinnerProps(), children: [\n /* @__PURE__ */ jsx(\"div\", { className: slots.wrapper({ class: classNames == null ? void 0 : classNames.wrapper }), children: [...new Array(3)].map((_, index) => /* @__PURE__ */ jsx(\n \"i\",\n {\n className: slots.dots({ class: classNames == null ? void 0 : classNames.dots }),\n style: {\n \"--dot-index\": index\n }\n },\n `dot-${index}`\n )) }),\n label && /* @__PURE__ */ jsx(\"span\", { className: slots.label({ class: classNames == null ? void 0 : classNames.label }), children: label })\n ] });\n }\n if (variant === \"simple\") {\n return /* @__PURE__ */ jsxs(\"div\", { ref, ...getSpinnerProps(), children: [\n /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: slots.wrapper({ class: classNames == null ? void 0 : classNames.wrapper }),\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /* @__PURE__ */ jsx(\n \"circle\",\n {\n className: slots.circle1({ class: classNames == null ? void 0 : classNames.circle1 }),\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"path\",\n {\n className: slots.circle2({ class: classNames == null ? void 0 : classNames.circle2 }),\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\",\n fill: \"currentColor\"\n }\n )\n ]\n }\n ),\n label && /* @__PURE__ */ jsx(\"span\", { className: slots.label({ class: classNames == null ? void 0 : classNames.label }), children: label })\n ] });\n }\n if (variant === \"spinner\") {\n return /* @__PURE__ */ jsxs(\"div\", { ref, ...getSpinnerProps(), children: [\n /* @__PURE__ */ jsx(\"div\", { className: slots.wrapper({ class: classNames == null ? void 0 : classNames.wrapper }), children: [...new Array(12)].map((_, index) => /* @__PURE__ */ jsx(\n \"i\",\n {\n className: slots.spinnerBars({ class: classNames == null ? void 0 : classNames.spinnerBars }),\n style: {\n \"--bar-index\": index\n }\n },\n `star-${index}`\n )) }),\n label && /* @__PURE__ */ jsx(\"span\", { className: slots.label({ class: classNames == null ? void 0 : classNames.label }), children: label })\n ] });\n }\n return /* @__PURE__ */ jsxs(\"div\", { ref, ...getSpinnerProps(), children: [\n /* @__PURE__ */ jsxs(\"div\", { className: slots.wrapper({ class: classNames == null ? void 0 : classNames.wrapper }), children: [\n /* @__PURE__ */ jsx(\"i\", { className: slots.circle1({ class: classNames == null ? void 0 : classNames.circle1 }) }),\n /* @__PURE__ */ jsx(\"i\", { className: slots.circle2({ class: classNames == null ? void 0 : classNames.circle2 }) })\n ] }),\n label && /* @__PURE__ */ jsx(\"span\", { className: slots.label({ class: classNames == null ? void 0 : classNames.label }), children: label })\n ] });\n});\nSpinner.displayName = \"HeroUI.Spinner\";\nvar spinner_default = Spinner;\n\nexport {\n spinner_default\n};\n","\"use client\";\nimport {\n useButton\n} from \"./chunk-REKYGLAJ.mjs\";\n\n// src/button.tsx\nimport { Spinner } from \"@heroui/spinner\";\nimport { Ripple } from \"@heroui/ripple\";\nimport { forwardRef } from \"@heroui/system\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar Button = forwardRef((props, ref) => {\n const {\n Component,\n domRef,\n children,\n spinnerSize,\n spinner = /* @__PURE__ */ jsx(Spinner, { color: \"current\", size: spinnerSize }),\n spinnerPlacement,\n startContent,\n endContent,\n isLoading,\n disableRipple,\n getButtonProps,\n getRippleProps,\n isIconOnly\n } = useButton({ ...props, ref });\n return /* @__PURE__ */ jsxs(Component, { ref: domRef, ...getButtonProps(), children: [\n startContent,\n isLoading && spinnerPlacement === \"start\" && spinner,\n isLoading && isIconOnly ? null : children,\n isLoading && spinnerPlacement === \"end\" && spinner,\n endContent,\n !disableRipple && /* @__PURE__ */ jsx(Ripple, { ...getRippleProps() })\n ] });\n});\nButton.displayName = \"HeroUI.Button\";\nvar button_default = Button;\n\nexport {\n button_default\n};\n","// Sidebar 组件类型定义\r\n\r\nexport interface UnitProgressData {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsProgressData {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UnitProgressData[];\r\n}\r\n\r\nexport interface SidebarProps {\r\n // 核心数据 - 用户年级单元进度数据\r\n data: UserGradeUnitsProgressData | null;\r\n\r\n // 状态控制\r\n loading?: boolean;\r\n error?: Error | null;\r\n collapsed?: boolean;\r\n\r\n // 交互回调\r\n onToggleCollapse?: () => void;\r\n activeUnitId?: string | null;\r\n onUnitSelect?: (unitId: string) => void;\r\n\r\n // 自定义渲染\r\n renderUnitItem?: (unit: UnitProgressData, progress?: UnitProgressData) => React.ReactNode;\r\n\r\n // 样式配置\r\n className?: string;\r\n unitItemClassName?: string;\r\n style?: React.CSSProperties;\r\n unitItemStyle?: React.CSSProperties;\r\n}\r\n\r\n// 进度状态颜色映射\r\nexport const getProgressColor = (status: UnitProgressData['status']): 'success' | 'primary' | 'default' => {\r\n switch (status) {\r\n case 'completed':\r\n return 'success';\r\n case 'in-progress':\r\n return 'primary';\r\n case 'not-started':\r\n default:\r\n return 'default';\r\n }\r\n};","import React from 'react';\r\nimport { Progress } from '@heroui/react';\r\nimport type { SidebarProps, UnitProgressData } from './types';\r\nimport { getProgressColor } from './types';\r\nimport './Sidebar.css';\r\n\r\nexport const Sidebar: React.FC<SidebarProps> = ({\r\n data,\r\n loading = false,\r\n error = null,\r\n collapsed = false,\r\n onToggleCollapse,\r\n activeUnitId = null,\r\n onUnitSelect,\r\n renderUnitItem,\r\n className = '',\r\n unitItemClassName = '',\r\n style = {},\r\n unitItemStyle = {},\r\n}) => {\r\n const handleUnitSelect = (unitId: string, event: React.MouseEvent) => {\r\n event.preventDefault();\r\n onUnitSelect?.(unitId);\r\n };\r\n\r\n const handleToggleCollapse = () => {\r\n onToggleCollapse?.();\r\n };\r\n\r\n // 渲染默认单元项\r\n const renderDefaultUnitItem = (unit: UnitProgressData) => (\r\n <div\r\n key={unit.unitId}\r\n className={`sidebar__unit-item ${unitItemClassName} ${\r\n activeUnitId === unit.unitId ? 'sidebar__unit-item--active' : ''\r\n } ${unit.status ? `sidebar__unit-item--${unit.status}` : ''}`}\r\n style={unitItemStyle}\r\n onClick={(e) => handleUnitSelect(unit.unitId, e)}\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-label={`${unit.title},进度 ${unit.progressPercentage}%`}\r\n >\r\n <div className=\"sidebar__unit-item__content\">\r\n {unit.icon && (\r\n <span className=\"sidebar__unit-item__icon\">{unit.icon}</span>\r\n )}\r\n {!collapsed && (\r\n <span className=\"sidebar__unit-item__title\">{unit.title}</span>\r\n )}\r\n </div>\r\n\r\n {!collapsed && unit.progressPercentage !== undefined && (\r\n <div className=\"sidebar__unit-item__progress\">\r\n <Progress\r\n value={unit.progressPercentage}\r\n size=\"sm\"\r\n color={getProgressColor(unit.status)}\r\n aria-label={`${unit.title} 进度`}\r\n />\r\n <span className=\"progress-percentage\">\r\n {unit.progressPercentage}%\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n // 渲染状态内容\r\n const renderContent = () => {\r\n if (loading) {\r\n return (\r\n <div className=\"sidebar__loading\">\r\n 加载中...\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"sidebar__error\">\r\n 加载失败: {error.message}\r\n </div>\r\n );\r\n }\r\n\r\n if (!data) {\r\n return (\r\n <div className=\"sidebar__empty\">\r\n 暂无课程数据\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className=\"sidebar__header\">\r\n <button\r\n className=\"sidebar__toggle-btn\"\r\n onClick={handleToggleCollapse}\r\n aria-label=\"切换侧边栏折叠状态\"\r\n >\r\n {collapsed ? '→' : '←'}\r\n </button>\r\n {!collapsed && (\r\n <div className=\"sidebar__course-info\">\r\n <h3 className=\"sidebar__course-title\">{data.courseTitle}</h3>\r\n <span className=\"sidebar__course-level\">{data.courseLevel}年级</span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <nav className=\"sidebar__content\">\r\n <ul className=\"sidebar__unit-list\">\r\n {data.units.map((unit) => (\r\n <li key={unit.unitId}>\r\n {renderUnitItem\r\n ? renderUnitItem(unit, unit)\r\n : renderDefaultUnitItem(unit)}\r\n </li>\r\n ))}\r\n </ul>\r\n </nav>\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <aside\r\n className={`sidebar ${className} ${collapsed ? 'sidebar--collapsed' : ''} ${\r\n loading ? 'sidebar--loading' : ''\r\n } ${error ? 'sidebar--error' : ''}`}\r\n style={style}\r\n aria-label=\"课程导航侧边栏\"\r\n role=\"complementary\"\r\n >\r\n {renderContent()}\r\n </aside>\r\n );\r\n};","import React from 'react'\r\nimport './Submenu.css'\r\n\r\nexport interface SubmenuItem {\r\n id: string | number\r\n label?: React.ReactNode\r\n value?: unknown\r\n icon?: React.ReactNode\r\n disabled?: boolean\r\n onClick?: (item: SubmenuItem) => void\r\n [key: string]: unknown\r\n}\r\n\r\nexport interface SubmenuProps {\r\n trigger: React.ReactNode\r\n items: SubmenuItem[]\r\n position?: 'top' | 'bottom' | 'left' | 'right' | 'auto'\r\n alignment?: 'start' | 'center' | 'end'\r\n openDelay?: number\r\n closeDelay?: number\r\n onOpen?: () => void\r\n onClose?: () => void\r\n renderItem?: (item: SubmenuItem, config: TItemConfig) => React.ReactNode\r\n itemConfig?: TItemConfig\r\n className?: string\r\n menuClassName?: string\r\n itemClassName?: string\r\n activeItemClassName?: string\r\n}\r\n\r\ntype TItemConfig = {\r\n currentUserRole?: 'guest' | 'student' | 'teacher' | 'admin'\r\n theme?: 'light' | 'dark'\r\n [key: string]: unknown\r\n}\r\n\r\nconst Submenu: React.FC<SubmenuProps> = ({\r\n trigger,\r\n items,\r\n position = 'bottom',\r\n alignment = 'start',\r\n openDelay = 300,\r\n closeDelay = 100,\r\n onOpen,\r\n onClose,\r\n renderItem,\r\n itemConfig = {},\r\n className,\r\n menuClassName,\r\n itemClassName,\r\n // activeItemClassName is available for custom styling but not used in default implementation\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const openTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\r\n const closeTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\r\n\r\n const clearTimeouts = () => {\r\n if (openTimeoutRef.current) {\r\n clearTimeout(openTimeoutRef.current)\r\n }\r\n if (closeTimeoutRef.current) {\r\n clearTimeout(closeTimeoutRef.current)\r\n }\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n clearTimeouts()\r\n openTimeoutRef.current = setTimeout(() => {\r\n setIsOpen(true)\r\n onOpen?.()\r\n }, openDelay)\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n clearTimeouts()\r\n closeTimeoutRef.current = setTimeout(() => {\r\n setIsOpen(false)\r\n onClose?.()\r\n }, closeDelay)\r\n }\r\n\r\n const handleItemClick = (item: SubmenuItem) => {\r\n if (!item.disabled && item.onClick) {\r\n item.onClick(item)\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n return () => clearTimeouts()\r\n }, [])\r\n\r\n const defaultRenderItem = (item: SubmenuItem) => (\r\n <div\r\n key={item.id}\r\n className={`submenu-item ${item.disabled ? 'is-disabled' : ''} ${itemClassName || ''}`}\r\n onClick={() => handleItemClick(item)}\r\n >\r\n {item.icon && <span className=\"submenu-item-icon\">{item.icon}</span>}\r\n <span>{item.label}</span>\r\n </div>\r\n )\r\n\r\n const getPanelClasses = () => {\r\n const classes = ['submenu-panel']\r\n \r\n if (menuClassName) {\r\n classes.push(menuClassName)\r\n }\r\n \r\n // Add position class\r\n classes.push(`position-${position}`)\r\n \r\n // Add alignment class if not 'start' (default)\r\n if (alignment !== 'start') {\r\n classes.push(`alignment-${alignment}`)\r\n }\r\n \r\n // Add open state class\r\n if (isOpen) {\r\n classes.push('is-open')\r\n }\r\n \r\n return classes.join(' ')\r\n }\r\n\r\n return (\r\n <div \r\n className={`submenu-container ${className || ''}`}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <div className=\"submenu-trigger\">\r\n {trigger}\r\n </div>\r\n \r\n <div className={getPanelClasses()}>\r\n {items.map(item => \r\n renderItem \r\n ? renderItem(item, itemConfig)\r\n : defaultRenderItem(item)\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Submenu","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = config ? config.env : {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters, config) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.12.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import React from 'react';\r\nimport { Avatar } from \"@heroui/react\";\r\nimport Submenu from \"../Submenu/Submenu\";\r\nimport type { SubmenuItem } from \"../Submenu/Submenu\";\r\nimport axios from \"axios\";\r\nimport type { UserData } from '../../types';\r\nimport './UserProfile.css';\r\n\r\n// 图标组件定义\r\nconst UserIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>👤</span>;\r\nconst SettingsIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>⚙️</span>;\r\nconst HelpIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>❓</span>;\r\nconst LogoutIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>🚪</span>;\r\n\r\n// API 配置类型\r\nexport interface ApiConfig {\r\n baseURL: string;\r\n endpoints: {\r\n userProfile: string;\r\n };\r\n headers?: Record<string, string>;\r\n}\r\n\r\n\r\n// 默认菜单项配置\r\nconst DEFAULT_MENU_ITEMS: SubmenuItem[] = [\r\n { id: 'profile', label: '个人主页', icon: <UserIcon /> },\r\n { id: 'settings', label: '设置', icon: <SettingsIcon /> },\r\n { id: 'help', label: '帮助', icon: <HelpIcon /> },\r\n { id: 'logout', label: '退出', icon: <LogoutIcon /> }\r\n];\r\n\r\nexport interface UserProfileProps {\r\n // 用户数据配置\r\n userId?: string;\r\n userName?: string;\r\n userAvatar?: string;\r\n \r\n // API 配置\r\n apiConfig?: ApiConfig;\r\n \r\n // 菜单配置\r\n menuItems?: SubmenuItem[];\r\n \r\n // 样式配置\r\n avatarSize?: 'sm' | 'md' | 'lg';\r\n avatarClassName?: string;\r\n userNameClassName?: string;\r\n containerClassName?: string;\r\n \r\n // 状态控制\r\n isLoading?: boolean;\r\n error?: Error | null;\r\n \r\n // 事件回调\r\n onMenuOpen?: () => void;\r\n onMenuClose?: () => void;\r\n onMenuItemClick?: (itemId: string) => void;\r\n onLogout?: () => void;\r\n \r\n // 定制化渲染\r\n renderMenuItem?: (item: SubmenuItem, userData: UserData) => React.ReactNode;\r\n renderUserInfo?: (userData: UserData) => React.ReactNode;\r\n}\r\n\r\nconst UserProfile: React.FC<UserProfileProps> = ({\r\n userId,\r\n userName: initialUserName,\r\n userAvatar: initialUserAvatar,\r\n apiConfig,\r\n menuItems = DEFAULT_MENU_ITEMS,\r\n avatarSize = 'md',\r\n isLoading = false,\r\n error = null,\r\n avatarClassName,\r\n userNameClassName,\r\n containerClassName,\r\n onMenuOpen,\r\n onMenuClose,\r\n onMenuItemClick,\r\n onLogout,\r\n renderMenuItem,\r\n renderUserInfo\r\n}) => {\r\n const [userData, setUserData] = React.useState<UserData>({\r\n id: userId || '',\r\n name: initialUserName || '',\r\n avatar: initialUserAvatar || '',\r\n level: 0,\r\n badges: []\r\n });\r\n \r\n const [loading, setLoading] = React.useState(isLoading);\r\n const [errorState, setErrorState] = React.useState<Error | null>(error);\r\n\r\n // 数据获取逻辑\r\n React.useEffect(() => {\r\n if (userId && apiConfig && !initialUserName && !initialUserAvatar) {\r\n fetchUserData();\r\n }\r\n }, [userId, apiConfig, initialUserName, initialUserAvatar]);\r\n\r\n const fetchUserData = async () => {\r\n setLoading(true);\r\n setErrorState(null);\r\n \r\n try {\r\n const endpoint = apiConfig!.endpoints.userProfile.replace(':userId', userId!);\r\n const response = await axios.get(`${apiConfig!.baseURL}${endpoint}`, {\r\n headers: apiConfig!.headers\r\n });\r\n \r\n setUserData(response.data);\r\n } catch (err) {\r\n setErrorState(err as Error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // 处理菜单项点击\r\n const handleMenuItemClick = (item: SubmenuItem) => {\r\n onMenuItemClick?.(item.id as string);\r\n \r\n if (item.id === 'logout') {\r\n onLogout?.();\r\n }\r\n };\r\n\r\n // 处理菜单打开\r\n const handleMenuOpen = () => {\r\n onMenuOpen?.();\r\n };\r\n\r\n // 处理菜单关闭\r\n const handleMenuClose = () => {\r\n onMenuClose?.();\r\n };\r\n\r\n // 渲染用户信息区域\r\n const renderDefaultUserInfo = () => (\r\n <div className=\"user-profile-trigger\">\r\n <Avatar\r\n src={userData.avatar}\r\n size={avatarSize}\r\n className={avatarClassName}\r\n alt=\"用户头像\"\r\n />\r\n <span className={`user-name ${userNameClassName || ''}`}>\r\n {userData.name}\r\n </span>\r\n </div>\r\n );\r\n\r\n // 渲染默认菜单项\r\n const renderDefaultMenuItem = (item: SubmenuItem) => (\r\n <div\r\n key={item.id}\r\n className=\"submenu-item\"\r\n onClick={() => handleMenuItemClick(item)}\r\n >\r\n {item.icon && <span className=\"submenu-item-icon\">{item.icon}</span>}\r\n <span>{item.label}</span>\r\n </div>\r\n );\r\n\r\n if (loading) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''} is-loading`}>\r\n <div className=\"user-profile-loading\">加载中...</div>\r\n </div>\r\n );\r\n }\r\n\r\n if (errorState) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''} has-error`}>\r\n <div className=\"user-profile-error\">\r\n 错误: {errorState.message}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!userData.name) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''}`}>\r\n <div className=\"user-profile-loading\">未登录</div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''}`}>\r\n <Submenu\r\n trigger={renderUserInfo ? renderUserInfo(userData) : renderDefaultUserInfo()}\r\n items={menuItems.map(item => ({\r\n ...item,\r\n onClick: () => handleMenuItemClick(item)\r\n }))}\r\n position=\"bottom\"\r\n alignment=\"end\"\r\n onOpen={handleMenuOpen}\r\n onClose={handleMenuClose}\r\n renderItem={renderMenuItem ? (item) => renderMenuItem(item, userData) : undefined}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserProfile;","import React from 'react';\r\nimport Submenu from '../Submenu/Submenu';\r\nimport UserProfile from '../UserProfile/UserProfile';\r\nimport type { SubmenuItem } from '../Submenu/Submenu';\r\nimport type { MathWizHeaderProps, ExploreItem } from './MathWizHeader.types';\r\nimport './MathWizHeader.css';\r\n\r\n// 默认探索菜单项渲染函数\r\nconst defaultRenderExploreItem = (item: ExploreItem) => (\r\n <div\r\n key={item.id}\r\n className=\"explore-menu-item\"\r\n onClick={() => item.onClick?.(item)}\r\n >\r\n <span className=\"explore-item-label\">{item.label}</span>\r\n {item.status && (\r\n <span className={`explore-item-status status-${item.status.toLowerCase().replace('%', '').replace(' ', '-')}`}>\r\n {item.status}\r\n </span>\r\n )}\r\n </div>\r\n);\r\n\r\n// 默认探索菜单触发器\r\nconst ExploreTrigger = () => (\r\n <button className=\"explore-button\" aria-label=\"探索数学课程\">\r\n <span className=\"explore-icon\">🌍</span>\r\n <span className=\"explore-text\">探索</span>\r\n </button>\r\n);\r\n\r\nconst MathWizHeader: React.FC<MathWizHeaderProps> = ({\r\n // 通用Props\r\n className = '',\r\n style,\r\n logoHref = '/',\r\n logoText = 'MathWiz',\r\n onLogoClick,\r\n\r\n // 探索菜单Props\r\n exploreItems = [],\r\n exploreMenuOpen = false,\r\n onExploreMenuToggle,\r\n onExploreItemClick,\r\n renderExploreItem = defaultRenderExploreItem,\r\n\r\n // 用户资料Props\r\n userData,\r\n userMenuItems,\r\n onUserMenuItemClick,\r\n onLogout,\r\n\r\n // 状态控制Props\r\n isLoading = false,\r\n error = null,\r\n\r\n // 样式定制Props\r\n headerClassName = '',\r\n logoClassName = '',\r\n exploreClassName = '',\r\n userProfileClassName = '',\r\n\r\n // 无障碍访问Props\r\n 'aria-label': ariaLabel,\r\n 'aria-labelledby': ariaLabelledBy,\r\n\r\n ...restProps\r\n}) => {\r\n // 准备探索菜单项数据 - 纯数据转换,无业务逻辑\r\n const preparedExploreItems: SubmenuItem[] = exploreItems.map(item => ({\r\n id: item.id,\r\n label: renderExploreItem(item),\r\n onClick: () => onExploreItemClick?.(item)\r\n }));\r\n\r\n return (\r\n <header\r\n className={`mathwiz-header site-header ${headerClassName} ${className}`}\r\n style={style}\r\n aria-label={ariaLabel}\r\n aria-labelledby={ariaLabelledBy}\r\n role=\"banner\"\r\n {...restProps}\r\n >\r\n <div className=\"header-content\">\r\n {/* 左侧:探索菜单 */}\r\n <div className=\"header-section left\">\r\n <Submenu\r\n trigger={<ExploreTrigger />}\r\n items={preparedExploreItems}\r\n position=\"bottom\"\r\n alignment=\"start\"\r\n openDelay={300}\r\n closeDelay={100}\r\n onOpen={() => onExploreMenuToggle?.(true)}\r\n onClose={() => onExploreMenuToggle?.(false)}\r\n className={`explore-submenu ${exploreClassName}`}\r\n menuClassName=\"explore-panel\"\r\n />\r\n </div>\r\n\r\n {/* 中间:Logo */}\r\n <div className=\"header-section center\">\r\n <a\r\n href={logoHref}\r\n className={`logo ${logoClassName}`}\r\n onClick={onLogoClick}\r\n aria-label=\"MathWiz 首页\"\r\n >\r\n {logoText}\r\n </a>\r\n </div>\r\n\r\n {/* 右侧:用户资料 */}\r\n <div className=\"header-section right\">\r\n <UserProfile\r\n userName={userData?.name}\r\n userAvatar={userData?.avatar}\r\n menuItems={userMenuItems}\r\n onMenuItemClick={onUserMenuItemClick}\r\n onLogout={onLogout}\r\n containerClassName={userProfileClassName}\r\n isLoading={isLoading}\r\n error={error}\r\n />\r\n </div>\r\n </div>\r\n </header>\r\n );\r\n};\r\n\r\n// 使用 React.memo 优化性能,避免不必要的重渲染\r\nexport default React.memo(MathWizHeader, (prevProps, nextProps) => {\r\n // 自定义比较函数,只在相关props变化时重渲染\r\n return (\r\n prevProps.logoText === nextProps.logoText &&\r\n prevProps.logoHref === nextProps.logoHref &&\r\n prevProps.className === nextProps.className &&\r\n prevProps.headerClassName === nextProps.headerClassName &&\r\n prevProps.logoClassName === nextProps.logoClassName &&\r\n prevProps.exploreClassName === nextProps.exploreClassName &&\r\n prevProps.userProfileClassName === nextProps.userProfileClassName &&\r\n prevProps['aria-label'] === nextProps['aria-label'] &&\r\n prevProps['aria-labelledby'] === nextProps['aria-labelledby'] &&\r\n prevProps.isLoading === nextProps.isLoading &&\r\n prevProps.error === nextProps.error &&\r\n // 深度比较数组\r\n JSON.stringify(prevProps.exploreItems) === JSON.stringify(nextProps.exploreItems) &&\r\n // 深度比较对象\r\n JSON.stringify(prevProps.userData) === JSON.stringify(nextProps.userData) &&\r\n JSON.stringify(prevProps.userMenuItems) === JSON.stringify(nextProps.userMenuItems)\r\n );\r\n});","import React from 'react';\r\nimport type { RadarChartProps } from '../../../types/radarAbility';\r\n\r\nconst RadarChart: React.FC<RadarChartProps> = ({ \r\n abilities, \r\n width = 400, \r\n height = 400 \r\n}) => {\r\n // 计算雷达图的数据点\r\n const calculateRadarPoints = () => {\r\n if (abilities.length === 0) return '';\r\n \r\n return abilities\r\n .map(ability => {\r\n // 使用预定义的SVG坐标点,如果没有则动态计算\r\n if (ability.svgPoint) {\r\n return `${ability.svgPoint.x},${ability.svgPoint.y}`;\r\n }\r\n \r\n // 动态计算坐标(基于能力和分数)\r\n const angle = (Math.PI * 2 * abilities.indexOf(ability)) / abilities.length;\r\n const radius = (ability.score / ability.maxScore) * 40 + 10; // 10-50范围\r\n const x = 50 + radius * Math.sin(angle);\r\n const y = 50 - radius * Math.cos(angle);\r\n \r\n return `${x},${y}`;\r\n })\r\n .join(' ');\r\n };\r\n\r\n // 计算轴线端点\r\n const calculateAxisEndPoints = (index: number) => {\r\n const angle = (Math.PI * 2 * index) / Math.max(abilities.length, 1);\r\n const x2 = 50 + 40 * Math.sin(angle);\r\n const y2 = 50 - 40 * Math.cos(angle);\r\n return { x2, y2 };\r\n };\r\n\r\n // 计算标签位置\r\n const calculateLabelPosition = (index: number) => {\r\n const angle = (Math.PI * 2 * index) / Math.max(abilities.length, 1);\r\n const x = 50 + 45 * Math.sin(angle);\r\n const y = 50 - 45 * Math.cos(angle);\r\n \r\n // 根据角度调整文本锚点\r\n let textAnchor = 'middle';\r\n if (angle > Math.PI * 0.25 && angle < Math.PI * 0.75) textAnchor = 'start';\r\n if (angle > Math.PI * 1.25 && angle < Math.PI * 1.75) textAnchor = 'end';\r\n \r\n return { x, y, textAnchor };\r\n };\r\n\r\n return (\r\n <svg \r\n data-testid=\"radar-chart\"\r\n width={width} \r\n height={height} \r\n viewBox=\"0 0 100 100\" \r\n className=\"w-full h-full\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n {/* 中心点 */}\r\n <circle \r\n data-testid=\"center-point\"\r\n cx=\"50\" \r\n cy=\"50\" \r\n r=\"1\" \r\n fill=\"#4A90E2\" \r\n />\r\n\r\n {/* 轴线 */}\r\n {abilities.map((_, index) => {\r\n const { x2, y2 } = calculateAxisEndPoints(index);\r\n return (\r\n <line\r\n key={`axis-${index}`}\r\n data-testid=\"axis-line\"\r\n x1=\"50\"\r\n y1=\"50\"\r\n x2={x2}\r\n y2={y2}\r\n stroke=\"#E2E8F0\"\r\n strokeWidth=\"0.5\"\r\n />\r\n );\r\n })}\r\n\r\n {/* 雷达多边形 */}\r\n {abilities.length > 2 && (\r\n <polygon\r\n data-testid=\"radar-polygon\"\r\n points={calculateRadarPoints()}\r\n fill=\"rgba(74, 144, 226, 0.2)\"\r\n stroke=\"rgb(74, 144, 226)\"\r\n strokeWidth=\"1\"\r\n fillRule=\"evenodd\"\r\n />\r\n )}\r\n\r\n {/* 数据点 */}\r\n {abilities.map((ability, index) => {\r\n let x, y;\r\n \r\n if (ability.svgPoint) {\r\n x = ability.svgPoint.x;\r\n y = ability.svgPoint.y;\r\n } else {\r\n const angle = (Math.PI * 2 * index) / abilities.length;\r\n const radius = (ability.score / ability.maxScore) * 40 + 10;\r\n x = 50 + radius * Math.sin(angle);\r\n y = 50 - radius * Math.cos(angle);\r\n }\r\n \r\n return (\r\n <circle\r\n key={`point-${ability.name}`}\r\n data-testid=\"data-point\"\r\n cx={x}\r\n cy={y}\r\n r=\"2\"\r\n fill={ability.progressBarColor === 'bg-orange-400' ? '#FBBF24' : '#4A90E2'}\r\n />\r\n );\r\n })}\r\n\r\n {/* 能力标签 */}\r\n {abilities.map((ability, index) => {\r\n const { x, y, textAnchor } = calculateLabelPosition(index);\r\n \r\n return (\r\n <text\r\n key={`label-${ability.name}`}\r\n x={x}\r\n y={y}\r\n textAnchor={textAnchor as any}\r\n fontSize=\"5\"\r\n fill=\"#334155\"\r\n className=\"text-xs\"\r\n >\r\n {ability.name}\r\n </text>\r\n );\r\n })}\r\n </svg>\r\n );\r\n};\r\n\r\nexport default RadarChart;","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import axios from 'axios';\r\nimport type { RadarAbilityData } from '../types/radarAbility';\r\n\r\n// 模拟数据 - 在实际应用中会从API获取\r\nexport const mockRadarAbilityData: RadarAbilityData = {\r\n overallRating: '优秀',\r\n generalRecommendation: '你的空间想象力和逻辑推理能力非常出色!若能进一步提升在复杂图形下的专注力,你将所向披靡。建议尝试我们‘专注力挑战’系列游戏。',\r\n abilities: [\r\n {\r\n name: '空间想象力',\r\n score: 7.5,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 50, y: 17.5 },\r\n recommendation: '通过观察三维物体在不同角度的投影,或尝试构建复杂结构的游戏,能有效提升空间想象力。',\r\n recommendationLink: '#spatial-challenges'\r\n },\r\n {\r\n name: '逻辑推理',\r\n score: 8.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 82, y: 35 },\r\n recommendation: '解决数独、迷宫或逻辑谜题,能够持续锻炼你的逻辑思维,尝试挑战更高难度的推理游戏。',\r\n recommendationLink: '#logic-puzzles'\r\n },\r\n {\r\n name: '图形辨识',\r\n score: 9.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 85, y: 65 },\r\n recommendation: '你在这方面表现出色!可以尝试在更复杂、干扰因素更多的图形中进行辨识训练,保持敏锐。',\r\n recommendationLink: '#graphic-training'\r\n },\r\n {\r\n name: '专注力',\r\n score: 7.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-orange-400',\r\n svgPoint: { x: 50, y: 80 },\r\n recommendation: '在长时间的游戏中保持专注对你来说是一个挑战,建议尝试我们‘专注力挑战’系列游戏,逐渐延长专注时间。',\r\n recommendationLink: '#focus-challenges'\r\n },\r\n {\r\n name: '观察力',\r\n score: 8.5,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 15, y: 65 },\r\n recommendation: '你的观察力非常敏锐,在细节发现上尤为突出。尝试在限时模式下进行观察力训练,提高反应速度。',\r\n recommendationLink: '#observation-drills'\r\n },\r\n {\r\n name: '抗压性',\r\n score: 7.8,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 18, y: 35 },\r\n recommendation: '面对高压挑战时,保持冷静是关键。通过模拟竞赛或限时任务来提升抗压能力,逐步适应压力。',\r\n recommendationLink: '#stress-games'\r\n }\r\n ]\r\n};\r\n\r\nexport class RadarAbilityService {\r\n private static readonly API_BASE_URL = '/api/radar-ability';\r\n\r\n static async fetchRadarAbilityData(): Promise<RadarAbilityData> {\r\n try {\r\n // 在测试环境中使用mock数据,避免真实API调用\r\n if (process.env.NODE_ENV === 'test') {\r\n // 测试环境使用mock数据\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n return mockRadarAbilityData;\r\n } else {\r\n // 开发和生产环境调用真实API\r\n const response = await axios.get<RadarAbilityData>(`${this.API_BASE_URL}/assessment`);\r\n return response.data;\r\n }\r\n } catch (error) {\r\n console.error('Failed to fetch radar ability data:', error);\r\n // 在测试环境中抛出错误以便测试错误处理\r\n if (process.env.NODE_ENV === 'test') {\r\n throw new Error('获取能力评估数据失败');\r\n }\r\n // 开发和生产环境返回mock数据作为fallback\r\n return mockRadarAbilityData;\r\n }\r\n }\r\n\r\n static async submitFeedback(feedback: {\r\n abilityName: string;\r\n rating: number;\r\n comment: string;\r\n }): Promise<void> {\r\n try {\r\n // 模拟API调用\r\n await axios.post(`${this.API_BASE_URL}/feedback`, feedback);\r\n } catch (error) {\r\n console.error('Failed to submit feedback:', error);\r\n throw new Error('提交反馈失败');\r\n }\r\n }\r\n}","import { create } from 'zustand';\r\nimport type { RadarAbilityData } from '../types/radarAbility';\r\nimport { RadarAbilityService } from '../services/radarAbilityService';\r\n\r\ninterface RadarAbilityState {\r\n data: RadarAbilityData | null;\r\n loading: boolean;\r\n error: string | null;\r\n fetchData: () => Promise<void>;\r\n setData: (data: RadarAbilityData) => void;\r\n setError: (error: string) => void;\r\n reset: () => void;\r\n}\r\n\r\nexport const useRadarAbilityStore = create<RadarAbilityState>((set, get) => ({\r\n data: null,\r\n loading: false,\r\n error: null,\r\n\r\n fetchData: async () => {\r\n // Don't fetch if already loading\r\n if (get().loading) return;\r\n\r\n set({ loading: true, error: null });\r\n\r\n try {\r\n const radarData = await RadarAbilityService.fetchRadarAbilityData();\r\n set({ data: radarData, loading: false });\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : '获取数据失败';\r\n set({ error: errorMessage, loading: false });\r\n }\r\n },\r\n\r\n setData: (data: RadarAbilityData) => {\r\n set({ data, error: null, loading: false });\r\n },\r\n\r\n setError: (error: string) => {\r\n set({ error, loading: false });\r\n },\r\n\r\n reset: () => {\r\n set({ data: null, loading: false, error: null });\r\n }\r\n}));","import React from 'react';\r\nimport type { AbilityProgressBarProps } from '../../../types/radarAbility';\r\n\r\nconst AbilityProgressBar: React.FC<AbilityProgressBarProps> = ({ ability }) => {\r\n const percentage = (ability.score / ability.maxScore) * 100;\r\n \r\n return (\r\n <div \r\n className=\"ability-progress-bar-item\" \r\n data-ability={ability.name}\r\n data-testid=\"progress-bar-container\"\r\n >\r\n <div className=\"flex justify-between text-sm mb-1\">\r\n <span className=\"text-gray-700 font-medium\">{ability.name}</span>\r\n <span className=\"text-gray-600\">\r\n {ability.score}/{ability.maxScore}\r\n </span>\r\n </div>\r\n \r\n <div \r\n className=\"w-full bg-gray-200 rounded-full h-2.5\"\r\n data-testid=\"progress-bar-outer\"\r\n >\r\n <div \r\n className={`${ability.progressBarColor} h-2.5 rounded-full transition-all duration-300`}\r\n style={{ width: `${percentage}%` }}\r\n data-testid=\"progress-bar-inner\"\r\n role=\"progressbar\"\r\n aria-valuenow={ability.score}\r\n aria-valuemin={0}\r\n aria-valuemax={ability.maxScore}\r\n aria-label={`${ability.name} progress: ${ability.score} out of ${ability.maxScore}`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AbilityProgressBar;","import React from 'react';\r\nimport type { PersonalizedAdvicePanelProps } from '../../../types/radarAbility';\r\n\r\nconst PersonalizedAdvicePanel: React.FC<PersonalizedAdvicePanelProps> = ({ \r\n generalRecommendation \r\n}) => {\r\n return (\r\n <div \r\n className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\"\r\n data-testid=\"advice-panel\"\r\n role=\"region\"\r\n aria-label=\"个性化建议\"\r\n >\r\n <div className=\"flex items-start\">\r\n <div className=\"flex-shrink-0\">\r\n <i \r\n className=\"material-icons text-blue-500\"\r\n data-testid=\"lightbulb-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n lightbulb\r\n </i>\r\n </div>\r\n \r\n <div className=\"ml-3\">\r\n <h3 \r\n className=\"text-md font-semibold text-blue-800\"\r\n aria-level={3}\r\n >\r\n 个性化建议\r\n </h3>\r\n \r\n <p \r\n className=\"text-sm text-blue-700 mt-1\"\r\n data-testid=\"recommendation-text\"\r\n >\r\n {generalRecommendation}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PersonalizedAdvicePanel;","import React from 'react';\r\nimport { Card, CardBody, Button } from '@heroui/react';\r\nimport { ArrowRight } from 'lucide-react';\r\nimport type { RecommendationCardProps } from '../../../types/radarAbility';\r\n\r\nconst RecommendationCard: React.FC<RecommendationCardProps> = ({ ability, customLinkTexts = {} }) => {\r\n // 根据能力名称生成对应的链接文本,支持自定义映射\r\n const getLinkText = (abilityName: string) => {\r\n const defaultLinkTexts: Record<string, string> = {\r\n '空间想象力': '探索空间挑战',\r\n '逻辑推理': '深入逻辑谜题',\r\n '图形辨识': '精进图形训练',\r\n '专注力': '挑战专注极限',\r\n '观察力': '提升观察速度',\r\n '抗压性': '磨砺抗压意志'\r\n };\r\n \r\n // 优先使用自定义链接文本,如果没有则使用默认值\r\n return customLinkTexts[abilityName] || defaultLinkTexts[abilityName] || '开始挑战';\r\n };\r\n\r\n return (\r\n <Card \r\n className=\"recommendation-card w-full max-w-sm hover:shadow-lg transition-all duration-300\"\r\n data-ability={ability.name}\r\n data-testid=\"recommendation-card\"\r\n isHoverable\r\n isPressable\r\n >\r\n <CardBody className=\"p-5\">\r\n <div className=\"flex flex-col gap-3\">\r\n <h4 \r\n className=\"text-lg font-semibold text-foreground\"\r\n aria-level={4}\r\n >\r\n {ability.name}: 专项提高\r\n </h4>\r\n \r\n <p \r\n className=\"text-sm text-default-600 leading-relaxed\"\r\n data-testid=\"recommendation-description\"\r\n >\r\n {ability.recommendation}\r\n </p>\r\n \r\n <Button\r\n as=\"a\"\r\n href={ability.recommendationLink}\r\n className=\"mt-2 w-fit\"\r\n size=\"sm\"\r\n variant=\"flat\"\r\n color=\"primary\"\r\n endContent={<ArrowRight className=\"w-4 h-4\" />}\r\n data-testid=\"recommendation-link\"\r\n aria-label={`前往${ability.name}专项提高页面`}\r\n >\r\n {getLinkText(ability.name)}\r\n </Button>\r\n </div>\r\n </CardBody>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default RecommendationCard;","import React, { useEffect } from 'react';\r\nimport { useRadarAbilityStore } from '../../../store/radarAbilityStore';\r\nimport RadarChart from '../RadarChart/RadarChart';\r\nimport AbilityProgressBar from '../AbilityProgressBar/AbilityProgressBar';\r\nimport PersonalizedAdvicePanel from '../PersonalizedAdvicePanel/PersonalizedAdvicePanel';\r\nimport RecommendationCard from '../RecommendationCard/RecommendationCard';\r\nimport styles from './AbilityAssessmentDashboard.module.css';\r\n\r\nconst AbilityAssessmentDashboard: React.FC = () => {\r\n const { data, loading, error, fetchData } = useRadarAbilityStore();\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [fetchData]);\r\n\r\n if (loading) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 flex items-center justify-center\"\r\n data-testid=\"loading-spinner\"\r\n >\r\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500\"></div>\r\n <span className=\"ml-3 text-gray-600\">加载中...</span>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 text-center\"\r\n role=\"alert\"\r\n aria-live=\"assertive\"\r\n >\r\n <div className=\"text-red-500 mb-4\">\r\n <i \r\n className=\"material-icons text-4xl\"\r\n aria-hidden=\"true\"\r\n >\r\n error_outline\r\n </i>\r\n </div>\r\n <h3 className=\"text-lg font-semibold text-gray-800 mb-2\">加载失败</h3>\r\n <p className=\"text-gray-600 mb-4\">{error}</p>\r\n <button\r\n onClick={fetchData}\r\n className=\"bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\"\r\n aria-label=\"重试加载数据\"\r\n >\r\n 重试\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n if (!data) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 text-center\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n <p className=\"text-gray-600\">暂无数据</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 animate-fade-in\"\r\n data-component=\"AbilityAssessmentDashboard\"\r\n role=\"main\"\r\n aria-label=\"能力评估雷达图展示\"\r\n >\r\n {/* 头部标题和评级 */}\r\n <div className=\"flex justify-between items-center mb-6\">\r\n <h2 className=\"text-xl font-bold text-gray-800\">能力评估雷达图</h2>\r\n <span \r\n className=\"bg-blue-100 text-blue-800 text-sm font-semibold px-2.5 py-0.5 rounded-full\"\r\n aria-label={`综合评级: ${data.overallRating}`}\r\n >\r\n 综合评级: {data.overallRating}\r\n </span>\r\n </div>\r\n\r\n {/* 主要内容区域 - 上下布局 3:2 */}\r\n <div className={styles.dashboardLayout}>\r\n {/* 上部容器: 能力雷达展示视图 (3/5 高度) */}\r\n <div className={styles.upperSection}>\r\n {/* 左边: 雷达图 */}\r\n <div className={styles.radarChartArea}>\r\n <RadarChart abilities={data.abilities} />\r\n </div>\r\n\r\n {/* 右边: 进度条列表 */}\r\n <div className=\"space-y-4 flex flex-col justify-around py-2\">\r\n {data.abilities.map(ability => (\r\n <AbilityProgressBar \r\n key={ability.name} \r\n ability={ability} \r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 下部容器: 个性化推荐视图 (2/5 高度) */}\r\n <div className={styles.lowerSection}>\r\n {/* 通用个性化建议面板 */}\r\n <PersonalizedAdvicePanel \r\n generalRecommendation={data.generalRecommendation} \r\n />\r\n\r\n {/* 专项提升建议 */}\r\n <h3 className=\"text-lg font-bold text-gray-800 mb-4 mt-6\">\r\n 专项提升建议\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {data.abilities.map(ability => (\r\n <RecommendationCard \r\n key={ability.name} \r\n ability={ability} \r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AbilityAssessmentDashboard;","// 单一数据源 - 所有模拟数据集中管理\r\n// 这是整个应用的唯一mock数据来源,确保数据一致性\r\n\r\nexport const MOCK_USER_DATA = {\r\n id: 'user-001',\r\n name: '小明',\r\n level: 5,\r\n avatar: 'https://i.pravatar.cc/40?u=student1',\r\n logIn: true,\r\n badges: ['🏆', '🏅', '🌟']\r\n};\r\n\r\nexport const MOCK_EXPLORE_ITEMS = [\r\n { id: 'g3', label: '三年级', status: 'new', onClick: () => console.log('三年级 clicked') },\r\n { id: 'g4', label: '四年级', status: '2%', onClick: () => console.log('四年级 clicked') },\r\n { id: 'g5', label: '五年级', status: '进行中', onClick: () => console.log('五年级 clicked') },\r\n { id: 'g6', label: '六年级', status: 'new', onClick: () => console.log('六年级 clicked') },\r\n { id: 'g7', label: '七年级', status: 'new', onClick: () => console.log('七年级 clicked') },\r\n { id: 'g8', label: '八年级', status: 'new', onClick: () => console.log('八年级 clicked') },\r\n { id: 'alg_topic', label: '代数专题', status: 'new', onClick: () => console.log('代数专题 clicked') },\r\n { id: 'calc_topic', label: '计算专题', status: 'new', onClick: () => console.log('计算专题 clicked') },\r\n { id: 'geo_topic', label: '几何专题', status: 'new', onClick: () => console.log('几何专题 clicked') },\r\n { id: 'olym_topic', label: '奥数专题', status: 'new', onClick: () => console.log('奥数专题 clicked') }\r\n];\r\n\r\n// JWT token (API专用)\r\nexport const MOCK_JWT_TOKEN = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyLTAwMSIsIm5hbWUiOiLlsI_mmI4iLCJsZXZlbCI6NSwiYXZhdGFyIjoiaHR0cHM6Ly9pLnByYXZhdGFyLmNjLzQwP3U9c3R1ZGVudDEiLCJiYWRnZXMiOlsi8J-SoiIsIvCfjZUiLCLwn5KbIl0sImlhdCI6MTY5MTYwMDAwMCwiZXhwIjoxNzIzMTM2MDAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";","import type { CourseData } from '../types';\r\n\r\nexport const courseData: CourseData = {\r\n \"id\": \"g5\",\r\n \"title\": \"小学数学五年级\",\r\n \"level\": 5,\r\n \"subject\": \"数学\",\r\n \"units\": [\r\n {\r\n \"id\": \"unit_1\",\r\n \"title\": \"小数乘法\",\r\n \"description\": \"学习小数乘法的计算方法及应用\",\r\n \"estimatedDuration\": \"3周\",\r\n \"totalLessons\": 10,\r\n \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit1_lesson1\", \"title\": \"小数乘整数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson1_k1\", \"title\": \"小数乘整数的意义\", \"description\": \"理解小数乘整数的意义与整数乘法相同\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson1_k2\", \"title\": \"小数乘整数的计算方法\", \"description\": \"掌握小数乘整数的计算方法:先按整数乘法计算,再看因数中有几位小数,就从积的右边起数出几位点上小数点\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson2\", \"title\": \"小数乘小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson2_k1\", \"title\": \"小数乘小数的计算方法\", \"description\": \"掌握小数乘小数的计算方法:先按整数乘法算出积,再给积点上小数点\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson2_k2\", \"title\": \"积的小数位数确定\", \"description\": \"理解积的小数位数等于两个因数的小数位数之和\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson3\", \"title\": \"积的近似数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson3_k1\", \"title\": \"用\\\"四舍五入\\\"法求积的近似数\", \"description\": \"掌握用\\\"四舍五入\\\"法求积的近似数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson4\", \"title\": \"整数乘法运算定律推广到小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson4_k1\", \"title\": \"乘法运算定律在小数中的适用性\", \"description\": \"理解整数乘法运算定律对于小数乘法同样适用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson4_k2\", \"title\": \"运用运算定律进行简便计算\", \"description\": \"能运用乘法运算定律进行小数乘法的简便计算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson5\", \"title\": \"解决问题\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson5_k1\", \"title\": \"用小数乘法解决实际问题\", \"description\": \"能运用小数乘法解决购物、面积计算等实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_2\", \"title\": \"小数除法\", \"description\": \"学习小数除法的计算方法及应用\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit2_lesson1\", \"title\": \"小数除以整数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson1_k1\", \"title\": \"小数除以整数的计算方法\", \"description\": \"掌握小数除以整数的计算方法:按照整数除法的方法计算,商的小数点要与被除数的小数点对齐\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson2\", \"title\": \"一个数除以小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson2_k1\", \"title\": \"除数是小数的除法计算方法\", \"description\": \"掌握除数是小数的除法计算方法:利用商不变的性质,将除数转化为整数\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson3\", \"title\": \"商的近似数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson3_k1\", \"title\": \"用\\\"四舍五入\\\"法求商的近似数\", \"description\": \"掌握用\\\"四舍五入\\\"法求商的近似数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson4\", \"title\": \"循环小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson4_k1\", \"title\": \"循环小数的概念\", \"description\": \"理解循环小数的概念,认识循环节\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit2_lesson4_k2\", \"title\": \"循环小数的表示方法\", \"description\": \"掌握循环小数的简便表示方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson5\", \"title\": \"用计算器探索规律\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson5_k1\", \"title\": \"用计算器计算小数除法\", \"description\": \"会用计算器计算较复杂的小数除法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit2_lesson5_k2\", \"title\": \"发现商的变化规律\", \"description\": \"能借助计算器发现商的变化规律\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson6\", \"title\": \"解决问题\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson6_k1\", \"title\": \"用小数除法解决实际问题\", \"description\": \"能运用小数除法解决购物、分配等实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_3\", \"title\": \"简易方程\", \"description\": \"学习用字母表示数和解简易方程\", \"estimatedDuration\": \"4周\", \"totalLessons\": 14, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit3_lesson1\", \"title\": \"用字母表示数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson1_k1\", \"title\": \"用字母表示数\", \"description\": \"初步理解用字母表示数的意义和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit3_lesson1_k2\", \"title\": \"用字母表示运算定律和计算公式\", \"description\": \"会用字母表示运算定律和计算公式\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson2\", \"title\": \"方程的意义\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson2_k1\", \"title\": \"方程的概念\", \"description\": \"理解方程的意义,知道方程与等式的区别和联系\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson3\", \"title\": \"等式的性质\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson3_k1\", \"title\": \"等式的性质1\", \"description\": \"理解等式的性质1:等式两边加上或减去同一个数,左右两边仍然相等\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit3_lesson3_k2\", \"title\": \"等式的性质2\", \"description\": \"理解等式的性质2:等式两边乘同一个数,或除以同一个不为0的数,左右两边仍然相等\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson4\", \"title\": \"解简易方程\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson4_k1\", \"title\": \"利用等式的性质解方程\", \"description\": \"会利用等式的性质解形如x±a=b、ax=b、x÷a=b、a-x=b、a÷x=b的方程\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson5\", \"title\": \"实际问题与方程\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson5_k1\", \"title\": \"列方程解决实际问题\", \"description\": \"初步学会列方程解决一些简单的实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_4\", \"title\": \"多边形的面积\", \"description\": \"学习平行四边形、三角形、梯形和组合图形的面积计算\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Graphics and Geometry\",\r\n \"lessons\": [\r\n { \"id\": \"unit4_lesson1\", \"title\": \"平行四边形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson1_k1\", \"title\": \"平行四边形面积公式的推导\", \"description\": \"通过割补法理解平行四边形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson1_k2\", \"title\": \"平行四边形面积的计算\", \"description\": \"掌握平行四边形面积计算公式:S=ah,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson2\", \"title\": \"三角形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson2_k1\", \"title\": \"三角形面积公式的推导\", \"description\": \"通过拼摆法理解三角形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson2_k2\", \"title\": \"三角形面积的计算\", \"description\": \"掌握三角形面积计算公式:S=ah÷2,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson3\", \"title\": \"梯形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson3_k1\", \"title\": \"梯形面积公式的推导\", \"description\": \"通过拼摆法理解梯形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson3_k2\", \"title\": \"梯形面积的计算\", \"description\": \"掌握梯形面积计算公式:S=(a+b)h÷2,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson4\", \"title\": \"组合图形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson4_k1\", \"title\": \"认识组合图形\", \"description\": \"认识组合图形,会把组合图形分解成已学过的平面图形\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson4_k2\", \"title\": \"计算组合图形的面积\", \"description\": \"掌握计算组合图形面积的多种方法\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_5\", \"title\": \"因数与倍数\", \"description\": \"学习因数、倍数、质数、合数等概念\", \"estimatedDuration\": \"3周\", \"totalLessons\": 10, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit5_lesson1\", \"title\": \"因数和倍数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson1_k1\", \"title\": \"因数和倍数的意义\", \"description\": \"理解因数和倍数的意义,掌握找一个数的因数和倍数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson1_k2\", \"title\": \"因数和倍数的特征\", \"description\": \"了解一个数的因数的个数是有限的,倍数的个数是无限的\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit5_lesson2\", \"title\": \"2、5、3的倍数的特征\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson2_k1\", \"title\": \"2、5的倍数的特征\", \"description\": \"掌握2、5的倍数的特征,理解奇数和偶数的意义\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson2_k2\", \"title\": \"3的倍数的特征\", \"description\": \"掌握3的倍数的特征,能判断一个数是不是3的倍数\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit5_lesson3\", \"title\": \"质数和合数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson3_k1\", \"title\": \"质数和合数的意义\", \"description\": \"理解质数和合数的意义,能判断一个数是质数还是合数\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson3_k2\", \"title\": \"制作100以内的质数表\", \"description\": \"会制作100以内的质数表,熟记20以内的质数\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_6\", \"title\": \"长方体和正方体\", \"description\": \"学习长方体和正方体的特征、表面积和体积计算\", \"estimatedDuration\": \"4周\", \"totalLessons\": 14, \"moduleCategory\": \"Graphics and Geometry\",\r\n \"lessons\": [\r\n { \"id\": \"unit6_lesson1\", \"title\": \"长方体和正方体的认识\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson1_k1\", \"title\": \"长方体的特征\", \"description\": \"认识长方体的特征,了解长方体的长、宽、高\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson1_k2\", \"title\": \"正方体的特征\", \"description\": \"认识正方体的特征,理解正方体是特殊的长方体\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson2\", \"title\": \"长方体和正方体的表面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson2_k1\", \"title\": \"表面积的意义\", \"description\": \"理解表面积的意义,掌握长方体和正方体表面积的计算方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson2_k2\", \"title\": \"表面积的实际应用\", \"description\": \"能运用表面积知识解决一些实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson3\", \"title\": \"长方体和正方体的体积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson3_k1\", \"title\": \"体积和体积单位\", \"description\": \"理解体积的意义,认识常用的体积单位\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson3_k2\", \"title\": \"长方体和正方体体积的计算\", \"description\": \"掌握长方体和正方体体积的计算公式\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson3_k3\", \"title\": \"体积单位间的进率\", \"description\": \"掌握体积单位之间的进率和换算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson4\", \"title\": \"容积和容积单位\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson4_k1\", \"title\": \"容积和容积单位\", \"description\": \"理解容积的意义,认识常用的容积单位\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson4_k2\", \"title\": \"容积和体积的关系\", \"description\": \"掌握容积和体积之间的关系\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_7\", \"title\": \"分数的意义和性质\", \"description\": \"学习分数的意义、性质和约分、通分等方法\", \"estimatedDuration\": \"4周\", \"totalLessons\": 16, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit7_lesson1\", \"title\": \"分数的意义\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson1_k1\", \"title\": \"分数的产生和意义\", \"description\": \"理解分数的产生和意义,明确分数与除法的关系\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson1_k2\", \"title\": \"分数单位\", \"description\": \"认识分数单位,能说出一个分数中有几个这样的分数单位\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson2\", \"title\": \"分数与除法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson2_k1\", \"title\": \"分数与除法的关系\", \"description\": \"理解分数与除法的关系,会用分数表示两个数相除的商\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson3\", \"title\": \"真分数和假分数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson3_k1\", \"title\": \"真分数和假分数的意义\", \"description\": \"理解真分数和假分数的意义和特征\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson3_k2\", \"title\": \"带分数\", \"description\": \"认识带分数,会进行假分数与整数、带分数的互化\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson4\", \"title\": \"分数的基本性质\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson4_k1\", \"title\": \"分数的基本性质\", \"description\": \"理解分数的基本性质,能运用分数的基本性质进行分数的变形\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson5\", \"title\": \"约分\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson5_k1\", \"title\": \"最大公因数\", \"description\": \"理解公因数和最大公因数的意义,掌握求两个数的最大公因数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson5_k2\", \"title\": \"约分的方法\", \"description\": \"掌握约分的方法,能正确地进行约分\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson6\", \"title\": \"通分\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson6_k1\", \"title\": \"最小公倍数\", \"description\": \"理解公倍数和最小公倍数的意义,掌握求两个数的最小公倍数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson6_k2\", \"title\": \"通分的方法\", \"description\": \"掌握通分的方法,能正确地进行通分\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson7\", \"title\": \"分数和小数的互化\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson7_k1\", \"title\": \"分数化成小数\", \"description\": \"掌握分数化成小数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson7_k2\", \"title\": \"小数化成分数\", \"description\": \"掌握小数化成分数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_8\", \"title\": \"分数的加法和减法\", \"description\": \"学习同分母分数、异分母分数的加法和减法\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit8_lesson1\", \"title\": \"同分母分数加、减法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson1_k1\", \"title\": \"同分母分数加法的计算方法\", \"description\": \"掌握同分母分数加法的计算方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson1_k2\", \"title\": \"同分母分数减法的计算方法\", \"description\": \"掌握同分母分数减法的计算方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit8_lesson2\", \"title\": \"异分母分数加、减法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson2_k1\", \"title\": \"异分母分数加法的计算方法\", \"description\": \"掌握异分母分数加法的计算方法:先通分,然后按照同分母分数加法进行计算\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson2_k2\", \"title\": \"异分母分数减法的计算方法\", \"description\": \"掌握异分母分数减法的计算方法:先通分,然后按照同分母分数减法进行计算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit8_lesson3\", \"title\": \"分数加减混合运算\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson3_k1\", \"title\": \"分数加减混合运算的顺序\", \"description\": \"掌握分数加减混合运算的运算顺序\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson3_k2\", \"title\": \"整数加法运算定律推广到分数加法\", \"description\": \"理解整数加法运算定律对于分数加法同样适用,能运用运算定律进行简便计算\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_9\", \"title\": \"折线统计图\", \"description\": \"学习单式折线统计图和复式折线统计图的认识和制作\", \"estimatedDuration\": \"2周\", \"totalLessons\": 6, \"moduleCategory\": \"Probability and Statistics\",\r\n \"lessons\": [\r\n { \"id\": \"unit9_lesson1\", \"title\": \"单式折线统计图\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson1_k1\", \"title\": \"单式折线统计图的特点\", \"description\": \"认识单式折线统计图,了解其特点和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit9_lesson1_k2\", \"title\": \"绘制单式折线统计图\", \"description\": \"能根据数据绘制单式折线统计图\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit9_lesson2\", \"title\": \"复式折线统计图\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson2_k1\", \"title\": \"复式折线统计图的特点\", \"description\": \"认识复式折线统计图,了解其特点和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit9_lesson2_k2\", \"title\": \"绘制复式折线统计图\", \"description\": \"能根据数据绘制复式折线统计图\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit9_lesson3\", \"title\": \"数据分析\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson3_k1\", \"title\": \"根据统计图进行数据分析\", \"description\": \"能根据折线统计图进行简单的数据分析,作出合理的判断和预测\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nimport { MOCK_USER_DATA, MOCK_EXPLORE_ITEMS } from './mockData';\r\n\r\n// 从单一数据源导入,确保数据一致性\r\nexport const exploreItems = MOCK_EXPLORE_ITEMS;\r\nexport const userData = MOCK_USER_DATA;","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\r\nimport type { UserData, Lesson } from '../../types';\r\nimport type { ExploreItem } from '../../components/MathWizHeader/MathWizHeader.types';\r\nimport type { UserGradeUnitsProgressData } from '../../components/Sidebar/types';\r\nimport type { GradeUnitBrowserContextType } from './types';\r\nimport { courseService } from '../../services/courseService';\r\nimport { courseData } from '../../data/courseData';\r\n\r\n// 创建 Context\r\nexport const GradeUnitBrowserContext = createContext<GradeUnitBrowserContextType | null>(null);\r\n\r\nexport const useGradeUnitBrowser = () => {\r\n const context = useContext(GradeUnitBrowserContext);\r\n if (!context) {\r\n throw new Error('useGradeUnitBrowser must be used within GradeUnitBrowserProvider');\r\n }\r\n return context;\r\n};\r\n\r\n// Context Provider 组件\r\nexport const GradeUnitBrowserProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [userInfo, setUserInfo] = useState<UserData | null>(null);\r\n const [exploreMenu, setExploreMenu] = useState<ExploreItem[]>([]);\r\n const [unitsData, setUnitsData] = useState<UserGradeUnitsProgressData | null>(null);\r\n const [lessons, setLessons] = useState<Record<string, Lesson[]>>({});\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [activeUnitId, setActiveUnitId] = useState<string | null>(null);\r\n const [activeLessonIds, setActiveLessonIds] = useState<string[]>([]);\r\n\r\n const loadPageData = useCallback(async (gradeId: string, userId: string) => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n // 添加短暂延迟确保MSW已初始化\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n\r\n try {\r\n // 调用API获取数据\r\n console.log('Attempting to fetch units data from API...');\r\n const unitsData = await courseService.getUserGradeUnitsNav(gradeId);\r\n console.log('API call successful, units data:', unitsData);\r\n setUnitsData(unitsData);\r\n console.log('unitsData:', unitsData);\r\n } catch (error) {\r\n const err = error as Error;\r\n console.error('API call failed, using mock data. Error details:', {\r\n message: err.message,\r\n name: err.name,\r\n stack: err.stack\r\n });\r\n // 如果API调用失败,使用模拟数据\r\n const mockUnitsData = {\r\n userId: userId,\r\n courseId: 'g5',\r\n courseTitle: '小学数学五年级',\r\n courseLevel: 5,\r\n totalUnits: 2,\r\n completedUnits: 0,\r\n overallProgress: 23,\r\n status: 'in-progress' as const,\r\n lastAccessed: new Date().toISOString(),\r\n units: [\r\n {\r\n unitId: 'unit_1',\r\n title: '小数乘法',\r\n description: '学习小数乘法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 5,\r\n completedLessons: 1,\r\n progressPercentage: 20,\r\n status: 'in-progress' as const,\r\n lastAccessed: new Date().toISOString(),\r\n isActive: true,\r\n route: '/math/grade-5/unit/unit_1'\r\n },\r\n {\r\n unitId: 'unit_2',\r\n title: '小数除法',\r\n description: '学习小数除法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 5,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started' as const,\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_2'\r\n }\r\n ]\r\n };\r\n setUnitsData(mockUnitsData);\r\n }\r\n\r\n // 设置课程数据(从本地课程数据中获取)\r\n const lessonsData: Record<string, Lesson[]> = {};\r\n courseData.units.forEach(unit => {\r\n lessonsData[unit.id] = unit.lessons.map(lesson => ({\r\n id: lesson.id,\r\n title: lesson.title,\r\n duration: lesson.duration,\r\n knowledgeItems: lesson.knowledgeItems.map(item => ({\r\n ...item,\r\n progress: 0 // 添加默认进度值\r\n }))\r\n }));\r\n });\r\n console.log('Lessons data loaded:', lessonsData);\r\n setLessons(lessonsData);\r\n\r\n // 默认单元选择将在状态更新后执行(在 useEffect 中)\r\n\r\n // 调试日志\r\n console.log('unitsData:', unitsData);\r\n console.log('unitsData.units:', unitsData?.units);\r\n console.log('First unit isActive:', unitsData?.units?.[0]?.isActive);\r\n console.log('First unit unitId:', unitsData?.units?.[0]?.unitId);\r\n console.log('Lessons data keys:', Object.keys(lessonsData));\r\n console.log('Lessons for unit_1:', lessonsData['unit_1']);\r\n\r\n // 设置用户信息(这里应该从API获取,暂时使用模拟数据)\r\n setUserInfo({\r\n id: userId,\r\n name: '学生用户',\r\n level: 5,\r\n avatar: 'https://i.pravatar.cc/40',\r\n badges: ['🏆']\r\n });\r\n\r\n // 设置探索菜单(这里应该从API获取,暂时使用模拟数据)\r\n setExploreMenu([\r\n { id: 'g5', label: '五年级', status: '进行中' },\r\n { id: 'g6', label: '六年级', status: 'new' }\r\n ]);\r\n\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : '数据加载失败');\r\n console.error('数据加载错误:', err);\r\n console.error('API call error details:', err);\r\n console.log('gradeId parameter:', gradeId);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const toggleLesson = useCallback((lessonId: string) => {\r\n setActiveLessonIds(prev =>\r\n prev.includes(lessonId)\r\n ? prev.filter(id => id !== lessonId)\r\n : [...prev, lessonId]\r\n );\r\n }, []);\r\n\r\n // 包装setActiveUnit函数,接受unitId参数(可为null)\r\n const setActiveUnit = useCallback((unitId: string | null) => {\r\n setActiveUnitId(unitId);\r\n }, []);\r\n\r\n // 状态更新后执行默认单元选择\r\n useEffect(() => {\r\n console.log('unitsData state updated:', unitsData);\r\n\r\n if (unitsData && unitsData.units.length > 0) {\r\n const defaultActiveUnit = unitsData.units.find(unit => unit.isActive)?.unitId ||\r\n unitsData.units[0].unitId;\r\n setActiveUnitId(defaultActiveUnit);\r\n console.log('Default active unit set after state update:', defaultActiveUnit);\r\n }\r\n }, [unitsData]);\r\n\r\n const contextValue: GradeUnitBrowserContextType = {\r\n // 数据状态\r\n userInfo,\r\n exploreMenu,\r\n unitsData,\r\n lessons,\r\n\r\n // UI状态\r\n loading,\r\n error,\r\n activeUnitId,\r\n activeLessonIds,\r\n\r\n // Actions\r\n setLoading,\r\n setError,\r\n setActiveUnit,\r\n toggleLesson,\r\n loadPageData\r\n };\r\n\r\n return (\r\n <GradeUnitBrowserContext.Provider value={contextValue}>\r\n {children}\r\n </GradeUnitBrowserContext.Provider>\r\n );\r\n};","import React, { useEffect } from 'react';\r\nimport MathWizHeader from '../../components/MathWizHeader/MathWizHeader';\r\nimport { Sidebar } from '../../components/Sidebar/Sidebar';\r\nimport { ContentAccordion } from '../../components/ContentAccordion/ContentAccordion';\r\nimport { useGradeUnitBrowser } from './GradeUnitBrowserContext';\r\nimport type { GradeUnitBrowserPageProps } from './types';\r\nimport './GradeUnitBrowserPage.css';\r\n\r\n// 主页面组件\r\nexport const GradeUnitBrowserPage: React.FC<GradeUnitBrowserPageProps> = ({\r\n gradeId,\r\n userId,\r\n onLearnAction,\r\n className,\r\n userInfo: propUserInfo,\r\n exploreMenu: propExploreMenu\r\n}) => {\r\n const {\r\n userInfo: contextUserInfo,\r\n exploreMenu: contextExploreMenu,\r\n unitsData,\r\n lessons,\r\n loading,\r\n error,\r\n activeUnitId,\r\n activeLessonIds,\r\n setActiveUnit,\r\n toggleLesson,\r\n loadPageData\r\n } = useGradeUnitBrowser();\r\n\r\n // 使用props中的值或context中的值\r\n const userInfo = propUserInfo ?? contextUserInfo;\r\n const exploreMenu = propExploreMenu ?? contextExploreMenu;\r\n\r\n useEffect(() => {\r\n loadPageData(gradeId, userId);\r\n }, [gradeId, userId, loadPageData]);\r\n\r\n // 调试日志\r\n useEffect(() => {\r\n console.log('activeUnitId from context:', activeUnitId);\r\n console.log('lessons from context:', lessons);\r\n\r\n // 重新计算 activeUnit 用于调试\r\n const activeUnitNav = unitsData?.units?.find(unit => unit.unitId === activeUnitId) || null;\r\n const debugActiveUnit = activeUnitNav && activeUnitId && lessons[activeUnitId] ? {\r\n id: activeUnitNav.unitId,\r\n title: activeUnitNav.title,\r\n description: activeUnitNav.description,\r\n estimatedDuration: activeUnitNav.estimatedDuration,\r\n totalLessons: activeUnitNav.totalLessons,\r\n moduleCategory: activeUnitNav.moduleCategory,\r\n lessons: lessons[activeUnitId]\r\n } : null;\r\n\r\n console.log('activeUnit computed:', debugActiveUnit);\r\n }, [activeUnitId, lessons, unitsData]);\r\n\r\n // 获取当前激活的单元\r\n const activeUnitNav = unitsData?.units?.find(unit => unit.unitId === activeUnitId) || null;\r\n\r\n // 获取完整的单元数据(包含课程和知识点)\r\n const activeUnit = activeUnitNav && activeUnitId && lessons[activeUnitId] ? {\r\n id: activeUnitNav.unitId,\r\n title: activeUnitNav.title,\r\n description: activeUnitNav.description,\r\n estimatedDuration: activeUnitNav.estimatedDuration,\r\n totalLessons: activeUnitNav.totalLessons,\r\n moduleCategory: activeUnitNav.moduleCategory,\r\n lessons: lessons[activeUnitId]\r\n } : null;\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"grade-unit-browser-page loading\" data-testid=\"grade-unit-browser-page\">\r\n <div className=\"loading-spinner\" data-testid=\"loading-spinner\">\r\n 加载中...\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"grade-unit-browser-page error\" data-testid=\"grade-unit-browser-page\">\r\n <div className=\"error-message\" data-testid=\"error-message\">\r\n {error}\r\n </div>\r\n <button\r\n onClick={() => loadPageData(gradeId, userId)}\r\n className=\"retry-button\"\r\n >\r\n 重试\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={`grade-unit-browser-page ${className || ''}`}\r\n data-testid=\"grade-unit-browser-page\"\r\n >\r\n {/* Header 区域 */}\r\n <div className=\"header-area\">\r\n <MathWizHeader\r\n userData={userInfo || undefined}\r\n exploreItems={exploreMenu}\r\n />\r\n </div>\r\n\r\n {/* Sidebar 区域 */}\r\n <div className=\"sidebar-area\">\r\n <Sidebar\r\n data={unitsData}\r\n activeUnitId={activeUnitId}\r\n onUnitSelect={setActiveUnit}\r\n loading={loading}\r\n />\r\n </div>\r\n\r\n {/* 主内容区域 */}\r\n <div className=\"content-area\">\r\n <ContentAccordion\r\n unit={activeUnit}\r\n activeLessonIds={activeLessonIds}\r\n onToggleLesson={toggleLesson}\r\n onLearnAction={onLearnAction || (() => { })}\r\n loading={loading}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};","// 课程数据类型定义\r\nexport interface KnowledgeItem {\r\n id: string;\r\n title: string;\r\n description: string;\r\n progress: number;\r\n contentUrl: string;\r\n status?: 'mastered' | 'proficient' | 'familiar' | 'attempted' | 'not-started';\r\n}\r\n\r\nexport interface Lesson {\r\n id: string;\r\n title: string;\r\n duration: number;\r\n knowledgeItems: KnowledgeItem[];\r\n}\r\n\r\nexport interface Unit {\r\n id: string;\r\n title: string;\r\n description: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n moduleCategory: string;\r\n lessons: Lesson[];\r\n}\r\n\r\nexport interface CourseData {\r\n id: string;\r\n title: string;\r\n level: number;\r\n subject: string;\r\n units: Unit[];\r\n}\r\n\r\n// 用户数据类型\r\nexport interface UserData {\r\n id: string;\r\n name: string;\r\n level: number;\r\n avatar: string;\r\n badges: string[];\r\n}\r\n\r\n// 探索菜单项\r\nexport interface ExploreItem {\r\n id: string;\r\n label: string;\r\n status: string;\r\n}\r\n\r\n// 单元进度类型\r\nexport interface UnitProgress {\r\n unitId: string;\r\n title: string;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n totalLessons: number;\r\n completedLessons: number;\r\n lastAccessed?: string;\r\n}\r\n\r\n// 状态管理类型\r\nexport interface AppState {\r\n currentUnitId: string | null;\r\n currentLessonId: string | null;\r\n currentKnowledgeId: string | null;\r\n sidebarCollapsed: boolean;\r\n exploreMenuOpen: boolean;\r\n activeLessonIds: string[];\r\n \r\n // Actions\r\n setCurrentUnit: (unitId: string) => void;\r\n setCurrentLesson: (lessonId: string) => void;\r\n setCurrentKnowledge: (knowledgeId: string) => void;\r\n toggleSidebar: () => void;\r\n toggleExploreMenu: (open?: boolean) => void;\r\n toggleLessonActive: (lessonId: string) => void;\r\n}\r\n\r\n// 图标映射\r\nexport const categoryIcons: Record<string, string> = {\r\n \"Arithmetic and Algebra\": \"🔢\",\r\n \"Graphics and Geometry\": \"📐\",\r\n \"Probability and Statistics\": \"📊\",\r\n \"Default\": \"📚\"\r\n};\r\n\r\n// 状态映射\r\nexport const statusMapping: Record<string, string> = {\r\n 'mastered': '已掌握',\r\n 'proficient': '熟练',\r\n 'familiar': '熟悉',\r\n 'attempted': '已尝试',\r\n 'not-started': '未开始'\r\n};\r\n\r\nexport const statusColors: Record<string, string> = {\r\n 'mastered': '#10b981',\r\n 'proficient': '#3b82f6',\r\n 'familiar': '#f59e0b',\r\n 'attempted': '#8b5cf6',\r\n 'not-started': '#6b7280'\r\n};","/**\r\n * 几何核心工具函数 \r\n * 专注于三角形寻宝游戏的几何计算、坐标处理和三角形验证\r\n */\r\n\r\n// ==================== 基础几何计算 ====================\r\n\r\n/**\r\n * 计算线段上指定比例的点\r\n * @param {Object} p1 - 起点 {x, y}\r\n * @param {Object} p2 - 终点 {x, y}\r\n * @param {number} ratio - 比例 (0-1)\r\n * @returns {Object} 计算出的点 {x, y}\r\n */\r\nexport const pointOnLine = (p1, p2, ratio) => ({\r\n x: p1.x + (p2.x - p1.x) * ratio,\r\n y: p1.y + (p2.y - p1.y) * ratio\r\n});\r\n\r\n\r\n// ==================== 几何数据导入 ====================\r\n\r\n/**\r\n * 🔧 架构修复:从单一数据源导入几何数据\r\n * \r\n * ✅ 职责:提供纯工具函数 (符合utils层职责)\r\n * \r\n * 数据源:\r\n * - 统一从 data/geometryDefinitions.js 获取\r\n * - 实现真正的单一数据源架构\r\n * - 支持依赖注入和数据源切换\r\n */\r\n\r\n/**\r\n * 计算标准化的三角形分割点坐标 - 重构版本\r\n */\r\nexport const calculateGamePoints = () => {\r\n\r\n // 基础三角形顶点(归一化坐标)\r\n const A = { x: 0.5, y: 0.1, name: 'A' };\r\n const B = { x: 0.1, y: 0.75, name: 'B' };\r\n const C = { x: 0.9, y: 0.75, name: 'C' };\r\n\r\n // 第一层分割线(距离顶点A的1/3处)\r\n const D = { ...pointOnLine(A, B, 1 / 3), name: 'D' };\r\n const E = { ...pointOnLine(A, C, 1 / 3), name: 'E' };\r\n\r\n // 第二层分割线(距离顶点A的2/3处)\r\n const M = { ...pointOnLine(A, B, 2 / 3), name: 'M' };\r\n const N = { ...pointOnLine(A, C, 2 / 3), name: 'N' };\r\n\r\n // 底边BC上的分割点\r\n const P = { ...pointOnLine(B, C, 1 / 3), name: 'P' };\r\n const Q = { ...pointOnLine(B, C, 2 / 3), name: 'Q' };\r\n\r\n // DE线上的分割点\r\n const U = { ...pointOnLine(D, E, 1 / 3), name: 'U' };\r\n const S = { ...pointOnLine(D, E, 2 / 3), name: 'S' };\r\n\r\n // MN线上的分割点\r\n const K = { ...pointOnLine(M, N, 1 / 3), name: 'K' };\r\n const L = { ...pointOnLine(M, N, 2 / 3), name: 'L' };\r\n\r\n return { A, B, C, D, E, M, N, P, Q, U, S, K, L };\r\n};\r\n\r\n/**\r\n * 将归一化坐标转换为绝对像素坐标\r\n * @param {Object} normalizedPoints - 归一化坐标点集\r\n * @param {number} width - 画布宽度\r\n * @param {number} height - 画布高度\r\n * @returns {Object} 绝对坐标点集\r\n */\r\nexport const toPixelCoordinates = (normalizedPoints, width, height) => {\r\n const pixelPoints = {};\r\n\r\n for (const [name, point] of Object.entries(normalizedPoints)) {\r\n pixelPoints[name] = {\r\n ...point,\r\n x: point.x * width,\r\n y: point.y * height\r\n };\r\n }\r\n\r\n return pixelPoints;\r\n};\r\n\r\n\r\n\r\n/**\r\n * 使用重心坐标判断点是否在三角形内 - 来自 gameUtils.js\r\n * @param {Object} point - 待检测的点 {x, y}\r\n * @param {Array} triangle - 三角形的三个顶点\r\n * @returns {boolean} 点是否在三角形内\r\n */\r\nexport const isPointInTriangle = (point, triangle) => {\r\n const [p1, p2, p3] = triangle;\r\n const { x, y } = point;\r\n\r\n // 使用重心坐标系\r\n const denominator = ((p2.y - p3.y) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.y - p3.y));\r\n\r\n if (Math.abs(denominator) < 0.0001) return false; // 退化三角形\r\n\r\n const a = ((p2.y - p3.y) * (x - p3.x) + (p3.x - p2.x) * (y - p3.y)) / denominator;\r\n const b = ((p3.y - p1.y) * (x - p3.x) + (p1.x - p3.x) * (y - p3.y)) / denominator;\r\n const c = 1 - a - b;\r\n\r\n // 点在三角形内当且仅当所有重心坐标都非负\r\n return a >= -0.001 && b >= -0.001 && c >= -0.001;\r\n};\r\n\r\n/**\r\n * 检查两个三角形是否匹配 (顶点相同,顺序可能不同) - 来自 gameUtils.js\r\n * @param {Array} triangle1 - 第一个三角形的顶点数组\r\n * @param {Array} triangle2 - 第二个三角形的顶点数组\r\n * @returns {boolean} 是否匹配\r\n */\r\nexport const trianglesMatch = (triangle1, triangle2) => {\r\n if (!triangle1 || !triangle2) return false;\r\n if (triangle1.length !== 3 || triangle2.length !== 3) return false;\r\n\r\n const names1 = triangle1.map(p => p.name).sort();\r\n const names2 = triangle2.map(p => p.name).sort();\r\n\r\n return names1.every((name, index) => name === names2[index]);\r\n};\r\n\r\n/**\r\n * 比较两个点数组是否包含相同的点(忽略顺序)\r\n * @param {Array} points1 - 第一组点\r\n * @param {Array} points2 - 第二组点\r\n * @returns {boolean} 是否匹配\r\n */\r\nexport const comparePointArrays = (points1, points2) => {\r\n if (!points1 || !points2 || points1.length !== points2.length) {\r\n return false;\r\n }\r\n\r\n const names1 = points1.map(p => p.name).sort();\r\n const names2 = points2.map(p => p.name).sort();\r\n\r\n return names1.join('') === names2.join('');\r\n};\r\n\r\n\r\n\r\n/**\r\n * 获取标准化的三角形连线定义\r\n * @returns {Array} 连线数组\r\n */\r\nexport const getBasicLineDefinitions = () => [\r\n // 大三角形边\r\n { from: 'A', to: 'B' },\r\n { from: 'A', to: 'C' },\r\n { from: 'B', to: 'C' },\r\n \r\n // 第一层分割线\r\n { from: 'D', to: 'E' },\r\n \r\n // 第二层分割线\r\n { from: 'M', to: 'N' },\r\n \r\n // 底边分割线\r\n { from: 'P', to: 'Q' },\r\n \r\n // 连接到顶点的线段\r\n { from: 'A', to: 'D' },\r\n { from: 'A', to: 'E' },\r\n { from: 'A', to: 'M' },\r\n { from: 'A', to: 'N' },\r\n { from: 'A', to: 'P' },\r\n { from: 'A', to: 'Q' },\r\n \r\n // 内部连接线段\r\n { from: 'D', to: 'U' },\r\n { from: 'U', to: 'S' },\r\n { from: 'S', to: 'E' },\r\n { from: 'M', to: 'K' },\r\n { from: 'K', to: 'L' },\r\n { from: 'L', to: 'N' },\r\n \r\n // 到底边的连接\r\n { from: 'B', to: 'P' },\r\n { from: 'P', to: 'Q' },\r\n { from: 'Q', to: 'C' }\r\n];\r\n\r\n/**\r\n * 获取18个宝石的基础定义 - MVP版本\r\n * @returns {Array} 宝石数组\r\n */\r\nexport const getBasicGemDefinitions = () => [\r\n // 大三角形系列(3个)\r\n { id: 'gem_1', vertices: ['A', 'B', 'P'], points: 10, category: 'basic' },\r\n { id: 'gem_2', vertices: ['A', 'P', 'Q'], points: 10, category: 'basic' },\r\n { id: 'gem_3', vertices: ['A', 'Q', 'C'], points: 10, category: 'basic' },\r\n\r\n // 中等三角形系列(3个)\r\n { id: 'gem_4', vertices: ['A', 'B', 'Q'], points: 15, category: 'medium' },\r\n { id: 'gem_5', vertices: ['A', 'P', 'C'], points: 15, category: 'medium' },\r\n { id: 'gem_6', vertices: ['A', 'B', 'C'], points: 20, category: 'large' },\r\n\r\n // ADE区域系列(6个)\r\n { id: 'gem_7', vertices: ['A', 'D', 'U'], points: 12, category: 'ade_small' },\r\n { id: 'gem_8', vertices: ['A', 'U', 'S'], points: 12, category: 'ade_small' },\r\n { id: 'gem_9', vertices: ['A', 'S', 'E'], points: 12, category: 'ade_small' },\r\n { id: 'gem_10', vertices: ['A', 'D', 'S'], points: 18, category: 'ade_medium' },\r\n { id: 'gem_11', vertices: ['A', 'U', 'E'], points: 18, category: 'ade_medium' },\r\n { id: 'gem_12', vertices: ['A', 'D', 'E'], points: 25, category: 'ade_large' },\r\n\r\n // AMN区域系列(6个)\r\n { id: 'gem_13', vertices: ['A', 'M', 'K'], points: 14, category: 'amn_small' },\r\n { id: 'gem_14', vertices: ['A', 'K', 'L'], points: 14, category: 'amn_small' },\r\n { id: 'gem_15', vertices: ['A', 'L', 'N'], points: 14, category: 'amn_small' },\r\n { id: 'gem_16', vertices: ['A', 'M', 'L'], points: 20, category: 'amn_medium' },\r\n { id: 'gem_17', vertices: ['A', 'K', 'N'], points: 20, category: 'amn_medium' },\r\n { id: 'gem_18', vertices: ['A', 'M', 'N'], points: 30, category: 'amn_large' }\r\n];\r\n\r\n// ==================== 几何配置和默认导出 ====================\r\n\r\n/**\r\n * 几何配置常量 - 整合版本\r\n */\r\nexport const GEOMETRY_CONFIG = {\r\n TOTAL_GEMS: 18,\r\n CANVAS_RATIO: 4 / 3,\r\n DEFAULT_VIEWBOX: { width: 700, height: 600 },\r\n POINT_RADIUS: { default: 6, selected: 9 },\r\n TOLERANCE: 0.001,\r\n\r\n // 新增:几何计算相关常量\r\n MIN_TRIANGLE_AREA: 0.001,\r\n COORDINATE_PRECISION: 0.0001,\r\n BARYCENTRIC_TOLERANCE: -0.001\r\n};\r\n\r\n/**\r\n * 默认导出 - 包含所有几何工具函数\r\n */\r\nexport default {\r\n // 基础几何计算\r\n pointOnLine,\r\n calculateGamePoints,\r\n toPixelCoordinates,\r\n\r\n // 三角形验证和分析\r\n isPointInTriangle,\r\n trianglesMatch,\r\n comparePointArrays,\r\n\r\n // 数据和配置 (重新导出数据层接口)\r\n getBasicGemDefinitions,\r\n getBasicLineDefinitions,\r\n GEOMETRY_CONFIG,\r\n\r\n // 🔧 新增:单一数据源访问接口\r\n // getStandardGeometryPoints: calculateGamePoints // 暂时注释掉,需要时再实现\r\n}; ","import { MOCK_USER_DATA, MOCK_JWT_TOKEN } from './mockData';\r\nimport { courseData } from './courseData';\r\n\r\nexport interface UserLessonProgress {\r\n lessonId: string;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n progressPercentage: number;\r\n lastAccessed?: string;\r\n timeSpent?: number; // 分钟\r\n score?: number; // 分数 0-100\r\n attempts?: number; // 尝试次数\r\n}\r\n\r\nexport interface UserUnitProgress {\r\n unitId: string;\r\n userId: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n lessons: UserLessonProgress[];\r\n}\r\n\r\nexport interface UserCourseProgress {\r\n courseId: string;\r\n userId: string;\r\n totalUnits: number;\r\n completedUnits: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UserUnitProgress[];\r\n}\r\n\r\n// 生成模拟的用户课程进度数据\r\nexport const generateMockUserCourseProgress = (userId: string = MOCK_USER_DATA.id): UserCourseProgress => {\r\n const unitsProgress: UserUnitProgress[] = courseData.units.map((unit, index) => {\r\n // 模拟进度数据 - 根据单元索引设置不同的进度\r\n const baseProgress = Math.min(100, Math.max(0, index * 15 + Math.random() * 20));\r\n const completedLessons = Math.floor((unit.lessons.length * baseProgress) / 100);\r\n\r\n const lessonsProgress: UserLessonProgress[] = unit.lessons.map((lesson, lessonIndex) => {\r\n const lessonProgress = Math.min(100, Math.max(0, baseProgress - (lessonIndex * 10) + Math.random() * 30));\r\n\r\n return {\r\n lessonId: lesson.id,\r\n status: lessonProgress >= 100 ? 'completed' : lessonProgress > 0 ? 'in-progress' : 'not-started',\r\n progressPercentage: Math.round(lessonProgress),\r\n lastAccessed: lessonProgress > 0 ? new Date(Date.now() - Math.random() * 7 * 24 * 60 * 60 * 1000).toISOString() : undefined,\r\n timeSpent: lessonProgress > 0 ? Math.floor(Math.random() * 120 + 10) : undefined,\r\n score: lessonProgress >= 100 ? Math.floor(Math.random() * 21 + 80) : undefined,\r\n attempts: lessonProgress > 0 ? Math.floor(Math.random() * 3 + 1) : undefined\r\n };\r\n });\r\n\r\n return {\r\n unitId: unit.id,\r\n userId,\r\n totalLessons: unit.lessons.length,\r\n completedLessons,\r\n progressPercentage: Math.round(baseProgress),\r\n status: baseProgress >= 100 ? 'completed' : baseProgress > 0 ? 'in-progress' : 'not-started',\r\n lastAccessed: baseProgress > 0 ? new Date(Date.now() - Math.random() * 14 * 24 * 60 * 60 * 1000).toISOString() : undefined,\r\n lessons: lessonsProgress\r\n };\r\n });\r\n\r\n const totalProgress = unitsProgress.reduce((sum, unit) => sum + unit.progressPercentage, 0) / unitsProgress.length;\r\n const completedUnits = unitsProgress.filter(unit => unit.status === 'completed').length;\r\n\r\n return {\r\n courseId: courseData.id,\r\n userId,\r\n totalUnits: unitsProgress.length,\r\n completedUnits,\r\n progressPercentage: Math.round(totalProgress),\r\n status: totalProgress >= 100 ? 'completed' : totalProgress > 0 ? 'in-progress' : 'not-started',\r\n lastAccessed: new Date(Date.now() - Math.random() * 3 * 24 * 60 * 60 * 1000).toISOString(),\r\n units: unitsProgress\r\n };\r\n};\r\n\r\n// 模拟用户课程进度数据\r\nexport const MOCK_USER_COURSE_PROGRESS: UserCourseProgress = generateMockUserCourseProgress();\r\n\r\n// 获取用户课程进度\r\nexport const getUserCourseProgress = (userId: string, courseId: string): UserCourseProgress | null => {\r\n if (userId === MOCK_USER_DATA.id && courseId === courseData.id) {\r\n return MOCK_USER_COURSE_PROGRESS;\r\n }\r\n return null;\r\n};\r\n\r\n// 获取特定单元的进度\r\nexport const getUserUnitProgress = (userId: string, courseId: string, unitId: string): UserUnitProgress | null => {\r\n const courseProgress = getUserCourseProgress(userId, courseId);\r\n if (!courseProgress) return null;\r\n\r\n return courseProgress.units.find(unit => unit.unitId === unitId) || null;\r\n};\r\n\r\n// 获取特定课时的进度\r\nexport const getUserLessonProgress = (userId: string, courseId: string, unitId: string, lessonId: string): UserLessonProgress | null => {\r\n const unitProgress = getUserUnitProgress(userId, courseId, unitId);\r\n if (!unitProgress) return null;\r\n\r\n return unitProgress.lessons.find(lesson => lesson.lessonId === lessonId) || null;\r\n};\r\n\r\n// 更新课时进度\r\nexport const updateUserLessonProgress = (\r\n userId: string,\r\n courseId: string,\r\n unitId: string,\r\n lessonId: string,\r\n progress: Partial<UserLessonProgress>\r\n): boolean => {\r\n // 在实际应用中,这里会调用API更新数据库\r\n // 这里只是模拟更新操作\r\n console.log('Updating lesson progress:', { userId, courseId, unitId, lessonId, progress });\r\n return true;\r\n};","import { MOCK_USER_DATA, MOCK_JWT_TOKEN } from './mockData';\r\nimport { courseData } from './courseData';\r\nimport { getUserCourseProgress } from './userCourseProgress';\r\nimport type { UserUnitProgress } from './userCourseProgress';\r\n\r\nexport interface UserGradeUnitNavItem {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsNav {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UserGradeUnitNavItem[];\r\n}\r\n\r\n// 获取用户年级单元导航数据\r\nexport const getUserGradeUnitsNav = (userId: string, courseId: string): UserGradeUnitsNav | null => {\r\n const userProgress = getUserCourseProgress(userId, courseId);\r\n if (!userProgress) return null;\r\n\r\n const unitsNav: UserGradeUnitNavItem[] = courseData.units.map((unit, index) => {\r\n const unitProgress = userProgress.units.find(up => up.unitId === unit.id);\r\n\r\n return {\r\n unitId: unit.id,\r\n title: unit.title,\r\n description: unit.description,\r\n moduleCategory: unit.moduleCategory,\r\n estimatedDuration: unit.estimatedDuration,\r\n totalLessons: unit.lessons.length,\r\n completedLessons: unitProgress?.completedLessons || 0,\r\n progressPercentage: unitProgress?.progressPercentage || 0,\r\n status: unitProgress?.status || 'not-started',\r\n lastAccessed: unitProgress?.lastAccessed,\r\n isActive: index === 0, // 默认第一个单元为活跃状态\r\n route: `/math/grade-${courseData.level}/unit/${unit.id}`\r\n };\r\n });\r\n\r\n return {\r\n userId,\r\n courseId: courseData.id,\r\n courseTitle: courseData.title,\r\n courseLevel: courseData.level,\r\n totalUnits: unitsNav.length,\r\n completedUnits: unitsNav.filter(unit => unit.status === 'completed').length,\r\n overallProgress: userProgress.progressPercentage,\r\n status: userProgress.status,\r\n lastAccessed: userProgress.lastAccessed,\r\n units: unitsNav\r\n };\r\n};\r\n\r\n// 获取特定单元的导航项\r\nexport const getUnitNavItem = (userId: string, courseId: string, unitId: string): UserGradeUnitNavItem | null => {\r\n const navData = getUserGradeUnitsNav(userId, courseId);\r\n if (!navData) return null;\r\n\r\n return navData.units.find(unit => unit.unitId === unitId) || null;\r\n};\r\n\r\n// 更新单元活跃状态\r\nexport const updateUnitActiveStatus = (userId: string, courseId: string, unitId: string, isActive: boolean): boolean => {\r\n // 在实际应用中,这里会更新用户的学习状态\r\n // 这里只是模拟操作\r\n console.log('Updating unit active status:', { userId, courseId, unitId, isActive });\r\n return true;\r\n};\r\n\r\n// 模拟用户年级单元导航数据\r\nexport const MOCK_USER_GRADE_UNITS_NAV: UserGradeUnitsNav = getUserGradeUnitsNav(MOCK_USER_DATA.id, courseData.id)!;","// 用户年级单元进度数据 - 用于 Sidebar 展示组件\r\nimport { MOCK_USER_DATA } from './mockData';\r\nimport { courseData } from './courseData';\r\n\r\nexport interface UnitProgressData {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsProgressData {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UnitProgressData[];\r\n}\r\n\r\n// 模拟用户年级单元进度数据 - 用于 Sidebar 展示组件\r\n// 此数据仅用于展示,不包含任何业务逻辑或API调用\r\n\r\nexport const MOCK_USER_GRADE_UNITS_PROGRESS: UserGradeUnitsProgressData = {\r\n userId: MOCK_USER_DATA.id,\r\n courseId: courseData.id,\r\n courseTitle: courseData.title,\r\n courseLevel: courseData.level,\r\n totalUnits: courseData.units.length,\r\n completedUnits: 3,\r\n overallProgress: 45,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-15T10:30:00Z',\r\n units: [\r\n {\r\n unitId: 'unit_1',\r\n title: '小数乘法',\r\n description: '学习小数乘法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 10,\r\n completedLessons: 8,\r\n progressPercentage: 80,\r\n status: 'completed',\r\n lastAccessed: '2024-01-10T14:20:00Z',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_1',\r\n icon: '🔢'\r\n },\r\n {\r\n unitId: 'unit_2',\r\n title: '小数除法',\r\n description: '学习小数除法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 6,\r\n progressPercentage: 50,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-15T10:30:00Z',\r\n isActive: true,\r\n route: '/math/grade-5/unit/unit_2',\r\n icon: '➗'\r\n },\r\n {\r\n unitId: 'unit_3',\r\n title: '简易方程',\r\n description: '学习用字母表示数和解简易方程',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '4周',\r\n totalLessons: 14,\r\n completedLessons: 2,\r\n progressPercentage: 14,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-12T16:45:00Z',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_3',\r\n icon: '📝'\r\n },\r\n {\r\n unitId: 'unit_4',\r\n title: '多边形的面积',\r\n description: '学习平行四边形、三角形、梯形和组合图形的面积计算',\r\n moduleCategory: 'Graphics and Geometry',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_4',\r\n icon: '📐'\r\n },\r\n {\r\n unitId: 'unit_5',\r\n title: '因数与倍数',\r\n description: '学习因数、倍数、质数、合数等概念',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 10,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_5',\r\n icon: '🔢'\r\n },\r\n {\r\n unitId: 'unit_6',\r\n title: '长方体和正方体',\r\n description: '学习长方体和正方体的特征、表面积和体积计算',\r\n moduleCategory: 'Graphics and Geometry',\r\n estimatedDuration: '4周',\r\n totalLessons: 14,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_6',\r\n icon: '📦'\r\n },\r\n {\r\n unitId: 'unit_7',\r\n title: '分数的意义和性质',\r\n description: '学习分数的意义、性质和约分、通分等方法',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '4周',\r\n totalLessons: 16,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_7',\r\n icon: '½'\r\n },\r\n {\r\n unitId: 'unit_8',\r\n title: '分数的加法和减法',\r\n description: '学习同分母分数、异分母分数的加法和减法',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_8',\r\n icon: '➕'\r\n },\r\n {\r\n unitId: 'unit_9',\r\n title: '折线统计图',\r\n description: '学习单式折线统计图和复式折线统计图的认识和制作',\r\n moduleCategory: 'Probability and Statistics',\r\n estimatedDuration: '2周',\r\n totalLessons: 6,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_9',\r\n icon: '📊'\r\n }\r\n ]\r\n};","\"use client\";\n\n// src/index.ts\nimport { domAnimation } from \"framer-motion\";\nvar index_default = domAnimation;\nexport {\n index_default as default\n};\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","Button","progress","variant","size","radius","className","colorClass","buttonClasses","jsx","createContext2","options","strict","errorMessage","Context","useContext2","_a","context","error","useDOMRef","ref","domRef","useRef","useImperativeHandle","dataAttr","condition","toVal","mix","y","str","clsx","args","i","tmp","x","safeText","text","getUniqueID","prefix","objectToDeps","obj","clamp","min","max","clampPercentage","chain","callbacks","callback","idsUpdaterMap","mergeIds","idA","idB","setIdsA","setIdsB","mergeProps","result","a","b","useIsHydrated","subscribe","DOMPropNames","DOMEventNames","propRe","ariaRe","funcRe","filterDOMProps","opts","labelable","enabled","propNames","omitPropNames","omitEventNames","omitDataProps","omitEventProps","filteredProps","prop","ProviderContext","useProviderContext","createContext","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","locale","textInfo","lang","$b5e257d569688ac6$var$defaultContext","$b5e257d569688ac6$var$SSRContext","$670gB$react","$b5e257d569688ac6$var$IsSSRContext","$b5e257d569688ac6$var$canUseDOM","$b5e257d569688ac6$var$componentIds","$b5e257d569688ac6$var$useCounter","isDisabled","ctx","$670gB$useContext","$670gB$useRef","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","currentOwner","prevComponentValue","$b5e257d569688ac6$var$useLegacySSRSafeId","defaultId","counter","$b5e257d569688ac6$var$useModernSSRSafeId","id","didSSR","$670gB$useState","$b5e257d569688ac6$export$535bd6ca7f90a273","$b5e257d569688ac6$export$619500959fc48b26","$b5e257d569688ac6$var$getSnapshot","$b5e257d569688ac6$var$getServerSnapshot","$b5e257d569688ac6$var$subscribe","onStoreChange","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","listener","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","isSSR","$ffhGL$useIsSSR","defaultLocale","setDefaultLocale","$ffhGL$useState","$ffhGL$useEffect","$18f2051aff69b9bf$var$I18nContext","$h9FiU$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$h9FiU$useContext","_check_private_redeclaration","privateCollection","_class_private_field_init","privateMap","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$HgANd$react","$8ae05eaa5c114e9c$var$_React_useInsertionEffect","$8ae05eaa5c114e9c$var$useEarlyEffect","$lmaYr$react","$8ae05eaa5c114e9c$export$7f54fc3180508a52","fn","$lmaYr$useRef","$lmaYr$useCallback","f","$bdb11010cef70236$var$canUseDOM","$bdb11010cef70236$export$d41a04c74483c6ef","$bdb11010cef70236$var$registry","heldValue","$bdb11010cef70236$export$f680877a34711e37","setValue","$eKkEp$useState","nextId","$eKkEp$useRef","res","$eKkEp$useSSRSafeId","cleanupRef","cacheIdRef","r","$eKkEp$useEffect","newId","$bdb11010cef70236$export$cd8c9cb68f842629","$ff5963eb1fccf552$export$e08e3b67e392101e","$431fbd86ca7dc216$export$b204af158042fbac","el","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$431fbd86ca7dc216$var$isNode","$431fbd86ca7dc216$export$af51f0f06c0f328a","$f4e2df6bd15f8569$var$_shadowDOM","$f4e2df6bd15f8569$export$98658e8c59125e6a","$d4ee10de306f2510$export$4282f70798064fe0","otherNode","$lcSu5$shadowDOM","currentNode","$d4ee10de306f2510$export$cd4e5573fbe2b576","doc","_activeElement_shadowRoot","activeElement","$d4ee10de306f2510$export$e58f029f0fbfdb29","event","n","o","$3ef42575df84b30b$export$9d1611c77c2fe928","$7jXr9$clsx","$65484d02dcb7eb3e$var$DOMPropNames","$65484d02dcb7eb3e$var$labelablePropNames","$65484d02dcb7eb3e$var$linkPropNames","$65484d02dcb7eb3e$var$globalAttrs","$65484d02dcb7eb3e$var$globalEvents","$65484d02dcb7eb3e$var$propRe","$65484d02dcb7eb3e$export$457c3d6518dd4c6f","isLink","global","events","$7215afc6de606d6b$export$de79e2c695e052f3","element","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$7215afc6de606d6b$var$supportsPreventScrollCached","parent","rootScrollingElement","scrollTop","scrollLeft","$c87311424ea30a05$var$testUserAgent","re","_window_navigator_userAgentData","brands","brand","$c87311424ea30a05$var$testPlatform","$c87311424ea30a05$var$cached","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$186c6964ca17d99","$c87311424ea30a05$export$7bef049ce92e4224","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$78551043582a6a98","$c87311424ea30a05$export$6446a186d09e379e","$c87311424ea30a05$export$a11b0059900ceec8","$c87311424ea30a05$export$b7d78993b74f766d","$ea8dcbcb9ea1b556$export$95185d699e05d4d7","target","modifiers","setOpening","_window_event_type","_window_event","metaKey","ctrlKey","altKey","shiftKey","$bbed8b41f857bcc0$var$transitionsByElement","$bbed8b41f857bcc0$var$transitionCallbacks","$bbed8b41f857bcc0$var$setupGlobalEvents","isTransitionEvent","onTransitionStart","e","transitions","onTransitionEnd","properties","cb","$bbed8b41f857bcc0$var$cleanupDetachedElements","eventTarget","$bbed8b41f857bcc0$export$24490316f764c430","$03deb23ff14920c4$export$4eaf04e54aa8eed6","globalListeners","$lPAwt$useRef","addGlobalListener","$lPAwt$useCallback","removeGlobalListener","_globalListeners_current_get","removeAllGlobalListeners","$lPAwt$useEffect","$313b98861ee5dd6c$export$d6875122194c7b44","defaultLabel","label","labelledBy","$e7801be82b4b2a53$export$4debdb1a3f0fa79e","$6a7db85432448f7f$export$60278871457622de","$6a7db85432448f7f$export$29bf1b5f2c56cf63","$7d2416ea0959daaa$var$supportsCheckVisibility","$7d2416ea0959daaa$var$isStyleVisible","windowObject","display","visibility","isVisible","getComputedStyle","computedDisplay","computedVisibility","$7d2416ea0959daaa$var$isAttributeVisible","childElement","$7d2416ea0959daaa$export$e989c0fffaa6b27a","$b4b717babfbb907b$var$focusableElements","$b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$export$4c063cf1350e6fed","$b4b717babfbb907b$var$isInert","$9446cca9a3875146$export$7d15b64cf5a3a4c4","$488c6ddbf4ef74c2$var$formatterCache","$488c6ddbf4ef74c2$var$supportsSignDisplay","$488c6ddbf4ef74c2$var$supportsUnit","$488c6ddbf4ef74c2$var$UNITS","$488c6ddbf4ef74c2$export$cc77c4ff7e8673c5","$488c6ddbf4ef74c2$export$711b50b3c525e0f2","_UNITS_unit","unit","unitDisplay","values","start","end","startParts","endParts","p","$488c6ddbf4ef74c2$var$getCachedNumberFormatter","numberingSystem","cacheKey","numberFormatter","numberFormat","signDisplay","num","needsPositiveSign","negative","noSign","minus","$a916eb452884faea$export$b7a616150fdb9f44","$JFEdn$useMemo","$JFEdn$NumberFormatter","LayoutGroupContext","useConstant","init","isBrowser","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","PresenceContext","addUniqueItem","arr","item","removeItem","index","v","formatErrorMessage","message","errorCode","warning","invariant","check","MotionGlobalConfig","isNumericalString","isObject","isZeroValueString","memo","noop","any","combineFunctions","pipe","transformers","from","to","toFromDifference","SubscriptionManager","handler","c","numSubscriptions","secondsToMilliseconds","seconds","millisecondsToSeconds","milliseconds","velocityPerSecond","velocity","frameDuration","warned","warnOnce","calcBezier","t","a1","a2","subdivisionPrecision","subdivisionMaxIterations","binarySubdivide","lowerBound","upperBound","mX1","mX2","currentX","currentT","cubicBezier","mY1","mY2","getTForX","aX","mirrorEasing","easing","reverseEasing","backOut","backIn","backInOut","anticipate","circIn","circOut","circInOut","easeIn","easeOut","easeInOut","isEasingArray","ease","isBezierDefinition","easingLookup","isValidEasing","easingDefinitionToFunction","definition","x1","y1","x2","y2","stepsOrder","createRenderStep","runNextFrame","stepName","thisFrame","nextFrame","isProcessing","flushNextFrame","toKeepAlive","latestFrameData","triggerCallback","step","keepAlive","immediate","queue","frameData","maxElapsed","createRenderBatcher","scheduleNextBatch","allowKeepAlive","useDefaultElapsed","state","flagRunNextFrame","steps","acc","setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender","processBatch","timestamp","wake","process","frame","cancelFrame","now","clearTime","time","newTime","checkStringStartsWith","token","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","number","alpha","scale","sanitize","floatRegex","isNullish","singleColorRegex","isColorString","testProp","splitColor","aName","bName","cName","clampRgbUnit","rgbUnit","rgba","red","green","blue","alpha$1","parseHex","g","hex","createUnitType","degrees","percent","px","vh","vw","progressPercentage","hsla","hue","saturation","lightness","color","parsed","colorRegex","test","NUMBER_TOKEN","COLOR_TOKEN","VAR_TOKEN","VAR_FUNCTION_TOKEN","SPLIT_TOKEN","complexRegex","analyseComplexValue","originalValue","indexes","types","split","parsedValue","parseComplexValue","createTransformer","numSections","output","convertNumbersToZero","getAnimatableNone","complex","hueToRgb","q","hslaToRgba","mixImmediate","mixNumber","mixLinearColor","fromExpo","expo","colorTypes","getColorType","asRGBA","model","mixColor","fromRGBA","toRGBA","blended","invisibleValues","mixVisibility","origin","mixNumber$1","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","matchOrder","orderedOrigin","pointers","originIndex","originValue","template","originStats","targetStats","frameloopDriver","passTimestamp","generateLinearEasing","duration","resolution","points","numPoints","maxGeneratorDuration","calcGeneratorDuration","generator","timeStep","createGeneratorEasing","createGenerator","velocitySampleDuration","calcGeneratorVelocity","resolveValue","current","prevT","springDefaults","safeMin","findSpring","bounce","mass","envelope","derivative","dampingRatio","undampedFreq","exponentialDecay","delta","calcAngularFreq","d","initialGuess","approximateRoot","stiffness","rootIterations","durationKeys","physicsKeys","isSpringType","getSpringOptions","springOptions","visualDuration","root","damping","derived","spring","optionsOrVisualDuration","restSpeed","restDelta","isResolvedFromDuration","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","resolveSpring","angularFreq","dampedAngularFreq","freqForT","currentVelocity","isBelowVelocityThreshold","isBelowDisplacementThreshold","calculatedDuration","generatorOptions","inertia","keyframes","power","timeConstant","bounceDamping","bounceStiffness","modifyTarget","isOutOfBounds","nearestBoundary","amplitude","ideal","calcDelta","calcLatest","applyFriction","latest","timeReachedBoundary","spring$1","checkCatchBoundary","hasUpdatedFrame","createMixers","customMixer","mixers","mixerFactory","numMixers","mixer","easingFunction","interpolate","input","isClamp","inputLength","isZeroDeltaRange","interpolator","progressInRange","fillOffset","offset","remaining","offsetProgress","defaultOffset","convertOffsetToTimes","defaultEasing","keyframeValues","times","easingFunctions","absoluteTimes","mapTimeToKeyframe","isNotNull","getFinalKeyframe","repeat","repeatType","finalKeyframe","speed","resolvedKeyframes","transitionTypeMap","replaceTransitionType","transition","WithPromise","resolve","onResolve","onReject","percentToProgress","JSAnimation","motionValue","repeatDelay","keyframes$1","generatorFactory","animationTime","sample","totalDuration","mixKeyframes","mirroredGenerator","resolvedDuration","delay","onUpdate","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","iterationProgress","done","isAnimationFinished","reject","newSpeed","hasChanged","driver","startTime","sampleTime","timeline","fillWildcards","radToDeg","rad","rotate","angle","rebaseAngle","matrix2dParsers","rotateZ","scaleX","scaleY","matrix3dParsers","defaultTransformValue","parseValueFromTransform","transform","matrix3dMatch","parsers","match","matrix2dMatch","valueParser","convertTransformToNumber","readTransformValue","instance","transformPropOrder","transformProps","isNumOrPxType","transformKeys","nonTranslationalTransformKeys","removeNonTranslationalTransform","visualElement","removedTransforms","positionalValues","paddingLeft","paddingRight","paddingTop","paddingBottom","_bbox","top","left","toResolve","isScheduled","anyNeedsMeasurement","isForced","measureAllKeyframes","resolversToMeasure","resolver","elementsToMeasure","transformsToRestore","restore","readAllKeyframes","flushKeyframeResolvers","KeyframeResolver","unresolvedKeyframes","onComplete","isAsync","currentValue","valueAsRead","isForcedComplete","isCSSVar","setStyle","supportsScrollTimeline","supportsFlags","memoSupports","supportsFlag","memoized","supportsLinearEasing","cubicBezierAsString","supportedWaapiEasing","mapEasingToNativeEasing","segmentEasing","startWaapiAnimation","valueName","pseudoElement","keyframeOptions","isGenerator","applyGeneratorOptions","NativeAnimation","allowFlatten","keyframe","newStartTime","observe","unsupportedEasingFunctions","isUnsupportedEase","replaceStringEasing","sampleDelta","NativeAnimationExtended","sampleAnimation","isAnimatable","hasKeyframesChanged","canAnimate","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","makeAnimationInstant","acceleratedValues","supportsWaapi","supportsBrowserAnimation","transformTemplate","MAX_RESOLVE_DELAY","AsyncMotionValueAnimation","autoplay","optionsWithDefaults","KeyframeResolver$1","forced","sync","isHandoff","resolvedOptions","animation","_onReject","splitCSSVariableRegex","parseCSSVariable","token1","token2","fallback","maxDepth","getVariableValue","depth","resolved","trimmed","getValueTransition","positionalKeys","auto","testValueType","dimensionValueTypes","findDimensionValueType","isNone","maxDefaults","applyDefaultFilter","defaultValue","functionRegex","filter","functions","int","numberValueTypes","defaultValueTypes","getDefaultValueType","defaultValueType","invalidTemplates","makeNoneKeyframesAnimatable","noneKeyframeIndexes","animatableTemplate","noneIndex","DOMKeyframesResolver","originType","targetType","measureKeyframe","finalKeyframeIndex","unsetTransformName","unsetTransformValue","resolveElements","elementOrSelector","scope","selectorCache","elements","getValueAsType","isHTMLElement","MAX_VELOCITY_DELTA","isFloat","MotionValue","currentTime","dependent","prevFrameValue","subscription","eventName","unsubscribe","eventManagers","passiveEffect","stopPassiveEffect","prev","endAnimation","startAnimation","microtask","isDragging","isDragActive","setupGesture","gestureAbortController","eventOptions","isValidHover","hover","onHoverStart","cancel","onPointerEnter","enterEvent","onHoverEnd","onPointerLeave","leaveEvent","isNodeOrChild","child","isPrimaryPointer","focusableElements","isElementKeyboardAccessible","isPressing","filterEvents","firePointerEvent","enableKeyboardPress","focusEvent","handleKeydown","handleKeyup","handleBlur","isValidPressEvent","press","targetOrSelector","onPressStart","targets","cancelEvents","startPress","startEvent","onPressEnd","onPointerEnd","endEvent","success","onPointerUp","onPointerCancel","upEvent","cancelEvent","isMotionValue","valueTypes","findValueType","MotionConfigContext","setRef","composeRefs","refs","hasCleanup","cleanups","cleanup","useComposedRefs","PopChildMeasure","prevProps","parentWidth","PopChild","isPresent","anchorX","useId","nonce","useContext","composedRef","useInsertionEffect","width","height","right","style","PresenceChild","initial","onExitComplete","custom","presenceAffectsLayout","mode","presenceChildren","newChildrenMap","isReusedContext","useMemo","childId","isComplete","_","usePresence","register","safeToRemove","useCallback","getChildKey","onlyElements","filtered","Children","isValidElement","AnimatePresence","propagate","isParentPresent","presentChildren","presentKeys","isInitialRender","pendingPresentChildren","exitComplete","diffedChildren","setDiffedChildren","useState","renderedChildren","setRenderedChildren","exitingChildren","nextChildren","forceRender","Fragment","onExit","isEveryExitComplete","isExitComplete","LazyContext","featureProps","featureDefinitions","loadFeatures","features","LazyMotion","setIsLoaded","isLazyBundle","loadedRenderer","renderer","loadedFeatures","validMotionProps","isValidMotionProp","shouldForward","loadExternalIsValidProp","isValidProp","filterProps","isDom","forwardMotionProps","MotionContext","isAnimationControls","isVariantLabel","variantPriorityOrder","variantProps","isControllingVariants","isVariantNode","getCurrentTreeVariants","animate","useCreateMotionContext","variantLabelsAsDependency","scaleCorrectors","isForcedMotionValue","layout","layoutId","translateAlias","numTransforms","buildTransform","latestValues","transformString","transformIsDefault","valueIsDefault","valueAsType","transformName","buildHTMLStyles","vars","transformOrigin","hasTransform","hasTransformOrigin","originX","originY","originZ","createHtmlRenderState","copyRawValuesOnly","useInitialMotionValues","visualState","useStyle","styleProp","useHTMLProps","htmlProps","dashKeys","camelKeys","buildSVGPath","attrs","length","spacing","useDashCase","pathLength","pathSpacing","buildSVGAttrs","attrX","attrY","attrScale","pathOffset","isSVGTag","createSvgRenderState","tag","useSVGProps","_isStatic","Component","visualProps","rawStyles","lowercaseSVGElements","isSVGComponent","useRender","isStatic","elementProps","createElement","getValueState","resolveVariantFromProps","resolveMotionValue","makeState","scrapeMotionValuesFromProps","createRenderState","presenceContext","makeLatestValues","scrapeMotionValues","motionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","list","transitionEnd","valueTarget","makeUseVisualState","make","newValues","useHTMLVisualState","scrapeMotionValuesFromProps$1","targetKey","useSVGVisualState","motionComponentSymbol","isRefObject","useMotionRef","externalRef","camelToDash","optimizedAppearDataAttribute","SwitchLayoutGroupContext","useVisualElement","createVisualElement","ProjectionNodeConstructor","lazyContext","reducedMotionConfig","visualElementRef","initialLayoutGroupConfig","createProjectionNode","isMounted","optimisedAppearId","wantsHandoff","initialPromotionConfig","drag","dragConstraints","layoutScroll","layoutRoot","layoutCrossfade","getClosestProjectingNode","createMotionComponent","preloadedFeatures","useVisualState","MotionDOMComponent","MeasureLayout","configAndProps","useLayoutId","useStrictMode","layoutProjection","getProjectionFunctionality","jsxs","ForwardRefMotionComponent","forwardRef","layoutGroupId","isStrict","strictMessage","combined","createMotionProxy","componentCache","factory","deprecatedFactoryFunction","_target","m","convertBoundingBoxToBox","bottom","transformBoxPoints","point","transformPoint","topLeft","bottomRight","measureViewportBox","createAxis","createBox","prefersReducedMotion","hasReducedMotionListener","initPrefersReducedMotion","motionMediaQuery","setReducedMotionPreferences","visualElementStore","updateMotionValuesFromProps","next","nextValue","prevValue","existingValue","latestValue","propEventHandlers","VisualElement","_props","_prevProps","_visualElement","blockInitialAnimation","renderState","willChange","initialMotionValues","remove","feature","valueIsTransform","removeOnChange","removeSyncCheck","other","featureDefinition","isEnabled","FeatureConstructor","listenerName","closestVariantNode","valueFromInitial","DOMVisualElement","renderHTML","projection","elementStyle","HTMLVisualElement","computedStyle","transformPagePoint","camelCaseAttributes","renderSVG","_styleProp","SVGVisualElement","defaultType","createDomVisualElement","resolveVariant","isKeyframesTarget","setMotionValue","resolveFinalValueInKeyframes","setTarget","isWillChangeMotionValue","addValueToWillChange","newWillChange","getOptimisedAppearId","underDampedSpring","criticallyDampedSpring","keyframesTransition","getDefaultTransition","valueKey","isTransitionDefined","when","_delay","delayChildren","staggerChildren","staggerDirection","animateMotionValue","valueTransition","shouldSkip","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","animateTarget","targetAndTransition","transitionOverride","animations","animationTypeState","appearId","calcChildStagger","numChildren","maxStaggerDuration","animateVariant","getAnimation","getChildAnimations","forwardDelay","animateChildren","first","last","animateVisualElement","resolvedDefinition","shallowCompare","prevLength","numVariantProps","getVariantContext","reversePriorityOrder","numAnimationTypes","animateList","createAnimationState","createState","buildResolvedTypeValues","setAnimateFunction","makeAnimator","animateChanges","changedActiveType","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","variantDidChange","checkVariantsDidChange","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","prevResolvedValues","allKeys","markToAnimate","valueHasChanged","willAnimateViaParent","parentVariant","fallbackAnimation","initialTransition","fallbackTarget","shouldAnimate","setActive","isActive","createTypeState","Feature","AnimationFeature","prevAnimate","ExitAnimationFeature","prevIsPresent","exitAnimation","addDomEvent","extractEventInfo","handleHoverEvent","lifecycle","HoverGesture","_element","FocusGesture","isFocusVisible","handlePressEvent","PressGesture","observerCallbacks","observers","fireObserverCallback","entry","fireAllObserverCallbacks","entries","initIntersectionObserver","lookupRoot","rootObservers","observeIntersection","rootInteresectionObserver","thresholdNames","InViewFeature","viewport","rootMargin","amount","once","onIntersectionUpdate","isIntersecting","onViewportEnter","onViewportLeave","hasViewportOptionChanged","prevViewport","domAnimation","$8a9cb279dc87e130$export$525bc4921d56d4a","nativeEvent","$8a9cb279dc87e130$export$c2b7abe5d61ec696","$8a9cb279dc87e130$export$715c682d09d639cc","onBlur","stateRef","$6dfIe$useRef","$6dfIe$useLayoutEffect","dispatchBlur","$6dfIe$useEffectEvent","$6dfIe$useCallback","onBlurHandler","_stateRef_current_observer","relatedTargetEl","$8a9cb279dc87e130$export$fda7da73ab5d4c48","$8a9cb279dc87e130$export$cabe61c495ee3649","$6dfIe$isFocusable","window","$6dfIe$getOwnerWindow","isRefocusing","onFocusOut","$6dfIe$focusWithoutScrolling","onFocus","onFocusIn","raf","$14c0b72509d70225$var$state","$14c0b72509d70225$var$savedUserSelect","$14c0b72509d70225$var$modifiedElementMap","$14c0b72509d70225$export$16a4697467175487","$7R18e$isIOS","documentObject","$7R18e$getOwnerDocument","property","$14c0b72509d70225$export$b0d6fa1ab32e3295","$7R18e$runAfterTransition","targetOldUserSelect","$ae1eeba8b9eafd08$export$5165eccb35aaadb5","$3aeG1$react","_class_apply_descriptor_get","receiver","descriptor","_class_extract_field_descriptor","action","_class_private_field_get","_class_apply_descriptor_set","_class_private_field_set","$f6c31cce2adf654f$var$usePressResponderContext","$7mdmh$useContext","contextProps","$7mdmh$mergeProps","$7mdmh$useSyncRef","$f6c31cce2adf654f$var$_shouldStopPropagation","$f6c31cce2adf654f$var$PressEvent","$7mdmh$_2","$7mdmh$_","pointerType","originalEvent","$7mdmh$_1","_state_target","currentTarget","rect","clientX","clientY","$f6c31cce2adf654f$var$LINK_CLICKED","$f6c31cce2adf654f$var$STYLE_ID","$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE","$f6c31cce2adf654f$export$45712eceda6fad21","onPress","onPressChange","onPressUp","onClick","isPressedProp","preventFocusOnPress","shouldCancelOnPointerExit","allowTextSelectionOnPress","domProps","isPressed","setPressed","$7mdmh$useState","$7mdmh$useRef","$7mdmh$useGlobalListeners","triggerPressStart","$7mdmh$useEffectEvent","shouldStopPropagation","triggerPressEnd","wasPressed","triggerPressUp","$f6c31cce2adf654f$var$createEvent","dispose","cancelOnPointerExit","triggerClick","triggerSyntheticClick","pressProps","$7mdmh$useMemo","$f6c31cce2adf654f$var$isValidKeyboardEvent","$7mdmh$nodeContains","$7mdmh$getEventTarget","_state_metaKeyEvents","$f6c31cce2adf654f$var$shouldPreventDefaultKeyboard","originalTarget","pressUp","$7mdmh$getOwnerDocument","$7mdmh$chain","onKeyUp","$7mdmh$isMac","$7mdmh$openLink","$7mdmh$isVirtualClick","stopPressStart","stopPressUp","stopPressEnd","_state_metaKeyEvents1","$f6c31cce2adf654f$var$isHTMLAnchorLink","$7mdmh$isVirtualPointerEvent","clicked","timeout","$7mdmh$focusWithoutScrolling","$7mdmh$flushSync","onMouseUp","touch","$f6c31cce2adf654f$var$getTouchFromEvent","$f6c31cce2adf654f$var$createTouchEvent","$7mdmh$getOwnerWindow","onScroll","$f6c31cce2adf654f$var$getTouchById","$f6c31cce2adf654f$var$isOverTarget","$7mdmh$useEffect","ownerDocument","code","role","$f6c31cce2adf654f$var$isValidInputKey","targetTouches","pointerId","changedTouches","$f6c31cce2adf654f$var$getPointClientRect","offsetX","offsetY","$f6c31cce2adf654f$var$areRectanglesOverlapping","pointRect","$f6c31cce2adf654f$var$shouldPreventDefaultUp","$f6c31cce2adf654f$var$nonTextInputTypes","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","$507fabe10e71c6fb$var$isValidKey","$28AnR$isMac","$507fabe10e71c6fb$var$handleKeyboardEvent","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$28AnR$isVirtualClick","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","$28AnR$getOwnerWindow","$28AnR$getOwnerDocument","focus","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$export$b9b3dfddab17db27","$507fabe10e71c6fb$export$630ff653c5ada6a9","$507fabe10e71c6fb$var$nonTextInputTypes","$507fabe10e71c6fb$var$isKeyboardFocusEvent","isTextInput","document1","IHTMLInputElement","IHTMLTextAreaElement","IHTMLElement","IKeyboardEvent","$507fabe10e71c6fb$export$ec71b4b83ac08ec3","deps","$28AnR$useEffect","$3ad3f6e1647bc98d$export$80f3e147d781571c","$k50bp$getOwnerDocument","$k50bp$getActiveElement","lastFocusedElement","$k50bp$runAfterTransition","$k50bp$focusWithoutScrolling","$a1ea59d68270f0dd$export$f8168d8dd8fd66e6","onFocusProp","onBlurProp","onFocusChange","$hf0lj$useCallback","onSyntheticFocus","$hf0lj$getOwnerDocument","$hf0lj$getActiveElement","$hf0lj$getEventTarget","$93925083ecbb358c$export$48d1ea6320830260","$46d819fcbaf35654$export$8f71654801c2f7cd","$f645667febf57a63$export$f9762fab77588ecb","$fcPuG$react","$f645667febf57a63$var$useFocusableContext","$fcPuG$useContext","$fcPuG$useSyncRef","otherProps","$f645667febf57a63$export$4c014de7c8940b4c","focusProps","keyboardProps","interactions","$fcPuG$mergeProps","interactionProps","autoFocusRef","$fcPuG$useRef","$fcPuG$useEffect","tabIndex","$9ab94262bd0047c7$export$420e68273165f4ec","onBlurWithin","onFocusWithin","onFocusWithinChange","$3b9Q0$useRef","$3b9Q0$useGlobalListeners","$3b9Q0$useCallback","$3b9Q0$getOwnerDocument","$3b9Q0$getActiveElement","$3b9Q0$getEventTarget","$3b9Q0$nodeContains","$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$hoverCount","$6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$handleGlobalPointerEvent","$6179b936705e76d3$var$setupGlobalTouchEvents","$6179b936705e76d3$export$ae780daf29e6d456","onHoverChange","isHovered","setHovered","$AWxnT$useState","$AWxnT$useRef","$AWxnT$useEffect","$AWxnT$useGlobalListeners","hoverProps","triggerHoverEnd","$AWxnT$useMemo","triggerHoverStart","$AWxnT$getOwnerDocument","$AWxnT$nodeContains","$f7dceffc5ad7768b$export$4e328f61c538687f","autoFocus","within","$isWE5$useRef","$isWE5$isFocusVisible","isFocused","setFocused","$isWE5$useState","isFocusVisibleState","setFocusVisible","updateState","$isWE5$useCallback","$isWE5$useFocusVisibleListener","$isWE5$useFocus","focusWithinProps","$isWE5$useFocusWithin","component","baseForwardRef","mapPropsVariants","variantKeys","removeVariantProps","picked","solid","shadow","bordered","flat","faded","light","ghost","colorVariants","animation_default","custom_default","scrollbar_hide_default","text_default","DEFAULT_TRANSITION_DURATION","transition_default","utilities","COMMON_UNITS","twMergeConfig","u","l","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","theme","classGroups","processClassesRecursively","classGroup","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","createSortModifiers","orderSensitiveModifiers","modifier","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","isExternal","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","mergeConfigs","baseConfig","extend","override","overrideProperty","overrideConfigProperties","mergeConfigProperties","mergeArrayProperties","baseObject","overrideKey","overrideValue","overrideObject","mergeObject","mergeValue","extendTailwindMerge","configExtension","createConfig","twMerge","s","st","X","P","B","F","S","Q","rt","R","A","L","M","T","j","$","N","w","V","b$1","Z","h","U","a$1","C","G","nt","K","W","z","D","tt","et","Y","tv","_b","_c","tvBase","spinner","dataFocusVisibleClasses","translateCenterClasses","collapseAdjacentVariantBorders","button","card","avatar","useIsMounted","rerender","isMountedRef","setIsMounted","timer","$d191a55c9702f145$export$8467354a121f1b9f","ariaLabelledby","ariaLabel","labelElementType","$83Elw$useId","labelId","labelProps","fieldProps","$83Elw$useLabels","$204d9ebcedfb8806$export$ed5abd763a836edc","minValue","maxValue","valueLabel","isIndeterminate","formatOptions","$2xLm1$filterDOMProps","$2xLm1$useLabel","$2xLm1$clamp","percentage","formatter","$2xLm1$useNumberFormatter","valueToFormat","$2xLm1$mergeProps","useProgress","originalProps","globalContext","as","showValueLabel","baseStyles","disableAnimation","progressBarProps","useAriaProgress","slots","selfMounted","getProgressBarProps","props2","getLabelProps","Progress","shouldShowLabelWrapper","progress_default","CardProvider","useCardContext","CardBody","bodyStyles","card_body_default","CardFooter","footerStyles","card_footer_default","useAriaButton","elementType","allowFocusWhenDisabled","href","rel","additionalProps","usePress","focusableProps","useFocusable","buttonProps","Ripple","ripples","motionProps","onClear","ripple","ripple_default","useRipple","setRipples","trigger","prevRipples","prevState","useCard","_d","shouldFilterDOMProps","disableRipple","onClearRipple","onRipplePressHandler","handlePress","useHover","useFocusRing","getCardProps","getRippleProps","Card","isPressable","card_default","toKebabCase","toCamelCase","p1","p2","toPascalCase","camelCase","mergeClasses","classes","array","hasA11yProp","defaultAttributes","Icon","strokeWidth","absoluteStrokeWidth","iconNode","rest","createLucideIcon","iconName","ArrowRight","ChevronDown","ChevronRight","getButtonText","calculateLessonProgress","knowledgeItems","totalProgress","sum","KnowledgeCard","knowledgeItem","onLearnAction","handleLearnClick","LessonItem","lesson","isExpanded","onToggle","handleToggle","lessonProgress","ContentAccordion","activeLessonIds","onToggleLesson","loading","emptyState","AvatarIcon","AvatarGroupProvider","useAvatarGroupContext","useSafeLayoutEffect","useImage","onLoad","onError","ignoreFallback","src","crossOrigin","srcSet","sizes","shouldBypassImageLoad","isHydrated","imageRef","status","setStatus","flush","load","img","useAvatar","_e","_f","_g","_h","groupContext","isInGroup","icon","alt","imgRefProp","isBordered","isFocusable","getInitials","showFallbackProp","ImgComponent","imgProps","disableAnimationProp","imgRef","isHeroImage","isImgLoaded","showFallback","_a2","canBeFocused","getAvatarProps","getImageProps","Avatar","fallbackComponent","avatar_default","ButtonGroupProvider","useButtonGroupContext","useButton","_i","startContentProp","endContentProp","isLoading","disableRippleProp","fullWidth","isDisabledProp","isIconOnly","spinnerPlacement","styles","ariaButtonProps","getButtonProps","getIconClone","cloneElement","startContent","endContent","spinnerSize","useSpinner","labelProp","getSpinnerProps","Spinner","spinner_default","button_default","getProgressColor","Sidebar","data","collapsed","onToggleCollapse","activeUnitId","onUnitSelect","renderUnitItem","unitItemClassName","unitItemStyle","handleUnitSelect","unitId","handleToggleCollapse","renderDefaultUnitItem","renderContent","Submenu","items","position","alignment","openDelay","closeDelay","onOpen","onClose","renderItem","itemConfig","menuClassName","itemClassName","isOpen","setIsOpen","openTimeoutRef","closeTimeoutRef","clearTimeouts","handleMouseEnter","handleMouseLeave","handleItemClick","defaultRenderItem","getPanelClasses","bind","thisArg","toString","getPrototypeOf","iterator","toStringTag","kindOf","thing","kindOfTest","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","isString","isBoolean","isPlainObject","prototype","isEmptyObject","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","allOwnKeys","len","findKey","_key","_global","isContextDefined","merge","caseless","skipUndefined","assignValue","stripBOM","content","inherits","constructor","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","lastIndex","toArray","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","isRegExp","reduceDescriptors","reducer","reducedDescriptors","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toFiniteNumber","isSpecCompliantForm","toJSONObject","stack","visit","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","asap","utils$1","AxiosError","request","response","utils","customProps","axiosError","msg","errCode","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","formData","option","metaTokens","visitor","defaultVisitor","useBlob","convertValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","params","encoder","_encode","buildURL","url","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","transitionalDefaults","platform$1","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","method","ignoreDuplicateOf","parseHeaders","rawHeaders","line","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","dest","matcher","deleted","deleteHeader","format","normalized","asStrings","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","validateStatus","parseProtocol","speedometer","samplesCount","bytes","timestamps","head","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","throttle","freq","threshold","lastArgs","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","formHeaders","allowedHeaders","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","onloadend","responseHeaders","err","timeoutErrorMessage","protocol","composeSignals","signals","controller","aborted","onabort","reason","signal","streamChunk","chunk","chunkSize","pos","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","ReadableStream","TextEncoder","env","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","getBodyLength","body","resolveBodyLength","cancelToken","withCredentials","fetchOptions","_fetch","composedSignal","requestContentLength","_request","contentTypeHeader","isCredentialsSupported","isStreamResponse","responseContentLength","responseData","seedCache","getFetch","fetch","seeds","seed","map","knownAdapters","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","version","formatMessage","opt","desc","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","spread","isAxiosError","payload","HttpStatusCode","createInstance","defaultConfig","axios","promises","all","Cancel","formToJSON","getAdapter","UserIcon","SettingsIcon","HelpIcon","LogoutIcon","DEFAULT_MENU_ITEMS","UserProfile","userId","initialUserName","initialUserAvatar","apiConfig","menuItems","avatarSize","avatarClassName","userNameClassName","containerClassName","onMenuOpen","onMenuClose","onMenuItemClick","onLogout","renderMenuItem","renderUserInfo","userData","setUserData","setLoading","errorState","setErrorState","fetchUserData","endpoint","handleMenuItemClick","handleMenuOpen","handleMenuClose","renderDefaultUserInfo","defaultRenderExploreItem","ExploreTrigger","MathWizHeader","logoHref","logoText","onLogoClick","exploreItems","exploreMenuOpen","onExploreMenuToggle","onExploreItemClick","renderExploreItem","userMenuItems","onUserMenuItemClick","headerClassName","logoClassName","exploreClassName","userProfileClassName","ariaLabelledBy","restProps","preparedExploreItems","MathWizHeader$1","nextProps","RadarChart","abilities","calculateRadarPoints","ability","calculateAxisEndPoints","calculateLabelPosition","textAnchor","createStoreImpl","listeners","setState","partial","replace","nextState","previousState","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","createImpl","useBoundStore","create","mockRadarAbilityData","RadarAbilityService","feedback","useRadarAbilityStore","set","get","radarData","AbilityProgressBar","PersonalizedAdvicePanel","generalRecommendation","RecommendationCard","customLinkTexts","getLinkText","abilityName","defaultLinkTexts","AbilityAssessmentDashboard","fetchData","MOCK_USER_DATA","MOCK_EXPLORE_ITEMS","courseData","GradeUnitBrowserContext","useGradeUnitBrowser","GradeUnitBrowserPage","gradeId","propUserInfo","propExploreMenu","contextUserInfo","contextExploreMenu","unitsData","lessons","setActiveUnit","toggleLesson","loadPageData","userInfo","exploreMenu","activeUnitNav","debugActiveUnit","activeUnit","categoryIcons","statusMapping","statusColors","pointOnLine","ratio","calculateGamePoints","E","toPixelCoordinates","normalizedPoints","pixelPoints","isPointInTriangle","triangle","p3","denominator","trianglesMatch","triangle1","triangle2","names1","names2","comparePointArrays","points1","points2","getBasicLineDefinitions","getBasicGemDefinitions","GEOMETRY_CONFIG","generateMockUserCourseProgress","unitsProgress","baseProgress","completedLessons","lessonsProgress","lessonIndex","completedUnits","MOCK_USER_COURSE_PROGRESS","getUserCourseProgress","courseId","getUserUnitProgress","courseProgress","getUserLessonProgress","lessonId","unitProgress","updateUserLessonProgress","getUserGradeUnitsNav","userProgress","unitsNav","up","getUnitNavItem","navData","updateUnitActiveStatus","MOCK_USER_GRADE_UNITS_NAV","MOCK_USER_GRADE_UNITS_PROGRESS","index_default"],"mappings":"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KC,CAAC,EAClB,QAAShG,KAAOiC,EAAO,CACrB,IAAIuF,EAAID,EAAOvH,CAAG,EACdyH,EAAIxF,EAAMjC,CAAG,EACb,OAAOwH,GAAM,YAAc,OAAOC,GAAM,YAC5CzH,EAAI,CAAC,IAAM,KAAOA,EAAI,CAAC,IAAM,KAAOA,EAAI,WAAW,CAAC,GACpD,IAAMA,EAAI,WAAW,CAAC,GACtB,GACEuH,EAAOvH,CAAG,EAAI6G,GAAMW,EAAGC,CAAC,GACdzH,IAAQ,aAAeA,IAAQ,qBAAuB,OAAOwH,GAAM,UAAY,OAAOC,GAAM,SACtGF,EAAOvH,CAAG,EAAI8F,GAAK0B,EAAGC,CAAC,EACdzH,IAAQ,MAAQwH,GAAKC,EAC9BF,EAAO,GAAKN,GAASO,EAAGC,CAAC,EAEzBF,EAAOvH,CAAG,EAAIyH,IAAM,OAASA,EAAID,CAErC,CACF,CACA,OAAOD,CACT,CC7YA,SAASG,IAAgB,CACvB,MAAMC,EAAY,IAAM,IAAM,CAC9B,EACA,OAAOpE,GAAM,qBACXoE,EACA,IAAM,GACN,IAAM,EACV,CACA,CCXA,IAAIC,GAA+B,IAAI,IAAI,CACzC,KACA,OACA,QACA,QACA,OACA,WACA,UACA,QACA,SACA,OACA,SACA,gBACA,YACA,SACA,kBACA,oBACA,MACA,QACA,eACA,YACA,WACA,cACA,cACA,YACA,UACA,UACA,OACA,QACA,YACA,OACA,UACA,UACA,UACA,kBACA,cACA,WACA,SACA,cACA,OACA,WACA,UACA,QACA,MACA,WACA,WACA,YACA,WACA,UACA,eACA,MACA,OACA,aACA,cACA,aACA,iBACA,aACA,cACA,UACA,SACA,OACA,OACA,WACA,YACA,OACA,YACA,QACA,SACA,WACA,UACA,YACA,WACA,OACA,QACA,OACA,OACA,OACA,WACA,MACA,YACA,QACA,aACA,SACA,MACA,YACA,WACA,QACA,OACA,aACA,OACA,UACA,UACA,OACA,cACA,SACA,UACA,aACA,iBACA,WACA,MACA,WACA,OACA,UACA,UACA,QACA,SACA,YACA,WACA,WACA,QACA,OACA,QACA,OACA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CACA,EACI,CACE,QAAS,OACT,KAAM,KACN,MAAO,CACL,QAAS,SACjB,CACA,EACI,CACE,QAAS,OACT,KAAM,KACN,MAAO,CACL,QAAS,SACjB,CACA,EACI,CACE,QAAS,OACT,KAAM,KACN,MAAO,CACL,QAAS,WACjB,CACA,EAGI,CACE,QAAS,SACT,KAAM,KACN,MAAO,CACL,QAAS,SACjB,CACA,EACI,CACE,QAAS,SACT,KAAM,KACN,MAAO,CACL,QAAS,SACjB,CACA,EACI,CACE,QAAS,SACT,KAAM,KACN,MAAO,CACL,QAAS,WACjB,CACA,EAEI,CACE,QAAS,SACT,MAAO,UACP,MAAO,CACL,QAAS,cACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,QACP,MAAO,CACL,QAAS,YACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAO,CACL,QAAS,cACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAO,CACL,QAAS,cACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,YACP,MAAO,CACL,QAAS,gBACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAO,CACL,QAAS,cACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAO,CACL,QAAS,cACjB,CACA,EACI,CACE,QAAS,SACT,MAAO,SACP,MAAO,CACL,QAAS,aACjB,CACA,CACA,CACA,CAAC,ECpSGK,GAA0B,CAC5B,oCACA,iCACA,sCACA,0CACA,4CACF,EAgBIC,GAAyB,CAC3B,WACA,UACA,WACA,mBACA,kBACF,EAEIC,GAAiC,CACnC,QAAS,CAAC,mFAAmF,EAC7F,QAAS,CAAC,mFAAmF,EAC7F,UAAW,CACT,qFACJ,EACE,QAAS,CAAC,mFAAmF,EAC7F,QAAS,CAAC,mFAAmF,EAC7F,OAAQ,CAAC,kFAAkF,CAC7F,EC7CI1yD,GAAWmyD,GACb,CACE,MAAO,CACL,KAAM,6BACN,MAAO,GACP,aAAc,uBACd,MAAO,GACP,MAAO,gEACP,UAAW,QACjB,EACI,SAAU,CACR,MAAO,CACL,QAAS,CACP,UAAW,gBACrB,EACQ,QAAS,CACP,UAAW,YACrB,EACQ,UAAW,CACT,UAAW,cACrB,EACQ,QAAS,CACP,UAAW,YACrB,EACQ,QAAS,CACP,UAAW,YACrB,EACQ,OAAQ,CACN,UAAW,WACrB,CACA,EACM,KAAM,CACJ,GAAI,CACF,MAAO,aACP,MAAO,aACP,MAAO,KACjB,EACQ,GAAI,CACF,MAAO,cACP,MAAO,cACP,MAAO,KACjB,EACQ,GAAI,CACF,MAAO,aACP,MAAO,aACP,MAAO,KACjB,CACA,EACM,OAAQ,CACN,KAAM,CACJ,MAAO,eACP,UAAW,cACrB,EACQ,GAAI,CACF,MAAO,gBACP,UAAW,eACrB,EACQ,GAAI,CACF,MAAO,iBACP,UAAW,gBACrB,EACQ,GAAI,CACF,MAAO,gBACP,UAAW,eACrB,EACQ,KAAM,CACJ,MAAO,eACP,UAAW,cACrB,CACA,EACM,UAAW,CACT,KAAM,CACJ,UAAW,2CACrB,CACA,EACM,gBAAiB,CACf,KAAM,CACJ,UAAW,CAAC,WAAY,SAAU,cAAe,2BAA2B,CACtF,CACA,EACM,WAAY,CACV,KAAM,CACJ,KAAM,qCAChB,CACA,EACM,iBAAkB,CAChB,KAAM,CAAA,EACN,MAAO,CACL,UAAW,oCACrB,CACA,CACA,EACI,gBAAiB,CACf,MAAO,UACP,KAAM,KACN,OAAQ,OACR,UAAW,GACX,gBAAiB,GACjB,WAAY,EAClB,EACI,iBAAkB,CAEhB,CACE,iBAAkB,GAClB,gBAAiB,GACjB,MAAO,CACL,UAAW,gDACrB,CACA,EACM,CACE,MAAO,UACP,UAAW,GACX,MAAO,CACL,UAAW,2CACrB,CACA,EACM,CACE,MAAO,YACP,UAAW,GACX,MAAO,CACL,UAAW,6CACrB,CACA,EACM,CACE,MAAO,UACP,UAAW,GACX,MAAO,CACL,UAAW,2CACrB,CACA,EACM,CACE,MAAO,UACP,UAAW,GACX,MAAO,CACL,UAAW,2CACrB,CACA,EACM,CACE,MAAO,SACP,UAAW,GACX,MAAO,CACL,UAAW,0CACrB,CACA,CACA,CACA,EACE,CACE,QAAS,EACb,CACA,EACuBA,GAAG,CACxB,MAAO,CACL,KAAM,4DACN,MAAO,GACP,WAAY,iBACZ,IAAK,+BACL,MAAO,+BACP,UAAW,wBACX,MAAO,+DACX,EACE,SAAU,CACR,MAAO,CACL,QAAS,CACP,IAAK,kBACb,EACM,QAAS,CACP,IAAK,cACb,EACM,UAAW,CACT,IAAK,gBACb,EACM,QAAS,CACP,IAAK,cACb,EACM,QAAS,CACP,IAAK,cACb,EACM,OAAQ,CACN,IAAK,aACb,CACA,EACI,KAAM,CACJ,GAAI,CACF,IAAK,UACL,MAAO,aACP,MAAO,eACf,EACM,GAAI,CACF,IAAK,YACL,MAAO,aACP,MAAO,gBACf,EACM,GAAI,CACF,IAAK,YACL,MAAO,cACP,MAAO,eACf,CACA,EACI,gBAAiB,CACf,KAAM,CACJ,IAAK,2BACb,CACA,EACI,WAAY,CACV,KAAM,CACJ,KAAM,qCACd,CACA,EACI,iBAAkB,CAChB,KAAM,CAAA,EACN,MAAO,CACL,UAAW,8BACnB,CACA,CACA,EACE,gBAAiB,CACf,MAAO,UACP,KAAM,KACN,WAAY,EAChB,EACE,iBAAkB,CAEhB,CACE,iBAAkB,GAClB,gBAAiB,GACjB,MAAO,CACL,IAAK,gDACb,CACA,CACA,CACA,CAAC,EC/ND,IAAIQ,GAASR,GAAG,CACd,KAAM,CACJ,MACA,QACA,WACA,cACA,eACA,iBACA,aACA,kBACA,oCACA,cACA,oBACA,YACA,cACA,uBACA,kBACA,4BACA,iDACA,iBAEA,GAAGK,EACP,EACE,SAAU,CACR,QAAS,CACP,MAAO,GACP,SAAU,+BACV,MAAO,iBACP,KAAM,GACN,MAAO,gBACP,OAAQ,GACR,MAAO,8BACb,EACI,KAAM,CACJ,GAAI,kDACJ,GAAI,qDACJ,GAAI,oDACV,EACI,MAAO,CACL,QAAS,GACT,QAAS,GACT,UAAW,GACX,QAAS,GACT,QAAS,GACT,OAAQ,EACd,EACI,OAAQ,CACN,KAAM,eACN,GAAI,gBACJ,GAAI,iBACJ,GAAI,gBACJ,KAAM,cACZ,EACI,UAAW,CACT,KAAM,QACZ,EACI,WAAY,CACV,KAAM,sCACZ,EACI,UAAW,CACT,KAAM,qDACZ,EACI,WAAY,CACV,KAAM,cACN,MAAO,kCACb,EACI,iBAAkB,CAChB,KAAM,iDACN,MAAO,mEACb,CACA,EACE,gBAAiB,CACf,KAAM,KACN,QAAS,QACT,MAAO,UACP,UAAW,GACX,WAAY,GACZ,UAAW,EACf,EACE,iBAAkB,CAEhB,CACE,QAAS,QACT,MAAO,UACP,MAAOnQ,EAAc,MAAM,OACjC,EACI,CACE,QAAS,QACT,MAAO,UACP,MAAOA,EAAc,MAAM,OACjC,EACI,CACE,QAAS,QACT,MAAO,YACP,MAAOA,EAAc,MAAM,SACjC,EACI,CACE,QAAS,QACT,MAAO,UACP,MAAOA,EAAc,MAAM,OACjC,EACI,CACE,QAAS,QACT,MAAO,UACP,MAAOA,EAAc,MAAM,OACjC,EACI,CACE,QAAS,QACT,MAAO,SACP,MAAOA,EAAc,MAAM,MACjC,EAEI,CACE,QAAS,SACT,MAAO,UACP,MAAOA,EAAc,OAAO,OAClC,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAOA,EAAc,OAAO,OAClC,EACI,CACE,QAAS,SACT,MAAO,YACP,MAAOA,EAAc,OAAO,SAClC,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAOA,EAAc,OAAO,OAClC,EACI,CACE,QAAS,SACT,MAAO,UACP,MAAOA,EAAc,OAAO,OAClC,EACI,CACE,QAAS,SACT,MAAO,SACP,MAAOA,EAAc,OAAO,MAClC,EAEI,CACE,QAAS,WACT,MAAO,UACP,MAAOA,EAAc,SAAS,OACpC,EACI,CACE,QAAS,WACT,MAAO,UACP,MAAOA,EAAc,SAAS,OACpC,EACI,CACE,QAAS,WACT,MAAO,YACP,MAAOA,EAAc,SAAS,SACpC,EACI,CACE,QAAS,WACT,MAAO,UACP,MAAOA,EAAc,SAAS,OACpC,EACI,CACE,QAAS,WACT,MAAO,UACP,MAAOA,EAAc,SAAS,OACpC,EACI,CACE,QAAS,WACT,MAAO,SACP,MAAOA,EAAc,SAAS,MACpC,EAEI,CACE,QAAS,OACT,MAAO,UACP,MAAOA,EAAc,KAAK,OAChC,EACI,CACE,QAAS,OACT,M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ACb,CACA,CACA,CAAC,EACiBP,GAAG,CACnB,KAAM,iDACN,SAAU,CACR,UAAW,CACT,KAAM,QACZ,CACA,EACE,gBAAiB,CACf,UAAW,EACf,CACA,CAAC,ECpbD,IAAIS,GAAOT,GAAG,CACZ,MAAO,CACL,KAAM,CACJ,OACA,WACA,WACA,kBACA,SACA,oCACA,kBACA,aACA,cAEA,GAAGK,EACT,EACI,OAAQ,CACN,OACA,MACA,OACA,SACA,gBACA,eACA,WACA,mBACA,gBACA,sBACN,EACI,KAAM,CACJ,WACA,OACA,SACA,SACA,MACA,YACA,WACA,wBACA,sBACA,SACA,cACA,YACA,kBACA,sBACN,EACI,OAAQ,CACN,MACA,SACA,OACA,SACA,eACA,kBACA,gBACA,sBACN,CACA,EACE,SAAU,CACR,OAAQ,CACN,KAAM,CACJ,KAAM,aACd,EACM,GAAI,CACF,KAAM,cACd,EACM,GAAI,CACF,KAAM,eACd,EACM,GAAI,CACF,KAAM,cACd,CACA,EACI,OAAQ,CACN,KAAM,CACJ,KAAM,eACN,OAAQ,eACR,OAAQ,cAChB,EACM,GAAI,CACF,KAAM,gBACN,OAAQ,kBACR,OAAQ,iBAChB,EACM,GAAI,CACF,KAAM,iBACN,OAAQ,mBACR,OAAQ,kBAChB,EACM,GAAI,CACF,KAAM,gBACN,OAAQ,kBACR,OAAQ,iBAChB,CACA,EACI,UAAW,CACT,KAAM,CACJ,KAAM,QACd,CACA,EACI,YAAa,CACX,KAAM,CACJ,KAAM,kEACd,CACA,EACI,YAAa,CACX,KAAM,CAAE,KAAM,gBAAgB,CACpC,EACI,UAAW,CACT,KAAM,CACJ,KAAM,CACJ,mBACA,wBACA,mBACA,uBACV,CACA,CACA,EACI,gBAAiB,CACf,KAAM,CACJ,OAAQ,CAAC,mBAAoB,gBAAiB,uBAAuB,CAC7E,CACA,EACI,WAAY,CACV,KAAM,CACJ,KAAM,qCACd,CACA,EACI,iBAAkB,CAChB,KAAM,GACN,MAAO,CAAE,KAAM,+DAA+D,CACpF,CACA,EACE,iBAAkB,CAChB,CACE,YAAa,GACb,MAAO,4DACb,CACA,EACE,g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","x_google_ignoreList":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,327,328,329,330,331,332,333,334,335,336,337,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,394,395,411]}
1
+ {"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/Button/Button.tsx","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../src/components/ContentAccordion/types.ts","../src/components/ContentAccordion/ContentAccordion.tsx","../src/components/Sidebar/types.ts","../src/components/Sidebar/Sidebar.tsx","../src/components/Submenu/Submenu.tsx","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../src/components/UserProfile/UserProfile.tsx","../src/components/MathWizHeader/MathWizHeader.tsx","../src/components/radarAbility/RadarChart/RadarChart.tsx","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/react.mjs","../src/services/radarAbilityService.ts","../src/store/radarAbilityStore.ts","../src/components/radarAbility/AbilityProgressBar/AbilityProgressBar.tsx","../src/components/radarAbility/PersonalizedAdvicePanel/PersonalizedAdvicePanel.tsx","../src/components/radarAbility/RecommendationCard/RecommendationCard.tsx","../src/components/radarAbility/AbilityAssessmentDashboard/AbilityAssessmentDashboard.tsx","../src/types/index.ts","../src/data/mockData.ts","../src/services/courseService.ts","../src/data/courseData.ts","../src/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.tsx","../src/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.tsx","../src/utils/geometryCore.js","../src/data/userCourseProgress.ts","../src/data/usergradeuintsnav.ts","../src/data/usergradeunitsProgressData.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from 'react';\r\nimport './Button.css';\r\nimport type { ButtonProps } from './types';\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n progress,\r\n variant = 'solid',\r\n size = 'md',\r\n radius = 'md',\r\n children,\r\n className = '',\r\n loading,\r\n ...props\r\n}) => {\r\n // Determine color based on progress\r\n const getColorClass = (progress: number): string => {\r\n if (progress === 0) return 'button--primary';\r\n if (progress === 100) return 'button--success';\r\n return 'button--secondary';\r\n };\r\n\r\n const colorClass = progress !== undefined ? getColorClass(progress) : 'button--primary';\r\n\r\n const buttonClasses = [\r\n 'button',\r\n `button--${size}`,\r\n `button--${variant}`,\r\n `button--radius-${radius}`,\r\n colorClass,\r\n loading && 'button--loading',\r\n className\r\n ].filter(Boolean).join(' ');\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={buttonClasses}\r\n data-progress={progress}\r\n disabled={loading || props.disabled}\r\n {...props}\r\n >\r\n {loading ? '加载中...' : children}\r\n </button>\r\n );\r\n};","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.541.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","// 内容手风琴组件类型定义\r\nimport type { KnowledgeItem, Lesson, Unit } from '../../types';\r\n\r\nexport interface ContentAccordionProps {\r\n /** 当前学习单元数据 */\r\n unit: Unit | null;\r\n /** 激活的课程ID列表 */\r\n activeLessonIds: string[];\r\n /** 切换课程激活状态的函数 */\r\n onToggleLesson: (lessonId: string) => void;\r\n /** 点击学习按钮的回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n /** 加载状态 */\r\n loading?: boolean;\r\n /** 自定义类名 */\r\n className?: string;\r\n /** 空状态显示内容 */\r\n emptyState?: React.ReactNode;\r\n}\r\n\r\nexport interface ContentAccordionState {\r\n /** 内部展开状态管理 */\r\n expandedLessons: Set<string>;\r\n /** 动画状态 */\r\n isAnimating: boolean;\r\n}\r\n\r\nexport interface LessonItemProps {\r\n /** 课程数据 */\r\n lesson: Lesson;\r\n /** 是否展开状态 */\r\n isExpanded: boolean;\r\n /** 切换展开状态回调 */\r\n onToggle: (lessonId: string) => void;\r\n /** 学习按钮点击回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n}\r\n\r\nexport interface KnowledgeCardProps {\r\n /** 知识点数据 */\r\n knowledgeItem: KnowledgeItem;\r\n /** 学习按钮点击回调 */\r\n onLearnAction: (knowledgeItem: KnowledgeItem) => void;\r\n}\r\n\r\n// 工具函数类型\r\nexport type GetButtonTextFn = (progress: number) => string;\r\nexport type CalculateLessonProgressFn = (knowledgeItems: KnowledgeItem[]) => number;\r\n\r\n// 进度按钮文本生成算法\r\nexport const getButtonText: GetButtonTextFn = (progress: number): string => {\r\n if (progress === 0) return '开始学习';\r\n if (progress === 100) return '复习';\r\n return '继续学习';\r\n};\r\n\r\n// 课程进度计算算法\r\nexport const calculateLessonProgress: CalculateLessonProgressFn = (knowledgeItems: KnowledgeItem[]): number => {\r\n if (knowledgeItems.length === 0) return 0;\r\n const totalProgress = knowledgeItems.reduce((sum, item) => sum + item.progress, 0);\r\n return Math.round(totalProgress / knowledgeItems.length);\r\n};","import React from 'react';\r\nimport { Progress } from '@heroui/progress';\r\nimport { Card, CardBody, CardFooter } from '@heroui/card';\r\nimport { Button } from '../Button';\r\nimport { ChevronDown, ChevronRight } from 'lucide-react';\r\nimport type { ContentAccordionProps, LessonItemProps, KnowledgeCardProps } from './types';\r\nimport { getButtonText, calculateLessonProgress } from './types';\r\nimport './ContentAccordion.css';\r\n\r\nconst KnowledgeCard: React.FC<KnowledgeCardProps> = ({ knowledgeItem, onLearnAction }) => {\r\n const handleLearnClick = () => {\r\n onLearnAction(knowledgeItem);\r\n };\r\n\r\n // 调试信息\r\n console.log('KnowledgeCard render:', {\r\n progress: knowledgeItem.progress,\r\n text: getButtonText(knowledgeItem.progress)\r\n });\r\n\r\n return (\r\n <Card className=\"content-accordion__knowledge-card\">\r\n <CardBody>\r\n <h3 className=\"content-accordion__knowledge-title\">{knowledgeItem.title}</h3>\r\n <p className=\"content-accordion__knowledge-description\">{knowledgeItem.description}</p>\r\n </CardBody>\r\n <CardFooter className=\"content-accordion__knowledge-actions\">\r\n <div className=\"content-accordion__progress-container\">\r\n <Progress\r\n value={knowledgeItem.progress}\r\n size=\"sm\"\r\n aria-label={`${knowledgeItem.title} 进度`}\r\n className=\"content-accordion__progress-bar\"\r\n />\r\n <span className=\"content-accordion__progress-text\">{knowledgeItem.progress}%</span>\r\n </div>\r\n <Button\r\n size=\"sm\"\r\n radius=\"md\"\r\n onClick={handleLearnClick}\r\n progress={knowledgeItem.progress}\r\n variant={knowledgeItem.progress === 100 ? 'light' : knowledgeItem.progress === 0 ? 'solid' : 'bordered'}\r\n className=\"content-accordion__learn-button\"\r\n >\r\n {getButtonText(knowledgeItem.progress)}\r\n </Button>\r\n </CardFooter>\r\n </Card>\r\n );\r\n};\r\n\r\nconst LessonItem: React.FC<LessonItemProps> = ({ lesson, isExpanded, onToggle, onLearnAction }) => {\r\n const handleToggle = () => {\r\n onToggle(lesson.id);\r\n };\r\n\r\n const lessonProgress = calculateLessonProgress(lesson.knowledgeItems);\r\n\r\n return (\r\n <div className={`content-accordion__lesson-item ${isExpanded ? 'content-accordion__lesson-item--expanded' : ''}`}>\r\n <div\r\n className=\"content-accordion__lesson-header\"\r\n onClick={handleToggle}\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-expanded={isExpanded}\r\n aria-label={`${lesson.title},点击${isExpanded ? '收起' : '展开'}`}\r\n >\r\n <div className=\"content-accordion__lesson-header-content\">\r\n <h2 className=\"content-accordion__lesson-title\">{lesson.title}</h2>\r\n <span className=\"content-accordion__lesson-duration\">约 {lesson.duration} 分钟</span>\r\n </div>\r\n <div className=\"content-accordion__lesson-actions\">\r\n <span className=\"content-accordion__lesson-progress\">{lessonProgress}%</span>\r\n {isExpanded ? (\r\n <ChevronDown className=\"content-accordion__lesson-icon\" />\r\n ) : (\r\n <ChevronRight className=\"content-accordion__lesson-icon\" />\r\n )}\r\n </div>\r\n </div>\r\n\r\n {isExpanded && (\r\n <div className=\"content-accordion__knowledge-list\">\r\n {lesson.knowledgeItems.map((item) => (\r\n <KnowledgeCard\r\n key={item.id}\r\n knowledgeItem={item}\r\n onLearnAction={onLearnAction}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport const ContentAccordion: React.FC<ContentAccordionProps> = ({\r\n unit,\r\n activeLessonIds,\r\n onToggleLesson,\r\n onLearnAction,\r\n loading = false,\r\n className = '',\r\n emptyState\r\n}) => {\r\n if (loading) {\r\n return (\r\n <div className=\"content-accordion content-accordion--loading\">\r\n <div className=\"content-accordion__loading\">加载中...</div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!unit) {\r\n return (\r\n <div className=\"content-accordion content-accordion--empty\">\r\n {emptyState || <div className=\"content-accordion__empty\">暂无学习内容</div>}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`content-accordion ${className}`}>\r\n {/* 单元头部信息 */}\r\n <header className=\"content-accordion__header\">\r\n <h1 className=\"content-accordion__unit-title\">{unit.title}</h1>\r\n <p className=\"content-accordion__unit-description\">{unit.description}</p>\r\n <div className=\"content-accordion__unit-meta\">\r\n <span>总共 {unit.totalLessons} 节课</span>\r\n <span>•</span>\r\n <span>预计学习 {unit.estimatedDuration}</span>\r\n </div>\r\n </header>\r\n\r\n {/* 课程列表 */}\r\n <div className=\"content-accordion__lessons\">\r\n {unit.lessons.map((lesson) => (\r\n <LessonItem\r\n key={lesson.id}\r\n lesson={lesson}\r\n isExpanded={activeLessonIds.includes(lesson.id)}\r\n onToggle={onToggleLesson}\r\n onLearnAction={onLearnAction}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};","// Sidebar 组件类型定义\r\n\r\nexport interface UnitProgressData {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsProgressData {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UnitProgressData[];\r\n}\r\n\r\nexport interface SidebarProps {\r\n // 核心数据 - 用户年级单元进度数据\r\n data: UserGradeUnitsProgressData | null;\r\n\r\n // 状态控制\r\n loading?: boolean;\r\n error?: Error | null;\r\n collapsed?: boolean;\r\n\r\n // 交互回调\r\n onToggleCollapse?: () => void;\r\n activeUnitId?: string | null;\r\n onUnitSelect?: (unitId: string) => void;\r\n\r\n // 自定义渲染\r\n renderUnitItem?: (unit: UnitProgressData, progress?: UnitProgressData) => React.ReactNode;\r\n\r\n // 样式配置\r\n className?: string;\r\n unitItemClassName?: string;\r\n style?: React.CSSProperties;\r\n unitItemStyle?: React.CSSProperties;\r\n}\r\n\r\n// 进度状态颜色映射\r\nexport const getProgressColor = (status: UnitProgressData['status']): 'success' | 'primary' | 'default' => {\r\n switch (status) {\r\n case 'completed':\r\n return 'success';\r\n case 'in-progress':\r\n return 'primary';\r\n case 'not-started':\r\n default:\r\n return 'default';\r\n }\r\n};","import React from 'react';\r\nimport { Progress } from '@heroui/react';\r\nimport type { SidebarProps, UnitProgressData } from './types';\r\nimport { getProgressColor } from './types';\r\nimport './Sidebar.css';\r\n\r\nexport const Sidebar: React.FC<SidebarProps> = ({\r\n data,\r\n loading = false,\r\n error = null,\r\n collapsed = false,\r\n onToggleCollapse,\r\n activeUnitId = null,\r\n onUnitSelect,\r\n renderUnitItem,\r\n className = '',\r\n unitItemClassName = '',\r\n style = {},\r\n unitItemStyle = {},\r\n}) => {\r\n const handleUnitSelect = (unitId: string, event: React.MouseEvent) => {\r\n event.preventDefault();\r\n onUnitSelect?.(unitId);\r\n };\r\n\r\n const handleToggleCollapse = () => {\r\n onToggleCollapse?.();\r\n };\r\n\r\n // 渲染默认单元项\r\n const renderDefaultUnitItem = (unit: UnitProgressData) => (\r\n <div\r\n key={unit.unitId}\r\n className={`sidebar__unit-item ${unitItemClassName} ${\r\n activeUnitId === unit.unitId ? 'sidebar__unit-item--active' : ''\r\n } ${unit.status ? `sidebar__unit-item--${unit.status}` : ''}`}\r\n style={unitItemStyle}\r\n onClick={(e) => handleUnitSelect(unit.unitId, e)}\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-label={`${unit.title},进度 ${unit.progressPercentage}%`}\r\n >\r\n <div className=\"sidebar__unit-item__content\">\r\n {unit.icon && (\r\n <span className=\"sidebar__unit-item__icon\">{unit.icon}</span>\r\n )}\r\n {!collapsed && (\r\n <span className=\"sidebar__unit-item__title\">{unit.title}</span>\r\n )}\r\n </div>\r\n\r\n {!collapsed && unit.progressPercentage !== undefined && (\r\n <div className=\"sidebar__unit-item__progress\">\r\n <Progress\r\n value={unit.progressPercentage}\r\n size=\"sm\"\r\n color={getProgressColor(unit.status)}\r\n aria-label={`${unit.title} 进度`}\r\n />\r\n <span className=\"progress-percentage\">\r\n {unit.progressPercentage}%\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n // 渲染状态内容\r\n const renderContent = () => {\r\n if (loading) {\r\n return (\r\n <div className=\"sidebar__loading\">\r\n 加载中...\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"sidebar__error\">\r\n 加载失败: {error.message}\r\n </div>\r\n );\r\n }\r\n\r\n if (!data) {\r\n return (\r\n <div className=\"sidebar__empty\">\r\n 暂无课程数据\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className=\"sidebar__header\">\r\n <button\r\n className=\"sidebar__toggle-btn\"\r\n onClick={handleToggleCollapse}\r\n aria-label=\"切换侧边栏折叠状态\"\r\n >\r\n {collapsed ? '→' : '←'}\r\n </button>\r\n {!collapsed && (\r\n <div className=\"sidebar__course-info\">\r\n <h3 className=\"sidebar__course-title\">{data.courseTitle}</h3>\r\n <span className=\"sidebar__course-level\">{data.courseLevel}年级</span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <nav className=\"sidebar__content\">\r\n <ul className=\"sidebar__unit-list\">\r\n {data.units && data.units.length > 0 ? (\r\n data.units.map((unit) => (\r\n <li key={unit.unitId}>\r\n {renderUnitItem\r\n ? renderUnitItem(unit, unit)\r\n : renderDefaultUnitItem(unit)}\r\n </li>\r\n ))\r\n ) : (\r\n <div className=\"sidebar__empty\">\r\n 暂无单元数据\r\n </div>\r\n )}\r\n </ul>\r\n </nav>\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <aside\r\n className={`sidebar ${className} ${collapsed ? 'sidebar--collapsed' : ''} ${\r\n loading ? 'sidebar--loading' : ''\r\n } ${error ? 'sidebar--error' : ''}`}\r\n style={style}\r\n aria-label=\"课程导航侧边栏\"\r\n role=\"complementary\"\r\n >\r\n {renderContent()}\r\n </aside>\r\n );\r\n};","import React from 'react'\r\nimport './Submenu.css'\r\n\r\nexport interface SubmenuItem {\r\n id: string | number\r\n label?: React.ReactNode\r\n value?: unknown\r\n icon?: React.ReactNode\r\n disabled?: boolean\r\n onClick?: (item: SubmenuItem) => void\r\n [key: string]: unknown\r\n}\r\n\r\nexport interface SubmenuProps {\r\n trigger: React.ReactNode\r\n items: SubmenuItem[]\r\n position?: 'top' | 'bottom' | 'left' | 'right' | 'auto'\r\n alignment?: 'start' | 'center' | 'end'\r\n openDelay?: number\r\n closeDelay?: number\r\n onOpen?: () => void\r\n onClose?: () => void\r\n renderItem?: (item: SubmenuItem, config: TItemConfig) => React.ReactNode\r\n itemConfig?: TItemConfig\r\n className?: string\r\n menuClassName?: string\r\n itemClassName?: string\r\n activeItemClassName?: string\r\n}\r\n\r\ntype TItemConfig = {\r\n currentUserRole?: 'guest' | 'student' | 'teacher' | 'admin'\r\n theme?: 'light' | 'dark'\r\n [key: string]: unknown\r\n}\r\n\r\nconst Submenu: React.FC<SubmenuProps> = ({\r\n trigger,\r\n items,\r\n position = 'bottom',\r\n alignment = 'start',\r\n openDelay = 300,\r\n closeDelay = 100,\r\n onOpen,\r\n onClose,\r\n renderItem,\r\n itemConfig = {},\r\n className,\r\n menuClassName,\r\n itemClassName,\r\n // activeItemClassName is available for custom styling but not used in default implementation\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const openTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\r\n const closeTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\r\n\r\n const clearTimeouts = () => {\r\n if (openTimeoutRef.current) {\r\n clearTimeout(openTimeoutRef.current)\r\n }\r\n if (closeTimeoutRef.current) {\r\n clearTimeout(closeTimeoutRef.current)\r\n }\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n clearTimeouts()\r\n openTimeoutRef.current = setTimeout(() => {\r\n setIsOpen(true)\r\n onOpen?.()\r\n }, openDelay)\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n clearTimeouts()\r\n closeTimeoutRef.current = setTimeout(() => {\r\n setIsOpen(false)\r\n onClose?.()\r\n }, closeDelay)\r\n }\r\n\r\n const handleItemClick = (item: SubmenuItem) => {\r\n if (!item.disabled && item.onClick) {\r\n item.onClick(item)\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n return () => clearTimeouts()\r\n }, [])\r\n\r\n const defaultRenderItem = (item: SubmenuItem) => (\r\n <div\r\n key={item.id}\r\n className={`submenu-item ${item.disabled ? 'is-disabled' : ''} ${itemClassName || ''}`}\r\n onClick={() => handleItemClick(item)}\r\n >\r\n {item.icon && <span className=\"submenu-item-icon\">{item.icon}</span>}\r\n <span>{item.label}</span>\r\n </div>\r\n )\r\n\r\n const getPanelClasses = () => {\r\n const classes = ['submenu-panel']\r\n \r\n if (menuClassName) {\r\n classes.push(menuClassName)\r\n }\r\n \r\n // Add position class\r\n classes.push(`position-${position}`)\r\n \r\n // Add alignment class if not 'start' (default)\r\n if (alignment !== 'start') {\r\n classes.push(`alignment-${alignment}`)\r\n }\r\n \r\n // Add open state class\r\n if (isOpen) {\r\n classes.push('is-open')\r\n }\r\n \r\n return classes.join(' ')\r\n }\r\n\r\n return (\r\n <div \r\n className={`submenu-container ${className || ''}`}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <div className=\"submenu-trigger\">\r\n {trigger}\r\n </div>\r\n \r\n <div className={getPanelClasses()}>\r\n {items.map(item => \r\n renderItem \r\n ? renderItem(item, itemConfig)\r\n : defaultRenderItem(item)\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Submenu","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = config ? config.env : {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters, config) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.12.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import React from 'react';\r\nimport { Avatar } from \"@heroui/react\";\r\nimport Submenu from \"../Submenu/Submenu\";\r\nimport type { SubmenuItem } from \"../Submenu/Submenu\";\r\nimport axios from \"axios\";\r\nimport type { UserData } from '../../types';\r\nimport './UserProfile.css';\r\n\r\n// 图标组件定义\r\nconst UserIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>👤</span>;\r\nconst SettingsIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>⚙️</span>;\r\nconst HelpIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>❓</span>;\r\nconst LogoutIcon = () => <span style={{ marginRight: 8, fontSize: '1.2em' }}>🚪</span>;\r\n\r\n// API 配置类型\r\nexport interface ApiConfig {\r\n baseURL: string;\r\n endpoints: {\r\n userProfile: string;\r\n };\r\n headers?: Record<string, string>;\r\n}\r\n\r\n\r\n// 默认菜单项配置\r\nconst DEFAULT_MENU_ITEMS: SubmenuItem[] = [\r\n { id: 'profile', label: '个人主页', icon: <UserIcon /> },\r\n { id: 'settings', label: '设置', icon: <SettingsIcon /> },\r\n { id: 'help', label: '帮助', icon: <HelpIcon /> },\r\n { id: 'logout', label: '退出', icon: <LogoutIcon /> }\r\n];\r\n\r\nexport interface UserProfileProps {\r\n // 用户数据配置\r\n userId?: string;\r\n userName?: string;\r\n userAvatar?: string;\r\n \r\n // API 配置\r\n apiConfig?: ApiConfig;\r\n \r\n // 菜单配置\r\n menuItems?: SubmenuItem[];\r\n \r\n // 样式配置\r\n avatarSize?: 'sm' | 'md' | 'lg';\r\n avatarClassName?: string;\r\n userNameClassName?: string;\r\n containerClassName?: string;\r\n \r\n // 状态控制\r\n isLoading?: boolean;\r\n error?: Error | null;\r\n \r\n // 事件回调\r\n onMenuOpen?: () => void;\r\n onMenuClose?: () => void;\r\n onMenuItemClick?: (itemId: string) => void;\r\n onLogout?: () => void;\r\n \r\n // 定制化渲染\r\n renderMenuItem?: (item: SubmenuItem, userData: UserData) => React.ReactNode;\r\n renderUserInfo?: (userData: UserData) => React.ReactNode;\r\n}\r\n\r\nconst UserProfile: React.FC<UserProfileProps> = ({\r\n userId,\r\n userName: initialUserName,\r\n userAvatar: initialUserAvatar,\r\n apiConfig,\r\n menuItems = DEFAULT_MENU_ITEMS,\r\n avatarSize = 'md',\r\n isLoading = false,\r\n error = null,\r\n avatarClassName,\r\n userNameClassName,\r\n containerClassName,\r\n onMenuOpen,\r\n onMenuClose,\r\n onMenuItemClick,\r\n onLogout,\r\n renderMenuItem,\r\n renderUserInfo\r\n}) => {\r\n const [userData, setUserData] = React.useState<UserData>({\r\n id: userId || '',\r\n name: initialUserName || '',\r\n avatar: initialUserAvatar || '',\r\n level: 0,\r\n badges: []\r\n });\r\n \r\n const [loading, setLoading] = React.useState(isLoading);\r\n const [errorState, setErrorState] = React.useState<Error | null>(error);\r\n\r\n // 数据获取逻辑\r\n React.useEffect(() => {\r\n if (userId && apiConfig && !initialUserName && !initialUserAvatar) {\r\n fetchUserData();\r\n }\r\n }, [userId, apiConfig, initialUserName, initialUserAvatar]);\r\n\r\n const fetchUserData = async () => {\r\n setLoading(true);\r\n setErrorState(null);\r\n \r\n try {\r\n const endpoint = apiConfig!.endpoints.userProfile.replace(':userId', userId!);\r\n const response = await axios.get(`${apiConfig!.baseURL}${endpoint}`, {\r\n headers: apiConfig!.headers\r\n });\r\n \r\n setUserData(response.data);\r\n } catch (err) {\r\n setErrorState(err as Error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // 处理菜单项点击\r\n const handleMenuItemClick = (item: SubmenuItem) => {\r\n onMenuItemClick?.(item.id as string);\r\n \r\n if (item.id === 'logout') {\r\n onLogout?.();\r\n }\r\n };\r\n\r\n // 处理菜单打开\r\n const handleMenuOpen = () => {\r\n onMenuOpen?.();\r\n };\r\n\r\n // 处理菜单关闭\r\n const handleMenuClose = () => {\r\n onMenuClose?.();\r\n };\r\n\r\n // 渲染用户信息区域\r\n const renderDefaultUserInfo = () => (\r\n <div className=\"user-profile-trigger\">\r\n <Avatar\r\n src={userData.avatar}\r\n size={avatarSize}\r\n className={avatarClassName}\r\n alt=\"用户头像\"\r\n />\r\n <span className={`user-name ${userNameClassName || ''}`}>\r\n {userData.name}\r\n </span>\r\n </div>\r\n );\r\n\r\n // 渲染默认菜单项\r\n const renderDefaultMenuItem = (item: SubmenuItem) => (\r\n <div\r\n key={item.id}\r\n className=\"submenu-item\"\r\n onClick={() => handleMenuItemClick(item)}\r\n >\r\n {item.icon && <span className=\"submenu-item-icon\">{item.icon}</span>}\r\n <span>{item.label}</span>\r\n </div>\r\n );\r\n\r\n if (loading) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''} is-loading`}>\r\n <div className=\"user-profile-loading\">加载中...</div>\r\n </div>\r\n );\r\n }\r\n\r\n if (errorState) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''} has-error`}>\r\n <div className=\"user-profile-error\">\r\n 错误: {errorState.message}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (!userData.name) {\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''}`}>\r\n <div className=\"user-profile-loading\">未登录</div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={`user-profile-container ${containerClassName || ''}`}>\r\n <Submenu\r\n trigger={renderUserInfo ? renderUserInfo(userData) : renderDefaultUserInfo()}\r\n items={menuItems.map(item => ({\r\n ...item,\r\n onClick: () => handleMenuItemClick(item)\r\n }))}\r\n position=\"bottom\"\r\n alignment=\"end\"\r\n onOpen={handleMenuOpen}\r\n onClose={handleMenuClose}\r\n renderItem={renderMenuItem ? (item) => renderMenuItem(item, userData) : undefined}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserProfile;","import React from 'react';\r\nimport Submenu from '../Submenu/Submenu';\r\nimport UserProfile from '../UserProfile/UserProfile';\r\nimport type { SubmenuItem } from '../Submenu/Submenu';\r\nimport type { MathWizHeaderProps, ExploreItem } from './MathWizHeader.types';\r\nimport './MathWizHeader.css';\r\n\r\n// 默认探索菜单项渲染函数\r\nconst defaultRenderExploreItem = (item: ExploreItem) => (\r\n <div\r\n key={item.id}\r\n className=\"explore-menu-item\"\r\n onClick={() => item.onClick?.(item)}\r\n >\r\n <span className=\"explore-item-label\">{item.label}</span>\r\n {item.status && (\r\n <span className={`explore-item-status status-${item.status.toLowerCase().replace('%', '').replace(' ', '-')}`}>\r\n {item.status}\r\n </span>\r\n )}\r\n </div>\r\n);\r\n\r\n// 默认探索菜单触发器\r\nconst ExploreTrigger = () => (\r\n <button className=\"explore-button\" aria-label=\"探索数学课程\">\r\n <span className=\"explore-icon\">🌍</span>\r\n <span className=\"explore-text\">探索</span>\r\n </button>\r\n);\r\n\r\nconst MathWizHeader: React.FC<MathWizHeaderProps> = ({\r\n // 通用Props\r\n className = '',\r\n style,\r\n logoHref = '/',\r\n logoText = 'MathWiz',\r\n onLogoClick,\r\n\r\n // 探索菜单Props\r\n exploreItems = [],\r\n exploreMenuOpen = false,\r\n onExploreMenuToggle,\r\n onExploreItemClick,\r\n renderExploreItem = defaultRenderExploreItem,\r\n\r\n // 用户资料Props\r\n userData,\r\n userMenuItems,\r\n onUserMenuItemClick,\r\n onLogout,\r\n\r\n // 状态控制Props\r\n isLoading = false,\r\n error = null,\r\n\r\n // 样式定制Props\r\n headerClassName = '',\r\n logoClassName = '',\r\n exploreClassName = '',\r\n userProfileClassName = '',\r\n\r\n // 无障碍访问Props\r\n 'aria-label': ariaLabel,\r\n 'aria-labelledby': ariaLabelledBy,\r\n\r\n ...restProps\r\n}) => {\r\n // 准备探索菜单项数据 - 纯数据转换,无业务逻辑\r\n const preparedExploreItems: SubmenuItem[] = exploreItems.map(item => ({\r\n id: item.id,\r\n label: renderExploreItem(item),\r\n onClick: () => onExploreItemClick?.(item)\r\n }));\r\n\r\n return (\r\n <header\r\n className={`mathwiz-header site-header ${headerClassName} ${className}`}\r\n style={style}\r\n aria-label={ariaLabel}\r\n aria-labelledby={ariaLabelledBy}\r\n role=\"banner\"\r\n {...restProps}\r\n >\r\n <div className=\"header-content\">\r\n {/* 左侧:探索菜单 */}\r\n <div className=\"header-section left\">\r\n <Submenu\r\n trigger={<ExploreTrigger />}\r\n items={preparedExploreItems}\r\n position=\"bottom\"\r\n alignment=\"start\"\r\n openDelay={300}\r\n closeDelay={100}\r\n onOpen={() => onExploreMenuToggle?.(true)}\r\n onClose={() => onExploreMenuToggle?.(false)}\r\n className={`explore-submenu ${exploreClassName}`}\r\n menuClassName=\"explore-panel\"\r\n />\r\n </div>\r\n\r\n {/* 中间:Logo */}\r\n <div className=\"header-section center\">\r\n <a\r\n href={logoHref}\r\n className={`logo ${logoClassName}`}\r\n onClick={onLogoClick}\r\n aria-label=\"MathWiz 首页\"\r\n >\r\n {logoText}\r\n </a>\r\n </div>\r\n\r\n {/* 右侧:用户资料 */}\r\n <div className=\"header-section right\">\r\n <UserProfile\r\n userName={userData?.name}\r\n userAvatar={userData?.avatar}\r\n menuItems={userMenuItems}\r\n onMenuItemClick={onUserMenuItemClick}\r\n onLogout={onLogout}\r\n containerClassName={userProfileClassName}\r\n isLoading={isLoading}\r\n error={error}\r\n />\r\n </div>\r\n </div>\r\n </header>\r\n );\r\n};\r\n\r\n// 使用 React.memo 优化性能,避免不必要的重渲染\r\nexport default React.memo(MathWizHeader, (prevProps, nextProps) => {\r\n // 自定义比较函数,只在相关props变化时重渲染\r\n return (\r\n prevProps.logoText === nextProps.logoText &&\r\n prevProps.logoHref === nextProps.logoHref &&\r\n prevProps.className === nextProps.className &&\r\n prevProps.headerClassName === nextProps.headerClassName &&\r\n prevProps.logoClassName === nextProps.logoClassName &&\r\n prevProps.exploreClassName === nextProps.exploreClassName &&\r\n prevProps.userProfileClassName === nextProps.userProfileClassName &&\r\n prevProps['aria-label'] === nextProps['aria-label'] &&\r\n prevProps['aria-labelledby'] === nextProps['aria-labelledby'] &&\r\n prevProps.isLoading === nextProps.isLoading &&\r\n prevProps.error === nextProps.error &&\r\n // 深度比较数组\r\n JSON.stringify(prevProps.exploreItems) === JSON.stringify(nextProps.exploreItems) &&\r\n // 深度比较对象\r\n JSON.stringify(prevProps.userData) === JSON.stringify(nextProps.userData) &&\r\n JSON.stringify(prevProps.userMenuItems) === JSON.stringify(nextProps.userMenuItems)\r\n );\r\n});","import React from 'react';\r\nimport type { RadarChartProps } from '../../../types/radarAbility';\r\n\r\nconst RadarChart: React.FC<RadarChartProps> = ({ \r\n abilities, \r\n width = 400, \r\n height = 400 \r\n}) => {\r\n // 计算雷达图的数据点\r\n const calculateRadarPoints = () => {\r\n if (abilities.length === 0) return '';\r\n \r\n return abilities\r\n .map(ability => {\r\n // 使用预定义的SVG坐标点,如果没有则动态计算\r\n if (ability.svgPoint) {\r\n return `${ability.svgPoint.x},${ability.svgPoint.y}`;\r\n }\r\n \r\n // 动态计算坐标(基于能力和分数)\r\n const angle = (Math.PI * 2 * abilities.indexOf(ability)) / abilities.length;\r\n const radius = (ability.score / ability.maxScore) * 40 + 10; // 10-50范围\r\n const x = 50 + radius * Math.sin(angle);\r\n const y = 50 - radius * Math.cos(angle);\r\n \r\n return `${x},${y}`;\r\n })\r\n .join(' ');\r\n };\r\n\r\n // 计算轴线端点\r\n const calculateAxisEndPoints = (index: number) => {\r\n const angle = (Math.PI * 2 * index) / Math.max(abilities.length, 1);\r\n const x2 = 50 + 40 * Math.sin(angle);\r\n const y2 = 50 - 40 * Math.cos(angle);\r\n return { x2, y2 };\r\n };\r\n\r\n // 计算标签位置\r\n const calculateLabelPosition = (index: number) => {\r\n const angle = (Math.PI * 2 * index) / Math.max(abilities.length, 1);\r\n const x = 50 + 45 * Math.sin(angle);\r\n const y = 50 - 45 * Math.cos(angle);\r\n \r\n // 根据角度调整文本锚点\r\n let textAnchor = 'middle';\r\n if (angle > Math.PI * 0.25 && angle < Math.PI * 0.75) textAnchor = 'start';\r\n if (angle > Math.PI * 1.25 && angle < Math.PI * 1.75) textAnchor = 'end';\r\n \r\n return { x, y, textAnchor };\r\n };\r\n\r\n return (\r\n <svg \r\n data-testid=\"radar-chart\"\r\n width={width} \r\n height={height} \r\n viewBox=\"0 0 100 100\" \r\n className=\"w-full h-full\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n {/* 中心点 */}\r\n <circle \r\n data-testid=\"center-point\"\r\n cx=\"50\" \r\n cy=\"50\" \r\n r=\"1\" \r\n fill=\"#4A90E2\" \r\n />\r\n\r\n {/* 轴线 */}\r\n {abilities.map((_, index) => {\r\n const { x2, y2 } = calculateAxisEndPoints(index);\r\n return (\r\n <line\r\n key={`axis-${index}`}\r\n data-testid=\"axis-line\"\r\n x1=\"50\"\r\n y1=\"50\"\r\n x2={x2}\r\n y2={y2}\r\n stroke=\"#E2E8F0\"\r\n strokeWidth=\"0.5\"\r\n />\r\n );\r\n })}\r\n\r\n {/* 雷达多边形 */}\r\n {abilities.length > 2 && (\r\n <polygon\r\n data-testid=\"radar-polygon\"\r\n points={calculateRadarPoints()}\r\n fill=\"rgba(74, 144, 226, 0.2)\"\r\n stroke=\"rgb(74, 144, 226)\"\r\n strokeWidth=\"1\"\r\n fillRule=\"evenodd\"\r\n />\r\n )}\r\n\r\n {/* 数据点 */}\r\n {abilities.map((ability, index) => {\r\n let x, y;\r\n \r\n if (ability.svgPoint) {\r\n x = ability.svgPoint.x;\r\n y = ability.svgPoint.y;\r\n } else {\r\n const angle = (Math.PI * 2 * index) / abilities.length;\r\n const radius = (ability.score / ability.maxScore) * 40 + 10;\r\n x = 50 + radius * Math.sin(angle);\r\n y = 50 - radius * Math.cos(angle);\r\n }\r\n \r\n return (\r\n <circle\r\n key={`point-${ability.name}`}\r\n data-testid=\"data-point\"\r\n cx={x}\r\n cy={y}\r\n r=\"2\"\r\n fill={ability.progressBarColor === 'bg-orange-400' ? '#FBBF24' : '#4A90E2'}\r\n />\r\n );\r\n })}\r\n\r\n {/* 能力标签 */}\r\n {abilities.map((ability, index) => {\r\n const { x, y, textAnchor } = calculateLabelPosition(index);\r\n \r\n return (\r\n <text\r\n key={`label-${ability.name}`}\r\n x={x}\r\n y={y}\r\n textAnchor={textAnchor as any}\r\n fontSize=\"5\"\r\n fill=\"#334155\"\r\n className=\"text-xs\"\r\n >\r\n {ability.name}\r\n </text>\r\n );\r\n })}\r\n </svg>\r\n );\r\n};\r\n\r\nexport default RadarChart;","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import axios from 'axios';\r\nimport type { RadarAbilityData } from '../types/radarAbility';\r\n\r\n// 模拟数据 - 在实际应用中会从API获取\r\nexport const mockRadarAbilityData: RadarAbilityData = {\r\n overallRating: '优秀',\r\n generalRecommendation: '你的空间想象力和逻辑推理能力非常出色!若能进一步提升在复杂图形下的专注力,你将所向披靡。建议尝试我们‘专注力挑战’系列游戏。',\r\n abilities: [\r\n {\r\n name: '空间想象力',\r\n score: 7.5,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 50, y: 17.5 },\r\n recommendation: '通过观察三维物体在不同角度的投影,或尝试构建复杂结构的游戏,能有效提升空间想象力。',\r\n recommendationLink: '#spatial-challenges'\r\n },\r\n {\r\n name: '逻辑推理',\r\n score: 8.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 82, y: 35 },\r\n recommendation: '解决数独、迷宫或逻辑谜题,能够持续锻炼你的逻辑思维,尝试挑战更高难度的推理游戏。',\r\n recommendationLink: '#logic-puzzles'\r\n },\r\n {\r\n name: '图形辨识',\r\n score: 9.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 85, y: 65 },\r\n recommendation: '你在这方面表现出色!可以尝试在更复杂、干扰因素更多的图形中进行辨识训练,保持敏锐。',\r\n recommendationLink: '#graphic-training'\r\n },\r\n {\r\n name: '专注力',\r\n score: 7.0,\r\n maxScore: 10,\r\n progressBarColor: 'bg-orange-400',\r\n svgPoint: { x: 50, y: 80 },\r\n recommendation: '在长时间的游戏中保持专注对你来说是一个挑战,建议尝试我们‘专注力挑战’系列游戏,逐渐延长专注时间。',\r\n recommendationLink: '#focus-challenges'\r\n },\r\n {\r\n name: '观察力',\r\n score: 8.5,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 15, y: 65 },\r\n recommendation: '你的观察力非常敏锐,在细节发现上尤为突出。尝试在限时模式下进行观察力训练,提高反应速度。',\r\n recommendationLink: '#observation-drills'\r\n },\r\n {\r\n name: '抗压性',\r\n score: 7.8,\r\n maxScore: 10,\r\n progressBarColor: 'bg-blue-500',\r\n svgPoint: { x: 18, y: 35 },\r\n recommendation: '面对高压挑战时,保持冷静是关键。通过模拟竞赛或限时任务来提升抗压能力,逐步适应压力。',\r\n recommendationLink: '#stress-games'\r\n }\r\n ]\r\n};\r\n\r\nexport class RadarAbilityService {\r\n private static readonly API_BASE_URL = '/api/radar-ability';\r\n\r\n static async fetchRadarAbilityData(): Promise<RadarAbilityData> {\r\n try {\r\n // 在测试环境中使用mock数据,避免真实API调用\r\n if (process.env.NODE_ENV === 'test') {\r\n // 测试环境使用mock数据\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n return mockRadarAbilityData;\r\n } else {\r\n // 开发和生产环境调用真实API\r\n const response = await axios.get<RadarAbilityData>(`${this.API_BASE_URL}/assessment`);\r\n return response.data;\r\n }\r\n } catch (error) {\r\n console.error('Failed to fetch radar ability data:', error);\r\n // 在测试环境中抛出错误以便测试错误处理\r\n if (process.env.NODE_ENV === 'test') {\r\n throw new Error('获取能力评估数据失败');\r\n }\r\n // 开发和生产环境返回mock数据作为fallback\r\n return mockRadarAbilityData;\r\n }\r\n }\r\n\r\n static async submitFeedback(feedback: {\r\n abilityName: string;\r\n rating: number;\r\n comment: string;\r\n }): Promise<void> {\r\n try {\r\n // 模拟API调用\r\n await axios.post(`${this.API_BASE_URL}/feedback`, feedback);\r\n } catch (error) {\r\n console.error('Failed to submit feedback:', error);\r\n throw new Error('提交反馈失败');\r\n }\r\n }\r\n}","import { create } from 'zustand';\r\nimport type { RadarAbilityData } from '../types/radarAbility';\r\nimport { RadarAbilityService } from '../services/radarAbilityService';\r\n\r\ninterface RadarAbilityState {\r\n data: RadarAbilityData | null;\r\n loading: boolean;\r\n error: string | null;\r\n fetchData: () => Promise<void>;\r\n setData: (data: RadarAbilityData) => void;\r\n setError: (error: string) => void;\r\n reset: () => void;\r\n}\r\n\r\nexport const useRadarAbilityStore = create<RadarAbilityState>((set, get) => ({\r\n data: null,\r\n loading: false,\r\n error: null,\r\n\r\n fetchData: async () => {\r\n // Don't fetch if already loading\r\n if (get().loading) return;\r\n\r\n set({ loading: true, error: null });\r\n\r\n try {\r\n const radarData = await RadarAbilityService.fetchRadarAbilityData();\r\n set({ data: radarData, loading: false });\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : '获取数据失败';\r\n set({ error: errorMessage, loading: false });\r\n }\r\n },\r\n\r\n setData: (data: RadarAbilityData) => {\r\n set({ data, error: null, loading: false });\r\n },\r\n\r\n setError: (error: string) => {\r\n set({ error, loading: false });\r\n },\r\n\r\n reset: () => {\r\n set({ data: null, loading: false, error: null });\r\n }\r\n}));","import React from 'react';\r\nimport type { AbilityProgressBarProps } from '../../../types/radarAbility';\r\n\r\nconst AbilityProgressBar: React.FC<AbilityProgressBarProps> = ({ ability }) => {\r\n const percentage = (ability.score / ability.maxScore) * 100;\r\n \r\n return (\r\n <div \r\n className=\"ability-progress-bar-item\" \r\n data-ability={ability.name}\r\n data-testid=\"progress-bar-container\"\r\n >\r\n <div className=\"flex justify-between text-sm mb-1\">\r\n <span className=\"text-gray-700 font-medium\">{ability.name}</span>\r\n <span className=\"text-gray-600\">\r\n {ability.score}/{ability.maxScore}\r\n </span>\r\n </div>\r\n \r\n <div \r\n className=\"w-full bg-gray-200 rounded-full h-2.5\"\r\n data-testid=\"progress-bar-outer\"\r\n >\r\n <div \r\n className={`${ability.progressBarColor} h-2.5 rounded-full transition-all duration-300`}\r\n style={{ width: `${percentage}%` }}\r\n data-testid=\"progress-bar-inner\"\r\n role=\"progressbar\"\r\n aria-valuenow={ability.score}\r\n aria-valuemin={0}\r\n aria-valuemax={ability.maxScore}\r\n aria-label={`${ability.name} progress: ${ability.score} out of ${ability.maxScore}`}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AbilityProgressBar;","import React from 'react';\r\nimport type { PersonalizedAdvicePanelProps } from '../../../types/radarAbility';\r\n\r\nconst PersonalizedAdvicePanel: React.FC<PersonalizedAdvicePanelProps> = ({ \r\n generalRecommendation \r\n}) => {\r\n return (\r\n <div \r\n className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\"\r\n data-testid=\"advice-panel\"\r\n role=\"region\"\r\n aria-label=\"个性化建议\"\r\n >\r\n <div className=\"flex items-start\">\r\n <div className=\"flex-shrink-0\">\r\n <i \r\n className=\"material-icons text-blue-500\"\r\n data-testid=\"lightbulb-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n lightbulb\r\n </i>\r\n </div>\r\n \r\n <div className=\"ml-3\">\r\n <h3 \r\n className=\"text-md font-semibold text-blue-800\"\r\n aria-level={3}\r\n >\r\n 个性化建议\r\n </h3>\r\n \r\n <p \r\n className=\"text-sm text-blue-700 mt-1\"\r\n data-testid=\"recommendation-text\"\r\n >\r\n {generalRecommendation}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PersonalizedAdvicePanel;","import React from 'react';\r\nimport { Card, CardBody, Button } from '@heroui/react';\r\nimport { ArrowRight } from 'lucide-react';\r\nimport type { RecommendationCardProps } from '../../../types/radarAbility';\r\n\r\nconst RecommendationCard: React.FC<RecommendationCardProps> = ({ ability, customLinkTexts = {} }) => {\r\n // 根据能力名称生成对应的链接文本,支持自定义映射\r\n const getLinkText = (abilityName: string) => {\r\n const defaultLinkTexts: Record<string, string> = {\r\n '空间想象力': '探索空间挑战',\r\n '逻辑推理': '深入逻辑谜题',\r\n '图形辨识': '精进图形训练',\r\n '专注力': '挑战专注极限',\r\n '观察力': '提升观察速度',\r\n '抗压性': '磨砺抗压意志'\r\n };\r\n \r\n // 优先使用自定义链接文本,如果没有则使用默认值\r\n return customLinkTexts[abilityName] || defaultLinkTexts[abilityName] || '开始挑战';\r\n };\r\n\r\n return (\r\n <Card \r\n className=\"recommendation-card w-full max-w-sm hover:shadow-lg transition-all duration-300\"\r\n data-ability={ability.name}\r\n data-testid=\"recommendation-card\"\r\n isHoverable\r\n isPressable\r\n >\r\n <CardBody className=\"p-5\">\r\n <div className=\"flex flex-col gap-3\">\r\n <h4 \r\n className=\"text-lg font-semibold text-foreground\"\r\n aria-level={4}\r\n >\r\n {ability.name}: 专项提高\r\n </h4>\r\n \r\n <p \r\n className=\"text-sm text-default-600 leading-relaxed\"\r\n data-testid=\"recommendation-description\"\r\n >\r\n {ability.recommendation}\r\n </p>\r\n \r\n <Button\r\n as=\"a\"\r\n href={ability.recommendationLink}\r\n className=\"mt-2 w-fit\"\r\n size=\"sm\"\r\n variant=\"flat\"\r\n color=\"primary\"\r\n endContent={<ArrowRight className=\"w-4 h-4\" />}\r\n data-testid=\"recommendation-link\"\r\n aria-label={`前往${ability.name}专项提高页面`}\r\n >\r\n {getLinkText(ability.name)}\r\n </Button>\r\n </div>\r\n </CardBody>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default RecommendationCard;","import React, { useEffect } from 'react';\r\nimport { useRadarAbilityStore } from '../../../store/radarAbilityStore';\r\nimport RadarChart from '../RadarChart/RadarChart';\r\nimport AbilityProgressBar from '../AbilityProgressBar/AbilityProgressBar';\r\nimport PersonalizedAdvicePanel from '../PersonalizedAdvicePanel/PersonalizedAdvicePanel';\r\nimport RecommendationCard from '../RecommendationCard/RecommendationCard';\r\nimport styles from './AbilityAssessmentDashboard.module.css';\r\n\r\nconst AbilityAssessmentDashboard: React.FC = () => {\r\n const { data, loading, error, fetchData } = useRadarAbilityStore();\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [fetchData]);\r\n\r\n if (loading) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 flex items-center justify-center\"\r\n data-testid=\"loading-spinner\"\r\n >\r\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500\"></div>\r\n <span className=\"ml-3 text-gray-600\">加载中...</span>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 text-center\"\r\n role=\"alert\"\r\n aria-live=\"assertive\"\r\n >\r\n <div className=\"text-red-500 mb-4\">\r\n <i \r\n className=\"material-icons text-4xl\"\r\n aria-hidden=\"true\"\r\n >\r\n error_outline\r\n </i>\r\n </div>\r\n <h3 className=\"text-lg font-semibold text-gray-800 mb-2\">加载失败</h3>\r\n <p className=\"text-gray-600 mb-4\">{error}</p>\r\n <button\r\n onClick={fetchData}\r\n className=\"bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\"\r\n aria-label=\"重试加载数据\"\r\n >\r\n 重试\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n if (!data) {\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 text-center\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n <p className=\"text-gray-600\">暂无数据</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div \r\n className=\"card max-w-4xl mx-auto p-6 md:p-8 animate-fade-in\"\r\n data-component=\"AbilityAssessmentDashboard\"\r\n role=\"main\"\r\n aria-label=\"能力评估雷达图展示\"\r\n >\r\n {/* 头部标题和评级 */}\r\n <div className=\"flex justify-between items-center mb-6\">\r\n <h2 className=\"text-xl font-bold text-gray-800\">能力评估雷达图</h2>\r\n <span \r\n className=\"bg-blue-100 text-blue-800 text-sm font-semibold px-2.5 py-0.5 rounded-full\"\r\n aria-label={`综合评级: ${data.overallRating}`}\r\n >\r\n 综合评级: {data.overallRating}\r\n </span>\r\n </div>\r\n\r\n {/* 主要内容区域 - 上下布局 3:2 */}\r\n <div className={styles.dashboardLayout}>\r\n {/* 上部容器: 能力雷达展示视图 (3/5 高度) */}\r\n <div className={styles.upperSection}>\r\n {/* 左边: 雷达图 */}\r\n <div className={styles.radarChartArea}>\r\n <RadarChart abilities={data.abilities} />\r\n </div>\r\n\r\n {/* 右边: 进度条列表 */}\r\n <div className=\"space-y-4 flex flex-col justify-around py-2\">\r\n {data.abilities.map(ability => (\r\n <AbilityProgressBar \r\n key={ability.name} \r\n ability={ability} \r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 下部容器: 个性化推荐视图 (2/5 高度) */}\r\n <div className={styles.lowerSection}>\r\n {/* 通用个性化建议面板 */}\r\n <PersonalizedAdvicePanel \r\n generalRecommendation={data.generalRecommendation} \r\n />\r\n\r\n {/* 专项提升建议 */}\r\n <h3 className=\"text-lg font-bold text-gray-800 mb-4 mt-6\">\r\n 专项提升建议\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {data.abilities.map(ability => (\r\n <RecommendationCard \r\n key={ability.name} \r\n ability={ability} \r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AbilityAssessmentDashboard;","// 课程数据类型定义\r\nexport interface KnowledgeItem {\r\n id: string;\r\n title: string;\r\n description: string;\r\n progress: number;\r\n contentUrl: string;\r\n status?: 'mastered' | 'proficient' | 'familiar' | 'attempted' | 'not-started';\r\n}\r\n\r\nexport interface Lesson {\r\n id: string;\r\n title: string;\r\n duration: number;\r\n knowledgeItems: KnowledgeItem[];\r\n}\r\n\r\nexport interface Unit {\r\n id: string;\r\n title: string;\r\n description: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n moduleCategory: string;\r\n lessons: Lesson[];\r\n}\r\n\r\nexport interface CourseData {\r\n id: string;\r\n title: string;\r\n level: number;\r\n subject: string;\r\n units: Unit[];\r\n}\r\n\r\n// 用户数据类型\r\nexport interface UserData {\r\n id: string;\r\n name: string;\r\n level: number;\r\n avatar: string;\r\n badges: string[];\r\n}\r\n\r\n// 探索菜单项\r\nexport interface ExploreItem {\r\n id: string;\r\n label: string;\r\n status: string;\r\n}\r\n\r\n// 单元进度类型\r\nexport interface UnitProgress {\r\n unitId: string;\r\n title: string;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n totalLessons: number;\r\n completedLessons: number;\r\n lastAccessed?: string;\r\n}\r\n\r\n// 状态管理类型\r\nexport interface AppState {\r\n currentUnitId: string | null;\r\n currentLessonId: string | null;\r\n currentKnowledgeId: string | null;\r\n sidebarCollapsed: boolean;\r\n exploreMenuOpen: boolean;\r\n activeLessonIds: string[];\r\n \r\n // Actions\r\n setCurrentUnit: (unitId: string) => void;\r\n setCurrentLesson: (lessonId: string) => void;\r\n setCurrentKnowledge: (knowledgeId: string) => void;\r\n toggleSidebar: () => void;\r\n toggleExploreMenu: (open?: boolean) => void;\r\n toggleLessonActive: (lessonId: string) => void;\r\n}\r\n\r\n// 图标映射\r\nexport const categoryIcons: Record<string, string> = {\r\n \"Arithmetic and Algebra\": \"🔢\",\r\n \"Graphics and Geometry\": \"📐\",\r\n \"Probability and Statistics\": \"📊\",\r\n \"Default\": \"📚\"\r\n};\r\n\r\n// 状态映射\r\nexport const statusMapping: Record<string, string> = {\r\n 'mastered': '已掌握',\r\n 'proficient': '熟练',\r\n 'familiar': '熟悉',\r\n 'attempted': '已尝试',\r\n 'not-started': '未开始'\r\n};\r\n\r\nexport const statusColors: Record<string, string> = {\r\n 'mastered': '#10b981',\r\n 'proficient': '#3b82f6',\r\n 'familiar': '#f59e0b',\r\n 'attempted': '#8b5cf6',\r\n 'not-started': '#6b7280'\r\n};","// 单一数据源 - 所有模拟数据集中管理\r\n// 这是整个应用的唯一mock数据来源,确保数据一致性\r\n\r\nexport const MOCK_USER_DATA = {\r\n id: 'user-001',\r\n name: '小明',\r\n level: 5,\r\n avatar: 'https://i.pravatar.cc/40?u=student1',\r\n logIn: true,\r\n badges: ['🏆', '🏅', '🌟']\r\n};\r\n\r\nexport const MOCK_EXPLORE_ITEMS = [\r\n { id: 'g3', label: '三年级', status: 'new', onClick: () => console.log('三年级 clicked') },\r\n { id: 'g4', label: '四年级', status: '2%', onClick: () => console.log('四年级 clicked') },\r\n { id: 'g5', label: '五年级', status: '进行中', onClick: () => console.log('五年级 clicked') },\r\n { id: 'g6', label: '六年级', status: 'new', onClick: () => console.log('六年级 clicked') },\r\n { id: 'g7', label: '七年级', status: 'new', onClick: () => console.log('七年级 clicked') },\r\n { id: 'g8', label: '八年级', status: 'new', onClick: () => console.log('八年级 clicked') },\r\n { id: 'alg_topic', label: '代数专题', status: 'new', onClick: () => console.log('代数专题 clicked') },\r\n { id: 'calc_topic', label: '计算专题', status: 'new', onClick: () => console.log('计算专题 clicked') },\r\n { id: 'geo_topic', label: '几何专题', status: 'new', onClick: () => console.log('几何专题 clicked') },\r\n { id: 'olym_topic', label: '奥数专题', status: 'new', onClick: () => console.log('奥数专题 clicked') }\r\n];\r\n\r\n// JWT token (API专用)\r\nexport const MOCK_JWT_TOKEN = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyLTAwMSIsIm5hbWUiOiLlsI_mmI4iLCJsZXZlbCI6NSwiYXZhdGFyIjoiaHR0cHM6Ly9pLnByYXZhdGFyLmNjLzQwP3U9c3R1ZGVudDEiLCJiYWRnZXMiOlsi8J-SoiIsIvCfjZUiLCLwn5KbIl0sImlhdCI6MTY5MTYwMDAwMCwiZXhwIjoxNzIzMTM2MDAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";","import type { CourseData, UnitProgress } from '../types';\r\nimport { MOCK_JWT_TOKEN } from '../data/mockData';\r\n\r\nexport interface UserGradeUnitsNav {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: Array<{\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n }>;\r\n}\r\n\r\nexport interface BatchLessonProgressUpdate {\r\n lessonId: string;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n progress?: number;\r\n}\r\n\r\nclass CourseService {\r\n private baseURL: string;\r\n private token: string;\r\n\r\n constructor(baseURL: string = '/api', token: string = MOCK_JWT_TOKEN) {\r\n this.baseURL = baseURL;\r\n this.token = token;\r\n }\r\n\r\n private getAuthHeaders(): HeadersInit {\r\n return {\r\n 'Authorization': `Bearer ${this.token}`,\r\n 'Content-Type': 'application/json'\r\n };\r\n }\r\n\r\n private async fetchWithAuth(url: string, options: RequestInit = {}): Promise<Response> {\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n ...this.getAuthHeaders(),\r\n ...options.headers\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n // 获取课程数据\r\n async getCourseData(courseId: string): Promise<CourseData> {\r\n const response = await this.fetchWithAuth(`${this.baseURL}/courses/${courseId}`);\r\n return response.json();\r\n }\r\n\r\n // 获取用户年级单元导航数据(包含所有单元进度)\r\n async getUserGradeUnitsNav(gradeId?: string): Promise<UserGradeUnitsNav> {\r\n const url = gradeId\r\n ? `${this.baseURL}/user/grade/units/nav?gradeId=${encodeURIComponent(gradeId)}`\r\n : `${this.baseURL}/user/grade/units/nav`;\r\n\r\n const response = await this.fetchWithAuth(url);\r\n return response.json();\r\n }\r\n\r\n // 获取单元进度\r\n async getUnitProgress(courseId: string, unitId?: string): Promise<Record<string, UnitProgress>> {\r\n const url = unitId\r\n ? `${this.baseURL}/courses/${courseId}/units/${unitId}/progress`\r\n : `${this.baseURL}/courses/${courseId}/progress`;\r\n\r\n const response = await this.fetchWithAuth(url);\r\n return response.json();\r\n }\r\n\r\n // 批量更新单元课时进度\r\n async batchUpdateLessonProgress(\r\n unitId: string,\r\n progressUpdates: BatchLessonProgressUpdate[]\r\n ): Promise<{ success: boolean; results: Array<{ lessonId: string; success: boolean; status: string }> }> {\r\n const response = await this.fetchWithAuth(\r\n `${this.baseURL}/user/units/${unitId}/progress/batch`,\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(progressUpdates)\r\n }\r\n );\r\n\r\n return response.json();\r\n }\r\n\r\n // 更新学习进度(单个课时)\r\n async updateLessonProgress(\r\n courseId: string,\r\n unitId: string,\r\n lessonId: string,\r\n status: 'completed' | 'in-progress' | 'not-started'\r\n ): Promise<void> {\r\n await this.fetchWithAuth(\r\n `${this.baseURL}/courses/${courseId}/units/${unitId}/lessons/${lessonId}/progress`,\r\n {\r\n method: 'POST',\r\n body: JSON.stringify({ status })\r\n }\r\n );\r\n }\r\n\r\n // 设置认证token\r\n setToken(token: string): void {\r\n this.token = token;\r\n }\r\n\r\n // 获取当前token\r\n getToken(): string {\r\n return this.token;\r\n }\r\n}\r\n\r\n// 单例模式导出\r\nexport const courseService = new CourseService();","import type { CourseData } from '../types';\r\n\r\nexport const courseData: CourseData = {\r\n \"id\": \"g5\",\r\n \"title\": \"小学数学五年级\",\r\n \"level\": 5,\r\n \"subject\": \"数学\",\r\n \"units\": [\r\n {\r\n \"id\": \"unit_1\",\r\n \"title\": \"小数乘法\",\r\n \"description\": \"学习小数乘法的计算方法及应用\",\r\n \"estimatedDuration\": \"3周\",\r\n \"totalLessons\": 10,\r\n \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit1_lesson1\", \"title\": \"小数乘整数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson1_k1\", \"title\": \"小数乘整数的意义\", \"description\": \"理解小数乘整数的意义与整数乘法相同\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson1_k2\", \"title\": \"小数乘整数的计算方法\", \"description\": \"掌握小数乘整数的计算方法:先按整数乘法计算,再看因数中有几位小数,就从积的右边起数出几位点上小数点\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson2\", \"title\": \"小数乘小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson2_k1\", \"title\": \"小数乘小数的计算方法\", \"description\": \"掌握小数乘小数的计算方法:先按整数乘法算出积,再给积点上小数点\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson2_k2\", \"title\": \"积的小数位数确定\", \"description\": \"理解积的小数位数等于两个因数的小数位数之和\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson3\", \"title\": \"积的近似数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson3_k1\", \"title\": \"用\\\"四舍五入\\\"法求积的近似数\", \"description\": \"掌握用\\\"四舍五入\\\"法求积的近似数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson4\", \"title\": \"整数乘法运算定律推广到小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson4_k1\", \"title\": \"乘法运算定律在小数中的适用性\", \"description\": \"理解整数乘法运算定律对于小数乘法同样适用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit1_lesson4_k2\", \"title\": \"运用运算定律进行简便计算\", \"description\": \"能运用乘法运算定律进行小数乘法的简便计算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit1_lesson5\", \"title\": \"解决问题\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit1_lesson5_k1\", \"title\": \"用小数乘法解决实际问题\", \"description\": \"能运用小数乘法解决购物、面积计算等实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_2\", \"title\": \"小数除法\", \"description\": \"学习小数除法的计算方法及应用\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit2_lesson1\", \"title\": \"小数除以整数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson1_k1\", \"title\": \"小数除以整数的计算方法\", \"description\": \"掌握小数除以整数的计算方法:按照整数除法的方法计算,商的小数点要与被除数的小数点对齐\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson2\", \"title\": \"一个数除以小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson2_k1\", \"title\": \"除数是小数的除法计算方法\", \"description\": \"掌握除数是小数的除法计算方法:利用商不变的性质,将除数转化为整数\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson3\", \"title\": \"商的近似数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson3_k1\", \"title\": \"用\\\"四舍五入\\\"法求商的近似数\", \"description\": \"掌握用\\\"四舍五入\\\"法求商的近似数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson4\", \"title\": \"循环小数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson4_k1\", \"title\": \"循环小数的概念\", \"description\": \"理解循环小数的概念,认识循环节\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit2_lesson4_k2\", \"title\": \"循环小数的表示方法\", \"description\": \"掌握循环小数的简便表示方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson5\", \"title\": \"用计算器探索规律\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson5_k1\", \"title\": \"用计算器计算小数除法\", \"description\": \"会用计算器计算较复杂的小数除法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit2_lesson5_k2\", \"title\": \"发现商的变化规律\", \"description\": \"能借助计算器发现商的变化规律\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit2_lesson6\", \"title\": \"解决问题\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit2_lesson6_k1\", \"title\": \"用小数除法解决实际问题\", \"description\": \"能运用小数除法解决购物、分配等实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_3\", \"title\": \"简易方程\", \"description\": \"学习用字母表示数和解简易方程\", \"estimatedDuration\": \"4周\", \"totalLessons\": 14, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit3_lesson1\", \"title\": \"用字母表示数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson1_k1\", \"title\": \"用字母表示数\", \"description\": \"初步理解用字母表示数的意义和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit3_lesson1_k2\", \"title\": \"用字母表示运算定律和计算公式\", \"description\": \"会用字母表示运算定律和计算公式\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson2\", \"title\": \"方程的意义\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson2_k1\", \"title\": \"方程的概念\", \"description\": \"理解方程的意义,知道方程与等式的区别和联系\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson3\", \"title\": \"等式的性质\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson3_k1\", \"title\": \"等式的性质1\", \"description\": \"理解等式的性质1:等式两边加上或减去同一个数,左右两边仍然相等\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit3_lesson3_k2\", \"title\": \"等式的性质2\", \"description\": \"理解等式的性质2:等式两边乘同一个数,或除以同一个不为0的数,左右两边仍然相等\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson4\", \"title\": \"解简易方程\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson4_k1\", \"title\": \"利用等式的性质解方程\", \"description\": \"会利用等式的性质解形如x±a=b、ax=b、x÷a=b、a-x=b、a÷x=b的方程\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit3_lesson5\", \"title\": \"实际问题与方程\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit3_lesson5_k1\", \"title\": \"列方程解决实际问题\", \"description\": \"初步学会列方程解决一些简单的实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_4\", \"title\": \"多边形的面积\", \"description\": \"学习平行四边形、三角形、梯形和组合图形的面积计算\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Graphics and Geometry\",\r\n \"lessons\": [\r\n { \"id\": \"unit4_lesson1\", \"title\": \"平行四边形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson1_k1\", \"title\": \"平行四边形面积公式的推导\", \"description\": \"通过割补法理解平行四边形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson1_k2\", \"title\": \"平行四边形面积的计算\", \"description\": \"掌握平行四边形面积计算公式:S=ah,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson2\", \"title\": \"三角形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson2_k1\", \"title\": \"三角形面积公式的推导\", \"description\": \"通过拼摆法理解三角形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson2_k2\", \"title\": \"三角形面积的计算\", \"description\": \"掌握三角形面积计算公式:S=ah÷2,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson3\", \"title\": \"梯形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson3_k1\", \"title\": \"梯形面积公式的推导\", \"description\": \"通过拼摆法理解梯形面积公式的推导过程\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson3_k2\", \"title\": \"梯形面积的计算\", \"description\": \"掌握梯形面积计算公式:S=(a+b)h÷2,并能正确运用\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit4_lesson4\", \"title\": \"组合图形的面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit4_lesson4_k1\", \"title\": \"认识组合图形\", \"description\": \"认识组合图形,会把组合图形分解成已学过的平面图形\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit4_lesson4_k2\", \"title\": \"计算组合图形的面积\", \"description\": \"掌握计算组合图形面积的多种方法\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_5\", \"title\": \"因数与倍数\", \"description\": \"学习因数、倍数、质数、合数等概念\", \"estimatedDuration\": \"3周\", \"totalLessons\": 10, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit5_lesson1\", \"title\": \"因数和倍数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson1_k1\", \"title\": \"因数和倍数的意义\", \"description\": \"理解因数和倍数的意义,掌握找一个数的因数和倍数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson1_k2\", \"title\": \"因数和倍数的特征\", \"description\": \"了解一个数的因数的个数是有限的,倍数的个数是无限的\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit5_lesson2\", \"title\": \"2、5、3的倍数的特征\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson2_k1\", \"title\": \"2、5的倍数的特征\", \"description\": \"掌握2、5的倍数的特征,理解奇数和偶数的意义\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson2_k2\", \"title\": \"3的倍数的特征\", \"description\": \"掌握3的倍数的特征,能判断一个数是不是3的倍数\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit5_lesson3\", \"title\": \"质数和合数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit5_lesson3_k1\", \"title\": \"质数和合数的意义\", \"description\": \"理解质数和合数的意义,能判断一个数是质数还是合数\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit5_lesson3_k2\", \"title\": \"制作100以内的质数表\", \"description\": \"会制作100以内的质数表,熟记20以内的质数\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_6\", \"title\": \"长方体和正方体\", \"description\": \"学习长方体和正方体的特征、表面积和体积计算\", \"estimatedDuration\": \"4周\", \"totalLessons\": 14, \"moduleCategory\": \"Graphics and Geometry\",\r\n \"lessons\": [\r\n { \"id\": \"unit6_lesson1\", \"title\": \"长方体和正方体的认识\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson1_k1\", \"title\": \"长方体的特征\", \"description\": \"认识长方体的特征,了解长方体的长、宽、高\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson1_k2\", \"title\": \"正方体的特征\", \"description\": \"认识正方体的特征,理解正方体是特殊的长方体\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson2\", \"title\": \"长方体和正方体的表面积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson2_k1\", \"title\": \"表面积的意义\", \"description\": \"理解表面积的意义,掌握长方体和正方体表面积的计算方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson2_k2\", \"title\": \"表面积的实际应用\", \"description\": \"能运用表面积知识解决一些实际问题\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson3\", \"title\": \"长方体和正方体的体积\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson3_k1\", \"title\": \"体积和体积单位\", \"description\": \"理解体积的意义,认识常用的体积单位\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson3_k2\", \"title\": \"长方体和正方体体积的计算\", \"description\": \"掌握长方体和正方体体积的计算公式\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson3_k3\", \"title\": \"体积单位间的进率\", \"description\": \"掌握体积单位之间的进率和换算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit6_lesson4\", \"title\": \"容积和容积单位\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit6_lesson4_k1\", \"title\": \"容积和容积单位\", \"description\": \"理解容积的意义,认识常用的容积单位\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit6_lesson4_k2\", \"title\": \"容积和体积的关系\", \"description\": \"掌握容积和体积之间的关系\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_7\", \"title\": \"分数的意义和性质\", \"description\": \"学习分数的意义、性质和约分、通分等方法\", \"estimatedDuration\": \"4周\", \"totalLessons\": 16, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit7_lesson1\", \"title\": \"分数的意义\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson1_k1\", \"title\": \"分数的产生和意义\", \"description\": \"理解分数的产生和意义,明确分数与除法的关系\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson1_k2\", \"title\": \"分数单位\", \"description\": \"认识分数单位,能说出一个分数中有几个这样的分数单位\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson2\", \"title\": \"分数与除法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson2_k1\", \"title\": \"分数与除法的关系\", \"description\": \"理解分数与除法的关系,会用分数表示两个数相除的商\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson3\", \"title\": \"真分数和假分数\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson3_k1\", \"title\": \"真分数和假分数的意义\", \"description\": \"理解真分数和假分数的意义和特征\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson3_k2\", \"title\": \"带分数\", \"description\": \"认识带分数,会进行假分数与整数、带分数的互化\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson4\", \"title\": \"分数的基本性质\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson4_k1\", \"title\": \"分数的基本性质\", \"description\": \"理解分数的基本性质,能运用分数的基本性质进行分数的变形\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson5\", \"title\": \"约分\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson5_k1\", \"title\": \"最大公因数\", \"description\": \"理解公因数和最大公因数的意义,掌握求两个数的最大公因数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson5_k2\", \"title\": \"约分的方法\", \"description\": \"掌握约分的方法,能正确地进行约分\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson6\", \"title\": \"通分\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson6_k1\", \"title\": \"最小公倍数\", \"description\": \"理解公倍数和最小公倍数的意义,掌握求两个数的最小公倍数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson6_k2\", \"title\": \"通分的方法\", \"description\": \"掌握通分的方法,能正确地进行通分\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit7_lesson7\", \"title\": \"分数和小数的互化\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit7_lesson7_k1\", \"title\": \"分数化成小数\", \"description\": \"掌握分数化成小数的方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit7_lesson7_k2\", \"title\": \"小数化成分数\", \"description\": \"掌握小数化成分数的方法\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_8\", \"title\": \"分数的加法和减法\", \"description\": \"学习同分母分数、异分母分数的加法和减法\", \"estimatedDuration\": \"3周\", \"totalLessons\": 12, \"moduleCategory\": \"Arithmetic and Algebra\",\r\n \"lessons\": [\r\n { \"id\": \"unit8_lesson1\", \"title\": \"同分母分数加、减法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson1_k1\", \"title\": \"同分母分数加法的计算方法\", \"description\": \"掌握同分母分数加法的计算方法\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson1_k2\", \"title\": \"同分母分数减法的计算方法\", \"description\": \"掌握同分母分数减法的计算方法\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit8_lesson2\", \"title\": \"异分母分数加、减法\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson2_k1\", \"title\": \"异分母分数加法的计算方法\", \"description\": \"掌握异分母分数加法的计算方法:先通分,然后按照同分母分数加法进行计算\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson2_k2\", \"title\": \"异分母分数减法的计算方法\", \"description\": \"掌握异分母分数减法的计算方法:先通分,然后按照同分母分数减法进行计算\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit8_lesson3\", \"title\": \"分数加减混合运算\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit8_lesson3_k1\", \"title\": \"分数加减混合运算的顺序\", \"description\": \"掌握分数加减混合运算的运算顺序\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit8_lesson3_k2\", \"title\": \"整数加法运算定律推广到分数加法\", \"description\": \"理解整数加法运算定律对于分数加法同样适用,能运用运算定律进行简便计算\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n },\r\n {\r\n \"id\": \"unit_9\", \"title\": \"折线统计图\", \"description\": \"学习单式折线统计图和复式折线统计图的认识和制作\", \"estimatedDuration\": \"2周\", \"totalLessons\": 6, \"moduleCategory\": \"Probability and Statistics\",\r\n \"lessons\": [\r\n { \"id\": \"unit9_lesson1\", \"title\": \"单式折线统计图\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson1_k1\", \"title\": \"单式折线统计图的特点\", \"description\": \"认识单式折线统计图,了解其特点和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit9_lesson1_k2\", \"title\": \"绘制单式折线统计图\", \"description\": \"能根据数据绘制单式折线统计图\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit9_lesson2\", \"title\": \"复式折线统计图\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson2_k1\", \"title\": \"复式折线统计图的特点\", \"description\": \"认识复式折线统计图,了解其特点和作用\", \"progress\": 0, \"contentUrl\": \"\" }, { \"id\": \"unit9_lesson2_k2\", \"title\": \"绘制复式折线统计图\", \"description\": \"能根据数据绘制复式折线统计图\", \"progress\": 0, \"contentUrl\": \"\" } ] },\r\n { \"id\": \"unit9_lesson3\", \"title\": \"数据分析\", \"duration\": 40, \"knowledgeItems\": [ { \"id\": \"unit9_lesson3_k1\", \"title\": \"根据统计图进行数据分析\", \"description\": \"能根据折线统计图进行简单的数据分析,作出合理的判断和预测\", \"progress\": 0, \"contentUrl\": \"\" } ] }\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nimport { MOCK_USER_DATA, MOCK_EXPLORE_ITEMS } from './mockData';\r\n\r\n// 从单一数据源导入,确保数据一致性\r\nexport const exploreItems = MOCK_EXPLORE_ITEMS;\r\nexport const userData = MOCK_USER_DATA;","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\r\nimport type { UserData, Lesson } from '../../types';\r\nimport { categoryIcons } from '../../types';\r\nimport type { ExploreItem } from '../../components/MathWizHeader/MathWizHeader.types';\r\nimport type { UserGradeUnitsProgressData } from '../../components/Sidebar/types';\r\nimport type { GradeUnitBrowserContextType } from './types';\r\nimport { courseService } from '../../services/courseService';\r\nimport { courseData } from '../../data/courseData';\r\n\r\n// 创建 Context\r\nexport const GradeUnitBrowserContext = createContext<GradeUnitBrowserContextType | null>(null);\r\n\r\nexport const useGradeUnitBrowser = () => {\r\n const context = useContext(GradeUnitBrowserContext);\r\n if (!context) {\r\n throw new Error('useGradeUnitBrowser must be used within GradeUnitBrowserProvider');\r\n }\r\n return context;\r\n};\r\n\r\n// Context Provider 组件\r\nexport const GradeUnitBrowserProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [userInfo, setUserInfo] = useState<UserData | null>(null);\r\n const [exploreMenu, setExploreMenu] = useState<ExploreItem[]>([]);\r\n const [unitsData, setUnitsData] = useState<UserGradeUnitsProgressData | null>(null);\r\n const [lessons, setLessons] = useState<Record<string, Lesson[]>>({});\r\n const [loading, setLoading] = useState<boolean>(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [activeUnitId, setActiveUnitId] = useState<string | null>(null);\r\n const [activeLessonIds, setActiveLessonIds] = useState<string[]>([]);\r\n\r\n const loadPageData = useCallback(async (gradeId: string, userId: string) => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n // 添加短暂延迟确保MSW已初始化\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n\r\n try {\r\n // 调用API获取数据\r\n console.log('Attempting to fetch units data from API...');\r\n console.log('API URL will be:', `/api/user/grade/units/nav?gradeId=${gradeId}`);\r\n console.log('Using token:', courseService.getToken());\r\n const unitsData = await courseService.getUserGradeUnitsNav(gradeId);\r\n console.log('API call successful, units data:', unitsData);\r\n setUnitsData(unitsData);\r\n console.log('unitsData:', unitsData);\r\n } catch (error) {\r\n const err = error as Error;\r\n console.error('🚨 MSW API 请求失败 - 详细调试信息:');\r\n console.error('📡 请求 URL:', `/api/user/grade/units/nav?gradeId=${gradeId}`);\r\n console.error('🔑 使用 Token:', courseService.getToken());\r\n console.error('❌ 错误信息:', err.message);\r\n console.error('📝 错误类型:', err.name);\r\n console.error('🔍 错误堆栈:', err.stack);\r\n\r\n // 设置详细的错误信息用于显示\r\n setError(`MSW API 请求失败: ${err.message} - 请检查浏览器控制台获取详细信息`);\r\n // 如果API调用失败,使用courseData.ts中的完整数据作为fallback\r\n const mockUnitsData = {\r\n userId: userId,\r\n courseId: 'g5',\r\n courseTitle: '小学数学五年级',\r\n courseLevel: 5,\r\n totalUnits: courseData.units.length,\r\n completedUnits: 2,\r\n overallProgress: 22,\r\n status: 'in-progress' as const,\r\n lastAccessed: new Date().toISOString(),\r\n units: courseData.units.map((unit, index) => ({\r\n unitId: unit.id,\r\n title: unit.title,\r\n description: unit.description,\r\n moduleCategory: unit.moduleCategory,\r\n estimatedDuration: unit.estimatedDuration,\r\n totalLessons: unit.lessons.length,\r\n completedLessons: index < 2 ? Math.floor(unit.lessons.length * 0.5) : 0,\r\n progressPercentage: index < 2 ? 50 : 0,\r\n status: index < 2 ? 'in-progress' as const : 'not-started' as const,\r\n lastAccessed: index < 2 ? new Date().toISOString() : undefined,\r\n isActive: index === 0,\r\n route: `/math/grade-5/unit/${unit.id}`,\r\n icon: categoryIcons[unit.moduleCategory] || categoryIcons.Default\r\n }))\r\n };\r\n setUnitsData(mockUnitsData);\r\n console.log('Using courseData.ts as fallback:', mockUnitsData);\r\n }\r\n\r\n // 设置课程数据(从本地课程数据中获取)\r\n const lessonsData: Record<string, Lesson[]> = {};\r\n courseData.units.forEach(unit => {\r\n lessonsData[unit.id] = unit.lessons.map(lesson => ({\r\n id: lesson.id,\r\n title: lesson.title,\r\n duration: lesson.duration,\r\n knowledgeItems: lesson.knowledgeItems.map(item => ({\r\n ...item,\r\n progress: 0 // 添加默认进度值\r\n }))\r\n }));\r\n });\r\n console.log('Lessons data loaded:', lessonsData);\r\n setLessons(lessonsData);\r\n\r\n // 默认单元选择将在状态更新后执行(在 useEffect 中)\r\n\r\n // 调试日志\r\n console.log('unitsData:', unitsData);\r\n console.log('unitsData.units:', unitsData?.units);\r\n console.log('First unit isActive:', unitsData?.units?.[0]?.isActive);\r\n console.log('First unit unitId:', unitsData?.units?.[0]?.unitId);\r\n console.log('Lessons data keys:', Object.keys(lessonsData));\r\n console.log('Lessons for unit_1:', lessonsData['unit_1']);\r\n\r\n // 设置用户信息(这里应该从API获取,暂时使用模拟数据)\r\n setUserInfo({\r\n id: userId,\r\n name: '学生用户',\r\n level: 5,\r\n avatar: 'https://i.pravatar.cc/40',\r\n badges: ['🏆']\r\n });\r\n\r\n // 设置探索菜单(这里应该从API获取,暂时使用模拟数据)\r\n setExploreMenu([\r\n { id: 'g5', label: '五年级', status: '进行中' },\r\n { id: 'g6', label: '六年级', status: 'new' }\r\n ]);\r\n\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : '数据加载失败');\r\n console.error('数据加载错误:', err);\r\n console.error('API call error details:', err);\r\n console.log('gradeId parameter:', gradeId);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const toggleLesson = useCallback((lessonId: string) => {\r\n setActiveLessonIds(prev =>\r\n prev.includes(lessonId)\r\n ? prev.filter(id => id !== lessonId)\r\n : [...prev, lessonId]\r\n );\r\n }, []);\r\n\r\n // 包装setActiveUnit函数,接受unitId参数(可为null)\r\n const setActiveUnit = useCallback((unitId: string | null) => {\r\n setActiveUnitId(unitId);\r\n }, []);\r\n\r\n // 状态更新后执行默认单元选择\r\n useEffect(() => {\r\n console.log('unitsData state updated:', unitsData);\r\n\r\n if (unitsData && unitsData.units.length > 0) {\r\n const defaultActiveUnit = unitsData.units.find(unit => unit.isActive)?.unitId ||\r\n unitsData.units[0].unitId;\r\n setActiveUnitId(defaultActiveUnit);\r\n console.log('Default active unit set after state update:', defaultActiveUnit);\r\n }\r\n }, [unitsData]);\r\n\r\n const contextValue: GradeUnitBrowserContextType = {\r\n // 数据状态\r\n userInfo,\r\n exploreMenu,\r\n unitsData,\r\n lessons,\r\n\r\n // UI状态\r\n loading,\r\n error,\r\n activeUnitId,\r\n activeLessonIds,\r\n\r\n // Actions\r\n setLoading,\r\n setError,\r\n setActiveUnit,\r\n toggleLesson,\r\n loadPageData\r\n };\r\n\r\n return (\r\n <GradeUnitBrowserContext.Provider value={contextValue}>\r\n {children}\r\n </GradeUnitBrowserContext.Provider>\r\n );\r\n};","import React, { useEffect } from 'react';\r\nimport MathWizHeader from '../../components/MathWizHeader/MathWizHeader';\r\nimport { Sidebar } from '../../components/Sidebar/Sidebar';\r\nimport { ContentAccordion } from '../../components/ContentAccordion/ContentAccordion';\r\nimport { useGradeUnitBrowser } from './GradeUnitBrowserContext';\r\nimport type { GradeUnitBrowserPageProps } from './types';\r\nimport './GradeUnitBrowserPage.css';\r\n\r\n// 主页面组件\r\nexport const GradeUnitBrowserPage: React.FC<GradeUnitBrowserPageProps> = ({\r\n gradeId,\r\n userId,\r\n onLearnAction,\r\n className,\r\n userInfo: propUserInfo,\r\n exploreMenu: propExploreMenu\r\n}) => {\r\n const {\r\n userInfo: contextUserInfo,\r\n exploreMenu: contextExploreMenu,\r\n unitsData,\r\n lessons,\r\n loading,\r\n error,\r\n activeUnitId,\r\n activeLessonIds,\r\n setActiveUnit,\r\n toggleLesson,\r\n loadPageData\r\n } = useGradeUnitBrowser();\r\n\r\n // 使用props中的值或context中的值\r\n const userInfo = propUserInfo ?? contextUserInfo;\r\n const exploreMenu = propExploreMenu ?? contextExploreMenu;\r\n\r\n useEffect(() => {\r\n loadPageData(gradeId, userId);\r\n }, [gradeId, userId, loadPageData]);\r\n\r\n // 调试日志\r\n useEffect(() => {\r\n console.log('activeUnitId from context:', activeUnitId);\r\n console.log('lessons from context:', lessons);\r\n\r\n // 重新计算 activeUnit 用于调试\r\n const activeUnitNav = unitsData?.units?.find(unit => unit.unitId === activeUnitId) || null;\r\n const debugActiveUnit = activeUnitNav && activeUnitId && lessons[activeUnitId] ? {\r\n id: activeUnitNav.unitId,\r\n title: activeUnitNav.title,\r\n description: activeUnitNav.description,\r\n estimatedDuration: activeUnitNav.estimatedDuration,\r\n totalLessons: activeUnitNav.totalLessons,\r\n moduleCategory: activeUnitNav.moduleCategory,\r\n lessons: lessons[activeUnitId]\r\n } : null;\r\n\r\n console.log('activeUnit computed:', debugActiveUnit);\r\n }, [activeUnitId, lessons, unitsData]);\r\n\r\n // 获取当前激活的单元\r\n const activeUnitNav = unitsData?.units?.find(unit => unit.unitId === activeUnitId) || null;\r\n\r\n // 获取完整的单元数据(包含课程和知识点)\r\n const activeUnit = activeUnitNav && activeUnitId && lessons[activeUnitId] ? {\r\n id: activeUnitNav.unitId,\r\n title: activeUnitNav.title,\r\n description: activeUnitNav.description,\r\n estimatedDuration: activeUnitNav.estimatedDuration,\r\n totalLessons: activeUnitNav.totalLessons,\r\n moduleCategory: activeUnitNav.moduleCategory,\r\n lessons: lessons[activeUnitId]\r\n } : null;\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"grade-unit-browser-page loading\" data-testid=\"grade-unit-browser-page\">\r\n <div className=\"loading-spinner\" data-testid=\"loading-spinner\">\r\n 加载中...\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"grade-unit-browser-page error\" data-testid=\"grade-unit-browser-page\">\r\n <div className=\"error-message\" data-testid=\"error-message\">\r\n {error}\r\n </div>\r\n <button\r\n onClick={() => loadPageData(gradeId, userId)}\r\n className=\"retry-button\"\r\n >\r\n 重试\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={`grade-unit-browser-page ${className || ''}`}\r\n data-testid=\"grade-unit-browser-page\"\r\n >\r\n {/* Header 区域 */}\r\n <div className=\"header-area\">\r\n <MathWizHeader\r\n userData={userInfo || undefined}\r\n exploreItems={exploreMenu}\r\n />\r\n </div>\r\n\r\n {/* Sidebar 区域 */}\r\n <div className=\"sidebar-area\">\r\n <Sidebar\r\n data={unitsData}\r\n activeUnitId={activeUnitId}\r\n onUnitSelect={setActiveUnit}\r\n loading={loading}\r\n />\r\n </div>\r\n\r\n {/* 主内容区域 */}\r\n <div className=\"content-area\">\r\n <ContentAccordion\r\n unit={activeUnit}\r\n activeLessonIds={activeLessonIds}\r\n onToggleLesson={toggleLesson}\r\n onLearnAction={onLearnAction || (() => { })}\r\n loading={loading}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};","/**\r\n * 几何核心工具函数 \r\n * 专注于三角形寻宝游戏的几何计算、坐标处理和三角形验证\r\n */\r\n\r\n// ==================== 基础几何计算 ====================\r\n\r\n/**\r\n * 计算线段上指定比例的点\r\n * @param {Object} p1 - 起点 {x, y}\r\n * @param {Object} p2 - 终点 {x, y}\r\n * @param {number} ratio - 比例 (0-1)\r\n * @returns {Object} 计算出的点 {x, y}\r\n */\r\nexport const pointOnLine = (p1, p2, ratio) => ({\r\n x: p1.x + (p2.x - p1.x) * ratio,\r\n y: p1.y + (p2.y - p1.y) * ratio\r\n});\r\n\r\n\r\n// ==================== 几何数据导入 ====================\r\n\r\n/**\r\n * 🔧 架构修复:从单一数据源导入几何数据\r\n * \r\n * ✅ 职责:提供纯工具函数 (符合utils层职责)\r\n * \r\n * 数据源:\r\n * - 统一从 data/geometryDefinitions.js 获取\r\n * - 实现真正的单一数据源架构\r\n * - 支持依赖注入和数据源切换\r\n */\r\n\r\n/**\r\n * 计算标准化的三角形分割点坐标 - 重构版本\r\n */\r\nexport const calculateGamePoints = () => {\r\n\r\n // 基础三角形顶点(归一化坐标)\r\n const A = { x: 0.5, y: 0.1, name: 'A' };\r\n const B = { x: 0.1, y: 0.75, name: 'B' };\r\n const C = { x: 0.9, y: 0.75, name: 'C' };\r\n\r\n // 第一层分割线(距离顶点A的1/3处)\r\n const D = { ...pointOnLine(A, B, 1 / 3), name: 'D' };\r\n const E = { ...pointOnLine(A, C, 1 / 3), name: 'E' };\r\n\r\n // 第二层分割线(距离顶点A的2/3处)\r\n const M = { ...pointOnLine(A, B, 2 / 3), name: 'M' };\r\n const N = { ...pointOnLine(A, C, 2 / 3), name: 'N' };\r\n\r\n // 底边BC上的分割点\r\n const P = { ...pointOnLine(B, C, 1 / 3), name: 'P' };\r\n const Q = { ...pointOnLine(B, C, 2 / 3), name: 'Q' };\r\n\r\n // DE线上的分割点\r\n const U = { ...pointOnLine(D, E, 1 / 3), name: 'U' };\r\n const S = { ...pointOnLine(D, E, 2 / 3), name: 'S' };\r\n\r\n // MN线上的分割点\r\n const K = { ...pointOnLine(M, N, 1 / 3), name: 'K' };\r\n const L = { ...pointOnLine(M, N, 2 / 3), name: 'L' };\r\n\r\n return { A, B, C, D, E, M, N, P, Q, U, S, K, L };\r\n};\r\n\r\n/**\r\n * 将归一化坐标转换为绝对像素坐标\r\n * @param {Object} normalizedPoints - 归一化坐标点集\r\n * @param {number} width - 画布宽度\r\n * @param {number} height - 画布高度\r\n * @returns {Object} 绝对坐标点集\r\n */\r\nexport const toPixelCoordinates = (normalizedPoints, width, height) => {\r\n const pixelPoints = {};\r\n\r\n for (const [name, point] of Object.entries(normalizedPoints)) {\r\n pixelPoints[name] = {\r\n ...point,\r\n x: point.x * width,\r\n y: point.y * height\r\n };\r\n }\r\n\r\n return pixelPoints;\r\n};\r\n\r\n\r\n\r\n/**\r\n * 使用重心坐标判断点是否在三角形内 - 来自 gameUtils.js\r\n * @param {Object} point - 待检测的点 {x, y}\r\n * @param {Array} triangle - 三角形的三个顶点\r\n * @returns {boolean} 点是否在三角形内\r\n */\r\nexport const isPointInTriangle = (point, triangle) => {\r\n const [p1, p2, p3] = triangle;\r\n const { x, y } = point;\r\n\r\n // 使用重心坐标系\r\n const denominator = ((p2.y - p3.y) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.y - p3.y));\r\n\r\n if (Math.abs(denominator) < 0.0001) return false; // 退化三角形\r\n\r\n const a = ((p2.y - p3.y) * (x - p3.x) + (p3.x - p2.x) * (y - p3.y)) / denominator;\r\n const b = ((p3.y - p1.y) * (x - p3.x) + (p1.x - p3.x) * (y - p3.y)) / denominator;\r\n const c = 1 - a - b;\r\n\r\n // 点在三角形内当且仅当所有重心坐标都非负\r\n return a >= -0.001 && b >= -0.001 && c >= -0.001;\r\n};\r\n\r\n/**\r\n * 检查两个三角形是否匹配 (顶点相同,顺序可能不同) - 来自 gameUtils.js\r\n * @param {Array} triangle1 - 第一个三角形的顶点数组\r\n * @param {Array} triangle2 - 第二个三角形的顶点数组\r\n * @returns {boolean} 是否匹配\r\n */\r\nexport const trianglesMatch = (triangle1, triangle2) => {\r\n if (!triangle1 || !triangle2) return false;\r\n if (triangle1.length !== 3 || triangle2.length !== 3) return false;\r\n\r\n const names1 = triangle1.map(p => p.name).sort();\r\n const names2 = triangle2.map(p => p.name).sort();\r\n\r\n return names1.every((name, index) => name === names2[index]);\r\n};\r\n\r\n/**\r\n * 比较两个点数组是否包含相同的点(忽略顺序)\r\n * @param {Array} points1 - 第一组点\r\n * @param {Array} points2 - 第二组点\r\n * @returns {boolean} 是否匹配\r\n */\r\nexport const comparePointArrays = (points1, points2) => {\r\n if (!points1 || !points2 || points1.length !== points2.length) {\r\n return false;\r\n }\r\n\r\n const names1 = points1.map(p => p.name).sort();\r\n const names2 = points2.map(p => p.name).sort();\r\n\r\n return names1.join('') === names2.join('');\r\n};\r\n\r\n\r\n\r\n/**\r\n * 获取标准化的三角形连线定义\r\n * @returns {Array} 连线数组\r\n */\r\nexport const getBasicLineDefinitions = () => [\r\n // 大三角形边\r\n { from: 'A', to: 'B' },\r\n { from: 'A', to: 'C' },\r\n { from: 'B', to: 'C' },\r\n \r\n // 第一层分割线\r\n { from: 'D', to: 'E' },\r\n \r\n // 第二层分割线\r\n { from: 'M', to: 'N' },\r\n \r\n // 底边分割线\r\n { from: 'P', to: 'Q' },\r\n \r\n // 连接到顶点的线段\r\n { from: 'A', to: 'D' },\r\n { from: 'A', to: 'E' },\r\n { from: 'A', to: 'M' },\r\n { from: 'A', to: 'N' },\r\n { from: 'A', to: 'P' },\r\n { from: 'A', to: 'Q' },\r\n \r\n // 内部连接线段\r\n { from: 'D', to: 'U' },\r\n { from: 'U', to: 'S' },\r\n { from: 'S', to: 'E' },\r\n { from: 'M', to: 'K' },\r\n { from: 'K', to: 'L' },\r\n { from: 'L', to: 'N' },\r\n \r\n // 到底边的连接\r\n { from: 'B', to: 'P' },\r\n { from: 'P', to: 'Q' },\r\n { from: 'Q', to: 'C' }\r\n];\r\n\r\n/**\r\n * 获取18个宝石的基础定义 - MVP版本\r\n * @returns {Array} 宝石数组\r\n */\r\nexport const getBasicGemDefinitions = () => [\r\n // 大三角形系列(3个)\r\n { id: 'gem_1', vertices: ['A', 'B', 'P'], points: 10, category: 'basic' },\r\n { id: 'gem_2', vertices: ['A', 'P', 'Q'], points: 10, category: 'basic' },\r\n { id: 'gem_3', vertices: ['A', 'Q', 'C'], points: 10, category: 'basic' },\r\n\r\n // 中等三角形系列(3个)\r\n { id: 'gem_4', vertices: ['A', 'B', 'Q'], points: 15, category: 'medium' },\r\n { id: 'gem_5', vertices: ['A', 'P', 'C'], points: 15, category: 'medium' },\r\n { id: 'gem_6', vertices: ['A', 'B', 'C'], points: 20, category: 'large' },\r\n\r\n // ADE区域系列(6个)\r\n { id: 'gem_7', vertices: ['A', 'D', 'U'], points: 12, category: 'ade_small' },\r\n { id: 'gem_8', vertices: ['A', 'U', 'S'], points: 12, category: 'ade_small' },\r\n { id: 'gem_9', vertices: ['A', 'S', 'E'], points: 12, category: 'ade_small' },\r\n { id: 'gem_10', vertices: ['A', 'D', 'S'], points: 18, category: 'ade_medium' },\r\n { id: 'gem_11', vertices: ['A', 'U', 'E'], points: 18, category: 'ade_medium' },\r\n { id: 'gem_12', vertices: ['A', 'D', 'E'], points: 25, category: 'ade_large' },\r\n\r\n // AMN区域系列(6个)\r\n { id: 'gem_13', vertices: ['A', 'M', 'K'], points: 14, category: 'amn_small' },\r\n { id: 'gem_14', vertices: ['A', 'K', 'L'], points: 14, category: 'amn_small' },\r\n { id: 'gem_15', vertices: ['A', 'L', 'N'], points: 14, category: 'amn_small' },\r\n { id: 'gem_16', vertices: ['A', 'M', 'L'], points: 20, category: 'amn_medium' },\r\n { id: 'gem_17', vertices: ['A', 'K', 'N'], points: 20, category: 'amn_medium' },\r\n { id: 'gem_18', vertices: ['A', 'M', 'N'], points: 30, category: 'amn_large' }\r\n];\r\n\r\n// ==================== 几何配置和默认导出 ====================\r\n\r\n/**\r\n * 几何配置常量 - 整合版本\r\n */\r\nexport const GEOMETRY_CONFIG = {\r\n TOTAL_GEMS: 18,\r\n CANVAS_RATIO: 4 / 3,\r\n DEFAULT_VIEWBOX: { width: 700, height: 600 },\r\n POINT_RADIUS: { default: 6, selected: 9 },\r\n TOLERANCE: 0.001,\r\n\r\n // 新增:几何计算相关常量\r\n MIN_TRIANGLE_AREA: 0.001,\r\n COORDINATE_PRECISION: 0.0001,\r\n BARYCENTRIC_TOLERANCE: -0.001\r\n};\r\n\r\n/**\r\n * 默认导出 - 包含所有几何工具函数\r\n */\r\nexport default {\r\n // 基础几何计算\r\n pointOnLine,\r\n calculateGamePoints,\r\n toPixelCoordinates,\r\n\r\n // 三角形验证和分析\r\n isPointInTriangle,\r\n trianglesMatch,\r\n comparePointArrays,\r\n\r\n // 数据和配置 (重新导出数据层接口)\r\n getBasicGemDefinitions,\r\n getBasicLineDefinitions,\r\n GEOMETRY_CONFIG,\r\n\r\n // 🔧 新增:单一数据源访问接口\r\n // getStandardGeometryPoints: calculateGamePoints // 暂时注释掉,需要时再实现\r\n}; ","import { MOCK_USER_DATA, MOCK_JWT_TOKEN } from './mockData';\r\nimport { courseData } from './courseData';\r\n\r\nexport interface UserLessonProgress {\r\n lessonId: string;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n progressPercentage: number;\r\n lastAccessed?: string;\r\n timeSpent?: number; // 分钟\r\n score?: number; // 分数 0-100\r\n attempts?: number; // 尝试次数\r\n}\r\n\r\nexport interface UserUnitProgress {\r\n unitId: string;\r\n userId: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n lessons: UserLessonProgress[];\r\n}\r\n\r\nexport interface UserCourseProgress {\r\n courseId: string;\r\n userId: string;\r\n totalUnits: number;\r\n completedUnits: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UserUnitProgress[];\r\n}\r\n\r\n// 生成模拟的用户课程进度数据\r\nexport const generateMockUserCourseProgress = (userId: string = MOCK_USER_DATA.id): UserCourseProgress => {\r\n const unitsProgress: UserUnitProgress[] = courseData.units.map((unit, index) => {\r\n // 模拟进度数据 - 根据单元索引设置不同的进度\r\n const baseProgress = Math.min(100, Math.max(0, index * 15 + Math.random() * 20));\r\n const completedLessons = Math.floor((unit.lessons.length * baseProgress) / 100);\r\n\r\n const lessonsProgress: UserLessonProgress[] = unit.lessons.map((lesson, lessonIndex) => {\r\n const lessonProgress = Math.min(100, Math.max(0, baseProgress - (lessonIndex * 10) + Math.random() * 30));\r\n\r\n return {\r\n lessonId: lesson.id,\r\n status: lessonProgress >= 100 ? 'completed' : lessonProgress > 0 ? 'in-progress' : 'not-started',\r\n progressPercentage: Math.round(lessonProgress),\r\n lastAccessed: lessonProgress > 0 ? new Date(Date.now() - Math.random() * 7 * 24 * 60 * 60 * 1000).toISOString() : undefined,\r\n timeSpent: lessonProgress > 0 ? Math.floor(Math.random() * 120 + 10) : undefined,\r\n score: lessonProgress >= 100 ? Math.floor(Math.random() * 21 + 80) : undefined,\r\n attempts: lessonProgress > 0 ? Math.floor(Math.random() * 3 + 1) : undefined\r\n };\r\n });\r\n\r\n return {\r\n unitId: unit.id,\r\n userId,\r\n totalLessons: unit.lessons.length,\r\n completedLessons,\r\n progressPercentage: Math.round(baseProgress),\r\n status: baseProgress >= 100 ? 'completed' : baseProgress > 0 ? 'in-progress' : 'not-started',\r\n lastAccessed: baseProgress > 0 ? new Date(Date.now() - Math.random() * 14 * 24 * 60 * 60 * 1000).toISOString() : undefined,\r\n lessons: lessonsProgress\r\n };\r\n });\r\n\r\n const totalProgress = unitsProgress.reduce((sum, unit) => sum + unit.progressPercentage, 0) / unitsProgress.length;\r\n const completedUnits = unitsProgress.filter(unit => unit.status === 'completed').length;\r\n\r\n return {\r\n courseId: courseData.id,\r\n userId,\r\n totalUnits: unitsProgress.length,\r\n completedUnits,\r\n progressPercentage: Math.round(totalProgress),\r\n status: totalProgress >= 100 ? 'completed' : totalProgress > 0 ? 'in-progress' : 'not-started',\r\n lastAccessed: new Date(Date.now() - Math.random() * 3 * 24 * 60 * 60 * 1000).toISOString(),\r\n units: unitsProgress\r\n };\r\n};\r\n\r\n// 模拟用户课程进度数据\r\nexport const MOCK_USER_COURSE_PROGRESS: UserCourseProgress = generateMockUserCourseProgress();\r\n\r\n// 获取用户课程进度\r\nexport const getUserCourseProgress = (userId: string, courseId: string): UserCourseProgress | null => {\r\n if (userId === MOCK_USER_DATA.id && courseId === courseData.id) {\r\n return MOCK_USER_COURSE_PROGRESS;\r\n }\r\n return null;\r\n};\r\n\r\n// 获取特定单元的进度\r\nexport const getUserUnitProgress = (userId: string, courseId: string, unitId: string): UserUnitProgress | null => {\r\n const courseProgress = getUserCourseProgress(userId, courseId);\r\n if (!courseProgress) return null;\r\n\r\n return courseProgress.units.find(unit => unit.unitId === unitId) || null;\r\n};\r\n\r\n// 获取特定课时的进度\r\nexport const getUserLessonProgress = (userId: string, courseId: string, unitId: string, lessonId: string): UserLessonProgress | null => {\r\n const unitProgress = getUserUnitProgress(userId, courseId, unitId);\r\n if (!unitProgress) return null;\r\n\r\n return unitProgress.lessons.find(lesson => lesson.lessonId === lessonId) || null;\r\n};\r\n\r\n// 更新课时进度\r\nexport const updateUserLessonProgress = (\r\n userId: string,\r\n courseId: string,\r\n unitId: string,\r\n lessonId: string,\r\n progress: Partial<UserLessonProgress>\r\n): boolean => {\r\n // 在实际应用中,这里会调用API更新数据库\r\n // 这里只是模拟更新操作\r\n console.log('Updating lesson progress:', { userId, courseId, unitId, lessonId, progress });\r\n return true;\r\n};","import { MOCK_USER_DATA, MOCK_JWT_TOKEN } from './mockData';\r\nimport { courseData } from './courseData';\r\nimport { getUserCourseProgress } from './userCourseProgress';\r\nimport type { UserUnitProgress } from './userCourseProgress';\r\n\r\nexport interface UserGradeUnitNavItem {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsNav {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UserGradeUnitNavItem[];\r\n}\r\n\r\n// 获取用户年级单元导航数据\r\nexport const getUserGradeUnitsNav = (userId: string, courseId: string): UserGradeUnitsNav | null => {\r\n const userProgress = getUserCourseProgress(userId, courseId);\r\n if (!userProgress) return null;\r\n\r\n const unitsNav: UserGradeUnitNavItem[] = courseData.units.map((unit, index) => {\r\n const unitProgress = userProgress.units.find(up => up.unitId === unit.id);\r\n\r\n return {\r\n unitId: unit.id,\r\n title: unit.title,\r\n description: unit.description,\r\n moduleCategory: unit.moduleCategory,\r\n estimatedDuration: unit.estimatedDuration,\r\n totalLessons: unit.lessons.length,\r\n completedLessons: unitProgress?.completedLessons || 0,\r\n progressPercentage: unitProgress?.progressPercentage || 0,\r\n status: unitProgress?.status || 'not-started',\r\n lastAccessed: unitProgress?.lastAccessed,\r\n isActive: index === 0, // 默认第一个单元为活跃状态\r\n route: `/math/grade-${courseData.level}/unit/${unit.id}`\r\n };\r\n });\r\n\r\n return {\r\n userId,\r\n courseId: courseData.id,\r\n courseTitle: courseData.title,\r\n courseLevel: courseData.level,\r\n totalUnits: unitsNav.length,\r\n completedUnits: unitsNav.filter(unit => unit.status === 'completed').length,\r\n overallProgress: userProgress.progressPercentage,\r\n status: userProgress.status,\r\n lastAccessed: userProgress.lastAccessed,\r\n units: unitsNav\r\n };\r\n};\r\n\r\n// 获取特定单元的导航项\r\nexport const getUnitNavItem = (userId: string, courseId: string, unitId: string): UserGradeUnitNavItem | null => {\r\n const navData = getUserGradeUnitsNav(userId, courseId);\r\n if (!navData) return null;\r\n\r\n return navData.units.find(unit => unit.unitId === unitId) || null;\r\n};\r\n\r\n// 更新单元活跃状态\r\nexport const updateUnitActiveStatus = (userId: string, courseId: string, unitId: string, isActive: boolean): boolean => {\r\n // 在实际应用中,这里会更新用户的学习状态\r\n // 这里只是模拟操作\r\n console.log('Updating unit active status:', { userId, courseId, unitId, isActive });\r\n return true;\r\n};\r\n\r\n// 模拟用户年级单元导航数据\r\nexport const MOCK_USER_GRADE_UNITS_NAV: UserGradeUnitsNav = getUserGradeUnitsNav(MOCK_USER_DATA.id, courseData.id)!;","// 用户年级单元进度数据 - 用于 Sidebar 展示组件\r\nimport { MOCK_USER_DATA } from './mockData';\r\nimport { courseData } from './courseData';\r\n\r\nexport interface UnitProgressData {\r\n unitId: string;\r\n title: string;\r\n description: string;\r\n moduleCategory: string;\r\n estimatedDuration: string;\r\n totalLessons: number;\r\n completedLessons: number;\r\n progressPercentage: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n isActive: boolean;\r\n route: string;\r\n icon?: string;\r\n}\r\n\r\nexport interface UserGradeUnitsProgressData {\r\n userId: string;\r\n courseId: string;\r\n courseTitle: string;\r\n courseLevel: number;\r\n totalUnits: number;\r\n completedUnits: number;\r\n overallProgress: number;\r\n status: 'not-started' | 'in-progress' | 'completed';\r\n lastAccessed?: string;\r\n units: UnitProgressData[];\r\n}\r\n\r\n// 模拟用户年级单元进度数据 - 用于 Sidebar 展示组件\r\n// 此数据仅用于展示,不包含任何业务逻辑或API调用\r\n\r\nexport const MOCK_USER_GRADE_UNITS_PROGRESS: UserGradeUnitsProgressData = {\r\n userId: MOCK_USER_DATA.id,\r\n courseId: courseData.id,\r\n courseTitle: courseData.title,\r\n courseLevel: courseData.level,\r\n totalUnits: courseData.units.length,\r\n completedUnits: 3,\r\n overallProgress: 45,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-15T10:30:00Z',\r\n units: [\r\n {\r\n unitId: 'unit_1',\r\n title: '小数乘法',\r\n description: '学习小数乘法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 10,\r\n completedLessons: 8,\r\n progressPercentage: 80,\r\n status: 'completed',\r\n lastAccessed: '2024-01-10T14:20:00Z',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_1',\r\n icon: '🔢'\r\n },\r\n {\r\n unitId: 'unit_2',\r\n title: '小数除法',\r\n description: '学习小数除法的计算方法及应用',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 6,\r\n progressPercentage: 50,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-15T10:30:00Z',\r\n isActive: true,\r\n route: '/math/grade-5/unit/unit_2',\r\n icon: '➗'\r\n },\r\n {\r\n unitId: 'unit_3',\r\n title: '简易方程',\r\n description: '学习用字母表示数和解简易方程',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '4周',\r\n totalLessons: 14,\r\n completedLessons: 2,\r\n progressPercentage: 14,\r\n status: 'in-progress',\r\n lastAccessed: '2024-01-12T16:45:00Z',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_3',\r\n icon: '📝'\r\n },\r\n {\r\n unitId: 'unit_4',\r\n title: '多边形的面积',\r\n description: '学习平行四边形、三角形、梯形和组合图形的面积计算',\r\n moduleCategory: 'Graphics and Geometry',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_4',\r\n icon: '📐'\r\n },\r\n {\r\n unitId: 'unit_5',\r\n title: '因数与倍数',\r\n description: '学习因数、倍数、质数、合数等概念',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 10,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_5',\r\n icon: '🔢'\r\n },\r\n {\r\n unitId: 'unit_6',\r\n title: '长方体和正方体',\r\n description: '学习长方体和正方体的特征、表面积和体积计算',\r\n moduleCategory: 'Graphics and Geometry',\r\n estimatedDuration: '4周',\r\n totalLessons: 14,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_6',\r\n icon: '📦'\r\n },\r\n {\r\n unitId: 'unit_7',\r\n title: '分数的意义和性质',\r\n description: '学习分数的意义、性质和约分、通分等方法',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '4周',\r\n totalLessons: 16,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_7',\r\n icon: '½'\r\n },\r\n {\r\n unitId: 'unit_8',\r\n title: '分数的加法和减法',\r\n description: '学习同分母分数、异分母分数的加法和减法',\r\n moduleCategory: 'Arithmetic and Algebra',\r\n estimatedDuration: '3周',\r\n totalLessons: 12,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_8',\r\n icon: '➕'\r\n },\r\n {\r\n unitId: 'unit_9',\r\n title: '折线统计图',\r\n description: '学习单式折线统计图和复式折线统计图的认识和制作',\r\n moduleCategory: 'Probability and Statistics',\r\n estimatedDuration: '2周',\r\n totalLessons: 6,\r\n completedLessons: 0,\r\n progressPercentage: 0,\r\n status: 'not-started',\r\n isActive: false,\r\n route: '/math/grade-5/unit/unit_9',\r\n icon: '📊'\r\n }\r\n ]\r\n};"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactSharedInternals","error","format","_len2","args","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","item","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","REACT_MODULE_REFERENCE","isValidElementType","type","getWrappedName","outerType","innerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","context","provider","outerName","lazyComponent","payload","init","assign","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","props","reenableLogs","ReactCurrentDispatcher","prefix","describeBuiltInComponentFrame","name","source","ownerFn","x","match","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","fn","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","s","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","Component","prototype","describeUnknownElementTypeFrameInDEV","hasOwnProperty","loggedTypeFailures","setCurrentlyValidatingElement","element","owner","checkPropTypes","typeSpecs","values","location","componentName","has","typeSpecName","error$1","err","ex","isArrayImpl","isArray","typeName","value","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","ReactCurrentOwner","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","hasValidRef","config","getter","hasValidKey","warnIfStringRefCannotBeAutoConverted","self","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","ReactElement","key","ref","jsxDEV","maybeKey","propName","defaultProps","ReactCurrentOwner$1","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","isValidElement","object","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","info","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","node","i","child","iteratorFn","iterator","step","validatePropTypes","propTypes","_name","validateFragmentProps","fragment","keys","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","validType","sourceInfo","typeString","children","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","require$$1","Button","progress","variant","size","radius","className","loading","colorClass","buttonClasses","toKebabCase","string","toCamelCase","p1","p2","toPascalCase","camelCase","mergeClasses","classes","index","array","hasA11yProp","prop","defaultAttributes","Icon","forwardRef","color","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","tag","attrs","createLucideIcon","iconName","ArrowRight","ChevronDown","ChevronRight","getButtonText","calculateLessonProgress","knowledgeItems","totalProgress","sum","KnowledgeCard","knowledgeItem","onLearnAction","handleLearnClick","Card","CardBody","CardFooter","Progress","LessonItem","lesson","isExpanded","onToggle","handleToggle","lessonProgress","ContentAccordion","unit","activeLessonIds","onToggleLesson","emptyState","getProgressColor","status","Sidebar","data","collapsed","onToggleCollapse","activeUnitId","onUnitSelect","renderUnitItem","unitItemClassName","style","unitItemStyle","handleUnitSelect","unitId","event","handleToggleCollapse","renderDefaultUnitItem","renderContent","Fragment","Submenu","trigger","items","position","alignment","openDelay","closeDelay","onOpen","onClose","renderItem","itemConfig","menuClassName","itemClassName","isOpen","setIsOpen","openTimeoutRef","closeTimeoutRef","clearTimeouts","handleMouseEnter","handleMouseLeave","handleItemClick","defaultRenderItem","getPanelClasses","bind","thisArg","toString","getPrototypeOf","toStringTag","kindOf","cache","thing","str","kindOfTest","typeOfTest","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isBoolean","isPlainObject","isEmptyObject","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","obj","allOwnKeys","len","findKey","_key","_global","isContextDefined","merge","caseless","skipUndefined","assignValue","targetKey","extend","stripBOM","content","inherits","constructor","superConstructor","descriptors","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","visit","target","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","cb","asap","utils$1","AxiosError","message","code","request","response","utils","customProps","axiosError","msg","errCode","httpAdapter","isVisitable","removeBrackets","renderKey","path","dots","isFlatArray","predicates","toFormData","formData","options","option","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","el","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","params","encoder","_encode","buildURL","url","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","id","transitionalDefaults","platform$1","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","method","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","line","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","dest","entry","matcher","deleted","deleteHeader","normalized","targets","asStrings","first","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","resolve","reject","validateStatus","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","startedAt","bytesCount","passed","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","formHeaders","allowedHeaders","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","timeoutErrorMessage","cancel","protocol","composeSignals","signals","timeout","length","controller","aborted","onabort","reason","unsubscribe","signal","streamChunk","chunk","chunkSize","pos","end","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","ReadableStream","TextEncoder","test","factory","env","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","res","getBodyLength","body","resolveBodyLength","cancelToken","withCredentials","fetchOptions","_fetch","composedSignal","requestContentLength","_request","contentTypeHeader","flush","isCredentialsSupported","resolvedOptions","isStreamResponse","responseContentLength","responseData","seedCache","getFetch","fetch","seeds","seed","map","knownAdapters","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","spread","callback","isAxiosError","HttpStatusCode","createInstance","defaultConfig","instance","axios","promises","all","Cancel","formToJSON","getAdapter","UserIcon","SettingsIcon","HelpIcon","LogoutIcon","DEFAULT_MENU_ITEMS","UserProfile","userId","initialUserName","initialUserAvatar","apiConfig","menuItems","avatarSize","isLoading","avatarClassName","userNameClassName","containerClassName","onMenuOpen","onMenuClose","onMenuItemClick","onLogout","renderMenuItem","renderUserInfo","userData","setUserData","setLoading","errorState","setErrorState","fetchUserData","endpoint","handleMenuItemClick","handleMenuOpen","handleMenuClose","renderDefaultUserInfo","Avatar","defaultRenderExploreItem","ExploreTrigger","MathWizHeader","logoHref","logoText","onLogoClick","exploreItems","exploreMenuOpen","onExploreMenuToggle","onExploreItemClick","renderExploreItem","userMenuItems","onUserMenuItemClick","headerClassName","logoClassName","exploreClassName","userProfileClassName","ariaLabel","ariaLabelledBy","restProps","preparedExploreItems","MathWizHeader$1","prevProps","nextProps","RadarChart","abilities","width","height","calculateRadarPoints","ability","angle","y","calculateAxisEndPoints","x2","y2","calculateLabelPosition","textAnchor","_","createStoreImpl","createState","listeners","setState","partial","replace","nextState","previousState","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","createImpl","useBoundStore","create","mockRadarAbilityData","RadarAbilityService","feedback","useRadarAbilityStore","set","get","radarData","errorMessage","AbilityProgressBar","percentage","PersonalizedAdvicePanel","generalRecommendation","RecommendationCard","customLinkTexts","getLinkText","abilityName","defaultLinkTexts","AbilityAssessmentDashboard","fetchData","useEffect","styles","categoryIcons","statusMapping","statusColors","MOCK_USER_DATA","MOCK_EXPLORE_ITEMS","MOCK_JWT_TOKEN","CourseService","courseId","gradeId","progressUpdates","lessonId","courseService","courseData","GradeUnitBrowserContext","createContext","useGradeUnitBrowser","useContext","GradeUnitBrowserProvider","userInfo","setUserInfo","useState","exploreMenu","setExploreMenu","unitsData","setUnitsData","lessons","setLessons","setError","setActiveUnitId","setActiveLessonIds","loadPageData","useCallback","mockUnitsData","lessonsData","toggleLesson","prev","setActiveUnit","defaultActiveUnit","contextValue","GradeUnitBrowserPage","propUserInfo","propExploreMenu","contextUserInfo","contextExploreMenu","activeUnitNav","debugActiveUnit","activeUnit","pointOnLine","ratio","calculateGamePoints","A","B","C","D","E","M","N","P","Q","U","S","K","L","toPixelCoordinates","normalizedPoints","pixelPoints","point","isPointInTriangle","triangle","p3","denominator","trianglesMatch","triangle1","triangle2","names1","names2","comparePointArrays","points1","points2","getBasicLineDefinitions","getBasicGemDefinitions","GEOMETRY_CONFIG","generateMockUserCourseProgress","unitsProgress","baseProgress","completedLessons","lessonsProgress","lessonIndex","completedUnits","MOCK_USER_COURSE_PROGRESS","getUserCourseProgress","getUserUnitProgress","courseProgress","getUserLessonProgress","unitProgress","updateUserLessonProgress","getUserGradeUnitsNav","userProgress","unitsNav","up","getUnitNavItem","navData","updateUnitActiveStatus","isActive","MOCK_USER_GRADE_UNITS_NAV","MOCK_USER_GRADE_UNITS_PROGRESS"],"mappings":"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","x_google_ignoreList":[0,1,2,4,5,6,7,8,9,10,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,69,70]}